From fb10d407164e178cd7b8eceb9b2bd300cd34f511 Mon Sep 17 00:00:00 2001 From: Oleksandra Matviienko Date: Tue, 19 May 2026 14:51:52 +0200 Subject: [PATCH 01/12] Technical cleanup of annotations in test code --- .../controller/AbstractNotifyEntityTest.java | 10 ++-- .../controller/AuditLogControllerTest.java | 6 +- ...trollerTest_DedicatedEventsDataSource.java | 4 +- .../server/controller/AuthControllerTest.java | 4 +- .../controller/DeviceControllerTest.java | 6 +- .../controller/EdgeEventControllerTest.java | 4 +- .../server/controller/HomePageApiTest.java | 6 +- .../controller/RepositorySettingsTest.java | 4 +- .../controller/RuleEngineControllerTest.java | 4 +- .../controller/TwoFactorAuthConfigTest.java | 10 ++-- .../server/controller/TwoFactorAuthTest.java | 8 +-- .../server/controller/WebSocketApiTest.java | 4 +- .../provision/DeviceProvisionServiceTest.java | 41 ++++++++----- .../alarm/DefaultTbAlarmServiceTest.java | 32 +++++----- .../DefaultTbAlarmCommentServiceTest.java | 34 +++++------ .../service/install/InstallScriptsTest.java | 28 ++++----- .../server/service/job/JobManagerTest.java | 6 +- .../queue/DefaultTbClusterServiceTest.java | 43 +++++++++----- .../service/sms/DefaultSmsServiceTest.java | 4 +- .../sync/ie/ExportImportServiceSqlTest.java | 6 +- .../DefaultTransportApiServiceTest.java | 58 +++++++++++++------ .../service/ttl/AlarmsCleanUpServiceTest.java | 6 +- .../lwm2m/AbstractLwM2MIntegrationTest.java | 6 +- .../rpc/AbstractRpcLwM2MIntegrationTest.java | 4 +- .../AbstractLwM2MIntegrationDiffPortTest.java | 4 +- .../mqtt/MqttGatewayRateLimitsTest.java | 4 +- ...AbstractMqttTimeseriesIntegrationTest.java | 4 +- .../server/dao/AbstractDaoServiceTest.java | 4 +- .../server/dao/AbstractJpaDaoTest.java | 4 +- .../cache/RedisTbTransactionalCacheTest.java | 10 ++-- .../server/dao/service/DeviceServiceTest.java | 4 +- .../server/dao/service/TenantServiceTest.java | 4 +- .../AdminSettingsDataValidatorTest.java | 8 +-- .../validator/AlarmDataValidatorTest.java | 8 +-- .../validator/AssetDataValidatorTest.java | 8 +-- .../AssetProfileDataValidatorTest.java | 18 +++--- .../ComponentDescriptorDataValidatorTest.java | 4 +- .../validator/CustomerDataValidatorTest.java | 10 ++-- .../validator/DashboardDataValidatorTest.java | 8 +-- .../validator/DeviceDataValidatorTest.java | 8 +-- .../DeviceProfileDataValidatorTest.java | 20 +++---- .../validator/EdgeDataValidatorTest.java | 12 ++-- .../EntityViewDataValidatorTest.java | 12 ++-- .../validator/ResourceDataValidatorTest.java | 14 ++--- .../validator/RuleChainDataValidatorTest.java | 10 ++-- .../validator/TenantDataValidatorTest.java | 8 +-- .../WidgetTypeDataValidatorTest.java | 12 ++-- .../WidgetsBundleDataValidatorTest.java | 10 ++-- .../DefaultEntityQueryRepositoryTest.java | 8 +-- .../query/DefaultQueryLogComponentTest.java | 4 +- ...esDaoPartitioningDaysAlwaysExistsTest.java | 8 +-- ...sDaoPartitioningHoursAlwaysExistsTest.java | 8 +-- ...artitioningIndefiniteAlwaysExistsTest.java | 8 +-- ...aoPartitioningMinutesAlwaysExistsTest.java | 8 +-- ...DaoPartitioningMonthsAlwaysExistsTest.java | 8 +-- ...sDaoPartitioningYearsAlwaysExistsTest.java | 8 +-- .../server/edqs/repo/AbstractEDQTest.java | 4 +- 57 files changed, 332 insertions(+), 278 deletions(-) diff --git a/application/src/test/java/org/thingsboard/server/controller/AbstractNotifyEntityTest.java b/application/src/test/java/org/thingsboard/server/controller/AbstractNotifyEntityTest.java index 62a266f26a..d62fac47a6 100644 --- a/application/src/test/java/org/thingsboard/server/controller/AbstractNotifyEntityTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/AbstractNotifyEntityTest.java @@ -19,8 +19,8 @@ import lombok.extern.slf4j.Slf4j; import org.mockito.ArgumentMatcher; import org.mockito.Mockito; import org.springframework.boot.info.BuildProperties; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.server.cluster.TbClusterService; import org.thingsboard.server.common.data.EdgeUtils; import org.thingsboard.server.common.data.EntityType; @@ -55,13 +55,13 @@ import static org.mockito.Mockito.times; @Slf4j public abstract class AbstractNotifyEntityTest extends AbstractWebTest { - @SpyBean + @MockitoSpyBean protected TbClusterService tbClusterService; - @SpyBean + @MockitoSpyBean protected AuditLogService auditLogService; - @MockBean + @MockitoBean BuildProperties buildProperties; protected final String msgErrorPermission = "You don't have permission to perform this operation!"; diff --git a/application/src/test/java/org/thingsboard/server/controller/AuditLogControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/AuditLogControllerTest.java index 95582cf261..af3702cb7d 100644 --- a/application/src/test/java/org/thingsboard/server/controller/AuditLogControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/AuditLogControllerTest.java @@ -26,7 +26,7 @@ import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.TenantProfile; @@ -71,9 +71,9 @@ public class AuditLogControllerTest extends AbstractControllerTest { @Autowired private AuditLogDao auditLogDao; @Getter - @SpyBean + @MockitoSpyBean private SqlPartitioningRepository partitioningRepository; - @SpyBean + @MockitoSpyBean private AuditLogsCleanUpService auditLogsCleanUpService; @Value("#{${sql.audit_logs.partition_size} * 60 * 60 * 1000}") diff --git a/application/src/test/java/org/thingsboard/server/controller/AuditLogControllerTest_DedicatedEventsDataSource.java b/application/src/test/java/org/thingsboard/server/controller/AuditLogControllerTest_DedicatedEventsDataSource.java index c594beae98..0660dfe95e 100644 --- a/application/src/test/java/org/thingsboard/server/controller/AuditLogControllerTest_DedicatedEventsDataSource.java +++ b/application/src/test/java/org/thingsboard/server/controller/AuditLogControllerTest_DedicatedEventsDataSource.java @@ -16,7 +16,7 @@ package org.thingsboard.server.controller; import lombok.Getter; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.test.context.TestPropertySource; import org.thingsboard.server.dao.service.DaoSqlTest; import org.thingsboard.server.dao.sqlts.insert.sql.DedicatedEventsSqlPartitioningRepository; @@ -30,7 +30,7 @@ import org.thingsboard.server.dao.sqlts.insert.sql.DedicatedEventsSqlPartitionin public class AuditLogControllerTest_DedicatedEventsDataSource extends AuditLogControllerTest { @Getter - @SpyBean + @MockitoSpyBean private DedicatedEventsSqlPartitioningRepository partitioningRepository; } diff --git a/application/src/test/java/org/thingsboard/server/controller/AuthControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/AuthControllerTest.java index 9126c42f2f..419f442f87 100644 --- a/application/src/test/java/org/thingsboard/server/controller/AuthControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/AuthControllerTest.java @@ -20,7 +20,7 @@ import org.assertj.core.data.Offset; import org.junit.After; import org.junit.Test; import org.mockito.Mockito; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.http.HttpHeaders; import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; import org.thingsboard.common.util.JacksonUtil; @@ -50,7 +50,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @DaoSqlTest public class AuthControllerTest extends AbstractControllerTest { - @SpyBean + @MockitoSpyBean private UserCredentialsDao userCredentialsDao; @After diff --git a/application/src/test/java/org/thingsboard/server/controller/DeviceControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/DeviceControllerTest.java index 07b68210bb..43d25566df 100644 --- a/application/src/test/java/org/thingsboard/server/controller/DeviceControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/DeviceControllerTest.java @@ -31,7 +31,7 @@ import org.mockito.AdditionalAnswers; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Primary; import org.springframework.test.context.ContextConfiguration; @@ -115,10 +115,10 @@ public class DeviceControllerTest extends AbstractControllerTest { private Tenant savedTenant; private User tenantAdmin; - @SpyBean + @MockitoSpyBean private GatewayNotificationsService gatewayNotificationsService; - @SpyBean + @MockitoSpyBean private DeviceStateService deviceStateService; @Autowired diff --git a/application/src/test/java/org/thingsboard/server/controller/EdgeEventControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/EdgeEventControllerTest.java index ba389d3bd6..262d685d74 100644 --- a/application/src/test/java/org/thingsboard/server/controller/EdgeEventControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/EdgeEventControllerTest.java @@ -25,7 +25,7 @@ import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.test.context.TestPropertySource; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.AttributeScope; @@ -66,7 +66,7 @@ public class EdgeEventControllerTest extends AbstractControllerTest { @Autowired private EdgeEventDao edgeEventDao; - @SpyBean + @MockitoSpyBean private SqlPartitioningRepository partitioningRepository; @Autowired private EdgeEventsCleanUpService edgeEventsCleanUpService; diff --git a/application/src/test/java/org/thingsboard/server/controller/HomePageApiTest.java b/application/src/test/java/org/thingsboard/server/controller/HomePageApiTest.java index ee2aefc81a..efe553e8f2 100644 --- a/application/src/test/java/org/thingsboard/server/controller/HomePageApiTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/HomePageApiTest.java @@ -22,7 +22,7 @@ import org.junit.Assert; import org.junit.Test; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.rule.engine.api.MailService; import org.thingsboard.rule.engine.api.SmsService; @@ -85,10 +85,10 @@ public class HomePageApiTest extends AbstractControllerTest { @Autowired private OAuth2ClientService oAuth2ClientService; - @MockBean + @MockitoBean private MailService mailService; - @MockBean + @MockitoBean private SmsService smsService; private static final int DEFAULT_DASHBOARDS_COUNT = 0; diff --git a/application/src/test/java/org/thingsboard/server/controller/RepositorySettingsTest.java b/application/src/test/java/org/thingsboard/server/controller/RepositorySettingsTest.java index 072e83cc47..3d6c62d701 100644 --- a/application/src/test/java/org/thingsboard/server/controller/RepositorySettingsTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/RepositorySettingsTest.java @@ -18,7 +18,7 @@ package org.thingsboard.server.controller; import com.google.common.util.concurrent.SettableFuture; import lombok.extern.slf4j.Slf4j; import org.junit.Test; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.thingsboard.server.common.data.sync.vc.RepositoryAuthMethod; import org.thingsboard.server.common.data.sync.vc.RepositorySettings; import org.thingsboard.server.dao.service.DaoSqlTest; @@ -35,7 +35,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @DaoSqlTest public class RepositorySettingsTest extends AbstractControllerTest { - @MockBean + @MockitoBean private GitVersionControlQueueService gitVersionControlQueueService; @Test diff --git a/application/src/test/java/org/thingsboard/server/controller/RuleEngineControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/RuleEngineControllerTest.java index 81c74de038..ff75d80d30 100644 --- a/application/src/test/java/org/thingsboard/server/controller/RuleEngineControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/RuleEngineControllerTest.java @@ -19,7 +19,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; import org.junit.Test; import org.mockito.ArgumentCaptor; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.Device; @@ -56,7 +56,7 @@ public class RuleEngineControllerTest extends AbstractControllerTest { private final String REQUEST_BODY = "{\"request\":\"download\"}"; private final String RESPONSE_BODY = "{\"response\":\"downloadOk\"}"; - @SpyBean + @MockitoSpyBean private RuleEngineCallService ruleEngineCallService; @Test diff --git a/application/src/test/java/org/thingsboard/server/controller/TwoFactorAuthConfigTest.java b/application/src/test/java/org/thingsboard/server/controller/TwoFactorAuthConfigTest.java index c8b5bf06c9..558ceb2d10 100644 --- a/application/src/test/java/org/thingsboard/server/controller/TwoFactorAuthConfigTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/TwoFactorAuthConfigTest.java @@ -22,8 +22,8 @@ import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.cache.CacheManager; import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; @@ -65,15 +65,15 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @DaoSqlTest public class TwoFactorAuthConfigTest extends AbstractControllerTest { - @SpyBean + @MockitoSpyBean private TotpTwoFaProvider totpTwoFactorAuthProvider; - @MockBean + @MockitoBean private SmsService smsService; @Autowired private CacheManager cacheManager; @Autowired private TwoFaConfigManager twoFaConfigManager; - @SpyBean + @MockitoSpyBean private TwoFactorAuthService twoFactorAuthService; @Before diff --git a/application/src/test/java/org/thingsboard/server/controller/TwoFactorAuthTest.java b/application/src/test/java/org/thingsboard/server/controller/TwoFactorAuthTest.java index ca81b97a48..6acae7d1eb 100644 --- a/application/src/test/java/org/thingsboard/server/controller/TwoFactorAuthTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/TwoFactorAuthTest.java @@ -23,8 +23,8 @@ import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.web.util.UriComponentsBuilder; import org.thingsboard.rule.engine.api.SmsService; import org.thingsboard.server.common.data.StringUtils; @@ -82,9 +82,9 @@ public class TwoFactorAuthTest extends AbstractControllerTest { @Autowired private TwoFaConfigManager twoFaConfigManager; - @SpyBean + @MockitoSpyBean private TwoFactorAuthService twoFactorAuthService; - @MockBean + @MockitoBean private SmsService smsService; @Autowired private AuditLogService auditLogService; diff --git a/application/src/test/java/org/thingsboard/server/controller/WebSocketApiTest.java b/application/src/test/java/org/thingsboard/server/controller/WebSocketApiTest.java index 2174b7425f..cda318b211 100644 --- a/application/src/test/java/org/thingsboard/server/controller/WebSocketApiTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/WebSocketApiTest.java @@ -28,7 +28,7 @@ import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.test.context.TestPropertySource; import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; import org.thingsboard.common.util.JacksonUtil; @@ -99,7 +99,7 @@ public class WebSocketApiTest extends AbstractControllerTest { @Autowired private TelemetrySubscriptionService tsService; - @SpyBean + @MockitoSpyBean private TimeseriesService timeseriesService; Device device; diff --git a/application/src/test/java/org/thingsboard/server/service/device/provision/DeviceProvisionServiceTest.java b/application/src/test/java/org/thingsboard/server/service/device/provision/DeviceProvisionServiceTest.java index de86e46cd0..4f2eaa5147 100644 --- a/application/src/test/java/org/thingsboard/server/service/device/provision/DeviceProvisionServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/service/device/provision/DeviceProvisionServiceTest.java @@ -21,8 +21,8 @@ import org.assertj.core.api.Assertions; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import org.thingsboard.server.cluster.TbClusterService; @@ -73,28 +73,43 @@ import static org.mockito.Mockito.when; @Slf4j @RunWith(SpringRunner.class) -@ContextConfiguration(classes = DeviceProvisionServiceImpl.class) +@ContextConfiguration(classes = DeviceProvisionServiceTest.ContextConfiguration.class) public class DeviceProvisionServiceTest { - @MockBean + @org.springframework.context.annotation.Configuration + static class ContextConfiguration { + @org.springframework.context.annotation.Bean + public DeviceProvisionServiceImpl deviceProvisionService(TbQueueProducerProvider producerProvider, + DeviceProfileService deviceProfileService, + DeviceService deviceService, + DeviceCredentialsService deviceCredentialsService, + AttributesService attributesService, + AuditLogService auditLogService, + PartitionService partitionService) { + return new DeviceProvisionServiceImpl(producerProvider, deviceProfileService, deviceService, + deviceCredentialsService, attributesService, auditLogService, partitionService); + } + } + + @MockitoBean protected TbQueueProducerProvider producerProvider; - @MockBean + @MockitoBean protected TbQueueProducer> ruleEngineMsgProducer; - @MockBean + @MockitoBean protected TbClusterService clusterService; - @MockBean + @MockitoBean protected DeviceProfileService deviceProfileService; - @MockBean + @MockitoBean protected DeviceService deviceService; - @MockBean + @MockitoBean protected DeviceCredentialsService deviceCredentialsService; - @MockBean + @MockitoBean protected AttributesService attributesService; - @MockBean + @MockitoBean protected AuditLogService auditLogService; - @MockBean + @MockitoBean protected PartitionService partitionService; - @SpyBean + @MockitoSpyBean DeviceProvisionServiceImpl service; private String[] chain; diff --git a/application/src/test/java/org/thingsboard/server/service/entitiy/alarm/DefaultTbAlarmServiceTest.java b/application/src/test/java/org/thingsboard/server/service/entitiy/alarm/DefaultTbAlarmServiceTest.java index 96e4444ffd..67535b6266 100644 --- a/application/src/test/java/org/thingsboard/server/service/entitiy/alarm/DefaultTbAlarmServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/service/entitiy/alarm/DefaultTbAlarmServiceTest.java @@ -19,7 +19,7 @@ import com.datastax.oss.driver.api.core.uuid.Uuids; import com.fasterxml.jackson.databind.node.ObjectNode; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.cluster.TbClusterService; @@ -69,35 +69,35 @@ import static org.thingsboard.server.common.data.alarm.AlarmCommentSubType.UNASS @SpringJUnitConfig(DefaultTbAlarmService.class) class DefaultTbAlarmServiceTest { - @MockBean + @MockitoBean TbLogEntityActionService logEntityActionService; - @MockBean + @MockitoBean EdgeService edgeService; - @MockBean + @MockitoBean AlarmService alarmService; - @MockBean + @MockitoBean TbAlarmCommentService alarmCommentService; - @MockBean + @MockitoBean AlarmSubscriptionService alarmSubscriptionService; - @MockBean + @MockitoBean CustomerService customerService; - @MockBean + @MockitoBean TbClusterService tbClusterService; - @MockBean + @MockitoBean EntitiesVersionControlService vcService; - @MockBean + @MockitoBean AccessControlService accessControlService; - @MockBean + @MockitoBean TenantService tenantService; - @MockBean + @MockitoBean AssetService assetService; - @MockBean + @MockitoBean DeviceService deviceService; - @MockBean + @MockitoBean AssetProfileService assetProfileService; - @MockBean + @MockitoBean DeviceProfileService deviceProfileService; - @MockBean + @MockitoBean EntityService entityService; @Autowired diff --git a/application/src/test/java/org/thingsboard/server/service/entitiy/alarmComment/DefaultTbAlarmCommentServiceTest.java b/application/src/test/java/org/thingsboard/server/service/entitiy/alarmComment/DefaultTbAlarmCommentServiceTest.java index 2c2d2bbdc3..122a939a9d 100644 --- a/application/src/test/java/org/thingsboard/server/service/entitiy/alarmComment/DefaultTbAlarmCommentServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/service/entitiy/alarmComment/DefaultTbAlarmCommentServiceTest.java @@ -19,8 +19,8 @@ import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; @@ -65,35 +65,35 @@ import static org.mockito.Mockito.when; }) public class DefaultTbAlarmCommentServiceTest { - @MockBean + @MockitoBean protected DbCallbackExecutorService dbExecutor; - @MockBean + @MockitoBean protected TbLogEntityActionService logEntityActionService; - @MockBean + @MockitoBean protected AlarmService alarmService; - @MockBean + @MockitoBean protected AlarmCommentService alarmCommentService; - @MockBean + @MockitoBean protected AlarmSubscriptionService alarmSubscriptionService; - @MockBean + @MockitoBean protected CustomerService customerService; - @MockBean + @MockitoBean protected TbClusterService tbClusterService; - @MockBean + @MockitoBean private AccessControlService accessControlService; - @MockBean + @MockitoBean private TenantService tenantService; - @MockBean + @MockitoBean private AssetService assetService; - @MockBean + @MockitoBean private DeviceService deviceService; - @MockBean + @MockitoBean private AssetProfileService assetProfileService; - @MockBean + @MockitoBean private DeviceProfileService deviceProfileService; - @MockBean + @MockitoBean private EntityService entityService; - @SpyBean + @MockitoSpyBean DefaultTbAlarmCommentService service; @Test diff --git a/application/src/test/java/org/thingsboard/server/service/install/InstallScriptsTest.java b/application/src/test/java/org/thingsboard/server/service/install/InstallScriptsTest.java index fa675fc3f8..5caf2ececd 100644 --- a/application/src/test/java/org/thingsboard/server/service/install/InstallScriptsTest.java +++ b/application/src/test/java/org/thingsboard/server/service/install/InstallScriptsTest.java @@ -20,8 +20,8 @@ import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.id.RuleChainId; import org.thingsboard.server.common.data.id.TenantId; @@ -52,30 +52,30 @@ import static org.mockito.BDDMockito.willReturn; @SpringBootTest(classes = {InstallScripts.class, RuleChainDataValidator.class}) class InstallScriptsTest { - @MockBean + @MockitoBean RuleChainService ruleChainService; - @MockBean + @MockitoBean DashboardService dashboardService; - @MockBean + @MockitoBean WidgetTypeService widgetTypeService; - @MockBean + @MockitoBean WidgetsBundleService widgetsBundleService; - @MockBean + @MockitoBean OAuth2ConfigTemplateService oAuth2TemplateService; - @MockBean + @MockitoBean ResourceService resourceService; - @MockBean + @MockitoBean ImageService imageService; - @MockBean + @MockitoBean ResourcesUpdater resourcesUpdater; - @SpyBean + @MockitoSpyBean InstallScripts installScripts; - @MockBean + @MockitoBean TenantService tenantService; - @MockBean + @MockitoBean ApiLimitService apiLimitService; - @SpyBean + @MockitoSpyBean RuleChainDataValidator ruleChainValidator; TenantId tenantId = TenantId.fromUUID(UUID.fromString("9ef79cdf-37a8-4119-b682-2e7ed4e018da")); diff --git a/application/src/test/java/org/thingsboard/server/service/job/JobManagerTest.java b/application/src/test/java/org/thingsboard/server/service/job/JobManagerTest.java index 63fa4a7da4..4e74a3e06e 100644 --- a/application/src/test/java/org/thingsboard/server/service/job/JobManagerTest.java +++ b/application/src/test/java/org/thingsboard/server/service/job/JobManagerTest.java @@ -22,7 +22,7 @@ import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.test.context.TestPropertySource; import org.thingsboard.rule.engine.api.JobManager; import org.thingsboard.server.common.data.Device; @@ -68,10 +68,10 @@ public class JobManagerTest extends AbstractControllerTest { @Autowired private JobManager jobManager; - @SpyBean + @MockitoSpyBean private TestTaskProcessor taskProcessor; - @SpyBean + @MockitoSpyBean private JobStatsService jobStatsService; @Autowired diff --git a/application/src/test/java/org/thingsboard/server/service/queue/DefaultTbClusterServiceTest.java b/application/src/test/java/org/thingsboard/server/service/queue/DefaultTbClusterServiceTest.java index 8110f6c0e3..79b31acf78 100644 --- a/application/src/test/java/org/thingsboard/server/service/queue/DefaultTbClusterServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/service/queue/DefaultTbClusterServiceTest.java @@ -20,8 +20,8 @@ import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import org.thingsboard.common.util.JacksonUtil; @@ -56,6 +56,7 @@ import org.thingsboard.server.queue.discovery.PartitionService; import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.provider.TbQueueProducerProvider; import org.thingsboard.server.service.gateway_device.GatewayNotificationsService; +import org.thingsboard.server.service.ota.OtaPackageStateService; import org.thingsboard.server.service.profile.TbAssetProfileCache; import org.thingsboard.server.service.profile.TbDeviceProfileCache; @@ -67,6 +68,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; @@ -87,30 +89,45 @@ public class DefaultTbClusterServiceTest { public static final String TRANSPORT = "transport"; - @MockBean + @MockitoBean protected TbDeviceProfileCache deviceProfileCache; - @MockBean + @MockitoBean protected TbAssetProfileCache assetProfileCache; - @MockBean + @MockitoBean protected GatewayNotificationsService gatewayNotificationsService; - @MockBean + @MockitoBean protected EdgeService edgeService; - @MockBean + @MockitoBean protected PartitionService partitionService; - @MockBean + @MockitoBean protected TbQueueProducerProvider producerProvider; - @MockBean + @MockitoBean protected TbRuleEngineProducerService ruleEngineProducerService; - @MockBean + @MockitoBean protected TbTransactionalCache edgeCache; - @MockBean + @MockitoBean protected CalculatedFieldService calculatedFieldService; - @SpyBean + @MockitoBean protected TopicService topicService; - @SpyBean + @MockitoBean + protected OtaPackageStateService otaPackageStateService; + @MockitoSpyBean protected TbClusterService clusterService; + @org.junit.Before + public void setUp() { + lenient().when(topicService.getNotificationsTopic(any(), any())).thenAnswer(invocation -> { + ServiceType serviceType = invocation.getArgument(0); + String serviceId = invocation.getArgument(1); + return new TopicPartitionInfo(serviceType.name().toLowerCase() + ".notifications." + serviceId, null, null, false); + }); + lenient().when(topicService.getCalculatedFieldNotificationsTopic(any())).thenAnswer(invocation -> { + String serviceId = invocation.getArgument(0); + return new TopicPartitionInfo("calculated_field.notifications." + serviceId, null, null, false); + }); + } + @Test public void testOnQueueChangeSingleMonolith() { when(partitionService.getAllServiceIds(ServiceType.TB_RULE_ENGINE)).thenReturn(Sets.newHashSet(MONOLITH)); diff --git a/application/src/test/java/org/thingsboard/server/service/sms/DefaultSmsServiceTest.java b/application/src/test/java/org/thingsboard/server/service/sms/DefaultSmsServiceTest.java index 28ce4ea46a..8d27b07550 100644 --- a/application/src/test/java/org/thingsboard/server/service/sms/DefaultSmsServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/service/sms/DefaultSmsServiceTest.java @@ -22,7 +22,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.test.context.TestPropertySource; import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; import org.thingsboard.common.util.JacksonUtil; @@ -55,7 +55,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. "usage.stats.report.urgent_interval=1" }) public class DefaultSmsServiceTest extends AbstractControllerTest { - @SpyBean + @MockitoSpyBean private DefaultSmsService defaultSmsService; @Autowired private AdminSettingsService adminSettingsService; diff --git a/application/src/test/java/org/thingsboard/server/service/sync/ie/ExportImportServiceSqlTest.java b/application/src/test/java/org/thingsboard/server/service/sync/ie/ExportImportServiceSqlTest.java index 9630dacdd4..75dce3b2b3 100644 --- a/application/src/test/java/org/thingsboard/server/service/sync/ie/ExportImportServiceSqlTest.java +++ b/application/src/test/java/org/thingsboard/server/service/sync/ie/ExportImportServiceSqlTest.java @@ -22,7 +22,7 @@ import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.rule.engine.debug.TbMsgGeneratorNode; import org.thingsboard.rule.engine.debug.TbMsgGeneratorNodeConfiguration; @@ -127,9 +127,9 @@ import static org.mockito.Mockito.verify; @DaoSqlTest public class ExportImportServiceSqlTest extends AbstractControllerTest { - @SpyBean + @MockitoSpyBean private EntityActionService entityActionService; - @SpyBean + @MockitoSpyBean private OtaPackageStateService otaPackageStateService; @Autowired diff --git a/application/src/test/java/org/thingsboard/server/service/transport/DefaultTransportApiServiceTest.java b/application/src/test/java/org/thingsboard/server/service/transport/DefaultTransportApiServiceTest.java index afb77945ab..6b667cc811 100644 --- a/application/src/test/java/org/thingsboard/server/service/transport/DefaultTransportApiServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/service/transport/DefaultTransportApiServiceTest.java @@ -20,8 +20,8 @@ import lombok.extern.slf4j.Slf4j; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import org.thingsboard.server.cache.ota.OtaPackageDataCache; @@ -69,38 +69,60 @@ import static org.mockito.Mockito.when; @Slf4j @RunWith(SpringRunner.class) -@ContextConfiguration(classes = DefaultTransportApiService.class) +@ContextConfiguration(classes = DefaultTransportApiServiceTest.ContextConfiguration.class) public class DefaultTransportApiServiceTest { - @MockBean + @org.springframework.context.annotation.Configuration + static class ContextConfiguration { + @org.springframework.context.annotation.Bean + public DefaultTransportApiService defaultTransportApiService(TbDeviceProfileCache deviceProfileCache, + TbTenantProfileCache tenantProfileCache, + TbApiUsageStateService apiUsageStateService, + DeviceService deviceService, + DeviceProfileService deviceProfileService, + RelationService relationService, + DeviceCredentialsService deviceCredentialsService, + TbClusterService tbClusterService, + DeviceProvisionService deviceProvisionService, + ResourceService resourceService, + OtaPackageService otaPackageService, + OtaPackageDataCache otaPackageDataCache, + QueueService queueService) { + return new DefaultTransportApiService(deviceProfileCache, tenantProfileCache, apiUsageStateService, + deviceService, deviceProfileService, relationService, deviceCredentialsService, tbClusterService, + deviceProvisionService, resourceService, otaPackageService, otaPackageDataCache, queueService); + } + } + + @MockitoBean protected TbDeviceProfileCache deviceProfileCache; - @MockBean + @MockitoBean protected TbTenantProfileCache tenantProfileCache; - @MockBean + @MockitoBean protected TbApiUsageStateService apiUsageStateService; - @MockBean + @MockitoBean protected DeviceService deviceService; - @MockBean + @MockitoBean protected DeviceProfileService deviceProfileService; - @MockBean + @MockitoBean protected RelationService relationService; - @MockBean + @MockitoBean protected DeviceCredentialsService deviceCredentialsService; - @MockBean + @MockitoBean protected DbCallbackExecutorService dbCallbackExecutorService; - @MockBean + @MockitoBean protected TbClusterService tbClusterService; - @MockBean + @MockitoBean protected DeviceProvisionService deviceProvisionService; - @MockBean + @MockitoBean protected ResourceService resourceService; - @MockBean + @MockitoBean protected OtaPackageService otaPackageService; - @MockBean + @MockitoBean protected OtaPackageDataCache otaPackageDataCache; - @MockBean + @MockitoBean protected QueueService queueService; - @SpyBean + @MockitoSpyBean DefaultTransportApiService service; private String certificateChain; diff --git a/application/src/test/java/org/thingsboard/server/service/ttl/AlarmsCleanUpServiceTest.java b/application/src/test/java/org/thingsboard/server/service/ttl/AlarmsCleanUpServiceTest.java index fcb948239f..a74db4593c 100644 --- a/application/src/test/java/org/thingsboard/server/service/ttl/AlarmsCleanUpServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/service/ttl/AlarmsCleanUpServiceTest.java @@ -21,7 +21,7 @@ import org.mockito.Mockito; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.test.context.TestPropertySource; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.alarm.Alarm; @@ -50,9 +50,9 @@ import static org.mockito.Mockito.verify; }) public class AlarmsCleanUpServiceTest extends AbstractControllerTest { - @SpyBean + @MockitoSpyBean private AlarmsCleanUpService alarmsCleanUpService; - @SpyBean + @MockitoSpyBean private AlarmService alarmService; @Autowired private AlarmDao alarmDao; diff --git a/application/src/test/java/org/thingsboard/server/transport/lwm2m/AbstractLwM2MIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/lwm2m/AbstractLwM2MIntegrationTest.java index f3a3212e67..4d5114425f 100644 --- a/application/src/test/java/org/thingsboard/server/transport/lwm2m/AbstractLwM2MIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/lwm2m/AbstractLwM2MIntegrationTest.java @@ -37,7 +37,7 @@ import org.junit.Assert; import org.junit.Before; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.http.HttpStatus; import org.springframework.test.context.DynamicPropertyRegistry; import org.springframework.test.context.DynamicPropertySource; @@ -133,10 +133,10 @@ import static org.thingsboard.server.transport.lwm2m.ota.AbstractOtaLwM2MIntegra }) public abstract class AbstractLwM2MIntegrationTest extends AbstractTransportIntegrationTest { - @SpyBean + @MockitoSpyBean protected LwM2mUplinkMsgHandler defaultLwM2mUplinkMsgHandlerTest; - @SpyBean + @MockitoSpyBean protected DefaultLwM2mUplinkMsgHandler defaultUplinkMsgHandlerTest; @Autowired diff --git a/application/src/test/java/org/thingsboard/server/transport/lwm2m/rpc/AbstractRpcLwM2MIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/lwm2m/rpc/AbstractRpcLwM2MIntegrationTest.java index 3c4bdcd3e7..b511d8b1e2 100644 --- a/application/src/test/java/org/thingsboard/server/transport/lwm2m/rpc/AbstractRpcLwM2MIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/lwm2m/rpc/AbstractRpcLwM2MIntegrationTest.java @@ -22,7 +22,7 @@ import org.eclipse.leshan.core.link.LinkParser; import org.eclipse.leshan.core.link.lwm2m.DefaultLwM2mLinkParser; import org.junit.Before; import org.mockito.Mockito; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.DeviceProfile; import org.thingsboard.server.common.data.device.credentials.lwm2m.LwM2MDeviceCredentials; @@ -103,7 +103,7 @@ public abstract class AbstractRpcLwM2MIntegrationTest extends AbstractLwM2MInteg protected String idVer_19_0_0; - @SpyBean + @MockitoSpyBean protected LwM2mTransportServerHelper lwM2mTransportServerHelperTest; @Before diff --git a/application/src/test/java/org/thingsboard/server/transport/lwm2m/security/diffPort/AbstractLwM2MIntegrationDiffPortTest.java b/application/src/test/java/org/thingsboard/server/transport/lwm2m/security/diffPort/AbstractLwM2MIntegrationDiffPortTest.java index afb179cc5f..f145d6a62a 100644 --- a/application/src/test/java/org/thingsboard/server/transport/lwm2m/security/diffPort/AbstractLwM2MIntegrationDiffPortTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/lwm2m/security/diffPort/AbstractLwM2MIntegrationDiffPortTest.java @@ -24,7 +24,7 @@ import org.eclipse.leshan.server.registration.RegistrationStore; import org.eclipse.leshan.server.registration.RegistrationUpdate; import org.junit.Assert; import org.mockito.Mockito; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.DeviceProfile; import org.thingsboard.server.common.data.device.profile.Lwm2mDeviceProfileTransportConfiguration; @@ -49,7 +49,7 @@ import static org.thingsboard.server.transport.lwm2m.Lwm2mTestHelper.LwM2MClient @Slf4j public abstract class AbstractLwM2MIntegrationDiffPortTest extends AbstractSecurityLwM2MIntegrationTest { - @SpyBean + @MockitoSpyBean private RegistrationStore registrationStoreTest; protected void basicTestConnectionDifferentPort(Lwm2mDeviceProfileTransportConfiguration transportConfiguration, diff --git a/application/src/test/java/org/thingsboard/server/transport/mqtt/MqttGatewayRateLimitsTest.java b/application/src/test/java/org/thingsboard/server/transport/mqtt/MqttGatewayRateLimitsTest.java index 541ca40072..d2c2b546f7 100644 --- a/application/src/test/java/org/thingsboard/server/transport/mqtt/MqttGatewayRateLimitsTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/mqtt/MqttGatewayRateLimitsTest.java @@ -22,7 +22,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.test.context.DynamicPropertyRegistry; import org.springframework.test.context.DynamicPropertySource; import org.springframework.test.context.TestPropertySource; @@ -71,7 +71,7 @@ public class MqttGatewayRateLimitsTest extends AbstractControllerTest { private Device gateway; private String gatewayAccessToken; - @SpyBean + @MockitoSpyBean private NotificationRuleProcessor notificationRuleProcessor; @Before diff --git a/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv3/telemetry/timeseries/AbstractMqttTimeseriesIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv3/telemetry/timeseries/AbstractMqttTimeseriesIntegrationTest.java index ea40a574a5..07837d9d8f 100644 --- a/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv3/telemetry/timeseries/AbstractMqttTimeseriesIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv3/telemetry/timeseries/AbstractMqttTimeseriesIntegrationTest.java @@ -21,7 +21,7 @@ import lombok.extern.slf4j.Slf4j; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.id.DeviceId; @@ -67,7 +67,7 @@ public abstract class AbstractMqttTimeseriesIntegrationTest extends AbstractMqtt protected static final String MALFORMED_JSON_PAYLOAD = "{\"key1\":, \"key2\":true, \"key3\": 3.0, \"key4\": 4," + " \"key5\": {\"someNumber\": 42, \"someArray\": [1,2,3], \"someNestedObject\": {\"key\": \"value\"}}}"; - @SpyBean + @MockitoSpyBean GatewayMetricsService gatewayMetricsService; @Before diff --git a/dao/src/test/java/org/thingsboard/server/dao/AbstractDaoServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/AbstractDaoServiceTest.java index 267dd52882..4aa50de3cc 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/AbstractDaoServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/AbstractDaoServiceTest.java @@ -17,7 +17,7 @@ package org.thingsboard.server.dao; import org.junit.runner.RunWith; import org.mockito.Answers; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestExecutionListeners; @@ -40,7 +40,7 @@ import org.thingsboard.server.dao.service.DaoSqlTest; DirtiesContextTestExecutionListener.class}) public abstract class AbstractDaoServiceTest { - @MockBean(answer = Answers.RETURNS_MOCKS) + @MockitoBean(answers = Answers.RETURNS_MOCKS) StatsFactory statsFactory; } diff --git a/dao/src/test/java/org/thingsboard/server/dao/AbstractJpaDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/AbstractJpaDaoTest.java index f68ab72786..dc5cc47cf7 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/AbstractJpaDaoTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/AbstractJpaDaoTest.java @@ -17,7 +17,7 @@ package org.thingsboard.server.dao; import org.junit.runner.RunWith; import org.mockito.Answers; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestExecutionListeners; import org.springframework.test.context.junit4.SpringRunner; @@ -42,7 +42,7 @@ import org.thingsboard.server.dao.service.DaoSqlTest; DirtiesContextTestExecutionListener.class}) public abstract class AbstractJpaDaoTest { - @MockBean(answer = Answers.RETURNS_MOCKS) + @MockitoBean(answers = Answers.RETURNS_MOCKS) StatsFactory statsFactory; } diff --git a/dao/src/test/java/org/thingsboard/server/dao/cache/RedisTbTransactionalCacheTest.java b/dao/src/test/java/org/thingsboard/server/dao/cache/RedisTbTransactionalCacheTest.java index 5de4378cf0..a9feec982b 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/cache/RedisTbTransactionalCacheTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/cache/RedisTbTransactionalCacheTest.java @@ -18,7 +18,7 @@ package org.thingsboard.server.dao.cache; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.test.context.ContextConfiguration; @@ -50,13 +50,13 @@ import static org.mockito.Mockito.when; @Slf4j public class RedisTbTransactionalCacheTest { - @MockBean + @MockitoBean private RelationRedisCache relationRedisCache; - @MockBean + @MockitoBean private RedisConnectionFactory connectionFactory; - @MockBean + @MockitoBean private RedisConnection redisConnection; - @MockBean + @MockitoBean private RedisSslCredentials redisSslCredentials; @Test diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/DeviceServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/DeviceServiceTest.java index b9fd609521..9765923967 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/DeviceServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/DeviceServiceTest.java @@ -27,7 +27,7 @@ import org.junit.Test; import org.junit.jupiter.api.Assertions; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.DefaultTransactionDefinition; @@ -111,7 +111,7 @@ public class DeviceServiceTest extends AbstractServiceTest { private CalculatedFieldService calculatedFieldService; @Autowired private PlatformTransactionManager platformTransactionManager; - @SpyBean + @MockitoSpyBean private DeviceCredentialsDataValidator validator; private IdComparator idComparator = new IdComparator<>(); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/TenantServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/TenantServiceTest.java index 1873fa9ea9..53630a9167 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/TenantServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/TenantServiceTest.java @@ -20,7 +20,7 @@ import org.junit.Test; import org.junit.jupiter.api.Assertions; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.cache.TbTransactionalCache; import org.thingsboard.server.common.data.Customer; @@ -87,7 +87,7 @@ import static org.mockito.Mockito.verify; @DaoSqlTest public class TenantServiceTest extends AbstractServiceTest { - @SpyBean + @MockitoSpyBean TenantDao tenantDao; @Autowired diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/validator/AdminSettingsDataValidatorTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/validator/AdminSettingsDataValidatorTest.java index c550772718..6241f2dea3 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/validator/AdminSettingsDataValidatorTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/validator/AdminSettingsDataValidatorTest.java @@ -17,8 +17,8 @@ package org.thingsboard.server.dao.service.validator; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.AdminSettings; import org.thingsboard.server.common.data.id.TenantId; @@ -31,9 +31,9 @@ import static org.mockito.Mockito.verify; @SpringBootTest(classes = AdminSettingsDataValidator.class) class AdminSettingsDataValidatorTest { - @MockBean + @MockitoBean AdminSettingsService adminSettingsService; - @SpyBean + @MockitoSpyBean AdminSettingsDataValidator validator; TenantId tenantId = TenantId.fromUUID(UUID.fromString("9ef79cdf-37a8-4119-b682-2e7ed4e018da")); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/validator/AlarmDataValidatorTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/validator/AlarmDataValidatorTest.java index 89b0b0cec4..e36aa20773 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/validator/AlarmDataValidatorTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/validator/AlarmDataValidatorTest.java @@ -18,8 +18,8 @@ package org.thingsboard.server.dao.service.validator; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.server.common.data.alarm.Alarm; import org.thingsboard.server.common.data.alarm.AlarmSeverity; import org.thingsboard.server.common.data.id.TenantId; @@ -33,9 +33,9 @@ import static org.mockito.Mockito.verify; @SpringBootTest(classes = AlarmDataValidator.class) class AlarmDataValidatorTest { - @MockBean + @MockitoBean TenantService tenantService; - @SpyBean + @MockitoSpyBean AlarmDataValidator validator; TenantId tenantId = TenantId.fromUUID(UUID.fromString("9ef79cdf-37a8-4119-b682-2e7ed4e018da")); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/validator/AssetDataValidatorTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/validator/AssetDataValidatorTest.java index eb46a87018..e5c51ac064 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/validator/AssetDataValidatorTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/validator/AssetDataValidatorTest.java @@ -22,7 +22,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.thingsboard.server.common.data.asset.Asset; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.dao.asset.AssetDao; @@ -39,11 +39,11 @@ import static org.mockito.BDDMockito.willReturn; @Slf4j class AssetDataValidatorTest { - @MockBean + @MockitoBean AssetDao assetDao; - @MockBean + @MockitoBean TenantService tenantService; - @MockBean + @MockitoBean CustomerDao customerDao; @Autowired AssetDataValidator validator; diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/validator/AssetProfileDataValidatorTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/validator/AssetProfileDataValidatorTest.java index b5cfb4998c..a8060cd51f 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/validator/AssetProfileDataValidatorTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/validator/AssetProfileDataValidatorTest.java @@ -18,8 +18,8 @@ package org.thingsboard.server.dao.service.validator; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.server.common.data.asset.AssetProfile; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.dao.asset.AssetProfileDao; @@ -37,19 +37,19 @@ import static org.mockito.Mockito.verify; @SpringBootTest(classes = AssetProfileDataValidator.class) class AssetProfileDataValidatorTest { - @MockBean + @MockitoBean AssetProfileDao assetProfileDao; - @MockBean + @MockitoBean AssetProfileService assetProfileService; - @MockBean + @MockitoBean TenantService tenantService; - @MockBean + @MockitoBean QueueService queueService; - @MockBean + @MockitoBean RuleChainService ruleChainService; - @MockBean + @MockitoBean DashboardService dashboardService; - @SpyBean + @MockitoSpyBean AssetProfileDataValidator validator; TenantId tenantId = TenantId.fromUUID(UUID.fromString("9ef79cdf-37a8-4119-b682-2e7ed4e018da")); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/validator/ComponentDescriptorDataValidatorTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/validator/ComponentDescriptorDataValidatorTest.java index c810dd5c63..1dfc1d4e8d 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/validator/ComponentDescriptorDataValidatorTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/validator/ComponentDescriptorDataValidatorTest.java @@ -17,7 +17,7 @@ package org.thingsboard.server.dao.service.validator; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.plugin.ComponentDescriptor; import org.thingsboard.server.common.data.plugin.ComponentScope; @@ -27,7 +27,7 @@ import static org.mockito.Mockito.verify; @SpringBootTest(classes = ComponentDescriptorDataValidator.class) class ComponentDescriptorDataValidatorTest { - @SpyBean + @MockitoSpyBean ComponentDescriptorDataValidator validator; @Test diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/validator/CustomerDataValidatorTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/validator/CustomerDataValidatorTest.java index d434d8f231..aa66f4003f 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/validator/CustomerDataValidatorTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/validator/CustomerDataValidatorTest.java @@ -18,8 +18,8 @@ package org.thingsboard.server.dao.service.validator; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.dao.customer.CustomerDao; @@ -33,11 +33,11 @@ import static org.mockito.Mockito.verify; @SpringBootTest(classes = CustomerDataValidator.class) class CustomerDataValidatorTest { - @MockBean + @MockitoBean CustomerDao customerDao; - @MockBean + @MockitoBean TenantService tenantService; - @SpyBean + @MockitoSpyBean CustomerDataValidator validator; TenantId tenantId = TenantId.fromUUID(UUID.fromString("9ef79cdf-37a8-4119-b682-2e7ed4e018da")); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/validator/DashboardDataValidatorTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/validator/DashboardDataValidatorTest.java index 3029027f37..cf5ad6e8fe 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/validator/DashboardDataValidatorTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/validator/DashboardDataValidatorTest.java @@ -18,8 +18,8 @@ package org.thingsboard.server.dao.service.validator; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.server.common.data.Dashboard; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.dao.tenant.TenantService; @@ -32,9 +32,9 @@ import static org.mockito.Mockito.verify; @SpringBootTest(classes = DashboardDataValidator.class) class DashboardDataValidatorTest { - @MockBean + @MockitoBean TenantService tenantService; - @SpyBean + @MockitoSpyBean DashboardDataValidator validator; TenantId tenantId = TenantId.fromUUID(UUID.fromString("9ef79cdf-37a8-4119-b682-2e7ed4e018da")); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/validator/DeviceDataValidatorTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/validator/DeviceDataValidatorTest.java index f0aacc91bd..a77c3e5fb7 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/validator/DeviceDataValidatorTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/validator/DeviceDataValidatorTest.java @@ -22,7 +22,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.dao.customer.CustomerDao; @@ -39,11 +39,11 @@ import static org.mockito.BDDMockito.willReturn; @Slf4j class DeviceDataValidatorTest { - @MockBean + @MockitoBean DeviceDao deviceDao; - @MockBean + @MockitoBean TenantService tenantService; - @MockBean + @MockitoBean CustomerDao customerDao; @Autowired DeviceDataValidator validator; diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/validator/DeviceProfileDataValidatorTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/validator/DeviceProfileDataValidatorTest.java index 34523c1829..8b2fa3c030 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/validator/DeviceProfileDataValidatorTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/validator/DeviceProfileDataValidatorTest.java @@ -18,8 +18,8 @@ package org.thingsboard.server.dao.service.validator; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.DeviceProfile; import org.thingsboard.server.common.data.DeviceProfileType; @@ -86,21 +86,21 @@ class DeviceProfileDataValidatorTest { private static final int port = 5685; private static final int portBs = 5687; - @MockBean + @MockitoBean DeviceProfileDao deviceProfileDao; - @MockBean + @MockitoBean DeviceProfileService deviceProfileService; - @MockBean + @MockitoBean DeviceDao deviceDao; - @MockBean + @MockitoBean TenantService tenantService; - @MockBean + @MockitoBean QueueService queueService; - @MockBean + @MockitoBean RuleChainService ruleChainService; - @MockBean + @MockitoBean DashboardService dashboardService; - @SpyBean + @MockitoSpyBean DeviceProfileDataValidator validator; TenantId tenantId = TenantId.fromUUID(UUID.fromString("9ef79cdf-37a8-4119-b682-2e7ed4e018da")); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/validator/EdgeDataValidatorTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/validator/EdgeDataValidatorTest.java index 98699b0176..2f4ed4426f 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/validator/EdgeDataValidatorTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/validator/EdgeDataValidatorTest.java @@ -18,8 +18,8 @@ package org.thingsboard.server.dao.service.validator; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.server.common.data.edge.Edge; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.dao.customer.CustomerDao; @@ -34,13 +34,13 @@ import static org.mockito.Mockito.verify; @SpringBootTest(classes = EdgeDataValidator.class) class EdgeDataValidatorTest { - @MockBean + @MockitoBean EdgeDao edgeDao; - @MockBean + @MockitoBean TenantService tenantService; - @MockBean + @MockitoBean CustomerDao customerDao; - @SpyBean + @MockitoSpyBean EdgeDataValidator validator; TenantId tenantId = TenantId.fromUUID(UUID.fromString("9ef79cdf-37a8-4119-b682-2e7ed4e018da")); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/validator/EntityViewDataValidatorTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/validator/EntityViewDataValidatorTest.java index 3db9d77469..ab821de252 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/validator/EntityViewDataValidatorTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/validator/EntityViewDataValidatorTest.java @@ -18,8 +18,8 @@ package org.thingsboard.server.dao.service.validator; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.server.common.data.EntityView; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.dao.customer.CustomerDao; @@ -34,13 +34,13 @@ import static org.mockito.Mockito.verify; @SpringBootTest(classes = EntityViewDataValidator.class) class EntityViewDataValidatorTest { - @MockBean + @MockitoBean EntityViewDao entityViewDao; - @MockBean + @MockitoBean TenantService tenantService; - @MockBean + @MockitoBean CustomerDao customerDao; - @SpyBean + @MockitoSpyBean EntityViewDataValidator validator; TenantId tenantId = TenantId.fromUUID(UUID.fromString("9ef79cdf-37a8-4119-b682-2e7ed4e018da")); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/validator/ResourceDataValidatorTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/validator/ResourceDataValidatorTest.java index 9072bb5e62..059e966040 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/validator/ResourceDataValidatorTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/validator/ResourceDataValidatorTest.java @@ -18,8 +18,8 @@ package org.thingsboard.server.dao.service.validator; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.server.common.data.ResourceType; import org.thingsboard.server.common.data.TbResource; import org.thingsboard.server.common.data.id.TenantId; @@ -36,15 +36,15 @@ import static org.mockito.Mockito.verify; @SpringBootTest(classes = ResourceDataValidator.class) class ResourceDataValidatorTest { - @MockBean + @MockitoBean TbResourceDao resourceDao; - @MockBean + @MockitoBean WidgetTypeDao widgetTypeDao; - @MockBean + @MockitoBean TenantService tenantService; - @MockBean + @MockitoBean TbTenantProfileCache tenantProfileCache; - @SpyBean + @MockitoSpyBean ResourceDataValidator validator; TenantId tenantId = TenantId.fromUUID(UUID.fromString("9ef79cdf-37a8-4119-b682-2e7ed4e018da")); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/validator/RuleChainDataValidatorTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/validator/RuleChainDataValidatorTest.java index 9107d1f8f2..eb884edbf3 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/validator/RuleChainDataValidatorTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/validator/RuleChainDataValidatorTest.java @@ -18,8 +18,8 @@ package org.thingsboard.server.dao.service.validator; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.rule.RuleChain; import org.thingsboard.server.common.data.rule.RuleChainType; @@ -34,11 +34,11 @@ import static org.mockito.Mockito.verify; @SpringBootTest(classes = RuleChainDataValidator.class) class RuleChainDataValidatorTest { - @MockBean + @MockitoBean RuleChainService ruleChainService; - @MockBean + @MockitoBean TenantService tenantService; - @SpyBean + @MockitoSpyBean RuleChainDataValidator validator; TenantId tenantId = TenantId.fromUUID(UUID.fromString("9ef79cdf-37a8-4119-b682-2e7ed4e018da")); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/validator/TenantDataValidatorTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/validator/TenantDataValidatorTest.java index c7e4f73ce4..ca1871a1dc 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/validator/TenantDataValidatorTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/validator/TenantDataValidatorTest.java @@ -17,8 +17,8 @@ package org.thingsboard.server.dao.service.validator; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.dao.tenant.TenantDao; @@ -30,9 +30,9 @@ import static org.mockito.Mockito.verify; @SpringBootTest(classes = TenantDataValidator.class) class TenantDataValidatorTest { - @MockBean + @MockitoBean TenantDao tenantDao; - @SpyBean + @MockitoSpyBean TenantDataValidator validator; TenantId tenantId = TenantId.fromUUID(UUID.fromString("9ef79cdf-37a8-4119-b682-2e7ed4e018da")); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/validator/WidgetTypeDataValidatorTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/validator/WidgetTypeDataValidatorTest.java index 3849aa62bf..3904c7d509 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/validator/WidgetTypeDataValidatorTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/validator/WidgetTypeDataValidatorTest.java @@ -18,8 +18,8 @@ package org.thingsboard.server.dao.service.validator; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.widget.WidgetTypeDetails; @@ -34,13 +34,13 @@ import static org.mockito.Mockito.verify; @SpringBootTest(classes = WidgetTypeDataValidator.class) class WidgetTypeDataValidatorTest { - @MockBean + @MockitoBean WidgetTypeDao widgetTypeDao; - @MockBean + @MockitoBean WidgetsBundleDao widgetsBundleDao; - @MockBean + @MockitoBean TenantService tenantService; - @SpyBean + @MockitoSpyBean WidgetTypeDataValidator validator; TenantId tenantId = TenantId.fromUUID(UUID.fromString("9ef79cdf-37a8-4119-b682-2e7ed4e018da")); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/validator/WidgetsBundleDataValidatorTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/validator/WidgetsBundleDataValidatorTest.java index 1affa60415..6ab7728471 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/validator/WidgetsBundleDataValidatorTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/validator/WidgetsBundleDataValidatorTest.java @@ -18,8 +18,8 @@ package org.thingsboard.server.dao.service.validator; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.widget.WidgetsBundle; import org.thingsboard.server.dao.tenant.TenantService; @@ -33,11 +33,11 @@ import static org.mockito.Mockito.verify; @SpringBootTest(classes = WidgetsBundleDataValidator.class) class WidgetsBundleDataValidatorTest { - @MockBean + @MockitoBean WidgetsBundleDao widgetsBundleDao; - @MockBean + @MockitoBean TenantService tenantService; - @SpyBean + @MockitoSpyBean WidgetsBundleDataValidator validator; TenantId tenantId = TenantId.fromUUID(UUID.fromString("9ef79cdf-37a8-4119-b682-2e7ed4e018da")); diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/query/DefaultEntityQueryRepositoryTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/query/DefaultEntityQueryRepositoryTest.java index b0d946ce3f..863d4ae2e8 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/sql/query/DefaultEntityQueryRepositoryTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/sql/query/DefaultEntityQueryRepositoryTest.java @@ -19,7 +19,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.support.TransactionTemplate; @@ -31,11 +31,11 @@ import static org.hamcrest.Matchers.equalTo; @SpringBootTest(classes = DefaultEntityQueryRepository.class) public class DefaultEntityQueryRepositoryTest { - @MockBean + @MockitoBean NamedParameterJdbcTemplate jdbcTemplate; - @MockBean + @MockitoBean TransactionTemplate transactionTemplate; - @MockBean + @MockitoBean DefaultQueryLogComponent queryLog; @Autowired diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/query/DefaultQueryLogComponentTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/query/DefaultQueryLogComponentTest.java index 83a06fe568..e47ed5bfbf 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/sql/query/DefaultQueryLogComponentTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/sql/query/DefaultQueryLogComponentTest.java @@ -22,7 +22,7 @@ import org.junit.runner.RunWith; import org.mockito.BDDMockito; import org.mockito.Mockito; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -52,7 +52,7 @@ public class DefaultQueryLogComponentTest { private TenantId tenantId; private SqlQueryContext ctx; - @SpyBean + @MockitoSpyBean private DefaultQueryLogComponent queryLog; @Before diff --git a/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningDaysAlwaysExistsTest.java b/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningDaysAlwaysExistsTest.java index 43c8a064e1..05952e1203 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningDaysAlwaysExistsTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningDaysAlwaysExistsTest.java @@ -22,7 +22,7 @@ import org.mockito.Answers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; import org.thingsboard.server.dao.cassandra.CassandraCluster; @@ -53,13 +53,13 @@ public class CassandraBaseTimeseriesDaoPartitioningDaysAlwaysExistsTest { @Autowired CassandraBaseTimeseriesDao tsDao; - @MockBean(answer = Answers.RETURNS_MOCKS) + @MockitoBean(answers = Answers.RETURNS_MOCKS) @Qualifier("CassandraCluster") CassandraCluster cassandraCluster; - @MockBean + @MockitoBean CassandraBufferedRateReadExecutor cassandraBufferedRateReadExecutor; - @MockBean + @MockitoBean CassandraBufferedRateWriteExecutor cassandraBufferedRateWriteExecutor; @Test diff --git a/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningHoursAlwaysExistsTest.java b/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningHoursAlwaysExistsTest.java index 5deccec298..83bb802c85 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningHoursAlwaysExistsTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningHoursAlwaysExistsTest.java @@ -22,7 +22,7 @@ import org.mockito.Answers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; import org.thingsboard.server.dao.cassandra.CassandraCluster; @@ -53,13 +53,13 @@ public class CassandraBaseTimeseriesDaoPartitioningHoursAlwaysExistsTest { @Autowired CassandraBaseTimeseriesDao tsDao; - @MockBean(answer = Answers.RETURNS_MOCKS) + @MockitoBean(answers = Answers.RETURNS_MOCKS) @Qualifier("CassandraCluster") CassandraCluster cassandraCluster; - @MockBean + @MockitoBean CassandraBufferedRateReadExecutor cassandraBufferedRateReadExecutor; - @MockBean + @MockitoBean CassandraBufferedRateWriteExecutor cassandraBufferedRateWriteExecutor; @Test diff --git a/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningIndefiniteAlwaysExistsTest.java b/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningIndefiniteAlwaysExistsTest.java index a742e6cd2c..4f78f5b864 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningIndefiniteAlwaysExistsTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningIndefiniteAlwaysExistsTest.java @@ -22,7 +22,7 @@ import org.mockito.Answers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; import org.thingsboard.server.dao.cassandra.CassandraCluster; @@ -52,13 +52,13 @@ public class CassandraBaseTimeseriesDaoPartitioningIndefiniteAlwaysExistsTest { @Autowired CassandraBaseTimeseriesDao tsDao; - @MockBean(answer = Answers.RETURNS_MOCKS) + @MockitoBean(answers = Answers.RETURNS_MOCKS) @Qualifier("CassandraCluster") CassandraCluster cassandraCluster; - @MockBean + @MockitoBean CassandraBufferedRateReadExecutor cassandraBufferedRateReadExecutor; - @MockBean + @MockitoBean CassandraBufferedRateWriteExecutor cassandraBufferedRateWriteExecutor; @Test diff --git a/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningMinutesAlwaysExistsTest.java b/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningMinutesAlwaysExistsTest.java index dd106cb439..455cf2cc00 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningMinutesAlwaysExistsTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningMinutesAlwaysExistsTest.java @@ -22,7 +22,7 @@ import org.mockito.Answers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; import org.thingsboard.server.dao.cassandra.CassandraCluster; @@ -53,13 +53,13 @@ public class CassandraBaseTimeseriesDaoPartitioningMinutesAlwaysExistsTest { @Autowired CassandraBaseTimeseriesDao tsDao; - @MockBean(answer = Answers.RETURNS_MOCKS) + @MockitoBean(answers = Answers.RETURNS_MOCKS) @Qualifier("CassandraCluster") CassandraCluster cassandraCluster; - @MockBean + @MockitoBean CassandraBufferedRateReadExecutor cassandraBufferedRateReadExecutor; - @MockBean + @MockitoBean CassandraBufferedRateWriteExecutor cassandraBufferedRateWriteExecutor; @Test diff --git a/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningMonthsAlwaysExistsTest.java b/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningMonthsAlwaysExistsTest.java index 5699f5d5f7..ce8b66215b 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningMonthsAlwaysExistsTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningMonthsAlwaysExistsTest.java @@ -22,7 +22,7 @@ import org.junit.runner.RunWith; import org.mockito.Answers; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.test.context.junit4.SpringRunner; @@ -63,13 +63,13 @@ public class CassandraBaseTimeseriesDaoPartitioningMonthsAlwaysExistsTest { @MockitoSpyBean CassandraBaseTimeseriesDao tsDao; - @MockBean(answer = Answers.RETURNS_MOCKS) + @MockitoBean(answers = Answers.RETURNS_MOCKS) @Qualifier("CassandraCluster") CassandraCluster cassandraCluster; - @MockBean + @MockitoBean CassandraBufferedRateReadExecutor cassandraBufferedRateReadExecutor; - @MockBean + @MockitoBean CassandraBufferedRateWriteExecutor cassandraBufferedRateWriteExecutor; @Test diff --git a/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningYearsAlwaysExistsTest.java b/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningYearsAlwaysExistsTest.java index a68daf664a..90575d5b14 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningYearsAlwaysExistsTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDaoPartitioningYearsAlwaysExistsTest.java @@ -22,7 +22,7 @@ import org.mockito.Answers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; import org.thingsboard.server.dao.cassandra.CassandraCluster; @@ -53,13 +53,13 @@ public class CassandraBaseTimeseriesDaoPartitioningYearsAlwaysExistsTest { @Autowired CassandraBaseTimeseriesDao tsDao; - @MockBean(answer = Answers.RETURNS_MOCKS) + @MockitoBean(answers = Answers.RETURNS_MOCKS) @Qualifier("CassandraCluster") CassandraCluster cassandraCluster; - @MockBean + @MockitoBean CassandraBufferedRateReadExecutor cassandraBufferedRateReadExecutor; - @MockBean + @MockitoBean CassandraBufferedRateWriteExecutor cassandraBufferedRateWriteExecutor; @Test diff --git a/edqs/src/test/java/org/thingsboard/server/edqs/repo/AbstractEDQTest.java b/edqs/src/test/java/org/thingsboard/server/edqs/repo/AbstractEDQTest.java index adb42203e0..edf8832a33 100644 --- a/edqs/src/test/java/org/thingsboard/server/edqs/repo/AbstractEDQTest.java +++ b/edqs/src/test/java/org/thingsboard/server/edqs/repo/AbstractEDQTest.java @@ -20,7 +20,7 @@ import org.junit.Before; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.test.context.TestExecutionListeners; @@ -81,7 +81,7 @@ public abstract class AbstractEDQTest { protected DefaultEdqsRepository repository; @Autowired protected EdqsMapper edqsMapper; - @MockBean + @MockitoBean private DummyEdqsStatsService edqsStatsService; protected final TenantId tenantId = TenantId.fromUUID(UUID.randomUUID()); From 69cd04663a21ec6a9878ba7829972f62e6045684 Mon Sep 17 00:00:00 2001 From: Oleksandra Matviienko Date: Tue, 19 May 2026 15:05:27 +0200 Subject: [PATCH 02/12] Removed compiler warnings about raw types and unchecked casts --- .../service/notification/NotificationApiTest.java | 2 +- .../lwm2m/rpc/AbstractRpcLwM2MIntegrationTest.java | 10 +++++----- .../server/common/data/util/CollectionsUtil.java | 3 ++- .../org/thingsboard/script/api/tbel/TbUtils.java | 2 +- .../org/thingsboard/script/api/tbel/TbUtilsTest.java | 12 ++++++------ .../downlink/DefaultLwM2mDownlinkMsgHandler.java | 2 +- .../server/rpc/DefaultLwM2MRpcRequestHandler.java | 12 ++++++------ .../service/TransportActivityManagerTest.java | 4 ++-- .../org/thingsboard/common/util/ExceptionUtil.java | 1 + .../server/dao/AbstractRedisClusterContainer.java | 12 ++++++------ .../server/dao/AbstractRedisContainer.java | 2 +- .../org/thingsboard/server/dao/RedisJUnit5Test.java | 2 +- .../rule/engine/flow/TbCheckpointNodeTest.java | 2 +- .../rule/engine/kafka/TbKafkaNodeTest.java | 2 +- .../rule/engine/metadata/TbGetTelemetryNodeTest.java | 12 ++++++------ .../telemetry/TbMsgDeleteAttributesNodeTest.java | 2 +- .../engine/transform/TbMsgDeduplicationNodeTest.java | 10 +++++----- .../engine/transform/TbSplitArrayMsgNodeTest.java | 2 +- 18 files changed, 48 insertions(+), 46 deletions(-) diff --git a/application/src/test/java/org/thingsboard/server/service/notification/NotificationApiTest.java b/application/src/test/java/org/thingsboard/server/service/notification/NotificationApiTest.java index fc42ae247c..5d0fa31e8a 100644 --- a/application/src/test/java/org/thingsboard/server/service/notification/NotificationApiTest.java +++ b/application/src/test/java/org/thingsboard/server/service/notification/NotificationApiTest.java @@ -988,7 +988,7 @@ public class NotificationApiTest extends AbstractNotificationApiTest { String expectedSubject = "Comment on 'test' alarm"; String expectedBody = TENANT_ADMIN_EMAIL + " added comment: text"; - ArgumentCaptor> msgCaptor = ArgumentCaptor.forClass(Map.class); + ArgumentCaptor> msgCaptor = ArgumentCaptor.captor(); await().atMost(TIMEOUT, TimeUnit.SECONDS).untilAsserted(() -> { verify(firebaseService).sendMessage(eq(tenantId), eq("testCredentials"), eq(TEST_MOBILE_TOKEN), eq(expectedSubject), diff --git a/application/src/test/java/org/thingsboard/server/transport/lwm2m/rpc/AbstractRpcLwM2MIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/lwm2m/rpc/AbstractRpcLwM2MIntegrationTest.java index b511d8b1e2..af0fdf4c09 100644 --- a/application/src/test/java/org/thingsboard/server/transport/lwm2m/rpc/AbstractRpcLwM2MIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/lwm2m/rpc/AbstractRpcLwM2MIntegrationTest.java @@ -77,16 +77,16 @@ public abstract class AbstractRpcLwM2MIntegrationTest extends AbstractLwM2MInteg protected final LinkParser linkParser = new DefaultLwM2mLinkParser(); protected String CONFIG_PROFILE_WITH_PARAMS_RPC; - public Set expectedObjects; - public Set expectedObjectIdVers; - public Set expectedInstances; - public Set expectedObjectIdVerInstances; + public Set expectedObjects; + public Set expectedObjectIdVers; + public Set expectedInstances; + public Set expectedObjectIdVerInstances; protected String objectInstanceIdVer_1; protected String objectIdVer_0; protected String objectIdVer_1; protected String objectIdVer_2; - private static final Predicate PREDICATE_3 = path -> (!((String) path).startsWith("/" + TEMPERATURE_SENSOR) && ((String) path).startsWith("/" + DEVICE)); + private static final Predicate PREDICATE_3 = path -> (!((String) path).startsWith("/" + TEMPERATURE_SENSOR) && ((String) path).startsWith("/" + DEVICE)); protected String objectIdVer_3; protected String objectInstanceIdVer_3; protected String objectInstanceIdVer_5; diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/util/CollectionsUtil.java b/common/data/src/main/java/org/thingsboard/server/common/data/util/CollectionsUtil.java index 7541be5078..f1bedc8659 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/util/CollectionsUtil.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/util/CollectionsUtil.java @@ -85,6 +85,7 @@ public class CollectionsUtil { return result; } + @SafeVarargs public static boolean isOneOf(V value, V... others) { if (value == null) { return false; @@ -134,7 +135,7 @@ public class CollectionsUtil { Set newSet = new HashSet<>(existing.size() + 1); newSet.addAll(existing); newSet.add(value); - return (Set) Set.of(newSet.toArray()); + return Set.copyOf(newSet); } public static boolean isEmpty(Map map) { diff --git a/common/script/script-api/src/main/java/org/thingsboard/script/api/tbel/TbUtils.java b/common/script/script-api/src/main/java/org/thingsboard/script/api/tbel/TbUtils.java index ec8eacbc67..26fe9ae99a 100644 --- a/common/script/script-api/src/main/java/org/thingsboard/script/api/tbel/TbUtils.java +++ b/common/script/script-api/src/main/java/org/thingsboard/script/api/tbel/TbUtils.java @@ -1332,7 +1332,7 @@ public class TbUtils { for (byte b : byteArray) { byteList.add(b); } - ExecutionArrayList list = new ExecutionArrayList(byteList, ctx); + ExecutionArrayList list = new ExecutionArrayList<>(byteList, ctx); return list; } diff --git a/common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbUtilsTest.java b/common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbUtilsTest.java index ef1729ab73..caefb40608 100644 --- a/common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbUtilsTest.java +++ b/common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbUtilsTest.java @@ -1281,13 +1281,13 @@ public class TbUtilsTest { } @Test public void setTest() throws ExecutionException, InterruptedException { - Set actual = TbUtils.newSet(ctx); - Set expected = toSet(new byte[]{(byte) 0xDD, (byte) 0xCC, (byte) 0xCC}); + Set actual = TbUtils.newSet(ctx); + Set expected = toSet(new byte[]{(byte) 0xDD, (byte) 0xCC, (byte) 0xCC}); actual.add((byte) 0xDD); actual.add((byte) 0xCC); actual.add((byte) 0xCC); assertTrue(expected.containsAll(actual)); - List list = toList(new byte[]{(byte) 0xDD, (byte) 0xCC, (byte) 0xBB, (byte) 0xAA}); + List list = toList(new byte[]{(byte) 0xDD, (byte) 0xCC, (byte) 0xBB, (byte) 0xAA}); actual.addAll(list); assertEquals(4, actual.size()); assertTrue(actual.containsAll(expected)); @@ -1301,9 +1301,9 @@ public class TbUtilsTest { actual.clear(); assertTrue(actual.isEmpty()); actual = TbUtils.toSet(ctx, list); - Set actualClone = TbUtils.toSet(ctx, list); - Set actualClone_asc = TbUtils.toSet(ctx, list); - Set actualClone_desc = TbUtils.toSet(ctx, list); + Set actualClone = TbUtils.toSet(ctx, list); + Set actualClone_asc = TbUtils.toSet(ctx, list); + Set actualClone_desc = TbUtils.toSet(ctx, list); ((ExecutionLinkedHashSet)actualClone).sort(); ((ExecutionLinkedHashSet)actualClone_asc).sort(true); ((ExecutionLinkedHashSet)actualClone_desc).sort(false); diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/downlink/DefaultLwM2mDownlinkMsgHandler.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/downlink/DefaultLwM2mDownlinkMsgHandler.java index c5b8779a3f..ef0d57bb5e 100644 --- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/downlink/DefaultLwM2mDownlinkMsgHandler.java +++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/downlink/DefaultLwM2mDownlinkMsgHandler.java @@ -823,7 +823,7 @@ public class DefaultLwM2mDownlinkMsgHandler extends LwM2MExecutorAwareService im LwM2mPath pathSingleOb = singleObs.getPath(); LwM2mPath pathObjectId = new LwM2mPath(objectId); if (!pathSingleOb.toString().equals(objectId)) { - List paths = Arrays.asList(pathSingleOb, pathObjectId); + List paths = Arrays.asList(pathSingleOb, pathObjectId); try { LwM2mPath.validateNotOverlapping(paths); } catch (IllegalArgumentException e){ diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/rpc/DefaultLwM2MRpcRequestHandler.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/rpc/DefaultLwM2MRpcRequestHandler.java index a0cbd4f598..e2f5b4ce5b 100644 --- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/rpc/DefaultLwM2MRpcRequestHandler.java +++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/rpc/DefaultLwM2MRpcRequestHandler.java @@ -212,7 +212,7 @@ public class DefaultLwM2MRpcRequestHandler implements LwM2MRpcRequestHandler { String[] versionedIds = getIdsFromParameters(client, requestMsg); TbLwM2MReadCompositeRequest request = TbLwM2MReadCompositeRequest.builder().versionedIds(versionedIds).timeout(clientContext.getRequestTimeout(client)).build(); var mainCallback = new TbLwM2MReadCompositeCallback(uplinkHandler, logService, client, versionedIds); - var rpcCallback = new RpcReadResponseCompositeCallback(transportService, client, requestMsg, mainCallback); + var rpcCallback = new RpcReadResponseCompositeCallback<>(transportService, client, requestMsg, mainCallback); downlinkHandler.sendReadCompositeRequest(client, request, rpcCallback); } @@ -329,7 +329,7 @@ public class DefaultLwM2MRpcRequestHandler implements LwM2MRpcRequestHandler { } else if (path.isResource()) { validateResource(client, newNodes, nodes, key , value); } else if (path.isObjectInstance() && value instanceof Map) { - ((Map) value).forEach((k, v) -> { + ((Map) value).forEach((k, v) -> { validateResource(client, newNodes, nodes, validateResourceId (key, k.toString(), nodes), v); }); } else { @@ -343,7 +343,7 @@ public class DefaultLwM2MRpcRequestHandler implements LwM2MRpcRequestHandler { return newNodes; } - private void validateResource(LwM2mClient client, Map newNodes, Map nodes, String resourceId , Object value) { + private void validateResource(LwM2mClient client, Map newNodes, Map nodes, String resourceId , Object value) { if (value instanceof Map) { ((Map) value).forEach((k, v) -> { setValueToCompositeNodes(client, newNodes, nodes, validateResourceId (resourceId, k.toString(), nodes), v); @@ -353,7 +353,7 @@ public class DefaultLwM2MRpcRequestHandler implements LwM2MRpcRequestHandler { } } - private String validateResourceId (String key, String id, Map nodes) { + private String validateResourceId (String key, String id, Map nodes) { try { Integer.parseInt(id); return key + "/" + id; @@ -363,7 +363,7 @@ public class DefaultLwM2MRpcRequestHandler implements LwM2MRpcRequestHandler { } } - private void setValueToCompositeNodes (LwM2mClient client, Map newNodes, Map nodes, String versionedId , Object value) { + private void setValueToCompositeNodes (LwM2mClient client, Map newNodes, Map nodes, String versionedId , Object value) { // validate value. Must be only primitive, not JsonObject or JsonArray try { JsonElement element = JsonUtils.parse(value); @@ -394,7 +394,7 @@ public class DefaultLwM2MRpcRequestHandler implements LwM2MRpcRequestHandler { String[] versionedIds = getIdsFromParameters(client, requestMsg); TbLwM2MObserveCompositeRequest request = TbLwM2MObserveCompositeRequest.builder().versionedIds(versionedIds).timeout(clientContext.getRequestTimeout(client)).build(); var mainCallback = new TbLwM2MObserveCompositeCallback(uplinkHandler, logService, client, versionedIds); - var rpcCallback = new RpcObserveResponseCompositeCallback(transportService, client, requestMsg, mainCallback); + var rpcCallback = new RpcObserveResponseCompositeCallback<>(transportService, client, requestMsg, mainCallback); downlinkHandler.sendObserveCompositeRequest(client, request, rpcCallback); } diff --git a/common/transport/transport-api/src/test/java/org/thingsboard/server/common/transport/service/TransportActivityManagerTest.java b/common/transport/transport-api/src/test/java/org/thingsboard/server/common/transport/service/TransportActivityManagerTest.java index a656b22241..b5cc868bf2 100644 --- a/common/transport/transport-api/src/test/java/org/thingsboard/server/common/transport/service/TransportActivityManagerTest.java +++ b/common/transport/transport-api/src/test/java/org/thingsboard/server/common/transport/service/TransportActivityManagerTest.java @@ -129,7 +129,7 @@ public class TransportActivityManagerTest { // THEN ArgumentCaptor sessionInfoCaptor = ArgumentCaptor.forClass(TransportProtos.SessionInfoProto.class); ArgumentCaptor subscriptionInfoCaptor = ArgumentCaptor.forClass(TransportProtos.SubscriptionInfoProto.class); - ArgumentCaptor> callbackCaptor = ArgumentCaptor.forClass(TransportServiceCallback.class); + ArgumentCaptor> callbackCaptor = ArgumentCaptor.captor(); verify(transportServiceMock).process(sessionInfoCaptor.capture(), subscriptionInfoCaptor.capture(), callbackCaptor.capture()); @@ -173,7 +173,7 @@ public class TransportActivityManagerTest { // THEN ArgumentCaptor sessionInfoCaptor = ArgumentCaptor.forClass(TransportProtos.SessionInfoProto.class); ArgumentCaptor subscriptionInfoCaptor = ArgumentCaptor.forClass(TransportProtos.SubscriptionInfoProto.class); - ArgumentCaptor> callbackCaptor = ArgumentCaptor.forClass(TransportServiceCallback.class); + ArgumentCaptor> callbackCaptor = ArgumentCaptor.captor(); verify(transportServiceMock).process(sessionInfoCaptor.capture(), subscriptionInfoCaptor.capture(), callbackCaptor.capture()); diff --git a/common/util/src/main/java/org/thingsboard/common/util/ExceptionUtil.java b/common/util/src/main/java/org/thingsboard/common/util/ExceptionUtil.java index e5eed02675..7dc1ddde60 100644 --- a/common/util/src/main/java/org/thingsboard/common/util/ExceptionUtil.java +++ b/common/util/src/main/java/org/thingsboard/common/util/ExceptionUtil.java @@ -37,6 +37,7 @@ public class ExceptionUtil { } } + @SafeVarargs public static Exception lookupExceptionInCause(Throwable source, Class... clazzes) { while (source != null) { for (Class clazz : clazzes) { diff --git a/dao/src/test/java/org/thingsboard/server/dao/AbstractRedisClusterContainer.java b/dao/src/test/java/org/thingsboard/server/dao/AbstractRedisClusterContainer.java index 827e50a5cc..1f057c802b 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/AbstractRedisClusterContainer.java +++ b/dao/src/test/java/org/thingsboard/server/dao/AbstractRedisClusterContainer.java @@ -40,17 +40,17 @@ public class AbstractRedisClusterContainer { ); @ClassRule(order = 1) - public static GenericContainer redis1 = new GenericContainer(IMAGE).withEnv(ENVS).withEnv("VALKEY_PORT_NUMBER", "6371").withNetworkMode("host").withLogConsumer(AbstractRedisClusterContainer::consumeLog); + public static GenericContainer redis1 = new GenericContainer<>(IMAGE).withEnv(ENVS).withEnv("VALKEY_PORT_NUMBER", "6371").withNetworkMode("host").withLogConsumer(AbstractRedisClusterContainer::consumeLog); @ClassRule(order = 2) - public static GenericContainer redis2 = new GenericContainer(IMAGE).withEnv(ENVS).withEnv("VALKEY_PORT_NUMBER", "6372").withNetworkMode("host").withLogConsumer(AbstractRedisClusterContainer::consumeLog); + public static GenericContainer redis2 = new GenericContainer<>(IMAGE).withEnv(ENVS).withEnv("VALKEY_PORT_NUMBER", "6372").withNetworkMode("host").withLogConsumer(AbstractRedisClusterContainer::consumeLog); @ClassRule(order = 3) - public static GenericContainer redis3 = new GenericContainer(IMAGE).withEnv(ENVS).withEnv("VALKEY_PORT_NUMBER", "6373").withNetworkMode("host").withLogConsumer(AbstractRedisClusterContainer::consumeLog); + public static GenericContainer redis3 = new GenericContainer<>(IMAGE).withEnv(ENVS).withEnv("VALKEY_PORT_NUMBER", "6373").withNetworkMode("host").withLogConsumer(AbstractRedisClusterContainer::consumeLog); @ClassRule(order = 4) - public static GenericContainer redis4 = new GenericContainer(IMAGE).withEnv(ENVS).withEnv("VALKEY_PORT_NUMBER", "6374").withNetworkMode("host").withLogConsumer(AbstractRedisClusterContainer::consumeLog); + public static GenericContainer redis4 = new GenericContainer<>(IMAGE).withEnv(ENVS).withEnv("VALKEY_PORT_NUMBER", "6374").withNetworkMode("host").withLogConsumer(AbstractRedisClusterContainer::consumeLog); @ClassRule(order = 5) - public static GenericContainer redis5 = new GenericContainer(IMAGE).withEnv(ENVS).withEnv("VALKEY_PORT_NUMBER", "6375").withNetworkMode("host").withLogConsumer(AbstractRedisClusterContainer::consumeLog); + public static GenericContainer redis5 = new GenericContainer<>(IMAGE).withEnv(ENVS).withEnv("VALKEY_PORT_NUMBER", "6375").withNetworkMode("host").withLogConsumer(AbstractRedisClusterContainer::consumeLog); @ClassRule(order = 6) - public static GenericContainer redis6 = new GenericContainer(IMAGE).withEnv(ENVS).withEnv("VALKEY_PORT_NUMBER", "6376").withNetworkMode("host").withLogConsumer(AbstractRedisClusterContainer::consumeLog); + public static GenericContainer redis6 = new GenericContainer<>(IMAGE).withEnv(ENVS).withEnv("VALKEY_PORT_NUMBER", "6376").withNetworkMode("host").withLogConsumer(AbstractRedisClusterContainer::consumeLog); @ClassRule(order = 100) diff --git a/dao/src/test/java/org/thingsboard/server/dao/AbstractRedisContainer.java b/dao/src/test/java/org/thingsboard/server/dao/AbstractRedisContainer.java index dc4a47b5a5..72074f60c8 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/AbstractRedisContainer.java +++ b/dao/src/test/java/org/thingsboard/server/dao/AbstractRedisContainer.java @@ -27,7 +27,7 @@ import java.util.List; public class AbstractRedisContainer { @ClassRule(order = 0) - public static GenericContainer redis = new GenericContainer("bitnamilegacy/valkey:8.0") + public static GenericContainer redis = new GenericContainer<>("bitnamilegacy/valkey:8.0") .withEnv("ALLOW_EMPTY_PASSWORD","yes") .withLogConsumer(s -> log.warn(((OutputFrame) s).getUtf8String().trim())) .withExposedPorts(6379); diff --git a/dao/src/test/java/org/thingsboard/server/dao/RedisJUnit5Test.java b/dao/src/test/java/org/thingsboard/server/dao/RedisJUnit5Test.java index 863eb95d90..9eea80a47f 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/RedisJUnit5Test.java +++ b/dao/src/test/java/org/thingsboard/server/dao/RedisJUnit5Test.java @@ -33,7 +33,7 @@ import static org.assertj.core.api.Assertions.assertThat; public class RedisJUnit5Test { @Container - private static final GenericContainer REDIS = new GenericContainer("bitnamilegacy/valkey:8.0") + private static final GenericContainer REDIS = new GenericContainer<>("bitnamilegacy/valkey:8.0") .withEnv("ALLOW_EMPTY_PASSWORD","yes") .withLogConsumer(s -> log.error(((OutputFrame) s).getUtf8String().trim())) .withExposedPorts(6379); diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/flow/TbCheckpointNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/flow/TbCheckpointNodeTest.java index ab0f358684..7c47477fee 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/flow/TbCheckpointNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/flow/TbCheckpointNodeTest.java @@ -114,7 +114,7 @@ public class TbCheckpointNodeTest extends AbstractRuleNodeUpgradeTest { .build(); node.onMsg(ctxMock, msg); - ArgumentCaptor> onFailure = ArgumentCaptor.forClass(Consumer.class); + ArgumentCaptor> onFailure = ArgumentCaptor.captor(); then(ctxMock).should().enqueueForTellNext(eq(msg), eq(DataConstants.HP_QUEUE_NAME), eq(TbNodeConnectionType.SUCCESS), any(), onFailure.capture()); String errorMsg = "Something went wrong."; onFailure.getValue().accept(new RuntimeException(errorMsg)); diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/kafka/TbKafkaNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/kafka/TbKafkaNodeTest.java index 5df7e1be7b..392821b767 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/kafka/TbKafkaNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/kafka/TbKafkaNodeTest.java @@ -420,7 +420,7 @@ public class TbKafkaNodeTest extends AbstractRuleNodeUpgradeTest { } private void verifyProducerRecord(String expectedTopic, String expectedKey, String expectedValue, Headers expectedHeaders) { - ArgumentCaptor> actualRecordCaptor = ArgumentCaptor.forClass(ProducerRecord.class); + ArgumentCaptor> actualRecordCaptor = ArgumentCaptor.captor(); then(producerMock).should().send(actualRecordCaptor.capture(), any()); ProducerRecord actualRecord = actualRecordCaptor.getValue(); assertThat(actualRecord.topic()).isEqualTo(expectedTopic); diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetTelemetryNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetTelemetryNodeTest.java index ce3a1b5b22..5de65535e7 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetTelemetryNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetTelemetryNodeTest.java @@ -219,7 +219,7 @@ public class TbGetTelemetryNodeTest extends AbstractRuleNodeUpgradeTest { node.onMsg(ctxMock, msg); // THEN - ArgumentCaptor> actualReadTsKvQueryList = ArgumentCaptor.forClass(List.class); + ArgumentCaptor> actualReadTsKvQueryList = ArgumentCaptor.captor(); then(timeseriesServiceMock).should().findAll(eq(TENANT_ID), eq(DEVICE_ID), actualReadTsKvQueryList.capture()); ReadTsKvQuery actualReadTsKvQuery = actualReadTsKvQueryList.getValue().get(0); assertThat(actualReadTsKvQuery.getStartTs()).isEqualTo(startTs); @@ -246,7 +246,7 @@ public class TbGetTelemetryNodeTest extends AbstractRuleNodeUpgradeTest { node.onMsg(ctxMock, msg); // THEN - ArgumentCaptor> actualReadTsKvQueryList = ArgumentCaptor.forClass(List.class); + ArgumentCaptor> actualReadTsKvQueryList = ArgumentCaptor.captor(); then(timeseriesServiceMock).should().findAll(eq(TENANT_ID), eq(DEVICE_ID), actualReadTsKvQueryList.capture()); ReadTsKvQuery actualReadTsKvQuery = actualReadTsKvQueryList.getValue().get(0); assertThat(actualReadTsKvQuery.getStartTs()).isEqualTo(ts - TimeUnit.MINUTES.toMillis(config.getStartInterval())); @@ -275,7 +275,7 @@ public class TbGetTelemetryNodeTest extends AbstractRuleNodeUpgradeTest { node.onMsg(ctxMock, msg); // THEN - ArgumentCaptor> actualReadTsKvQueryList = ArgumentCaptor.forClass(List.class); + ArgumentCaptor> actualReadTsKvQueryList = ArgumentCaptor.captor(); then(timeseriesServiceMock).should().findAll(eq(TENANT_ID), eq(DEVICE_ID), actualReadTsKvQueryList.capture()); List actualKeys = actualReadTsKvQueryList.getValue().stream().map(TsKvQuery::getKey).toList(); assertThat(actualKeys).containsExactlyInAnyOrder("temperature", "humidity", "pressure"); @@ -305,7 +305,7 @@ public class TbGetTelemetryNodeTest extends AbstractRuleNodeUpgradeTest { node.onMsg(ctxMock, msg); // THEN - ArgumentCaptor> actualReadTsKvQueryList = ArgumentCaptor.forClass(List.class); + ArgumentCaptor> actualReadTsKvQueryList = ArgumentCaptor.captor(); then(timeseriesServiceMock).should().findAll(eq(TENANT_ID), eq(DEVICE_ID), actualReadTsKvQueryList.capture()); ReadTsKvQuery actualReadTsKvQuery = actualReadTsKvQueryList.getValue().get(0); aggregationStepVerifier.accept(actualReadTsKvQuery); @@ -340,7 +340,7 @@ public class TbGetTelemetryNodeTest extends AbstractRuleNodeUpgradeTest { node.onMsg(ctxMock, msg); // THEN - ArgumentCaptor> actualReadTsKvQueryList = ArgumentCaptor.forClass(List.class); + ArgumentCaptor> actualReadTsKvQueryList = ArgumentCaptor.captor(); then(timeseriesServiceMock).should().findAll(eq(TENANT_ID), eq(DEVICE_ID), actualReadTsKvQueryList.capture()); ReadTsKvQuery actualReadTsKvQuery = actualReadTsKvQueryList.getValue().get(0); limitInQueryVerifier.accept(actualReadTsKvQuery); @@ -385,7 +385,7 @@ public class TbGetTelemetryNodeTest extends AbstractRuleNodeUpgradeTest { node.onMsg(ctxMock, msg); // THEN - ArgumentCaptor> actualReadTsKvQueryList = ArgumentCaptor.forClass(List.class); + ArgumentCaptor> actualReadTsKvQueryList = ArgumentCaptor.captor(); then(timeseriesServiceMock).should().findAll(eq(TENANT_ID), eq(DEVICE_ID), actualReadTsKvQueryList.capture()); ReadTsKvQuery actualReadTsKvQuery = actualReadTsKvQueryList.getValue().get(0); orderInQueryVerifier.accept(actualReadTsKvQuery); diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/telemetry/TbMsgDeleteAttributesNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/telemetry/TbMsgDeleteAttributesNodeTest.java index b03794c39d..105962fd1e 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/telemetry/TbMsgDeleteAttributesNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/telemetry/TbMsgDeleteAttributesNodeTest.java @@ -147,7 +147,7 @@ public class TbMsgDeleteAttributesNodeTest { node.onMsg(ctx, msg); ArgumentCaptor successCaptor = ArgumentCaptor.forClass(Runnable.class); - ArgumentCaptor> failureCaptor = ArgumentCaptor.forClass(Consumer.class); + ArgumentCaptor> failureCaptor = ArgumentCaptor.captor(); ArgumentCaptor newMsgCaptor = ArgumentCaptor.forClass(TbMsg.class); if (sendAttributesDeletedNotification) { diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbMsgDeduplicationNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbMsgDeduplicationNodeTest.java index ec71819878..8fd2868f61 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbMsgDeduplicationNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbMsgDeduplicationNodeTest.java @@ -192,7 +192,7 @@ public class TbMsgDeduplicationNodeTest extends AbstractRuleNodeUpgradeTest { ArgumentCaptor newMsgCaptor = ArgumentCaptor.forClass(TbMsg.class); ArgumentCaptor successCaptor = ArgumentCaptor.forClass(Runnable.class); - ArgumentCaptor> failureCaptor = ArgumentCaptor.forClass(Consumer.class); + ArgumentCaptor> failureCaptor = ArgumentCaptor.captor(); verify(ctx, times(msgCount)).ack(any()); verify(ctx, times(1)).tellFailure(eq(msgToReject), any()); @@ -248,7 +248,7 @@ public class TbMsgDeduplicationNodeTest extends AbstractRuleNodeUpgradeTest { ArgumentCaptor newMsgCaptor = ArgumentCaptor.forClass(TbMsg.class); ArgumentCaptor successCaptor = ArgumentCaptor.forClass(Runnable.class); - ArgumentCaptor> failureCaptor = ArgumentCaptor.forClass(Consumer.class); + ArgumentCaptor> failureCaptor = ArgumentCaptor.captor(); verify(ctx, times(msgCount)).ack(any()); verify(ctx, times(1)).tellFailure(eq(msgToReject), any()); @@ -293,7 +293,7 @@ public class TbMsgDeduplicationNodeTest extends AbstractRuleNodeUpgradeTest { ArgumentCaptor newMsgCaptor = ArgumentCaptor.forClass(TbMsg.class); ArgumentCaptor successCaptor = ArgumentCaptor.forClass(Runnable.class); - ArgumentCaptor> failureCaptor = ArgumentCaptor.forClass(Consumer.class); + ArgumentCaptor> failureCaptor = ArgumentCaptor.captor(); verify(ctx, times(msgCount)).ack(any()); verify(node, times(msgCount + wantedNumberOfTellSelfInvocation)).onMsg(eq(ctx), any()); @@ -339,7 +339,7 @@ public class TbMsgDeduplicationNodeTest extends AbstractRuleNodeUpgradeTest { ArgumentCaptor newMsgCaptor = ArgumentCaptor.forClass(TbMsg.class); ArgumentCaptor successCaptor = ArgumentCaptor.forClass(Runnable.class); - ArgumentCaptor> failureCaptor = ArgumentCaptor.forClass(Consumer.class); + ArgumentCaptor> failureCaptor = ArgumentCaptor.captor(); verify(ctx, times(msgCount)).ack(any()); verify(node, times(msgCount + wantedNumberOfTellSelfInvocation)).onMsg(eq(ctx), any()); @@ -393,7 +393,7 @@ public class TbMsgDeduplicationNodeTest extends AbstractRuleNodeUpgradeTest { ArgumentCaptor newMsgCaptor = ArgumentCaptor.forClass(TbMsg.class); ArgumentCaptor successCaptor = ArgumentCaptor.forClass(Runnable.class); - ArgumentCaptor> failureCaptor = ArgumentCaptor.forClass(Consumer.class); + ArgumentCaptor> failureCaptor = ArgumentCaptor.captor(); verify(ctx, times(msgCount)).ack(any()); verify(node, times(msgCount + wantedNumberOfTellSelfInvocation)).onMsg(eq(ctx), any()); diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbSplitArrayMsgNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbSplitArrayMsgNodeTest.java index 5cd88c8ea9..b178def66e 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbSplitArrayMsgNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbSplitArrayMsgNodeTest.java @@ -114,7 +114,7 @@ public class TbSplitArrayMsgNodeTest { if (dataNode.size() > 1) { ArgumentCaptor successCaptor = ArgumentCaptor.forClass(Runnable.class); - ArgumentCaptor> failureCaptor = ArgumentCaptor.forClass(Consumer.class); + ArgumentCaptor> failureCaptor = ArgumentCaptor.captor(); verify(ctx, times(dataNode.size())).enqueueForTellNext(any(), anyString(), successCaptor.capture(), failureCaptor.capture()); for (Runnable valueCaptor : successCaptor.getAllValues()) { valueCaptor.run(); From 4634b36fc73ca80c8cd1a2be303353f341f3513a Mon Sep 17 00:00:00 2001 From: Oleksandra Matviienko Date: Fri, 24 Apr 2026 08:54:24 +0200 Subject: [PATCH 03/12] Removed warnings about ignored builder initializers in data models --- .../org/thingsboard/server/common/data/job/task/Task.java | 2 +- .../server/common/data/mobile/layout/MobileLayoutConfig.java | 1 + .../tenant/profile/DefaultTenantProfileConfiguration.java | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/job/task/Task.java b/common/data/src/main/java/org/thingsboard/server/common/data/job/task/Task.java index 8f3e0d814b..a881780012 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/job/task/Task.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/job/task/Task.java @@ -46,7 +46,7 @@ public abstract class Task { public Task() { } - private int attempt = 0; + private int attempt; public abstract R toFailed(Throwable error); diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/mobile/layout/MobileLayoutConfig.java b/common/data/src/main/java/org/thingsboard/server/common/data/mobile/layout/MobileLayoutConfig.java index 783d3f68a9..60a7710e65 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/mobile/layout/MobileLayoutConfig.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/mobile/layout/MobileLayoutConfig.java @@ -40,6 +40,7 @@ public class MobileLayoutConfig { @ArraySchema(schema = @Schema(implementation = MobilePage.class)) @JsonView(Views.Public.class) @Valid + @Builder.Default private List pages = new ArrayList<>(); } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/tenant/profile/DefaultTenantProfileConfiguration.java b/common/data/src/main/java/org/thingsboard/server/common/data/tenant/profile/DefaultTenantProfileConfiguration.java index 297f92cffb..ff1dd3450c 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/tenant/profile/DefaultTenantProfileConfiguration.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/tenant/profile/DefaultTenantProfileConfiguration.java @@ -169,8 +169,10 @@ public class DefaultTenantProfileConfiguration implements TenantProfileConfigura private double warnThreshold; + @Builder.Default @Schema(example = "5") private long maxCalculatedFieldsPerEntity = 5; + @Builder.Default @Schema(example = "10") private long maxArgumentsPerCF = 10; @Schema(example = "10") @@ -188,8 +190,10 @@ public class DefaultTenantProfileConfiguration implements TenantProfileConfigura @Positive @Schema(example = "1000") private long maxDataPointsPerRollingArg = 1000; + @Builder.Default @Schema(example = "32") private long maxStateSizeInKBytes = 32; + @Builder.Default @Schema(example = "2") private long maxSingleValueArgumentSizeInKBytes = 2; @Schema(example = "10") From 20d6b0f88312e546fec1754785dc5c2cc8d0d8b0 Mon Sep 17 00:00:00 2001 From: Oleksandra Matviienko Date: Fri, 24 Apr 2026 15:00:26 +0200 Subject: [PATCH 04/12] Replaced deprecated string, number, and random-value helpers with modern equivalents --- .../DefaultSystemDataLoaderService.java | 2 +- .../mfa/provider/impl/TotpTwoFaProvider.java | 2 +- .../service/ws/WebSocketSessionType.java | 4 ++-- .../server/controller/AbstractWebTest.java | 2 +- .../controller/AdminControllerTest.java | 2 +- .../AlarmCommentControllerTest.java | 6 ++--- .../server/controller/AuthControllerTest.java | 8 +++---- .../controller/BaseQueueControllerTest.java | 2 +- .../controller/EntityQueryControllerTest.java | 4 ++-- .../server/controller/UserControllerTest.java | 4 ++-- .../server/controller/WebSocketApiTest.java | 4 ++-- .../discovery/HashPartitionServiceTest.java | 2 +- .../service/entitiy/EntityServiceTest.java | 6 ++--- .../housekeeper/HousekeeperServiceTest.java | 4 ++-- .../AbstractNotificationApiTest.java | 2 +- .../notification/NotificationApiWsClient.java | 2 +- .../NotificationTargetApiTest.java | 2 +- .../TbRuleEngineQueueConsumerManagerTest.java | 14 +++++------ .../service/sms/DefaultSmsServiceTest.java | 10 ++++---- ...DefaultTbLocalSubscriptionServiceTest.java | 6 ++--- .../subscription/TbEntityDataSubCtxTest.java | 10 ++++---- .../server/common/data/EntityType.java | 2 ++ .../common/data/util/TemplateUtils.java | 2 +- .../server/common/data/util/TypeCastUtil.java | 2 +- .../server/service/sync/vc/GitRepository.java | 5 ++-- .../server/dao/resource/BaseImageService.java | 2 +- .../dao/resource/BaseResourceService.java | 8 ++++--- .../dao/service/AdminSettingsServiceTest.java | 6 ++--- .../dao/service/AlarmCommentServiceTest.java | 8 +++---- .../server/dao/service/AssetServiceTest.java | 4 ++-- .../dao/sql/alarm/JpaAlarmCommentDaoTest.java | 4 ++-- .../dao/sql/user/JpaUserSettingsDaoTest.java | 4 ++-- .../dao/sqlts/SqlTimeseriesLatestDaoTest.java | 2 +- .../monitoring/client/WsClient.java | 2 +- .../service/MonitoringEntityService.java | 2 +- .../connectivity/MqttGatewayClientTest.java | 4 ++-- .../lwm2m/AbstractLwm2mClientTest.java | 6 ++--- .../lwm2m/rpc/Lwm2mObserveCompositeTest.java | 6 ++--- .../lwm2m/rpc/Lwm2mObserveTest.java | 6 ++--- .../lwm2m/security/Lwm2mClientNoSecTest.java | 4 ++-- .../lwm2m/security/Lwm2mClientPskTest.java | 4 ++-- .../msa/edqs/EdqsEntityDataQueryTest.java | 6 ++--- .../msa/prototypes/DevicePrototypes.java | 6 ++--- .../msa/ui/pages/CreateWidgetPopupHelper.java | 4 ++-- .../server/msa/ui/utils/EntityPrototypes.java | 24 +++++++++---------- .../client/tools/migrator/PgCaMigrator.java | 2 +- 46 files changed, 114 insertions(+), 109 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/install/DefaultSystemDataLoaderService.java b/application/src/main/java/org/thingsboard/server/service/install/DefaultSystemDataLoaderService.java index d528f10899..b608ef9c95 100644 --- a/application/src/main/java/org/thingsboard/server/service/install/DefaultSystemDataLoaderService.java +++ b/application/src/main/java/org/thingsboard/server/service/install/DefaultSystemDataLoaderService.java @@ -335,7 +335,7 @@ public class DefaultSystemDataLoaderService implements SystemDataLoaderService { private String generateRandomKey() { return Base64.getEncoder().encodeToString( - RandomStringUtils.randomAlphanumeric(64).getBytes(StandardCharsets.UTF_8)); + RandomStringUtils.secure().nextAlphanumeric(64).getBytes(StandardCharsets.UTF_8)); } @Override diff --git a/application/src/main/java/org/thingsboard/server/service/security/auth/mfa/provider/impl/TotpTwoFaProvider.java b/application/src/main/java/org/thingsboard/server/service/security/auth/mfa/provider/impl/TotpTwoFaProvider.java index 23eda67a77..a7fbdb84e4 100644 --- a/application/src/main/java/org/thingsboard/server/service/security/auth/mfa/provider/impl/TotpTwoFaProvider.java +++ b/application/src/main/java/org/thingsboard/server/service/security/auth/mfa/provider/impl/TotpTwoFaProvider.java @@ -62,7 +62,7 @@ public class TotpTwoFaProvider implements TwoFaProvider forName(String name) { return Arrays.stream(values()) - .filter(sessionType -> StringUtils.equals(sessionType.name, name)) + .filter(sessionType -> Objects.equals(sessionType.name, name)) .findFirst(); } diff --git a/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java b/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java index 055e1e19a0..7803b0c746 100644 --- a/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java @@ -1358,7 +1358,7 @@ public abstract class AbstractWebTest extends AbstractInMemoryStorageTest { protected NotificationTarget createNotificationTarget(UsersFilter usersFilter) { NotificationTarget notificationTarget = new NotificationTarget(); - notificationTarget.setName(usersFilter.toString() + RandomStringUtils.randomNumeric(5)); + notificationTarget.setName(usersFilter.toString() + RandomStringUtils.secure().nextNumeric(5)); PlatformUsersNotificationTargetConfig targetConfig = new PlatformUsersNotificationTargetConfig(); targetConfig.setUsersFilter(usersFilter); notificationTarget.setConfiguration(targetConfig); diff --git a/application/src/test/java/org/thingsboard/server/controller/AdminControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/AdminControllerTest.java index 21a8b3b2e9..ee09b9a98c 100644 --- a/application/src/test/java/org/thingsboard/server/controller/AdminControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/AdminControllerTest.java @@ -168,7 +168,7 @@ public class AdminControllerTest extends AbstractControllerTest { assertThat(jwtSettings).isEqualTo(defaultJwtSettings); jwtSettings.setTokenSigningKey(Base64.getEncoder().encodeToString( - RandomStringUtils.randomAlphanumeric(512 / Byte.SIZE).getBytes(StandardCharsets.UTF_8))); + RandomStringUtils.secure().nextAlphanumeric(512 / Byte.SIZE).getBytes(StandardCharsets.UTF_8))); doPost("/api/admin/jwtSettings", jwtSettings).andExpect(status().isOk()); diff --git a/application/src/test/java/org/thingsboard/server/controller/AlarmCommentControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/AlarmCommentControllerTest.java index 3bb5fd5647..89eb140c8b 100644 --- a/application/src/test/java/org/thingsboard/server/controller/AlarmCommentControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/AlarmCommentControllerTest.java @@ -28,7 +28,7 @@ import org.mockito.Mockito; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Primary; import org.springframework.test.context.ContextConfiguration; -import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.alarm.Alarm; @@ -292,7 +292,7 @@ public class AlarmCommentControllerTest extends AbstractControllerTest { final int size = 10; for (int i = 0; i < size; i++) { createdAlarmComments.add( - createAlarmComment(alarm.getId(), RandomStringUtils.randomAlphanumeric(10)) + createAlarmComment(alarm.getId(), RandomStringUtils.secure().nextAlphanumeric(10)) ); } @@ -323,7 +323,7 @@ public class AlarmCommentControllerTest extends AbstractControllerTest { List createdAlarmComments = new LinkedList<>(); for (int i = 0; i < size; i++) { createdAlarmComments.add( - createAlarmComment(alarm.getId(), RandomStringUtils.randomAlphanumeric(10)) + createAlarmComment(alarm.getId(), RandomStringUtils.secure().nextAlphanumeric(10)) ); } diff --git a/application/src/test/java/org/thingsboard/server/controller/AuthControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/AuthControllerTest.java index 419f442f87..a35e1f9af0 100644 --- a/application/src/test/java/org/thingsboard/server/controller/AuthControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/AuthControllerTest.java @@ -22,7 +22,7 @@ import org.junit.Test; import org.mockito.Mockito; import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.http.HttpHeaders; -import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.User; @@ -149,7 +149,7 @@ public class AuthControllerTest extends AbstractControllerTest { loginTenantAdmin(); ChangePasswordRequest changePasswordRequest = new ChangePasswordRequest(); changePasswordRequest.setCurrentPassword("tenant"); - changePasswordRequest.setNewPassword(RandomStringUtils.randomAlphanumeric(73)); + changePasswordRequest.setNewPassword(RandomStringUtils.secure().nextAlphanumeric(73)); doPost("/api/auth/changePassword", changePasswordRequest) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.message", is("Password must be no more than 72 characters in length."))); @@ -161,7 +161,7 @@ public class AuthControllerTest extends AbstractControllerTest { ChangePasswordRequest changePasswordRequest = new ChangePasswordRequest(); changePasswordRequest.setCurrentPassword("tenant"); - String newPassword = RandomStringUtils.randomAlphanumeric(16); + String newPassword = RandomStringUtils.secure().nextAlphanumeric(16); changePasswordRequest.setNewPassword(newPassword); doPost("/api/auth/changePassword", changePasswordRequest) .andExpect(status().isOk()); @@ -194,7 +194,7 @@ public class AuthControllerTest extends AbstractControllerTest { .andExpect(status().isSeeOther()) .andExpect(header().string(HttpHeaders.LOCATION, "/login/resetPassword?resetToken=" + this.currentResetPasswordToken)); - String newPassword = RandomStringUtils.randomAlphanumeric(73); + String newPassword = RandomStringUtils.secure().nextAlphanumeric(73); JsonNode resetPasswordRequest = JacksonUtil.newObjectNode() .put("resetToken", this.currentResetPasswordToken) .put("password", newPassword); diff --git a/application/src/test/java/org/thingsboard/server/controller/BaseQueueControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/BaseQueueControllerTest.java index 0d79882a94..b7507f5dec 100644 --- a/application/src/test/java/org/thingsboard/server/controller/BaseQueueControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/BaseQueueControllerTest.java @@ -236,7 +236,7 @@ public class BaseQueueControllerTest extends AbstractControllerTest { when(testProcessingResult.getFailedMap()).thenReturn(new ConcurrentHashMap<>()); when(testProcessingResult.getPendingMap()).thenReturn(new ConcurrentHashMap<>()); - String largeExceptionMessage = RandomStringUtils.randomAlphabetic(150); + String largeExceptionMessage = RandomStringUtils.secure().nextAlphabetic(150); RuleEngineException ruleEngineException = new RuleEngineException(largeExceptionMessage); when(testProcessingResult.getExceptionsMap()).thenReturn(new ConcurrentHashMap<>(Map.of( tenantId, ruleEngineException diff --git a/application/src/test/java/org/thingsboard/server/controller/EntityQueryControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/EntityQueryControllerTest.java index 5de4c9ffcf..44fd530f36 100644 --- a/application/src/test/java/org/thingsboard/server/controller/EntityQueryControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/EntityQueryControllerTest.java @@ -31,7 +31,7 @@ import org.springframework.test.context.TestPropertySource; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.web.servlet.ResultActions; -import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.AttributeScope; import org.thingsboard.server.common.data.Customer; @@ -207,7 +207,7 @@ public class EntityQueryControllerTest extends AbstractControllerTest { loginTenantAdmin(); List devices = new ArrayList<>(); - String devicePrefix = "Device" + RandomStringUtils.randomAlphabetic(5); + String devicePrefix = "Device" + RandomStringUtils.secure().nextAlphabetic(5); for (int i = 0; i < 97; i++) { Device device = new Device(); device.setName(devicePrefix + i); diff --git a/application/src/test/java/org/thingsboard/server/controller/UserControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/UserControllerTest.java index 957b3721e0..751631aec2 100644 --- a/application/src/test/java/org/thingsboard/server/controller/UserControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/UserControllerTest.java @@ -1296,9 +1296,9 @@ public class UserControllerTest extends AbstractControllerTest { Assert.assertEquals(savedDashboard2.getTitle(), starred.getTitle()); //TEST renaming in the cache. - savedDashboard1.setTitle(RandomStringUtils.randomAlphanumeric(10)); + savedDashboard1.setTitle(RandomStringUtils.secure().nextAlphanumeric(10)); savedDashboard1 = doPost("/api/dashboard", savedDashboard1, Dashboard.class); - savedDashboard2.setTitle(RandomStringUtils.randomAlphanumeric(10)); + savedDashboard2.setTitle(RandomStringUtils.secure().nextAlphanumeric(10)); savedDashboard2 = doPost("/api/dashboard", savedDashboard2, Dashboard.class); newSettings = doGet("/api/user/dashboards/" + savedDashboard1.getId().getId() + "/unstar", UserDashboardsInfo.class); diff --git a/application/src/test/java/org/thingsboard/server/controller/WebSocketApiTest.java b/application/src/test/java/org/thingsboard/server/controller/WebSocketApiTest.java index cda318b211..27b76f34f2 100644 --- a/application/src/test/java/org/thingsboard/server/controller/WebSocketApiTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/WebSocketApiTest.java @@ -30,7 +30,7 @@ import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.test.context.TestPropertySource; -import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.rule.engine.api.AttributesSaveRequest; import org.thingsboard.rule.engine.api.TimeseriesSaveRequest; @@ -555,7 +555,7 @@ public class WebSocketApiTest extends AbstractControllerTest { for (int i = 0; i < 6; i++) { Alarm alarm = new Alarm(); alarm.setOriginator(device.getId()); - alarm.setType(RandomStringUtils.randomAlphabetic(10)); + alarm.setType(RandomStringUtils.secure().nextAlphabetic(10)); alarm.setSeverity(AlarmSeverity.CRITICAL); alarm = doPost("/api/alarm", alarm, Alarm.class); alarms.add(alarm); diff --git a/application/src/test/java/org/thingsboard/server/queue/discovery/HashPartitionServiceTest.java b/application/src/test/java/org/thingsboard/server/queue/discovery/HashPartitionServiceTest.java index c361172b66..b1d59c031a 100644 --- a/application/src/test/java/org/thingsboard/server/queue/discovery/HashPartitionServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/queue/discovery/HashPartitionServiceTest.java @@ -380,7 +380,7 @@ public class HashPartitionServiceTest { } Stream.concat(Stream.of(TenantId.SYS_TENANT_ID), Stream.generate(UUID::randomUUID).map(TenantId::new).limit(10)).forEach(tenantId -> { - List queues = Stream.generate(() -> RandomStringUtils.randomAlphabetic(10)) + List queues = Stream.generate(() -> RandomStringUtils.secure().nextAlphabetic(10)) .map(queueName -> new QueueKey(ServiceType.TB_RULE_ENGINE, queueName, tenantId)) .limit(100).toList(); diff --git a/application/src/test/java/org/thingsboard/server/service/entitiy/EntityServiceTest.java b/application/src/test/java/org/thingsboard/server/service/entitiy/EntityServiceTest.java index b3230b3d45..251f42bb3f 100644 --- a/application/src/test/java/org/thingsboard/server/service/entitiy/EntityServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/service/entitiy/EntityServiceTest.java @@ -1004,7 +1004,7 @@ public class EntityServiceTest extends AbstractControllerTest { public void testFindEntityDataByQuery_filter_entity_name_ends_with() { List devices = new ArrayList<>(); - String suffixes = RandomStringUtils.randomAlphanumeric(5); + String suffixes = RandomStringUtils.secure().nextAlphanumeric(5); for (int i = 0; i < 10; i++) { Device device = new Device(); device.setTenantId(tenantId); @@ -1425,7 +1425,7 @@ public class EntityServiceTest extends AbstractControllerTest { Device device = new Device(); device.setTenantId(tenantId); device.setCustomerId(customerId); - device.setName("Device test " + RandomStringUtils.randomAlphabetic(5)); + device.setName("Device test " + RandomStringUtils.secure().nextAlphabetic(5)); device.setType("default"); return device; } @@ -1485,7 +1485,7 @@ public class EntityServiceTest extends AbstractControllerTest { device.setTenantId(tenantId); device.setName("Device " + i); device.setType("default"); - device.setLabel("label-" + RandomUtils.nextInt(100, 10000)); + device.setLabel("label-" + RandomUtils.secure().randomInt(100, 10000)); return device; }) .limit(count) diff --git a/application/src/test/java/org/thingsboard/server/service/housekeeper/HousekeeperServiceTest.java b/application/src/test/java/org/thingsboard/server/service/housekeeper/HousekeeperServiceTest.java index 0c12767b60..762f3946d4 100644 --- a/application/src/test/java/org/thingsboard/server/service/housekeeper/HousekeeperServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/service/housekeeper/HousekeeperServiceTest.java @@ -25,7 +25,7 @@ import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; -import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.rule.engine.metadata.TbGetAttributesNode; import org.thingsboard.rule.engine.metadata.TbGetAttributesNodeConfiguration; @@ -570,7 +570,7 @@ public class HousekeeperServiceTest extends AbstractControllerTest { .tenantId(tenantId) .originator(entityId) .severity(AlarmSeverity.CRITICAL) - .type("test alarm for " + entityId + " " + RandomStringUtils.randomAlphabetic(10)) + .type("test alarm for " + entityId + " " + RandomStringUtils.secure().nextAlphabetic(10)) .build(), Alarm.class); assertThat(alarmService.findAlarmIdsByOriginatorId(tenantId, entityId, 0, null, 10)).isNotEmpty(); } diff --git a/application/src/test/java/org/thingsboard/server/service/notification/AbstractNotificationApiTest.java b/application/src/test/java/org/thingsboard/server/service/notification/AbstractNotificationApiTest.java index cf99669777..c7d5f0ea82 100644 --- a/application/src/test/java/org/thingsboard/server/service/notification/AbstractNotificationApiTest.java +++ b/application/src/test/java/org/thingsboard/server/service/notification/AbstractNotificationApiTest.java @@ -155,7 +155,7 @@ public abstract class AbstractNotificationApiTest extends AbstractControllerTest User user = new User(); user.setTenantId(tenantId); user.setAuthority(authority); - user.setEmail(RandomStringUtils.randomAlphabetic(20) + "@thingsboard.com"); + user.setEmail(RandomStringUtils.secure().nextAlphabetic(20) + "@thingsboard.com"); user = createUserAndLogin(user, "12345678"); NotificationApiWsClient wsClient = buildAndConnectWebSocketClient(); return Pair.of(user, wsClient); diff --git a/application/src/test/java/org/thingsboard/server/service/notification/NotificationApiWsClient.java b/application/src/test/java/org/thingsboard/server/service/notification/NotificationApiWsClient.java index b538972dd7..f6d94f5170 100644 --- a/application/src/test/java/org/thingsboard/server/service/notification/NotificationApiWsClient.java +++ b/application/src/test/java/org/thingsboard/server/service/notification/NotificationApiWsClient.java @@ -131,7 +131,7 @@ public class NotificationApiWsClient extends TbTestWebSocketClient { } private int newCmdId() { - return RandomUtils.nextInt(1, 1000); + return RandomUtils.secure().randomInt(1, 1000); } } diff --git a/application/src/test/java/org/thingsboard/server/service/notification/NotificationTargetApiTest.java b/application/src/test/java/org/thingsboard/server/service/notification/NotificationTargetApiTest.java index 2d865542a1..b68d30a4c6 100644 --- a/application/src/test/java/org/thingsboard/server/service/notification/NotificationTargetApiTest.java +++ b/application/src/test/java/org/thingsboard/server/service/notification/NotificationTargetApiTest.java @@ -187,7 +187,7 @@ public class NotificationTargetApiTest extends AbstractNotificationApiTest { NotificationTarget sysAdmins = createNotificationTarget(new SystemAdministratorsFilter()); NotificationTarget slack = new NotificationTarget(); - slack.setName(RandomStringUtils.randomNumeric(5)); + slack.setName(RandomStringUtils.secure().nextNumeric(5)); SlackNotificationTargetConfig slackConfig = new SlackNotificationTargetConfig(); SlackConversation slackConversation = new SlackConversation(); slackConversation.setType(SlackConversationType.DIRECT); diff --git a/application/src/test/java/org/thingsboard/server/service/queue/ruleengine/TbRuleEngineQueueConsumerManagerTest.java b/application/src/test/java/org/thingsboard/server/service/queue/ruleengine/TbRuleEngineQueueConsumerManagerTest.java index e50698200b..77117020a4 100644 --- a/application/src/test/java/org/thingsboard/server/service/queue/ruleengine/TbRuleEngineQueueConsumerManagerTest.java +++ b/application/src/test/java/org/thingsboard/server/service/queue/ruleengine/TbRuleEngineQueueConsumerManagerTest.java @@ -27,7 +27,7 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoSettings; import org.mockito.quality.Strictness; -import org.testcontainers.shaded.org.apache.commons.lang3.RandomUtils; +import org.apache.commons.lang3.RandomUtils; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.common.util.ThingsBoardExecutors; import org.thingsboard.common.util.ThingsBoardThreadFactory; @@ -544,18 +544,18 @@ public class TbRuleEngineQueueConsumerManagerTest { Queue oldConfig = consumerManager.getConfig(); Queue newConfig = JacksonUtil.clone(oldConfig); newConfig.setConsumerPerPartition(RandomUtils.nextBoolean()); - newConfig.setPollInterval(RandomUtils.nextInt(100, 501)); - newConfig.setPartitions(RandomUtils.nextInt(1, 10)); + newConfig.setPollInterval(RandomUtils.secure().randomInt(100, 501)); + newConfig.setPartitions(RandomUtils.secure().randomInt(1, 10)); newConfig.setPackProcessingTimeout(RandomUtils.nextLong(100, 5001)); - newConfig.getSubmitStrategy().setType(SubmitStrategyType.values()[RandomUtils.nextInt(0, SubmitStrategyType.values().length)]); - newConfig.getProcessingStrategy().setType(ProcessingStrategyType.values()[RandomUtils.nextInt(0, ProcessingStrategyType.values().length)]); + newConfig.getSubmitStrategy().setType(SubmitStrategyType.values()[RandomUtils.secure().randomInt(0, SubmitStrategyType.values().length)]); + newConfig.getProcessingStrategy().setType(ProcessingStrategyType.values()[RandomUtils.secure().randomInt(0, ProcessingStrategyType.values().length)]); log.info("Generated new config: consumerPerPartition={}, pollInterval={}, processingStrategy={}", newConfig.isConsumerPerPartition(), newConfig.getPollInterval(), newConfig.getProcessingStrategy().getType()); return newConfig; }; Supplier> partitionsUpdater = () -> { - int partitionsCount = RandomUtils.nextInt(0, 20); - int[] partitions = IntStream.generate(() -> RandomUtils.nextInt(0, 20)) + int partitionsCount = RandomUtils.secure().randomInt(0, 20); + int[] partitions = IntStream.generate(() -> RandomUtils.secure().randomInt(0, 20)) .distinct().limit(partitionsCount) .sorted().toArray(); log.info("Generated new partitions: {}", Arrays.toString(partitions)); diff --git a/application/src/test/java/org/thingsboard/server/service/sms/DefaultSmsServiceTest.java b/application/src/test/java/org/thingsboard/server/service/sms/DefaultSmsServiceTest.java index 8d27b07550..75a3423b98 100644 --- a/application/src/test/java/org/thingsboard/server/service/sms/DefaultSmsServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/service/sms/DefaultSmsServiceTest.java @@ -24,7 +24,7 @@ import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.test.context.TestPropertySource; -import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.AdminSettings; import org.thingsboard.server.common.data.TenantProfile; @@ -84,13 +84,13 @@ public class DefaultSmsServiceTest extends AbstractControllerTest { for (int i = 0; i < 10; i++) { doReturn(1).when(defaultSmsService).sendSms(any(), any()); - defaultSmsService.sendSms(tenantId, null, new String[]{RandomStringUtils.randomNumeric(10)}, "Message"); + defaultSmsService.sendSms(tenantId, null, new String[]{RandomStringUtils.secure().nextNumeric(10)}, "Message"); } //wait 1 sec so that api usage state is updated TimeUnit.SECONDS.sleep(1); assertThrows(RuntimeException.class, () -> { - defaultSmsService.sendSms(tenantId, null, new String[]{RandomStringUtils.randomNumeric(10)}, "Message"); + defaultSmsService.sendSms(tenantId, null, new String[]{RandomStringUtils.secure().nextNumeric(10)}, "Message"); }, "SMS sending is disabled due to API limits!"); } @@ -103,7 +103,7 @@ public class DefaultSmsServiceTest extends AbstractControllerTest { TimeUnit.SECONDS.sleep(1); assertThrows(RuntimeException.class, () -> { - defaultSmsService.sendSms(tenantId, null, new String[]{RandomStringUtils.randomNumeric(10)}, "Message"); + defaultSmsService.sendSms(tenantId, null, new String[]{RandomStringUtils.secure().nextNumeric(10)}, "Message"); }, "SMS sending is disabled due to API limits!"); //enable sms messaging @@ -113,7 +113,7 @@ public class DefaultSmsServiceTest extends AbstractControllerTest { for (int i = 0; i < 10; i++) { doReturn(1).when(defaultSmsService).sendSms(any(), any()); - defaultSmsService.sendSms(tenantId, null, new String[]{RandomStringUtils.randomNumeric(10)}, "Message"); + defaultSmsService.sendSms(tenantId, null, new String[]{RandomStringUtils.secure().nextNumeric(10)}, "Message"); } } diff --git a/application/src/test/java/org/thingsboard/server/service/subscription/DefaultTbLocalSubscriptionServiceTest.java b/application/src/test/java/org/thingsboard/server/service/subscription/DefaultTbLocalSubscriptionServiceTest.java index 2eb7934792..aa17bf020a 100644 --- a/application/src/test/java/org/thingsboard/server/service/subscription/DefaultTbLocalSubscriptionServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/service/subscription/DefaultTbLocalSubscriptionServiceTest.java @@ -126,13 +126,13 @@ public class DefaultTbLocalSubscriptionServiceTest { private TbSubscription createSubscription(TenantId tenantId, EntityId entityId) { Map keys = new HashMap<>(); for (int i = 0; i < 50; i++) { - keys.put(RandomStringUtils.randomAlphanumeric(5), 1L); + keys.put(RandomStringUtils.secure().nextAlphanumeric(5), 1L); } return TbAttributeSubscription.builder() .tenantId(tenantId) .entityId(entityId) .subscriptionId(1) - .sessionId(RandomStringUtils.randomAlphanumeric(5)) + .sessionId(RandomStringUtils.secure().nextAlphanumeric(5)) .keyStates(keys) .build(); } @@ -152,7 +152,7 @@ public class DefaultTbLocalSubscriptionServiceTest { .tenantId(tenantId) .entityId(deviceId) .subscriptionId(2) - .sessionId(RandomStringUtils.randomAlphanumeric(5)) + .sessionId(RandomStringUtils.secure().nextAlphanumeric(5)) .keyStates(keyStates) .allKeys(true) .latestValues(true) diff --git a/application/src/test/java/org/thingsboard/server/service/subscription/TbEntityDataSubCtxTest.java b/application/src/test/java/org/thingsboard/server/service/subscription/TbEntityDataSubCtxTest.java index 1d0e691c74..2c0594bd74 100644 --- a/application/src/test/java/org/thingsboard/server/service/subscription/TbEntityDataSubCtxTest.java +++ b/application/src/test/java/org/thingsboard/server/service/subscription/TbEntityDataSubCtxTest.java @@ -23,7 +23,7 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.test.util.ReflectionTestUtils; -import org.testcontainers.shaded.org.apache.commons.lang3.RandomUtils; +import org.apache.commons.lang3.RandomUtils; import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.kv.BasicTsKvEntry; @@ -55,10 +55,10 @@ public class TbEntityDataSubCtxTest { private final DeviceId deviceId = new DeviceId(UUID.randomUUID()); - private final Integer cmdId = RandomUtils.nextInt(); - private final Integer subscriptionId = RandomUtils.nextInt(); - private final String serviceId = RandomStringUtils.randomAlphanumeric(10); - private final String sessionId = RandomStringUtils.randomAlphanumeric(10); + private final Integer cmdId = RandomUtils.secure().randomInt(); + private final Integer subscriptionId = RandomUtils.secure().randomInt(); + private final String serviceId = RandomStringUtils.secure().nextAlphanumeric(10); + private final String sessionId = RandomStringUtils.secure().nextAlphanumeric(10); private final int maxEntitiesPerDataSubscription = 100; diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/EntityType.java b/common/data/src/main/java/org/thingsboard/server/common/data/EntityType.java index deb0f8c66e..3ad1e3f25b 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/EntityType.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/EntityType.java @@ -23,6 +23,8 @@ import java.util.Arrays; import java.util.EnumSet; import java.util.List; +import static org.thingsboard.server.common.data.StringUtils.removeStart; + public enum EntityType { TENANT(1), diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/util/TemplateUtils.java b/common/data/src/main/java/org/thingsboard/server/common/data/util/TemplateUtils.java index beaec13748..d740a065ce 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/util/TemplateUtils.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/util/TemplateUtils.java @@ -23,7 +23,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import static com.google.common.base.Strings.nullToEmpty; -import static org.apache.commons.lang3.StringUtils.removeStart; +import static org.thingsboard.server.common.data.StringUtils.removeStart; public class TemplateUtils { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/util/TypeCastUtil.java b/common/data/src/main/java/org/thingsboard/server/common/data/util/TypeCastUtil.java index 9fec33b482..3c9f143d39 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/util/TypeCastUtil.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/util/TypeCastUtil.java @@ -69,7 +69,7 @@ public class TypeCastUtil { } private static boolean isNumber(String value) { - return NumberUtils.isNumber(value.replace(',', '.')); + return NumberUtils.isCreatable(value.replace(',', '.')); } private static boolean isSimpleDouble(String valueAsString) { diff --git a/common/version-control/src/main/java/org/thingsboard/server/service/sync/vc/GitRepository.java b/common/version-control/src/main/java/org/thingsboard/server/service/sync/vc/GitRepository.java index 3602dd55ca..15dd615111 100644 --- a/common/version-control/src/main/java/org/thingsboard/server/service/sync/vc/GitRepository.java +++ b/common/version-control/src/main/java/org/thingsboard/server/service/sync/vc/GitRepository.java @@ -99,6 +99,7 @@ import static org.eclipse.jgit.transport.RemoteRefUpdate.Status.REJECTED_NODELET import static org.eclipse.jgit.transport.RemoteRefUpdate.Status.REJECTED_NONFASTFORWARD; import static org.eclipse.jgit.transport.RemoteRefUpdate.Status.REJECTED_OTHER_REASON; import static org.eclipse.jgit.transport.RemoteRefUpdate.Status.REJECTED_REMOTE_CHANGED; +import static org.thingsboard.server.common.data.StringUtils.removeStart; @Slf4j public class GitRepository { @@ -448,7 +449,7 @@ public class GitRepository { private BranchInfo toBranchInfo(Ref ref) { String name = org.eclipse.jgit.lib.Repository.shortenRefName(ref.getName()); - String branchName = StringUtils.removeStart(name, "origin/"); + String branchName = removeStart(name, "origin/"); boolean isDefault = this.headId != null && this.headId.equals(ref.getObjectId()); return new BranchInfo(branchName, isDefault); } @@ -465,7 +466,7 @@ public class GitRepository { private ObjectId resolve(String rev) throws IOException { if (settings.isLocalOnly()) { - rev = StringUtils.removeStart(rev, "origin/"); + rev = removeStart(rev, "origin/"); } ObjectId result = git.getRepository().resolve(rev); if (result == null) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/resource/BaseImageService.java b/dao/src/main/java/org/thingsboard/server/dao/resource/BaseImageService.java index 11bbe797cf..18023f653c 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/resource/BaseImageService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/resource/BaseImageService.java @@ -173,7 +173,7 @@ public class BaseImageService extends BaseResourceService implements ImageServic } private String generatePublicResourceKey() { - return RandomStringUtils.randomAlphanumeric(32); + return RandomStringUtils.secure().nextAlphanumeric(32); } @Override diff --git a/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java b/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java index 432329a621..d96a7516c2 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java @@ -74,6 +74,7 @@ import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.UUID; @@ -82,6 +83,7 @@ import java.util.function.UnaryOperator; import static com.google.common.util.concurrent.MoreExecutors.directExecutor; import static org.thingsboard.server.common.data.StringUtils.isNotEmpty; +import static org.thingsboard.server.common.data.StringUtils.removeStart; import static org.thingsboard.server.dao.device.DeviceServiceImpl.INCORRECT_TENANT_ID; import static org.thingsboard.server.dao.service.Validator.validateId; @@ -589,7 +591,7 @@ public class BaseResourceService extends AbstractCachedEntityService { Asset asset = new Asset(); asset.setTenantId(anotherTenantId); - asset.setName(RandomStringUtils.randomAlphabetic(10)); + asset.setName(RandomStringUtils.secure().nextAlphabetic(10)); asset.setType("default"); assetService.saveAsset(asset); }); diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmCommentDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmCommentDaoTest.java index b207672004..72503c245b 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmCommentDaoTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmCommentDaoTest.java @@ -18,7 +18,7 @@ package org.thingsboard.server.dao.sql.alarm; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.alarm.Alarm; import org.thingsboard.server.common.data.alarm.AlarmComment; @@ -84,7 +84,7 @@ public class JpaAlarmCommentDaoTest extends AbstractJpaDaoTest { alarmComment.setAlarmId(new AlarmId(alarmId)); alarmComment.setUserId(new UserId(userId)); alarmComment.setType(type); - alarmComment.setComment(JacksonUtil.newObjectNode().put("text", RandomStringUtils.randomAlphanumeric(10))); + alarmComment.setComment(JacksonUtil.newObjectNode().put("text", RandomStringUtils.secure().nextAlphanumeric(10))); alarmCommentDao.save(TenantId.fromUUID(UUID.randomUUID()), alarmComment); } } diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/user/JpaUserSettingsDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/user/JpaUserSettingsDaoTest.java index 8c259a4965..bbe8940347 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/sql/user/JpaUserSettingsDaoTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/sql/user/JpaUserSettingsDaoTest.java @@ -21,7 +21,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.User; import org.thingsboard.server.common.data.id.CustomerId; @@ -112,7 +112,7 @@ public class JpaUserSettingsDaoTest extends AbstractJpaDaoTest { private UserSettings createUserSettings(UserId userId) { UserSettings userSettings = new UserSettings(); userSettings.setType(UserSettingsType.GENERAL); - userSettings.setSettings(JacksonUtil.newObjectNode().put("text", RandomStringUtils.randomAlphanumeric(10))); + userSettings.setSettings(JacksonUtil.newObjectNode().put("text", RandomStringUtils.secure().nextAlphanumeric(10))); userSettings.setUserId(userId); return userSettingsDao.save(SYSTEM_TENANT_ID, userSettings); } diff --git a/dao/src/test/java/org/thingsboard/server/dao/sqlts/SqlTimeseriesLatestDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sqlts/SqlTimeseriesLatestDaoTest.java index 02abf1e5fd..c67ef1bfb0 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/sqlts/SqlTimeseriesLatestDaoTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/sqlts/SqlTimeseriesLatestDaoTest.java @@ -171,7 +171,7 @@ public class SqlTimeseriesLatestDaoTest extends AbstractServiceTest { } private TsKvEntry createEntry(String key, long ts) { - return new BasicTsKvEntry(ts, new StringDataEntry(key, RandomStringUtils.random(10))); + return new BasicTsKvEntry(ts, new StringDataEntry(key, RandomStringUtils.secure().next(10))); } private void equalsIgnoreVersion(TsKvEntry expected, TsKvEntry actual) { diff --git a/monitoring/src/main/java/org/thingsboard/monitoring/client/WsClient.java b/monitoring/src/main/java/org/thingsboard/monitoring/client/WsClient.java index 7e2f669f6b..6a2c7f6d56 100644 --- a/monitoring/src/main/java/org/thingsboard/monitoring/client/WsClient.java +++ b/monitoring/src/main/java/org/thingsboard/monitoring/client/WsClient.java @@ -124,7 +124,7 @@ public class WsClient extends WebSocketClient implements AutoCloseable { public WsClient subscribeForTelemetry(List devices, List keys) { EntityDataCmd cmd = new EntityDataCmd(); - cmd.setCmdId(RandomUtils.nextInt(0, 1000)); + cmd.setCmdId(RandomUtils.secure().randomInt(0, 1000)); EntityListFilter devicesFilter = new EntityListFilter(); devicesFilter.setEntityType(EntityType.DEVICE); diff --git a/monitoring/src/main/java/org/thingsboard/monitoring/service/MonitoringEntityService.java b/monitoring/src/main/java/org/thingsboard/monitoring/service/MonitoringEntityService.java index d2c275945a..3469606943 100644 --- a/monitoring/src/main/java/org/thingsboard/monitoring/service/MonitoringEntityService.java +++ b/monitoring/src/main/java/org/thingsboard/monitoring/service/MonitoringEntityService.java @@ -180,7 +180,7 @@ public class MonitoringEntityService { device.setName(deviceName); DeviceCredentials credentials = new DeviceCredentials(); - credentials.setCredentialsId(RandomStringUtils.randomAlphabetic(20)); + credentials.setCredentialsId(RandomStringUtils.secure().nextAlphabetic(20)); DeviceData deviceData = new DeviceData(); deviceData.setConfiguration(new DefaultDeviceConfiguration()); diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/MqttGatewayClientTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/MqttGatewayClientTest.java index bb464ee52e..c9fa76cc9a 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/MqttGatewayClientTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/MqttGatewayClientTest.java @@ -29,7 +29,7 @@ import io.netty.handler.codec.mqtt.MqttQoS; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; -import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -400,7 +400,7 @@ public class MqttGatewayClientTest extends AbstractContainerTest { TimeUnit.SECONDS.sleep(30); } - String deviceName = "mqtt_device" + RandomStringUtils.randomAlphabetic(5); + String deviceName = "mqtt_device" + RandomStringUtils.secure().nextAlphabetic(5); mqttClient.publish("v1/gateway/connect", Unpooled.wrappedBuffer(createGatewayConnectPayload(deviceName).toString().getBytes()), MqttQoS.AT_LEAST_ONCE).get(); if (timeoutMultiplier > 1) { diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/lwm2m/AbstractLwm2mClientTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/lwm2m/AbstractLwm2mClientTest.java index c5673ae667..ecd062a15e 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/lwm2m/AbstractLwm2mClientTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/lwm2m/AbstractLwm2mClientTest.java @@ -25,7 +25,7 @@ import org.apache.commons.io.IOUtils; import org.eclipse.leshan.client.object.Security; import org.eclipse.leshan.core.ResponseCode; import org.eclipse.leshan.core.util.Hex; -import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; import org.testng.Assert; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.common.util.ThingsBoardThreadFactory; @@ -111,7 +111,7 @@ public class AbstractLwm2mClientTest extends AbstractContainerTest { public final Set expectedStatusesRegistrationLwm2mSuccess = new HashSet<>(Arrays.asList(ON_INIT, ON_REGISTRATION_STARTED, ON_REGISTRATION_SUCCESS)); public void createLwm2mDevicesForConnectNoSec(String name, Lwm2mDevicesForTest devicesForTest) throws Exception { - String clientEndpoint = name + "-" + RandomStringUtils.randomAlphanumeric(7); + String clientEndpoint = name + "-" + RandomStringUtils.secure().nextAlphanumeric(7); LwM2MDeviceCredentials deviceCredentials = getDeviceCredentialsNoSec(createNoSecClientCredentials(clientEndpoint)); Device lwM2MDeviceTest = createDeviceWithCredentials(deviceCredentials, clientEndpoint, devicesForTest.getLwm2mDeviceProfile().getId()); LwM2MTestClient lwM2MTestClient = createNewClient(SECURITY_NO_SEC, clientEndpoint, executor); @@ -120,7 +120,7 @@ public class AbstractLwm2mClientTest extends AbstractContainerTest { } public void createLwm2mDevicesForConnectPsk(Lwm2mDevicesForTest devicesForTest) throws Exception { - String clientEndpoint = CLIENT_ENDPOINT_PSK + "-" + RandomStringUtils.randomAlphanumeric(7); + String clientEndpoint = CLIENT_ENDPOINT_PSK + "-" + RandomStringUtils.secure().nextAlphanumeric(7); String identity = CLIENT_PSK_IDENTITY; String keyPsk = CLIENT_PSK_KEY; PSKClientCredential clientCredentials = new PSKClientCredential(); diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/lwm2m/rpc/Lwm2mObserveCompositeTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/lwm2m/rpc/Lwm2mObserveCompositeTest.java index 4ffc6f4c4f..2d77e43cd2 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/lwm2m/rpc/Lwm2mObserveCompositeTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/lwm2m/rpc/Lwm2mObserveCompositeTest.java @@ -15,7 +15,7 @@ */ package org.thingsboard.server.msa.connectivity.lwm2m.rpc; -import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -36,7 +36,7 @@ public class Lwm2mObserveCompositeTest extends AbstractLwm2mClientTest { @BeforeMethod public void setUp() throws Exception { testRestClient.login(TENANT_EMAIL, TENANT_PASSWORD); - this.lwm2mDevicesForTest = new Lwm2mDevicesForTest(initTest(name + "-profile" + RandomStringUtils.randomAlphanumeric(7))); + this.lwm2mDevicesForTest = new Lwm2mDevicesForTest(initTest(name + "-profile" + RandomStringUtils.secure().nextAlphanumeric(7))); } @AfterMethod @@ -46,7 +46,7 @@ public class Lwm2mObserveCompositeTest extends AbstractLwm2mClientTest { @Test public void testObserveResource_Update_AfterUpdateRegistration() throws Exception { - createLwm2mDevicesForConnectNoSec( name + "-" + RandomStringUtils.randomAlphanumeric(7), this.lwm2mDevicesForTest ); + createLwm2mDevicesForConnectNoSec( name + "-" + RandomStringUtils.secure().nextAlphanumeric(7), this.lwm2mDevicesForTest ); observeCompositeResource_Update_AfterUpdateRegistration_test(this.lwm2mDevicesForTest.getLwM2MTestClient(), this.lwm2mDevicesForTest.getLwM2MDeviceTest().getId()); } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/lwm2m/rpc/Lwm2mObserveTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/lwm2m/rpc/Lwm2mObserveTest.java index f47c328077..06b033391d 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/lwm2m/rpc/Lwm2mObserveTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/lwm2m/rpc/Lwm2mObserveTest.java @@ -15,7 +15,7 @@ */ package org.thingsboard.server.msa.connectivity.lwm2m.rpc; -import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -36,7 +36,7 @@ public class Lwm2mObserveTest extends AbstractLwm2mClientTest { @BeforeMethod public void setUp() throws Exception { testRestClient.login(TENANT_EMAIL, TENANT_PASSWORD); - this.lwm2mDevicesForTest = new Lwm2mDevicesForTest(initTest(name + "-profile" + RandomStringUtils.randomAlphanumeric(7))); + this.lwm2mDevicesForTest = new Lwm2mDevicesForTest(initTest(name + "-profile" + RandomStringUtils.secure().nextAlphanumeric(7))); } @AfterMethod @@ -46,7 +46,7 @@ public class Lwm2mObserveTest extends AbstractLwm2mClientTest { @Test public void testObserveResource_Update_AfterUpdateRegistration() throws Exception { - createLwm2mDevicesForConnectNoSec( name + "-" + RandomStringUtils.randomAlphanumeric(7), this.lwm2mDevicesForTest ); + createLwm2mDevicesForConnectNoSec( name + "-" + RandomStringUtils.secure().nextAlphanumeric(7), this.lwm2mDevicesForTest ); observeResource_Update_AfterUpdateRegistration_test(this.lwm2mDevicesForTest.getLwM2MTestClient(), this.lwm2mDevicesForTest.getLwM2MDeviceTest().getId()); } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/lwm2m/security/Lwm2mClientNoSecTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/lwm2m/security/Lwm2mClientNoSecTest.java index 2413094946..e579127a9c 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/lwm2m/security/Lwm2mClientNoSecTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/lwm2m/security/Lwm2mClientNoSecTest.java @@ -15,7 +15,7 @@ */ package org.thingsboard.server.msa.connectivity.lwm2m.security; -import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -34,7 +34,7 @@ public class Lwm2mClientNoSecTest extends AbstractLwm2mClientTest { @BeforeMethod public void setUp() throws Exception { testRestClient.login(TENANT_EMAIL, TENANT_PASSWORD); - this.lwm2mDevicesForTest = new Lwm2mDevicesForTest(initTest("lwm2m-NoSec-profile" + "-" + RandomStringUtils.randomAlphanumeric(7))); + this.lwm2mDevicesForTest = new Lwm2mDevicesForTest(initTest("lwm2m-NoSec-profile" + "-" + RandomStringUtils.secure().nextAlphanumeric(7))); } @AfterMethod diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/lwm2m/security/Lwm2mClientPskTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/lwm2m/security/Lwm2mClientPskTest.java index 268787794b..97712d96c0 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/lwm2m/security/Lwm2mClientPskTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/lwm2m/security/Lwm2mClientPskTest.java @@ -15,7 +15,7 @@ */ package org.thingsboard.server.msa.connectivity.lwm2m.security; -import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -33,7 +33,7 @@ public class Lwm2mClientPskTest extends AbstractLwm2mClientTest { @BeforeMethod public void setUp() throws Exception { testRestClient.login(TENANT_EMAIL, TENANT_PASSWORD); - this.lwm2mDevicesForTest = new Lwm2mDevicesForTest(initTest("lwm2m-Psk-profile" + "-" + RandomStringUtils.randomAlphanumeric(7))); + this.lwm2mDevicesForTest = new Lwm2mDevicesForTest(initTest("lwm2m-Psk-profile" + "-" + RandomStringUtils.secure().nextAlphanumeric(7))); } @AfterMethod diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/edqs/EdqsEntityDataQueryTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/edqs/EdqsEntityDataQueryTest.java index 2c266bb416..5bfd866056 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/edqs/EdqsEntityDataQueryTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/edqs/EdqsEntityDataQueryTest.java @@ -16,7 +16,7 @@ package org.thingsboard.server.msa.edqs; import com.fasterxml.jackson.databind.node.ObjectNode; -import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; @@ -68,7 +68,7 @@ public class EdqsEntityDataQueryTest extends AbstractContainerTest { private UserId customer2UserId; private final List tenantDevices = new ArrayList<>(); private final List tenant2Devices = new ArrayList<>(); - private final String deviceProfile = "LoRa-" + RandomStringUtils.randomAlphabetic(10); + private final String deviceProfile = "LoRa-" + RandomStringUtils.secure().nextAlphabetic(10); @BeforeClass public void beforeClass() throws Exception { @@ -188,7 +188,7 @@ public class EdqsEntityDataQueryTest extends AbstractContainerTest { device.setLabel("testLabel" + (int) (Math.random() * 1000)); //TO make sure devices have different created time Thread.sleep(1); - String token = RandomStringUtils.randomAlphabetic(10); + String token = RandomStringUtils.secure().nextAlphabetic(10); Device saved = testRestClient.postDevice(token, device); tenantDevices.add(saved); diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/prototypes/DevicePrototypes.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/prototypes/DevicePrototypes.java index 3ba78b0171..c0f6af9443 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/prototypes/DevicePrototypes.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/prototypes/DevicePrototypes.java @@ -16,14 +16,14 @@ package org.thingsboard.server.msa.prototypes; import com.fasterxml.jackson.databind.JsonNode; -import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.Device; public class DevicePrototypes { public static Device defaultDevicePrototype(String name){ Device device = new Device(); - device.setName(name + RandomStringUtils.randomAlphanumeric(7)); + device.setName(name + RandomStringUtils.secure().nextAlphanumeric(7)); device.setType("DEFAULT"); return device; } @@ -32,7 +32,7 @@ public class DevicePrototypes { String isGateway = "{\"gateway\":true}"; JsonNode additionalInfo = JacksonUtil.toJsonNode(isGateway); Device gatewayDeviceTemplate = new Device(); - gatewayDeviceTemplate.setName("mqtt_gateway_" + RandomStringUtils.randomAlphanumeric(5)); + gatewayDeviceTemplate.setName("mqtt_gateway_" + RandomStringUtils.secure().nextAlphanumeric(5)); gatewayDeviceTemplate.setType("gateway"); gatewayDeviceTemplate.setAdditionalInfo(additionalInfo); return gatewayDeviceTemplate; diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CreateWidgetPopupHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CreateWidgetPopupHelper.java index 9741ae9da6..66d7788073 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CreateWidgetPopupHelper.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CreateWidgetPopupHelper.java @@ -17,7 +17,7 @@ package org.thingsboard.server.msa.ui.pages; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; -import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; public class CreateWidgetPopupHelper extends CreateWidgetPopupElements { public CreateWidgetPopupHelper(WebDriver driver) { @@ -25,7 +25,7 @@ public class CreateWidgetPopupHelper extends CreateWidgetPopupElements { } public void goToCreateEntityAliasPopup(String aliasName) { - entityAlias().sendKeys(aliasName + RandomStringUtils.randomAlphanumeric(7)); + entityAlias().sendKeys(aliasName + RandomStringUtils.secure().nextAlphanumeric(7)); createNewAliasBtn().click(); } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/utils/EntityPrototypes.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/utils/EntityPrototypes.java index d6e5f12c1b..d80ea5551a 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/utils/EntityPrototypes.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/utils/EntityPrototypes.java @@ -15,7 +15,7 @@ */ package org.thingsboard.server.msa.ui.utils; -import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.Dashboard; @@ -212,14 +212,14 @@ public class EntityPrototypes { public static Device defaultDevicePrototype(String name) { Device device = new Device(); - device.setName(name + RandomStringUtils.randomAlphanumeric(7)); + device.setName(name + RandomStringUtils.secure().nextAlphanumeric(7)); device.setType("DEFAULT"); return device; } public static Device defaultDevicePrototype(String name, CustomerId id) { Device device = new Device(); - device.setName(name + RandomStringUtils.randomAlphanumeric(7)); + device.setName(name + RandomStringUtils.secure().nextAlphanumeric(7)); device.setCustomerId(id); device.setType("DEFAULT"); return device; @@ -227,7 +227,7 @@ public class EntityPrototypes { public static Device defaultDevicePrototype(String name, String description) { Device device = new Device(); - device.setName(name + RandomStringUtils.randomAlphanumeric(7)); + device.setName(name + RandomStringUtils.secure().nextAlphanumeric(7)); device.setType("DEFAULT"); device.setAdditionalInfo(JacksonUtil.newObjectNode().put("description", description)); return device; @@ -235,7 +235,7 @@ public class EntityPrototypes { public static Device defaultDevicePrototype(String name, String description, String label) { Device device = new Device(); - device.setName(name + RandomStringUtils.randomAlphanumeric(7)); + device.setName(name + RandomStringUtils.secure().nextAlphanumeric(7)); device.setType("DEFAULT"); device.setAdditionalInfo(JacksonUtil.newObjectNode().put("description", description)); device.setLabel(label); @@ -244,7 +244,7 @@ public class EntityPrototypes { public static Device defaultDevicePrototype(String name, boolean gateway) { Device device = new Device(); - device.setName(name + RandomStringUtils.randomAlphanumeric(7)); + device.setName(name + RandomStringUtils.secure().nextAlphanumeric(7)); device.setType("DEFAULT"); device.setAdditionalInfo(JacksonUtil.newObjectNode().put("gateway", gateway)); return device; @@ -252,7 +252,7 @@ public class EntityPrototypes { public static Device defaultDevicePrototype(String name, boolean gateway, boolean overwriteActivityTime) { Device device = new Device(); - device.setName(name + RandomStringUtils.randomAlphanumeric(7)); + device.setName(name + RandomStringUtils.secure().nextAlphanumeric(7)); device.setType("DEFAULT"); device.setAdditionalInfo(JacksonUtil.newObjectNode() .put("gateway", gateway) @@ -262,7 +262,7 @@ public class EntityPrototypes { public static Device defaultDevicePrototype(String name, DeviceProfileId deviceProfileId) { Device device = new Device(); - device.setName(name + RandomStringUtils.randomAlphanumeric(7)); + device.setName(name + RandomStringUtils.secure().nextAlphanumeric(7)); device.setType("DEFAULT"); device.setDeviceProfileId(deviceProfileId); return device; @@ -270,7 +270,7 @@ public class EntityPrototypes { public static Asset defaultAssetPrototype(String name, CustomerId id) { Asset asset = new Asset(); - asset.setName(name + RandomStringUtils.randomAlphanumeric(7)); + asset.setName(name + RandomStringUtils.secure().nextAlphanumeric(7)); asset.setCustomerId(id); asset.setType("DEFAULT"); return asset; @@ -278,15 +278,15 @@ public class EntityPrototypes { public static EntityView defaultEntityViewPrototype(String name, String type, String entityType) { EntityView entityView = new EntityView(); - entityView.setName(name + RandomStringUtils.randomAlphanumeric(7)); - entityView.setType(type + RandomStringUtils.randomAlphanumeric(7)); + entityView.setName(name + RandomStringUtils.secure().nextAlphanumeric(7)); + entityView.setType(type + RandomStringUtils.secure().nextAlphanumeric(7)); entityView.setAdditionalInfo(JacksonUtil.newObjectNode().put("entityType", entityType)); return entityView; } public static Dashboard defaultDashboardPrototype(String title) { Dashboard dashboard = new Dashboard(); - dashboard.setTitle(title + RandomStringUtils.randomAlphanumeric(7)); + dashboard.setTitle(title + RandomStringUtils.secure().nextAlphanumeric(7)); return dashboard; } } diff --git a/tools/src/main/java/org/thingsboard/client/tools/migrator/PgCaMigrator.java b/tools/src/main/java/org/thingsboard/client/tools/migrator/PgCaMigrator.java index b88012c00e..2ef202dc9f 100644 --- a/tools/src/main/java/org/thingsboard/client/tools/migrator/PgCaMigrator.java +++ b/tools/src/main/java/org/thingsboard/client/tools/migrator/PgCaMigrator.java @@ -249,7 +249,7 @@ public class PgCaMigrator { private List castToNumericIfPossible(List values) { try { - if (values.get(6) != null && NumberUtils.isNumber(values.get(6).toString())) { + if (values.get(6) != null && NumberUtils.isCreatable(values.get(6).toString())) { Double casted = NumberUtils.createDouble(values.get(6).toString()); List numeric = Lists.newArrayList(); numeric.addAll(values); From 90fc84ea31bccb651cce4acf72608f96a248cc64 Mon Sep 17 00:00:00 2001 From: Oleksandra Matviienko Date: Fri, 24 Apr 2026 23:18:47 +0200 Subject: [PATCH 05/12] Technical cleanup of TenantId construction in tests and production code --- .../discovery/HashPartitionServiceTest.java | 6 +-- .../cf/DefaultCalculatedFieldCacheTest.java | 52 +++++++++---------- .../provision/DeviceProvisionServiceTest.java | 2 +- .../DefaultTbAssetProfileCacheTest.java | 14 ++--- .../DefaultTbDeviceProfileCacheTest.java | 14 ++--- .../queue/DefaultTbClusterServiceTest.java | 4 +- .../TbEntityLocalSubsInfoTest.java | 2 +- .../ws/DefaultWebSocketServiceTest.java | 2 +- .../session/GatewaySessionHandlerTest.java | 2 +- .../dao/service/TbCacheSerializationTest.java | 2 +- .../attributes/BaseAttributesServiceTest.java | 16 +++--- .../service/event/BaseEventServiceTest.java | 2 +- .../dao/sql/event/JpaBaseEventDaoTest.java | 2 +- .../query/DefaultQueryLogComponentTest.java | 2 +- .../dao/sql/tenant/JpaTenantDaoTest.java | 2 +- .../sql/widget/JpaWidgetsBundleDaoTest.java | 4 +- .../action/TbAssignToCustomerNodeTest.java | 2 +- .../action/TbCreateRelationNodeTest.java | 2 +- .../action/TbDeleteRelationNodeTest.java | 2 +- .../TbUnassignFromCustomerNodeTest.java | 2 +- .../filter/TbAssetTypeSwitchNodeTest.java | 2 +- .../filter/TbCheckAlarmStatusNodeTest.java | 2 +- .../filter/TbCheckRelationNodeTest.java | 2 +- .../filter/TbDeviceTypeSwitchNodeTest.java | 2 +- .../engine/flow/TbRuleChainInputNodeTest.java | 2 +- .../TbGetCustomerDetailsNodeTest.java | 2 +- .../metadata/TbGetDeviceAttrNodeTest.java | 2 +- .../TbGetOriginatorFieldsNodeTest.java | 2 +- .../TbGetRelatedAttributeNodeTest.java | 4 +- .../TbGetTenantAttributeNodeTest.java | 2 +- .../metadata/TbGetTenantDetailsNodeTest.java | 2 +- .../util/EntitiesFieldsAsyncLoaderTest.java | 4 +- ...ntitiesRelatedDeviceIdAsyncLoaderTest.java | 2 +- ...ntitiesRelatedEntityIdAsyncLoaderTest.java | 2 +- 34 files changed, 84 insertions(+), 84 deletions(-) diff --git a/application/src/test/java/org/thingsboard/server/queue/discovery/HashPartitionServiceTest.java b/application/src/test/java/org/thingsboard/server/queue/discovery/HashPartitionServiceTest.java index b1d59c031a..727a9c1aa5 100644 --- a/application/src/test/java/org/thingsboard/server/queue/discovery/HashPartitionServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/queue/discovery/HashPartitionServiceTest.java @@ -149,7 +149,7 @@ public class HashPartitionServiceTest { Random random = new Random(); long ts = new SimpleDateFormat("dd-MM-yyyy").parse("06-12-2016").getTime() - TimeUnit.DAYS.toMillis(tenantCount); for (int tenantIndex = 0; tenantIndex < tenantCount; tenantIndex++) { - TenantId tenantId = new TenantId(Uuids.startOf(ts)); + TenantId tenantId = TenantId.fromUUID(Uuids.startOf(ts)); ts += TimeUnit.DAYS.toMillis(1) + random.nextInt(1000); for (int queueIndex = 0; queueIndex < queueCount; queueIndex++) { QueueKey queueKey = new QueueKey(ServiceType.TB_RULE_ENGINE, "queue" + queueIndex, tenantId); @@ -190,7 +190,7 @@ public class HashPartitionServiceTest { Map tenants = new HashMap<>(); for (TenantProfileId tenantProfileId : isolatedTenantProfiles) { for (int i = 0; i < tenantsCountPerProfile; i++) { - tenants.put(new TenantId(UUID.randomUUID()), tenantProfileId); + tenants.put(TenantId.fromUUID(UUID.randomUUID()), tenantProfileId); } } @@ -299,7 +299,7 @@ public class HashPartitionServiceTest { Queue systemQueue = createQueue(TenantId.SYS_TENANT_ID, 10); queues.add(systemQueue); - TenantId tenantId = new TenantId(UUID.randomUUID()); + TenantId tenantId = TenantId.fromUUID(UUID.randomUUID()); mockRoutingInfo(tenantId, tenantProfileId, false); // not isolated yet mockQueues(queues); diff --git a/application/src/test/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldCacheTest.java b/application/src/test/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldCacheTest.java index 3ee229e7a0..853c7f6127 100644 --- a/application/src/test/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldCacheTest.java +++ b/application/src/test/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldCacheTest.java @@ -92,8 +92,8 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_tenantDeleted_evictsAllTenantCfsFromAllMaps() { - TenantId tenant1 = new TenantId(UUID.randomUUID()); - TenantId tenant2 = new TenantId(UUID.randomUUID()); + TenantId tenant1 = TenantId.fromUUID(UUID.randomUUID()); + TenantId tenant2 = TenantId.fromUUID(UUID.randomUUID()); DeviceId device1 = new DeviceId(UUID.randomUUID()); DeviceId device2 = new DeviceId(UUID.randomUUID()); @@ -110,7 +110,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_tenantDeleted_evictsOwnerEntities() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); DeviceId device = new DeviceId(UUID.randomUUID()); stubDeviceOwner(tenant, device, tenant); @@ -125,7 +125,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_tenantDeleted_removesLinksToLinkedEntities() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); DeviceId cfEntity = new DeviceId(UUID.randomUUID()); DeviceId linkedDevice = new DeviceId(UUID.randomUUID()); @@ -139,7 +139,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_tenantUpdated_doesNotEvictCfs() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); DeviceId device = new DeviceId(UUID.randomUUID()); CalculatedField cf = addCfToCache(tenant, device); @@ -152,7 +152,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_deviceDeleted_evictsCfsForThatDevice() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); DeviceId device = new DeviceId(UUID.randomUUID()); CalculatedField cf = addCfToCache(tenant, device); @@ -164,7 +164,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_deviceDeleted_removesLinksForLinkedEntities() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); DeviceId device = new DeviceId(UUID.randomUUID()); DeviceId linkedDevice = new DeviceId(UUID.randomUUID()); addCfToCache(tenant, device, linkedDevice); @@ -176,7 +176,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_deviceDeleted_evictsDeviceFromOwnerEntities() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); CustomerId customer = new CustomerId(UUID.randomUUID()); DeviceId device = new DeviceId(UUID.randomUUID()); stubDeviceOwner(tenant, device, customer); @@ -191,7 +191,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_assetDeleted_evictsCfsForThatAsset() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); AssetId asset = new AssetId(UUID.randomUUID()); CalculatedField cf = addCfToCache(tenant, asset); @@ -203,7 +203,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_deviceCreated_addsDeviceToOwnerEntities() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); CustomerId customer = new CustomerId(UUID.randomUUID()); DeviceId device = new DeviceId(UUID.randomUUID()); stubDeviceOwner(tenant, device, customer); @@ -217,7 +217,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_customerDeleted_evictsCustomerOwnerEntries() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); CustomerId customer = new CustomerId(UUID.randomUUID()); DeviceId device = new DeviceId(UUID.randomUUID()); stubDeviceOwner(tenant, device, customer); @@ -235,7 +235,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_deviceProfileDeleted_evictsCfsForThatProfile() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); DeviceProfileId profileId = new DeviceProfileId(UUID.randomUUID()); CalculatedField cf = addCfToCache(tenant, profileId); @@ -247,7 +247,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_deviceProfileDeleted_removesLinksForLinkedEntities() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); DeviceProfileId profileId = new DeviceProfileId(UUID.randomUUID()); DeviceId linkedDevice = new DeviceId(UUID.randomUUID()); addCfToCache(tenant, profileId, linkedDevice); @@ -259,7 +259,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_deviceProfileDeleted_doesNotEvictOtherProfilesCfs() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); DeviceProfileId profile1 = new DeviceProfileId(UUID.randomUUID()); DeviceProfileId profile2 = new DeviceProfileId(UUID.randomUUID()); CalculatedField cf1 = addCfToCache(tenant, profile1); @@ -275,7 +275,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_deviceProfileUpdated_doesNotEvictCfs() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); DeviceProfileId profileId = new DeviceProfileId(UUID.randomUUID()); CalculatedField cf = addCfToCache(tenant, profileId); @@ -287,7 +287,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_assetProfileDeleted_evictsCfsForThatProfile() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); AssetProfileId profileId = new AssetProfileId(UUID.randomUUID()); CalculatedField cf = addCfToCache(tenant, profileId); @@ -299,7 +299,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_assetProfileDeleted_removesLinksForLinkedEntities() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); AssetProfileId profileId = new AssetProfileId(UUID.randomUUID()); AssetId linkedAsset = new AssetId(UUID.randomUUID()); addCfToCache(tenant, profileId, linkedAsset); @@ -311,7 +311,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_assetProfileDeleted_doesNotEvictOtherProfilesCfs() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); AssetProfileId profile1 = new AssetProfileId(UUID.randomUUID()); AssetProfileId profile2 = new AssetProfileId(UUID.randomUUID()); CalculatedField cf1 = addCfToCache(tenant, profile1); @@ -327,7 +327,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_assetProfileUpdated_doesNotEvictCfs() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); AssetProfileId profileId = new AssetProfileId(UUID.randomUUID()); CalculatedField cf = addCfToCache(tenant, profileId); @@ -341,7 +341,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_calculatedFieldCreated_addsCfToCache() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); DeviceId device = new DeviceId(UUID.randomUUID()); CalculatedFieldId cfId = new CalculatedFieldId(UUID.randomUUID()); CalculatedField cf = buildCalculatedField(cfId, tenant, device, simpleCfConfig()); @@ -355,7 +355,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_calculatedFieldDeleted_evictsCfFromCache() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); DeviceId device = new DeviceId(UUID.randomUUID()); CalculatedField cf = addCfToCache(tenant, device); @@ -367,7 +367,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_calculatedFieldUpdated_refreshesCfInCache() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); DeviceId device = new DeviceId(UUID.randomUUID()); CalculatedField cf = addCfToCache(tenant, device); @@ -384,7 +384,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void evictOwner_customerDeleted_recursivelyEvictsDevicesOwnedByThatCustomer() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); CustomerId customer = new CustomerId(UUID.randomUUID()); DeviceId device = new DeviceId(UUID.randomUUID()); @@ -406,7 +406,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void evictOwner_tenantDeleted_recursivelyEvictsCustomerAndItsOwnedDevices() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); CustomerId customer = new CustomerId(UUID.randomUUID()); DeviceId device = new DeviceId(UUID.randomUUID()); @@ -431,7 +431,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_tenantProfileUpdated_callsHandleTenantProfileUpdate() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); TenantProfileId profileId = new TenantProfileId(UUID.randomUUID()); DefaultCalculatedFieldCache spyCache = spy(cache); @@ -442,7 +442,7 @@ public class DefaultCalculatedFieldCacheTest { @Test public void onComponentLifecycleEvent_tenantProfileDeleted_doesNotCallHandleTenantProfileUpdate() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); TenantProfileId profileId = new TenantProfileId(UUID.randomUUID()); DefaultCalculatedFieldCache spyCache = spy(cache); diff --git a/application/src/test/java/org/thingsboard/server/service/device/provision/DeviceProvisionServiceTest.java b/application/src/test/java/org/thingsboard/server/service/device/provision/DeviceProvisionServiceTest.java index 4f2eaa5147..839fbd9557 100644 --- a/application/src/test/java/org/thingsboard/server/service/device/provision/DeviceProvisionServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/service/device/provision/DeviceProvisionServiceTest.java @@ -235,7 +235,7 @@ public class DeviceProvisionServiceTest { private Tenant createTenant() { Tenant tenant = new Tenant(); - tenant.setId(new TenantId(UUID.randomUUID())); + tenant.setId(TenantId.fromUUID(UUID.randomUUID())); return tenant; } diff --git a/application/src/test/java/org/thingsboard/server/service/profile/DefaultTbAssetProfileCacheTest.java b/application/src/test/java/org/thingsboard/server/service/profile/DefaultTbAssetProfileCacheTest.java index f9b8d428d7..666ae37c6e 100644 --- a/application/src/test/java/org/thingsboard/server/service/profile/DefaultTbAssetProfileCacheTest.java +++ b/application/src/test/java/org/thingsboard/server/service/profile/DefaultTbAssetProfileCacheTest.java @@ -57,8 +57,8 @@ public class DefaultTbAssetProfileCacheTest { @Test public void onComponentLifecycleEvent_tenantDeleted_evictsAssetProfilesForThatTenant() { - TenantId tenant1 = new TenantId(UUID.randomUUID()); - TenantId tenant2 = new TenantId(UUID.randomUUID()); + TenantId tenant1 = TenantId.fromUUID(UUID.randomUUID()); + TenantId tenant2 = TenantId.fromUUID(UUID.randomUUID()); AssetProfileId profileId1 = new AssetProfileId(UUID.randomUUID()); AssetProfileId profileId2 = new AssetProfileId(UUID.randomUUID()); @@ -75,7 +75,7 @@ public class DefaultTbAssetProfileCacheTest { @Test public void onComponentLifecycleEvent_tenantDeleted_evictsAssetMappingsForThatTenant() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); AssetProfileId profileId = new AssetProfileId(UUID.randomUUID()); AssetId assetId = new AssetId(UUID.randomUUID()); @@ -92,7 +92,7 @@ public class DefaultTbAssetProfileCacheTest { @Test public void onComponentLifecycleEvent_tenantDeleted_removesListenersForThatTenant() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); EntityId listenerId = new AssetId(UUID.randomUUID()); AtomicInteger callCount = new AtomicInteger(); @@ -110,7 +110,7 @@ public class DefaultTbAssetProfileCacheTest { @Test public void onComponentLifecycleEvent_tenantUpdated_doesNotEvictProfiles() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); AssetProfileId profileId = new AssetProfileId(UUID.randomUUID()); loadProfileIntoCache(tenant, profileId); @@ -123,8 +123,8 @@ public class DefaultTbAssetProfileCacheTest { @Test public void onComponentLifecycleEvent_differentTenantDeleted_keepsOtherTenantsProfiles() { - TenantId tenant1 = new TenantId(UUID.randomUUID()); - TenantId tenant2 = new TenantId(UUID.randomUUID()); + TenantId tenant1 = TenantId.fromUUID(UUID.randomUUID()); + TenantId tenant2 = TenantId.fromUUID(UUID.randomUUID()); AssetProfileId profileId1 = new AssetProfileId(UUID.randomUUID()); AssetProfileId profileId2 = new AssetProfileId(UUID.randomUUID()); diff --git a/application/src/test/java/org/thingsboard/server/service/profile/DefaultTbDeviceProfileCacheTest.java b/application/src/test/java/org/thingsboard/server/service/profile/DefaultTbDeviceProfileCacheTest.java index a26413514c..fc900b88e4 100644 --- a/application/src/test/java/org/thingsboard/server/service/profile/DefaultTbDeviceProfileCacheTest.java +++ b/application/src/test/java/org/thingsboard/server/service/profile/DefaultTbDeviceProfileCacheTest.java @@ -57,8 +57,8 @@ public class DefaultTbDeviceProfileCacheTest { @Test public void onComponentLifecycleEvent_tenantDeleted_evictsDeviceProfilesForThatTenant() { - TenantId tenant1 = new TenantId(UUID.randomUUID()); - TenantId tenant2 = new TenantId(UUID.randomUUID()); + TenantId tenant1 = TenantId.fromUUID(UUID.randomUUID()); + TenantId tenant2 = TenantId.fromUUID(UUID.randomUUID()); DeviceProfileId profileId1 = new DeviceProfileId(UUID.randomUUID()); DeviceProfileId profileId2 = new DeviceProfileId(UUID.randomUUID()); @@ -76,7 +76,7 @@ public class DefaultTbDeviceProfileCacheTest { @Test public void onComponentLifecycleEvent_tenantDeleted_evictsDeviceMappingsForThatTenant() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); DeviceProfileId profileId = new DeviceProfileId(UUID.randomUUID()); DeviceId deviceId = new DeviceId(UUID.randomUUID()); @@ -93,7 +93,7 @@ public class DefaultTbDeviceProfileCacheTest { @Test public void onComponentLifecycleEvent_tenantDeleted_removesListenersForThatTenant() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); EntityId listenerId = new DeviceId(UUID.randomUUID()); AtomicInteger callCount = new AtomicInteger(); @@ -111,7 +111,7 @@ public class DefaultTbDeviceProfileCacheTest { @Test public void onComponentLifecycleEvent_tenantUpdated_doesNotEvictProfiles() { - TenantId tenant = new TenantId(UUID.randomUUID()); + TenantId tenant = TenantId.fromUUID(UUID.randomUUID()); DeviceProfileId profileId = new DeviceProfileId(UUID.randomUUID()); loadProfileIntoCache(tenant, profileId); @@ -124,8 +124,8 @@ public class DefaultTbDeviceProfileCacheTest { @Test public void onComponentLifecycleEvent_differentTenantDeleted_keepsOtherTenantsProfiles() { - TenantId tenant1 = new TenantId(UUID.randomUUID()); - TenantId tenant2 = new TenantId(UUID.randomUUID()); + TenantId tenant1 = TenantId.fromUUID(UUID.randomUUID()); + TenantId tenant2 = TenantId.fromUUID(UUID.randomUUID()); DeviceProfileId profileId1 = new DeviceProfileId(UUID.randomUUID()); DeviceProfileId profileId2 = new DeviceProfileId(UUID.randomUUID()); diff --git a/application/src/test/java/org/thingsboard/server/service/queue/DefaultTbClusterServiceTest.java b/application/src/test/java/org/thingsboard/server/service/queue/DefaultTbClusterServiceTest.java index 79b31acf78..09225216ca 100644 --- a/application/src/test/java/org/thingsboard/server/service/queue/DefaultTbClusterServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/service/queue/DefaultTbClusterServiceTest.java @@ -410,7 +410,7 @@ public class DefaultTbClusterServiceTest { @Test public void testGetRuleEngineProfileForUpdatedAndDeletedDevice() { DeviceId deviceId = new DeviceId(UUID.randomUUID()); - TenantId tenantId = new TenantId(UUID.randomUUID()); + TenantId tenantId = TenantId.fromUUID(UUID.randomUUID()); DeviceProfileId deviceProfileId = new DeviceProfileId(UUID.randomUUID()); Device device = new Device(deviceId); @@ -430,7 +430,7 @@ public class DefaultTbClusterServiceTest { @Test public void testGetRuleEngineProfileForUpdatedAndDeletedAsset() { AssetId assetId = new AssetId(UUID.randomUUID()); - TenantId tenantId = new TenantId(UUID.randomUUID()); + TenantId tenantId = TenantId.fromUUID(UUID.randomUUID()); AssetProfileId assetProfileId = new AssetProfileId(UUID.randomUUID()); Asset asset = new Asset(assetId); diff --git a/application/src/test/java/org/thingsboard/server/service/subscription/TbEntityLocalSubsInfoTest.java b/application/src/test/java/org/thingsboard/server/service/subscription/TbEntityLocalSubsInfoTest.java index ba1a89eb38..1ab2a54319 100644 --- a/application/src/test/java/org/thingsboard/server/service/subscription/TbEntityLocalSubsInfoTest.java +++ b/application/src/test/java/org/thingsboard/server/service/subscription/TbEntityLocalSubsInfoTest.java @@ -161,7 +161,7 @@ public class TbEntityLocalSubsInfoTest { } private TbEntityLocalSubsInfo createSubsInfo() { - return new TbEntityLocalSubsInfo(new TenantId(UUID.randomUUID()), new DeviceId(UUID.randomUUID())); + return new TbEntityLocalSubsInfo(TenantId.fromUUID(UUID.randomUUID()), new DeviceId(UUID.randomUUID())); } private void checkEvent(TbEntitySubEvent event, Set expectedSubs, ComponentLifecycleEvent expectedType) { diff --git a/application/src/test/java/org/thingsboard/server/service/ws/DefaultWebSocketServiceTest.java b/application/src/test/java/org/thingsboard/server/service/ws/DefaultWebSocketServiceTest.java index a533e0369f..673062256f 100644 --- a/application/src/test/java/org/thingsboard/server/service/ws/DefaultWebSocketServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/service/ws/DefaultWebSocketServiceTest.java @@ -113,7 +113,7 @@ class DefaultWebSocketServiceTest { assertThat(publicUserSubscriptionsMap).as("map should contain tenant1").containsKey(tenant1); assertThat(publicUserSubscriptionsMap).as("map should contain tenant2").containsKey(tenant2); assertThat(publicUserSubscriptionsMap).as("map must not have a single NULL_UUID entry for all tenants") - .doesNotContainKey(new TenantId(EntityId.NULL_UUID)); + .doesNotContainKey(TenantId.fromUUID(EntityId.NULL_UUID)); assertThat(publicUserSubscriptionsMap.get(tenant1)) .as("tenant1 should have exactly %d subscriptions", maxPublicSubscriptions) diff --git a/common/transport/mqtt/src/test/java/org/thingsboard/server/transport/mqtt/session/GatewaySessionHandlerTest.java b/common/transport/mqtt/src/test/java/org/thingsboard/server/transport/mqtt/session/GatewaySessionHandlerTest.java index 6b4e5e9925..30dc825a9b 100644 --- a/common/transport/mqtt/src/test/java/org/thingsboard/server/transport/mqtt/session/GatewaySessionHandlerTest.java +++ b/common/transport/mqtt/src/test/java/org/thingsboard/server/transport/mqtt/session/GatewaySessionHandlerTest.java @@ -75,7 +75,7 @@ public class GatewaySessionHandlerTest { ConcurrentHashMap devices = new ConcurrentHashMap<>(); TransportDeviceInfo deviceInfo = new TransportDeviceInfo(); deviceInfo.setDeviceId(new DeviceId(UUID.randomUUID())); - deviceInfo.setTenantId(new TenantId(UUID.randomUUID())); + deviceInfo.setTenantId(TenantId.fromUUID(UUID.randomUUID())); deviceInfo.setCustomerId(new CustomerId(UUID.randomUUID())); deviceInfo.setDeviceName("device1"); deviceInfo.setDeviceType("default"); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/TbCacheSerializationTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/TbCacheSerializationTest.java index e1654678a0..b0ae8fb6ae 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/TbCacheSerializationTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/TbCacheSerializationTest.java @@ -37,7 +37,7 @@ public class TbCacheSerializationTest extends AbstractServiceTest { @Test public void AlarmTypesSerializationTest() { var typesCount = 13; - TenantId tenantId = new TenantId(UUID.randomUUID()); + TenantId tenantId = TenantId.fromUUID(UUID.randomUUID()); List types = new ArrayList<>(typesCount); for (int i = 0; i < typesCount; i++) { types.add(new EntitySubtype(tenantId, EntityType.ALARM, "alarm_type_" + i)); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/attributes/BaseAttributesServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/attributes/BaseAttributesServiceTest.java index 373112293d..da1e57e348 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/attributes/BaseAttributesServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/attributes/BaseAttributesServiceTest.java @@ -122,7 +122,7 @@ public abstract class BaseAttributesServiceTest extends AbstractServiceTest { @Test public void testDummyRequestWithEmptyResult() throws Exception { - var future = attributesService.find(new TenantId(UUID.randomUUID()), new DeviceId(UUID.randomUUID()), AttributeScope.SERVER_SCOPE, "TEST"); + var future = attributesService.find(TenantId.fromUUID(UUID.randomUUID()), new DeviceId(UUID.randomUUID()), AttributeScope.SERVER_SCOPE, "TEST"); Assert.assertNotNull(future); var result = future.get(10, TimeUnit.SECONDS); Assert.assertTrue(result.isEmpty()); @@ -130,7 +130,7 @@ public abstract class BaseAttributesServiceTest extends AbstractServiceTest { @Test public void testConcurrentFetchAndUpdate() throws Exception { - var tenantId = new TenantId(UUID.randomUUID()); + var tenantId = TenantId.fromUUID(UUID.randomUUID()); ListeningExecutorService pool = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(2)); try { for (int i = 0; i < 100; i++) { @@ -144,7 +144,7 @@ public abstract class BaseAttributesServiceTest extends AbstractServiceTest { @Test public void testConcurrentFetchAndUpdateMulti() throws Exception { - var tenantId = new TenantId(UUID.randomUUID()); + var tenantId = TenantId.fromUUID(UUID.randomUUID()); ListeningExecutorService pool = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(2)); try { for (int i = 0; i < 100; i++) { @@ -158,7 +158,7 @@ public abstract class BaseAttributesServiceTest extends AbstractServiceTest { @Test public void testFetchAndUpdateEmpty() throws Exception { - var tenantId = new TenantId(UUID.randomUUID()); + var tenantId = TenantId.fromUUID(UUID.randomUUID()); var deviceId = new DeviceId(UUID.randomUUID()); var scope = AttributeScope.SERVER_SCOPE; var key = "TEST"; @@ -172,7 +172,7 @@ public abstract class BaseAttributesServiceTest extends AbstractServiceTest { @Test public void testFetchAndUpdateMulti() throws Exception { - var tenantId = new TenantId(UUID.randomUUID()); + var tenantId = TenantId.fromUUID(UUID.randomUUID()); var deviceId = new DeviceId(UUID.randomUUID()); var scope = AttributeScope.SERVER_SCOPE; var key1 = "TEST1"; @@ -204,7 +204,7 @@ public abstract class BaseAttributesServiceTest extends AbstractServiceTest { @Test public void testFindAllKeysByEntityId() { - var tenantId = new TenantId(UUID.randomUUID()); + var tenantId = TenantId.fromUUID(UUID.randomUUID()); var deviceId = new DeviceId(UUID.randomUUID()); saveAttribute(tenantId, deviceId, AttributeScope.SERVER_SCOPE, "key1", "123"); saveAttribute(tenantId, deviceId, AttributeScope.SERVER_SCOPE, "key2", "123"); @@ -217,7 +217,7 @@ public abstract class BaseAttributesServiceTest extends AbstractServiceTest { @Test public void testFindAllKeysByEntityIdAndAttributeType() { - var tenantId = new TenantId(UUID.randomUUID()); + var tenantId = TenantId.fromUUID(UUID.randomUUID()); var deviceId = new DeviceId(UUID.randomUUID()); saveAttribute(tenantId, deviceId, AttributeScope.SERVER_SCOPE, "key1", "123"); saveAttribute(tenantId, deviceId, AttributeScope.SERVER_SCOPE, "key2", "123"); @@ -230,7 +230,7 @@ public abstract class BaseAttributesServiceTest extends AbstractServiceTest { @Test public void testFindAllByEntityIdAndAttributeType() { - var tenantId = new TenantId(UUID.randomUUID()); + var tenantId = TenantId.fromUUID(UUID.randomUUID()); var deviceId = new DeviceId(UUID.randomUUID()); saveAttribute(tenantId, deviceId, AttributeScope.SERVER_SCOPE, "key1", "123"); saveAttribute(tenantId, deviceId, AttributeScope.SERVER_SCOPE, "key2", "123"); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/event/BaseEventServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/event/BaseEventServiceTest.java index 9d754f6150..2f33fae122 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/event/BaseEventServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/event/BaseEventServiceTest.java @@ -62,7 +62,7 @@ public abstract class BaseEventServiceTest extends AbstractServiceTest { @Test public void saveEvent() throws Exception { - TenantId tenantId = new TenantId(Uuids.timeBased()); + TenantId tenantId = TenantId.fromUUID(Uuids.timeBased()); DeviceId devId = new DeviceId(Uuids.timeBased()); RuleNodeDebugEvent event = generateEvent(tenantId, devId); eventService.saveAsync(event).get(); diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDaoTest.java index 3ddf318e2f..e03b161692 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDaoTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDaoTest.java @@ -132,7 +132,7 @@ public class JpaBaseEventDaoTest extends AbstractJpaDaoTest { StatisticsEvent.StatisticsEventBuilder event = StatisticsEvent.builder(); event.id(eventId); event.ts(System.currentTimeMillis()); - event.tenantId(new TenantId(tenantId)); + event.tenantId(TenantId.fromUUID(tenantId)); event.entityId(entityId); event.serviceId("server A"); event.messagesProcessed(1); diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/query/DefaultQueryLogComponentTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/query/DefaultQueryLogComponentTest.java index e47ed5bfbf..a25d85aae6 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/sql/query/DefaultQueryLogComponentTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/sql/query/DefaultQueryLogComponentTest.java @@ -57,7 +57,7 @@ public class DefaultQueryLogComponentTest { @Before public void setUp() { - tenantId = new TenantId(UUID.fromString("97275c1c-9cf2-4d25-a68d-933031158f84")); + tenantId = TenantId.fromUUID(UUID.fromString("97275c1c-9cf2-4d25-a68d-933031158f84")); ctx = new SqlQueryContext(new QueryContext(tenantId, null, EntityType.ALARM)); } diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/tenant/JpaTenantDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/tenant/JpaTenantDaoTest.java index dd0bedbf5a..31e4ab2ac8 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/sql/tenant/JpaTenantDaoTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/sql/tenant/JpaTenantDaoTest.java @@ -103,7 +103,7 @@ public class JpaTenantDaoTest extends AbstractJpaDaoTest { //@DatabaseSetup("classpath:dbunit/empty_dataset.xml") public void testIsExistsTenantById() { final UUID uuid = Uuids.timeBased(); - final TenantId tenantId = new TenantId(uuid); + final TenantId tenantId = TenantId.fromUUID(uuid); assertThat(tenantDao.existsById(tenantId, uuid)).as("Is tenant exists before save").isFalse(); final Tenant tenant = new Tenant(); diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDaoTest.java index 164d59ecc0..0b6236196a 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDaoTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDaoTest.java @@ -276,8 +276,8 @@ public class JpaWidgetsBundleDaoTest extends AbstractJpaDaoTest { widgetsBundles = widgetsBundleDao.find(TenantId.SYS_TENANT_ID).stream().sorted(Comparator.comparing(WidgetsBundle::getTitle)).collect(Collectors.toList());; assertEquals(100, widgetsBundles.size()); - var widgetType1 = createAndSaveWidgetType(new TenantId(tenantId1), 1, "Test widget type 1", "This is the widget type 1", new String[]{"tag1", "Tag2", "TEST_TAG"}); - var widgetType2 = createAndSaveWidgetType(new TenantId(tenantId2), 2, "Test widget type 2", "This is the widget type 2", new String[]{"tag3", "Tag5", "TEST_Tag2"}); + var widgetType1 = createAndSaveWidgetType(TenantId.fromUUID(tenantId1), 1, "Test widget type 1", "This is the widget type 1", new String[]{"tag1", "Tag2", "TEST_TAG"}); + var widgetType2 = createAndSaveWidgetType(TenantId.fromUUID(tenantId2), 2, "Test widget type 2", "This is the widget type 2", new String[]{"tag3", "Tag5", "TEST_Tag2"}); var widgetsBundle1 = widgetsBundles.stream().filter(widgetsBundle -> widgetsBundle.getTenantId().getId().equals(tenantId1)).collect(Collectors.toList()).get(10); widgetTypeDao.saveWidgetsBundleWidget(new WidgetsBundleWidget(widgetsBundle1.getId(), widgetType1.getId(), 0)); diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbAssignToCustomerNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbAssignToCustomerNodeTest.java index 0db2d77c01..7f329b1411 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbAssignToCustomerNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbAssignToCustomerNodeTest.java @@ -97,7 +97,7 @@ class TbAssignToCustomerNodeTest extends AbstractRuleNodeUpgradeTest { private final Edge EDGE = new Edge(); private final Dashboard DASHBOARD = new Dashboard(); - private final TenantId TENANT_ID = new TenantId(UUID.fromString("c818385f-e661-407f-8c52-daf2dddf406d")); + private final TenantId TENANT_ID = TenantId.fromUUID(UUID.fromString("c818385f-e661-407f-8c52-daf2dddf406d")); private final RuleNodeId RULE_NODE_ID = new RuleNodeId(UUID.fromString("c3570bd0-c0bc-4609-97a4-6f57d7c8b809")); private static Stream givenUnsupportedOriginatorType_whenOnMsg_thenVerifyExceptionThrown() { diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbCreateRelationNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbCreateRelationNodeTest.java index 60924002da..50c54b91de 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbCreateRelationNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbCreateRelationNodeTest.java @@ -111,7 +111,7 @@ public class TbCreateRelationNodeTest extends AbstractRuleNodeUpgradeTest { return supportedEntityTypes.stream().filter(entityType -> !entityType.equals(EntityType.TENANT)).map(Arguments::of); } - private static final TenantId tenantId = new TenantId(UUID.fromString("6fc86fc9-b25c-4893-b340-51cf4e101ab2")); + private static final TenantId tenantId = TenantId.fromUUID(UUID.fromString("6fc86fc9-b25c-4893-b340-51cf4e101ab2")); private static final DeviceId deviceId = new DeviceId(UUID.fromString("191ab124-1d8d-4749-97c6-fc84c113c1f5")); private static final AssetId assetId = new AssetId(UUID.fromString("a47a5867-deab-4333-b845-88cb1695990c")); private static final CustomerId customerId = new CustomerId(UUID.fromString("4af69229-273d-40de-9fba-f49f87373d23")); diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbDeleteRelationNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbDeleteRelationNodeTest.java index a8087cc40b..f6ef490aba 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbDeleteRelationNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbDeleteRelationNodeTest.java @@ -108,7 +108,7 @@ public class TbDeleteRelationNodeTest extends AbstractRuleNodeUpgradeTest { return supportedEntityTypes.stream().filter(entityType -> !entityType.equals(EntityType.TENANT)).map(Arguments::of); } - private static final TenantId tenantId = new TenantId(UUID.fromString("6fdb457d-0910-401c-8880-abc251e6a1e2")); + private static final TenantId tenantId = TenantId.fromUUID(UUID.fromString("6fdb457d-0910-401c-8880-abc251e6a1e2")); private static final DeviceId deviceId = new DeviceId(UUID.fromString("4eef91a7-8865-4c3c-837d-ed6f6577508b")); private static final AssetId assetId = new AssetId(UUID.fromString("f4fd3b10-3f36-4d46-a162-5e62050774cc")); private static final CustomerId customerId = new CustomerId(UUID.fromString("ab890af2-3622-41e0-ac94-14d50af84348")); diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbUnassignFromCustomerNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbUnassignFromCustomerNodeTest.java index de891c13d4..dd1307b10a 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbUnassignFromCustomerNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbUnassignFromCustomerNodeTest.java @@ -98,7 +98,7 @@ class TbUnassignFromCustomerNodeTest extends AbstractRuleNodeUpgradeTest { private final Edge EDGE = new Edge(); private final Dashboard DASHBOARD = new Dashboard(); - private final TenantId TENANT_ID = new TenantId(UUID.fromString("06fcc15f-2677-436d-a1cb-7754bd0bcccf")); + private final TenantId TENANT_ID = TenantId.fromUUID(UUID.fromString("06fcc15f-2677-436d-a1cb-7754bd0bcccf")); private final ListeningExecutor DB_EXECUTOR = DirectListeningExecutor.INSTANCE; diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbAssetTypeSwitchNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbAssetTypeSwitchNodeTest.java index 557fb5b71d..b0788a1817 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbAssetTypeSwitchNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbAssetTypeSwitchNodeTest.java @@ -58,7 +58,7 @@ class TbAssetTypeSwitchNodeTest { @BeforeEach void setUp() throws TbNodeException { - TenantId tenantId = new TenantId(UUID.randomUUID()); + TenantId tenantId = TenantId.fromUUID(UUID.randomUUID()); assetId = new AssetId(UUID.randomUUID()); assetIdDeleted = new AssetId(UUID.randomUUID()); diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbCheckAlarmStatusNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbCheckAlarmStatusNodeTest.java index d8a302ae92..9155221a26 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbCheckAlarmStatusNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbCheckAlarmStatusNodeTest.java @@ -50,7 +50,7 @@ import static org.mockito.Mockito.when; class TbCheckAlarmStatusNodeTest { - private static final TenantId TENANT_ID = new TenantId(UUID.randomUUID()); + private static final TenantId TENANT_ID = TenantId.fromUUID(UUID.randomUUID()); private static final DeviceId DEVICE_ID = new DeviceId(UUID.randomUUID()); private static final AlarmId ALARM_ID = new AlarmId(UUID.randomUUID()); private static final DirectListeningExecutor DB_EXECUTOR = DirectListeningExecutor.INSTANCE; diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbCheckRelationNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbCheckRelationNodeTest.java index e6011c74d8..fb8ad655c0 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbCheckRelationNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbCheckRelationNodeTest.java @@ -63,7 +63,7 @@ import static org.mockito.Mockito.when; class TbCheckRelationNodeTest extends AbstractRuleNodeUpgradeTest { - private final TenantId TENANT_ID = new TenantId(UUID.randomUUID()); + private final TenantId TENANT_ID = TenantId.fromUUID(UUID.randomUUID()); private final DeviceId ORIGINATOR_ID = new DeviceId(UUID.randomUUID()); private final DirectListeningExecutor DB_EXECUTOR = DirectListeningExecutor.INSTANCE; private final TbMsg EMPTY_POST_ATTRIBUTES_MSG = TbMsg.newMsg() diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbDeviceTypeSwitchNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbDeviceTypeSwitchNodeTest.java index 55e9c33b7e..ebbdbe14c7 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbDeviceTypeSwitchNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbDeviceTypeSwitchNodeTest.java @@ -58,7 +58,7 @@ class TbDeviceTypeSwitchNodeTest { @BeforeEach void setUp() throws TbNodeException { - TenantId tenantId = new TenantId(UUID.randomUUID()); + TenantId tenantId = TenantId.fromUUID(UUID.randomUUID()); deviceId = new DeviceId(UUID.randomUUID()); deviceIdDeleted = new DeviceId(UUID.randomUUID()); diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/flow/TbRuleChainInputNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/flow/TbRuleChainInputNodeTest.java index 3ae26e6560..963e25f6b6 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/flow/TbRuleChainInputNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/flow/TbRuleChainInputNodeTest.java @@ -64,7 +64,7 @@ import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) public class TbRuleChainInputNodeTest extends AbstractRuleNodeUpgradeTest { - private final TenantId TENANT_ID = new TenantId(UUID.fromString("4ba69ea5-6b27-42df-ab66-e7a727a67027")); + private final TenantId TENANT_ID = TenantId.fromUUID(UUID.fromString("4ba69ea5-6b27-42df-ab66-e7a727a67027")); private final DeviceId DEVICE_ID = new DeviceId(UUID.fromString("97731954-2147-4176-8f1a-d14f1b73e4e6")); private final AssetId ASSET_ID = new AssetId(UUID.fromString("841a47bd-4e8e-4ea5-88e6-420da0d70e51")); // A stable "current" rule chain ID: this node lives here. Must differ from any target used in tests. diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetCustomerDetailsNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetCustomerDetailsNodeTest.java index 5e9726ec97..3940ab56c4 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetCustomerDetailsNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetCustomerDetailsNodeTest.java @@ -76,7 +76,7 @@ import static org.mockito.Mockito.when; public class TbGetCustomerDetailsNodeTest { private static final DeviceId DUMMY_DEVICE_ORIGINATOR = new DeviceId(UUID.randomUUID()); - private static final TenantId TENANT_ID = new TenantId(UUID.randomUUID()); + private static final TenantId TENANT_ID = TenantId.fromUUID(UUID.randomUUID()); private static final ListeningExecutor DB_EXECUTOR = DirectListeningExecutor.INSTANCE; @Mock private TbContext ctxMock; diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetDeviceAttrNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetDeviceAttrNodeTest.java index 4f267c0dfb..f9a230a437 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetDeviceAttrNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetDeviceAttrNodeTest.java @@ -60,7 +60,7 @@ import static org.mockito.BDDMockito.then; @ExtendWith(MockitoExtension.class) public class TbGetDeviceAttrNodeTest extends AbstractRuleNodeUpgradeTest { - private final TenantId TENANT_ID = new TenantId(UUID.fromString("5aea576c-66c4-4732-86b8-dc6bfcde7443")); + private final TenantId TENANT_ID = TenantId.fromUUID(UUID.fromString("5aea576c-66c4-4732-86b8-dc6bfcde7443")); private final DeviceId DEVICE_ID = new DeviceId(UUID.fromString("40b6b393-6ddf-47f9-973a-18550ca70384")); private final ListeningExecutor executor = DirectListeningExecutor.INSTANCE; diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetOriginatorFieldsNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetOriginatorFieldsNodeTest.java index fff7437fdf..a0d0a5a957 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetOriginatorFieldsNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetOriginatorFieldsNodeTest.java @@ -59,7 +59,7 @@ import static org.mockito.Mockito.when; public class TbGetOriginatorFieldsNodeTest { private static final DeviceId DUMMY_DEVICE_ORIGINATOR = new DeviceId(UUID.randomUUID()); - private static final TenantId DUMMY_TENANT_ID = new TenantId(UUID.randomUUID()); + private static final TenantId DUMMY_TENANT_ID = TenantId.fromUUID(UUID.randomUUID()); private static final ListeningExecutor DB_EXECUTOR = DirectListeningExecutor.INSTANCE; @Mock private TbContext ctxMock; diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetRelatedAttributeNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetRelatedAttributeNodeTest.java index a31d23db55..88195973e6 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetRelatedAttributeNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetRelatedAttributeNodeTest.java @@ -91,7 +91,7 @@ import static org.mockito.Mockito.when; public class TbGetRelatedAttributeNodeTest { private static final EntityId DUMMY_DEVICE_ORIGINATOR = new DeviceId(UUID.randomUUID()); - private static final TenantId TENANT_ID = new TenantId(UUID.randomUUID()); + private static final TenantId TENANT_ID = TenantId.fromUUID(UUID.randomUUID()); private static final ListeningExecutor DB_EXECUTOR = DirectListeningExecutor.INSTANCE; @Mock private TbContext ctxMock; @@ -427,7 +427,7 @@ public class TbGetRelatedAttributeNodeTest { @Test public void givenFetchTelemetryToMetaData_whenOnMsg_thenShouldFetchTelemetryToMetaData() { // GIVEN - var tenant = new Tenant(new TenantId(UUID.randomUUID())); + var tenant = new Tenant(TenantId.fromUUID(UUID.randomUUID())); var device = new Device(new DeviceId(UUID.randomUUID())); prepareMsgAndConfig(TbMsgSource.METADATA, DataToFetch.LATEST_TELEMETRY, tenant.getId()); diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetTenantAttributeNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetTenantAttributeNodeTest.java index 88db3dc0cd..fa528a724c 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetTenantAttributeNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetTenantAttributeNodeTest.java @@ -70,7 +70,7 @@ import static org.mockito.Mockito.when; public class TbGetTenantAttributeNodeTest { private static final DeviceId DUMMY_DEVICE_ORIGINATOR = new DeviceId(UUID.randomUUID()); - private static final TenantId TENANT_ID = new TenantId(UUID.randomUUID()); + private static final TenantId TENANT_ID = TenantId.fromUUID(UUID.randomUUID()); private static final DirectListeningExecutor DB_EXECUTOR = DirectListeningExecutor.INSTANCE; @Mock private TbContext ctxMock; diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetTenantDetailsNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetTenantDetailsNodeTest.java index b77bd263f8..7f476ea775 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetTenantDetailsNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/metadata/TbGetTenantDetailsNodeTest.java @@ -73,7 +73,7 @@ public class TbGetTenantDetailsNodeTest { config = new TbGetTenantDetailsNodeConfiguration().defaultConfiguration(); nodeConfiguration = new TbNodeConfiguration(JacksonUtil.valueToTree(config)); tenant = new Tenant(); - tenant.setId(new TenantId(UUID.randomUUID())); + tenant.setId(TenantId.fromUUID(UUID.randomUUID())); tenant.setTitle("Tenant title"); tenant.setCountry("Tenant country"); tenant.setCity("Tenant city"); diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/util/EntitiesFieldsAsyncLoaderTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/util/EntitiesFieldsAsyncLoaderTest.java index d1bcc4559e..75dc8d227a 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/util/EntitiesFieldsAsyncLoaderTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/util/EntitiesFieldsAsyncLoaderTest.java @@ -104,7 +104,7 @@ public class EntitiesFieldsAsyncLoaderTest { @BeforeAll public static void setup() { RANDOM_UUID = UUID.randomUUID(); - TENANT_ID = new TenantId(UUID.randomUUID()); + TENANT_ID = TenantId.fromUUID(UUID.randomUUID()); SUPPORTED_ENTITY_TYPES = EnumSet.of( EntityType.TENANT, EntityType.CUSTOMER, @@ -172,7 +172,7 @@ public class EntitiesFieldsAsyncLoaderTest { private void initMocks(EntityType entityType, boolean entityDoesNotExist) { switch (entityType) { case TENANT: - var tenant = Futures.immediateFuture(entityDoesNotExist ? null : new Tenant(new TenantId(RANDOM_UUID))); + var tenant = Futures.immediateFuture(entityDoesNotExist ? null : new Tenant(TenantId.fromUUID(RANDOM_UUID))); when(ctxMock.getDbCallbackExecutor()).thenReturn(DB_EXECUTOR); when(ctxMock.getTenantService()).thenReturn(tenantServiceMock); diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/util/EntitiesRelatedDeviceIdAsyncLoaderTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/util/EntitiesRelatedDeviceIdAsyncLoaderTest.java index 23e98dfc58..6a840a1ae3 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/util/EntitiesRelatedDeviceIdAsyncLoaderTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/util/EntitiesRelatedDeviceIdAsyncLoaderTest.java @@ -48,7 +48,7 @@ import static org.mockito.Mockito.when; public class EntitiesRelatedDeviceIdAsyncLoaderTest { private static final EntityId DUMMY_ORIGINATOR = new DeviceId(UUID.randomUUID()); - private static final TenantId TENANT_ID = new TenantId(UUID.randomUUID()); + private static final TenantId TENANT_ID = TenantId.fromUUID(UUID.randomUUID()); private static final ListeningExecutor DB_EXECUTOR = DirectListeningExecutor.INSTANCE; @Mock private TbContext ctxMock; diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/util/EntitiesRelatedEntityIdAsyncLoaderTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/util/EntitiesRelatedEntityIdAsyncLoaderTest.java index 1131586a07..edeb72ba59 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/util/EntitiesRelatedEntityIdAsyncLoaderTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/util/EntitiesRelatedEntityIdAsyncLoaderTest.java @@ -55,7 +55,7 @@ import static org.thingsboard.common.util.DonAsynchron.withCallback; public class EntitiesRelatedEntityIdAsyncLoaderTest { private static final EntityId ASSET_ORIGINATOR_ID = new AssetId(UUID.randomUUID()); - private static final TenantId TENANT_ID = new TenantId(UUID.randomUUID()); + private static final TenantId TENANT_ID = TenantId.fromUUID(UUID.randomUUID()); private static final ListeningExecutor DB_EXECUTOR = DirectListeningExecutor.INSTANCE; private TbContext ctxMock; From f79a13c79f67ea08d5a5c55b26f86be89d96bc81 Mon Sep 17 00:00:00 2001 From: Oleksandra Matviienko Date: Sat, 25 Apr 2026 00:09:18 +0200 Subject: [PATCH 06/12] Technical cleanup of deprecated validator API calls --- .../BaseComponentDescriptorService.java | 2 +- .../server/dao/rule/BaseRuleChainService.java | 28 +++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/dao/src/main/java/org/thingsboard/server/dao/component/BaseComponentDescriptorService.java b/dao/src/main/java/org/thingsboard/server/dao/component/BaseComponentDescriptorService.java index 5e9292af5f..4f2228fe57 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/component/BaseComponentDescriptorService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/component/BaseComponentDescriptorService.java @@ -60,7 +60,7 @@ public class BaseComponentDescriptorService implements ComponentDescriptorServic @Override public ComponentDescriptor findById(TenantId tenantId, ComponentDescriptorId componentId) { - Validator.validateId(componentId, "Incorrect component id for search request."); + Validator.validateId(componentId, id -> "Incorrect component id for search request."); return componentDescriptorDao.findById(tenantId, componentId); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java index fce0cec732..96d6a19346 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java @@ -191,7 +191,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC @Transactional @Override public RuleChainUpdateResult saveRuleChainMetaData(TenantId tenantId, RuleChainMetaData ruleChainMetaData, Function ruleNodeUpdater, boolean publishSaveEvent) { - Validator.validateId(ruleChainMetaData.getRuleChainId(), "Incorrect rule chain id."); + Validator.validateId(ruleChainMetaData.getRuleChainId(), id -> "Incorrect rule chain id."); RuleChain ruleChain = findRuleChainById(tenantId, ruleChainMetaData.getRuleChainId()); if (ruleChain == null) { return RuleChainUpdateResult.failed(); @@ -346,7 +346,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC @Override public RuleChainMetaData loadRuleChainMetaData(TenantId tenantId, RuleChainId ruleChainId) { - Validator.validateId(ruleChainId, "Incorrect rule chain id."); + Validator.validateId(ruleChainId, id -> "Incorrect rule chain id."); RuleChainDetails ruleChainDetails = ruleChainDetailsDao.findById(tenantId, ruleChainId.getId()); if (ruleChainDetails == null) { return null; @@ -388,37 +388,37 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC @Override public RuleChain findRuleChainById(TenantId tenantId, RuleChainId ruleChainId) { - Validator.validateId(ruleChainId, "Incorrect rule chain id for search request."); + Validator.validateId(ruleChainId, id -> "Incorrect rule chain id for search request."); return ruleChainDao.findById(tenantId, ruleChainId.getId()); } @Override public RuleNode findRuleNodeById(TenantId tenantId, RuleNodeId ruleNodeId) { - Validator.validateId(ruleNodeId, "Incorrect rule node id for search request."); + Validator.validateId(ruleNodeId, id -> "Incorrect rule node id for search request."); return ruleNodeDao.findById(tenantId, ruleNodeId.getId()); } @Override public ListenableFuture findRuleChainByIdAsync(TenantId tenantId, RuleChainId ruleChainId) { - Validator.validateId(ruleChainId, "Incorrect rule chain id for search request."); + Validator.validateId(ruleChainId, id -> "Incorrect rule chain id for search request."); return ruleChainDao.findByIdAsync(tenantId, ruleChainId.getId()); } @Override public ListenableFuture findRuleNodeByIdAsync(TenantId tenantId, RuleNodeId ruleNodeId) { - Validator.validateId(ruleNodeId, "Incorrect rule node id for search request."); + Validator.validateId(ruleNodeId, id -> "Incorrect rule node id for search request."); return ruleNodeDao.findByIdAsync(tenantId, ruleNodeId.getId()); } @Override public RuleChain getRootTenantRuleChain(TenantId tenantId) { - Validator.validateId(tenantId, "Incorrect tenant id for search request."); + Validator.validateId(tenantId, id -> "Incorrect tenant id for search request."); return ruleChainDao.findRootRuleChainByTenantIdAndType(tenantId.getId(), RuleChainType.CORE); } @Override public List getRuleChainNodes(TenantId tenantId, RuleChainId ruleChainId) { - Validator.validateId(ruleChainId, "Incorrect rule chain id for search request."); + Validator.validateId(ruleChainId, id -> "Incorrect rule chain id for search request."); List relations = getRuleChainToNodeRelations(tenantId, ruleChainId); List ruleNodes = new ArrayList<>(); for (EntityRelation relation : relations) { @@ -434,7 +434,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC @Override public List getReferencingRuleChainNodes(TenantId tenantId, RuleChainId ruleChainId) { - Validator.validateId(ruleChainId, "Incorrect rule chain id for search request."); + Validator.validateId(ruleChainId, id -> "Incorrect rule chain id for search request."); List relations = getNodeToRuleChainRelations(tenantId, ruleChainId); List ruleNodes = new ArrayList<>(); for (EntityRelation relation : relations) { @@ -448,7 +448,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC @Override public List getRuleNodeRelations(TenantId tenantId, RuleNodeId ruleNodeId) { - Validator.validateId(ruleNodeId, "Incorrect rule node id for search request."); + Validator.validateId(ruleNodeId, id -> "Incorrect rule node id for search request."); List relations = relationService.findByFrom(tenantId, ruleNodeId, RelationTypeGroup.RULE_NODE); List validRelations = new ArrayList<>(); for (EntityRelation relation : relations) { @@ -475,7 +475,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC @Override public PageData findTenantRuleChainsByType(TenantId tenantId, RuleChainType type, PageLink pageLink) { - Validator.validateId(tenantId, "Incorrect tenant id for search rule chain request."); + Validator.validateId(tenantId, id -> "Incorrect tenant id for search rule chain request."); Validator.validatePageLink(pageLink); return ruleChainDao.findRuleChainsByTenantIdAndType(tenantId.getId(), type, pageLink); } @@ -488,7 +488,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC @Override @Transactional public void deleteRuleChainById(TenantId tenantId, RuleChainId ruleChainId) { - Validator.validateId(ruleChainId, "Incorrect rule chain id for delete request."); + Validator.validateId(ruleChainId, id -> "Incorrect rule chain id for delete request."); RuleChain ruleChain = ruleChainDao.findById(tenantId, ruleChainId.getId()); if (ruleChain == null) { return; @@ -527,7 +527,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC @Transactional @Override public void deleteRuleChainsByTenantId(TenantId tenantId) { - Validator.validateId(tenantId, "Incorrect tenant id for delete rule chains request."); + Validator.validateId(tenantId, id -> "Incorrect tenant id for delete rule chains request."); tenantRuleChainsRemover.removeEntities(tenantId, tenantId); } @@ -539,7 +539,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC @Override public RuleChainData exportTenantRuleChains(TenantId tenantId, PageLink pageLink) { - Validator.validateId(tenantId, "Incorrect tenant id for search rule chain request."); + Validator.validateId(tenantId, id -> "Incorrect tenant id for search rule chain request."); Validator.validatePageLink(pageLink); PageData ruleChainData = ruleChainDao.findRuleChainsByTenantId(tenantId.getId(), pageLink); List ruleChains = ruleChainData.getData(); From 5e05fca254cc9a229ac56871e359e59258eafa47 Mon Sep 17 00:00:00 2001 From: Oleksandra Matviienko Date: Mon, 27 Apr 2026 09:45:21 +0200 Subject: [PATCH 07/12] Updated REST client timeout API to non-deprecated variants --- .../channels/MicrosoftTeamsNotificationChannel.java | 4 ++-- .../main/java/org/thingsboard/monitoring/client/TbClient.java | 4 ++-- .../notification/channels/impl/SlackNotificationChannel.java | 4 ++-- .../service/transport/impl/HttpTransportHealthChecker.java | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/notification/channels/MicrosoftTeamsNotificationChannel.java b/application/src/main/java/org/thingsboard/server/service/notification/channels/MicrosoftTeamsNotificationChannel.java index d023ed9b53..459c857d02 100644 --- a/application/src/main/java/org/thingsboard/server/service/notification/channels/MicrosoftTeamsNotificationChannel.java +++ b/application/src/main/java/org/thingsboard/server/service/notification/channels/MicrosoftTeamsNotificationChannel.java @@ -54,8 +54,8 @@ public class MicrosoftTeamsNotificationChannel implements NotificationChannel Date: Mon, 27 Apr 2026 15:08:24 +0200 Subject: [PATCH 08/12] Replaced 5 deprecated APIs with non-deprecated variants --- .../service/security/model/token/JwtTokenFactory.java | 2 +- .../server/service/sync/vc/VersionControlTest.java | 2 +- .../transport/lwm2m/AbstractLwM2MIntegrationTest.java | 2 +- .../server/transport/http/DeviceApiControllerTest.java | 7 ++++--- .../java/org/thingsboard/common/util/JacksonUtil.java | 7 ++----- .../java/org/thingsboard/common/util/TbStopWatch.java | 6 +++--- .../rule/engine/ai/Langchain4jJsonSchemaAdapter.java | 2 +- .../rule/engine/transform/TbCopyKeysNode.java | 5 +---- .../thingsboard/client/tools/i18n/TranslationPruner.java | 9 ++------- 9 files changed, 16 insertions(+), 26 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/security/model/token/JwtTokenFactory.java b/application/src/main/java/org/thingsboard/server/service/security/model/token/JwtTokenFactory.java index 051e061857..026673a1ed 100644 --- a/application/src/main/java/org/thingsboard/server/service/security/model/token/JwtTokenFactory.java +++ b/application/src/main/java/org/thingsboard/server/service/security/model/token/JwtTokenFactory.java @@ -23,9 +23,9 @@ import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.JwtParser; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.MalformedJwtException; -import io.jsonwebtoken.SignatureException; import io.jsonwebtoken.UnsupportedJwtException; import io.jsonwebtoken.security.Keys; +import io.jsonwebtoken.security.SignatureException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Lazy; diff --git a/application/src/test/java/org/thingsboard/server/service/sync/vc/VersionControlTest.java b/application/src/test/java/org/thingsboard/server/service/sync/vc/VersionControlTest.java index 994f326627..bc4dcfc1b0 100644 --- a/application/src/test/java/org/thingsboard/server/service/sync/vc/VersionControlTest.java +++ b/application/src/test/java/org/thingsboard/server/service/sync/vc/VersionControlTest.java @@ -477,7 +477,7 @@ public class VersionControlTest extends AbstractControllerTest { Dashboard importedOtherDashboard = findDashboard(otherDashboard.getName()); Dashboard importedDashboard = findDashboard(dashboard.getName()); - Map.Entry entityAlias = importedDashboard.getConfiguration().get("entityAliases").fields().next(); + Map.Entry entityAlias = importedDashboard.getConfiguration().get("entityAliases").properties().iterator().next(); assertThat(entityAlias.getKey()).isEqualTo(aliasId); assertThat(entityAlias.getValue().get("id").asText()).isEqualTo(aliasId); diff --git a/application/src/test/java/org/thingsboard/server/transport/lwm2m/AbstractLwM2MIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/lwm2m/AbstractLwM2MIntegrationTest.java index 4d5114425f..258a173451 100644 --- a/application/src/test/java/org/thingsboard/server/transport/lwm2m/AbstractLwM2MIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/lwm2m/AbstractLwM2MIntegrationTest.java @@ -102,10 +102,10 @@ import java.util.concurrent.atomic.AtomicLong; import static org.awaitility.Awaitility.await; import static org.eclipse.leshan.client.object.Security.noSec; +import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.IsInstanceOf.instanceOf; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.timeout; diff --git a/common/transport/http/src/test/java/org/thingsboard/server/transport/http/DeviceApiControllerTest.java b/common/transport/http/src/test/java/org/thingsboard/server/transport/http/DeviceApiControllerTest.java index 397ea791c6..fcdb2b04ea 100644 --- a/common/transport/http/src/test/java/org/thingsboard/server/transport/http/DeviceApiControllerTest.java +++ b/common/transport/http/src/test/java/org/thingsboard/server/transport/http/DeviceApiControllerTest.java @@ -18,6 +18,7 @@ package org.thingsboard.server.transport.http; import com.google.gson.JsonParseException; import org.junit.jupiter.api.Test; import org.mockito.Mockito; +import org.springframework.http.HttpInputMessage; import org.springframework.http.ResponseEntity; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.web.context.request.async.DeferredResult; @@ -37,7 +38,7 @@ class DeviceApiControllerTest { }; var callback = new DeviceApiController.DeviceAuthCallback(transportContext, responseWriter, onSuccess); - callback.onError(new HttpMessageNotReadableException("JSON incorrect syntax")); + callback.onError(new HttpMessageNotReadableException("JSON incorrect syntax", (HttpInputMessage) null)); callback.onError(new JsonParseException("Json ; expected")); @@ -51,7 +52,7 @@ class DeviceApiControllerTest { DeferredResult responseWriter = Mockito.mock(DeferredResult.class); var callback = new DeviceApiController.DeviceProvisionCallback(responseWriter); - callback.onError(new HttpMessageNotReadableException("JSON incorrect syntax")); + callback.onError(new HttpMessageNotReadableException("JSON incorrect syntax", (HttpInputMessage) null)); callback.onError(new JsonParseException("Json ; expected")); @@ -71,7 +72,7 @@ class DeviceApiControllerTest { var callback = new DeviceApiController.GetOtaPackageCallback(transportContext, responseWriter, title, version, chunkSize, chunk); - callback.onError(new HttpMessageNotReadableException("JSON incorrect syntax")); + callback.onError(new HttpMessageNotReadableException("JSON incorrect syntax", (HttpInputMessage) null)); callback.onError(new JsonParseException("Json ; expected")); diff --git a/common/util/src/main/java/org/thingsboard/common/util/JacksonUtil.java b/common/util/src/main/java/org/thingsboard/common/util/JacksonUtil.java index cf547cb9d4..ee57d31129 100644 --- a/common/util/src/main/java/org/thingsboard/common/util/JacksonUtil.java +++ b/common/util/src/main/java/org/thingsboard/common/util/JacksonUtil.java @@ -447,10 +447,8 @@ public class JacksonUtil { private static void toFlatMap(JsonNode node, String currentPath, Map map) { if (node.isObject()) { - Iterator> fields = node.fields(); currentPath = currentPath.isEmpty() ? "" : currentPath + "."; - while (fields.hasNext()) { - Map.Entry entry = fields.next(); + for (Map.Entry entry : node.properties()) { toFlatMap(entry.getValue(), currentPath + entry.getKey(), map); } } else if (node.isValueNode()) { @@ -554,8 +552,7 @@ public class JacksonUtil { } } else if (node.isObject()) { ObjectNode on = (ObjectNode) node; - for (Iterator> it = on.fields(); it.hasNext(); ) { - var kv = it.next(); + for (Map.Entry kv : on.properties()) { if (variableName != null) { tasks.add(task.next(kv.getValue(), variableName, kv.getKey())); } else { diff --git a/common/util/src/main/java/org/thingsboard/common/util/TbStopWatch.java b/common/util/src/main/java/org/thingsboard/common/util/TbStopWatch.java index 3a8b94c56e..fab0a72d3d 100644 --- a/common/util/src/main/java/org/thingsboard/common/util/TbStopWatch.java +++ b/common/util/src/main/java/org/thingsboard/common/util/TbStopWatch.java @@ -52,17 +52,17 @@ public class TbStopWatch extends StopWatch { public long stopAndGetTotalTimeNanos(){ stop(); - return getLastTaskTimeNanos(); + return lastTaskInfo().getTimeNanos(); } public long stopAndGetLastTaskTimeMillis(){ stop(); - return getLastTaskTimeMillis(); + return lastTaskInfo().getTimeMillis(); } public long stopAndGetLastTaskTimeNanos(){ stop(); - return getLastTaskTimeNanos(); + return lastTaskInfo().getTimeNanos(); } } diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/ai/Langchain4jJsonSchemaAdapter.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/ai/Langchain4jJsonSchemaAdapter.java index afe4372101..a6d1c60730 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/ai/Langchain4jJsonSchemaAdapter.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/ai/Langchain4jJsonSchemaAdapter.java @@ -94,7 +94,7 @@ final class Langchain4jJsonSchemaAdapter { JsonNode propertiesNode = objectSchema.get("properties"); if (propertiesNode != null) { - propertiesNode.fields().forEachRemaining(entry -> { + propertiesNode.properties().forEach(entry -> { String key = entry.getKey(); JsonNode value = entry.getValue(); builder.addProperty(key, parse(value)); diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbCopyKeysNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbCopyKeysNode.java index 08919f37fe..f9e732a53d 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbCopyKeysNode.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbCopyKeysNode.java @@ -29,7 +29,6 @@ import org.thingsboard.server.common.data.plugin.ComponentType; import org.thingsboard.server.common.msg.TbMsg; import java.util.Arrays; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutionException; @@ -87,9 +86,7 @@ public class TbCopyKeysNode extends TbAbstractTransformNodeWithTbMsgSource { msgData = JacksonUtil.toString(msgDataNode); break; case DATA: - Iterator> iteratorNode = dataNode.fields(); - while (iteratorNode.hasNext()) { - Map.Entry entry = iteratorNode.next(); + for (Map.Entry entry : dataNode.properties()) { String msgKey = entry.getKey(); JsonNode msgValue = entry.getValue(); if (matches(msgKey)) { diff --git a/tools/src/main/java/org/thingsboard/client/tools/i18n/TranslationPruner.java b/tools/src/main/java/org/thingsboard/client/tools/i18n/TranslationPruner.java index 4181180521..6467c72114 100644 --- a/tools/src/main/java/org/thingsboard/client/tools/i18n/TranslationPruner.java +++ b/tools/src/main/java/org/thingsboard/client/tools/i18n/TranslationPruner.java @@ -25,7 +25,6 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import java.io.File; import java.io.IOException; import java.util.HashSet; -import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -37,9 +36,7 @@ public class TranslationPruner { */ private static void collectKeys(JsonNode node, String prefix, Set keys) { if (!node.isObject()) return; - Iterator> fields = node.fields(); - while (fields.hasNext()) { - Map.Entry entry = fields.next(); + for (Map.Entry entry : node.properties()) { String key = entry.getKey(); String fullKey = prefix.isEmpty() ? key : prefix + "." + key; keys.add(fullKey); @@ -52,9 +49,7 @@ public class TranslationPruner { */ private static ObjectNode pruneNode(ObjectNode node, Set keys, String prefix, ObjectMapper mapper) { ObjectNode pruned = mapper.createObjectNode(); - Iterator> fields = node.fields(); - while (fields.hasNext()) { - Map.Entry entry = fields.next(); + for (Map.Entry entry : node.properties()) { String key = entry.getKey(); JsonNode value = entry.getValue(); String fullKey = prefix.isEmpty() ? key : prefix + "." + key; From d91ca7cce2bfb177e3feeaefb61e99e58c37d950 Mon Sep 17 00:00:00 2001 From: Oleksandra Matviienko Date: Thu, 23 Apr 2026 15:11:11 +0200 Subject: [PATCH 09/12] Updated PEM credentials to the non-deprecated certificate API --- .../rule/engine/credentials/CertPemCredentials.java | 5 +++-- .../engine/credentials/CertPemCredentialsTest.java | 13 +++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/credentials/CertPemCredentials.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/credentials/CertPemCredentials.java index 81def5a96b..46d844d2c4 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/credentials/CertPemCredentials.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/credentials/CertPemCredentials.java @@ -25,6 +25,7 @@ import org.thingsboard.server.common.data.StringUtils; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.TrustManagerFactory; +import javax.security.auth.x500.X500Principal; import java.security.KeyStore; import java.security.PrivateKey; import java.security.cert.CertPath; @@ -77,7 +78,7 @@ public class CertPemCredentials implements ClientCredentials { KeyStore caKeyStore = KeyStore.getInstance(KeyStore.getDefaultType()); caKeyStore.load(null, null); for (X509Certificate caCert : caCerts) { - caKeyStore.setCertificateEntry(CA_CERT_CERT_ALIAS_PREFIX + caCert.getSubjectDN().getName(), caCert); + caKeyStore.setCertificateEntry(CA_CERT_CERT_ALIAS_PREFIX + caCert.getSubjectX500Principal().getName(X500Principal.RFC1779), caCert); } TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); @@ -99,7 +100,7 @@ public class CertPemCredentials implements ClientCredentials { keyStore.load(null); List unique = certificates.stream().distinct().collect(Collectors.toList()); for (X509Certificate cert : unique) { - keyStore.setCertificateEntry(CERT_ALIAS_PREFIX + cert.getSubjectDN().getName(), cert); + keyStore.setCertificateEntry(CERT_ALIAS_PREFIX + cert.getSubjectX500Principal().getName(X500Principal.RFC1779), cert); } if (privateKey != null) { diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/credentials/CertPemCredentialsTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/credentials/CertPemCredentialsTest.java index cd0d508fec..634b5d8754 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/credentials/CertPemCredentialsTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/credentials/CertPemCredentialsTest.java @@ -23,6 +23,7 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import org.thingsboard.common.util.SslUtil; +import javax.security.auth.x500.X500Principal; import java.io.File; import java.io.IOException; import java.security.Key; @@ -49,13 +50,13 @@ public class CertPemCredentialsTest { Assertions.assertEquals(4, x509Certificates.size()); Assertions.assertEquals("CN=*.thingsboard.cloud, O=\"ThingsBoard, Inc.\", ST=New York, C=US", - x509Certificates.get(0).getSubjectDN().getName()); + x509Certificates.get(0).getSubjectX500Principal().getName(X500Principal.RFC1779)); Assertions.assertEquals("CN=Sectigo ECC Organization Validation Secure Server CA, O=Sectigo Limited, L=Salford, ST=Greater Manchester, C=GB", - x509Certificates.get(1).getSubjectDN().getName()); + x509Certificates.get(1).getSubjectX500Principal().getName(X500Principal.RFC1779)); Assertions.assertEquals("CN=USERTrust ECC Certification Authority, O=The USERTRUST Network, L=Jersey City, ST=New Jersey, C=US", - x509Certificates.get(2).getSubjectDN().getName()); + x509Certificates.get(2).getSubjectX500Principal().getName(X500Principal.RFC1779)); Assertions.assertEquals("CN=AAA Certificate Services, O=Comodo CA Limited, L=Salford, ST=Greater Manchester, C=GB", - x509Certificates.get(3).getSubjectDN().getName()); + x509Certificates.get(3).getSubjectX500Principal().getName(X500Principal.RFC1779)); } @Test @@ -66,7 +67,7 @@ public class CertPemCredentialsTest { Assertions.assertEquals(1, x509Certificates.size()); Assertions.assertEquals("CN=*.thingsboard.cloud, O=\"ThingsBoard, Inc.\", ST=New York, C=US", - x509Certificates.get(0).getSubjectDN().getName()); + x509Certificates.get(0).getSubjectX500Principal().getName(X500Principal.RFC1779)); } @Test @@ -103,7 +104,7 @@ public class CertPemCredentialsTest { List certs = SslUtil.readCertFile(certContent); for (X509Certificate cert : certs) { - String alias = CERT_ALIAS_PREFIX + cert.getIssuerDN().getName(); + String alias = CERT_ALIAS_PREFIX + cert.getIssuerX500Principal().getName(X500Principal.RFC1779); Certificate certificate = keyStore.getCertificate(alias); Assertions.assertNotNull(certificate); Assertions.assertEquals(new String(cert.getEncoded()), new String(certificate.getEncoded())); From e32dd28fced5fd87424388f8351d3ca210c99fc4 Mon Sep 17 00:00:00 2001 From: Oleksandra Matviienko Date: Fri, 24 Apr 2026 10:09:17 +0200 Subject: [PATCH 10/12] Technical cleanup of generated-equality annotations --- .../main/java/org/thingsboard/server/common/data/EventInfo.java | 2 ++ .../java/org/thingsboard/server/common/data/HomeDashboard.java | 2 ++ .../java/org/thingsboard/server/common/data/TenantInfo.java | 2 ++ .../org/thingsboard/server/common/data/alarm/AlarmComment.java | 1 + .../data/device/data/CoapDeviceTransportConfiguration.java | 2 ++ .../data/device/data/Lwm2mDeviceTransportConfiguration.java | 2 ++ .../lwm2m/bootstrap/LwM2MServerSecurityConfigDefault.java | 2 ++ .../java/org/thingsboard/server/common/data/edge/EdgeInfo.java | 2 ++ .../thingsboard/server/common/data/edqs/fields/AssetFields.java | 2 ++ .../server/common/data/edqs/fields/AssetProfileFields.java | 2 ++ .../server/common/data/edqs/fields/CustomerFields.java | 2 ++ .../server/common/data/edqs/fields/DashboardFields.java | 2 ++ .../server/common/data/edqs/fields/DeviceFields.java | 2 ++ .../server/common/data/edqs/fields/DeviceProfileFields.java | 2 ++ .../thingsboard/server/common/data/edqs/fields/EdgeFields.java | 2 ++ .../server/common/data/edqs/fields/EntityViewFields.java | 2 ++ .../server/common/data/edqs/fields/QueueStatsFields.java | 2 ++ .../server/common/data/edqs/fields/RuleChainFields.java | 2 ++ .../server/common/data/edqs/fields/TenantFields.java | 2 ++ .../server/common/data/edqs/fields/TenantProfileFields.java | 2 ++ .../thingsboard/server/common/data/edqs/fields/UserFields.java | 2 ++ .../thingsboard/server/common/data/kv/BaseDeleteTsKvQuery.java | 2 ++ .../thingsboard/server/common/data/query/AlarmCountQuery.java | 2 ++ .../java/org/thingsboard/server/common/data/queue/Queue.java | 2 ++ .../org/thingsboard/server/common/data/rule/RuleNodeState.java | 2 ++ .../thingsboard/server/common/data/widget/WidgetTypeInfo.java | 2 ++ .../server/transport/mqtt/limits/GatewaySessionLimits.java | 2 ++ .../server/dao/model/sqlts/latest/TsKvLatestEntity.java | 2 ++ .../rule/engine/action/TbClearAlarmNodeConfiguration.java | 2 ++ .../rule/engine/action/TbCreateAlarmNodeConfiguration.java | 2 ++ .../rule/engine/geo/TbGpsGeofencingActionNodeConfiguration.java | 2 ++ .../rule/engine/mqtt/azure/AzureIotHubSasCredentials.java | 2 ++ .../rule/engine/mqtt/azure/TbAzureIotHubNodeConfiguration.java | 2 ++ 33 files changed, 65 insertions(+) diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/EventInfo.java b/common/data/src/main/java/org/thingsboard/server/common/data/EventInfo.java index 9ca3957050..e0bdde1dd8 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/EventInfo.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/EventInfo.java @@ -18,6 +18,7 @@ package org.thingsboard.server.common.data; import com.fasterxml.jackson.databind.JsonNode; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import lombok.EqualsAndHashCode; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.EventId; import org.thingsboard.server.common.data.id.TenantId; @@ -26,6 +27,7 @@ import org.thingsboard.server.common.data.id.TenantId; * @author Andrew Shvayka */ @Data +@EqualsAndHashCode(callSuper = false) @Schema public class EventInfo extends BaseData { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/HomeDashboard.java b/common/data/src/main/java/org/thingsboard/server/common/data/HomeDashboard.java index ce9c8fce78..df2cdf2bf5 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/HomeDashboard.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/HomeDashboard.java @@ -17,9 +17,11 @@ package org.thingsboard.server.common.data; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import lombok.EqualsAndHashCode; @Schema @Data +@EqualsAndHashCode(callSuper = false) public class HomeDashboard extends Dashboard { public static final String HIDE_DASHBOARD_TOOLBAR_DESCRIPTION = "Hide dashboard toolbar flag. Useful for rendering dashboards on mobile."; diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/TenantInfo.java b/common/data/src/main/java/org/thingsboard/server/common/data/TenantInfo.java index 4126b1acdd..8f38ecd750 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/TenantInfo.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/TenantInfo.java @@ -17,10 +17,12 @@ package org.thingsboard.server.common.data; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import lombok.EqualsAndHashCode; import org.thingsboard.server.common.data.id.TenantId; @Schema @Data +@EqualsAndHashCode(callSuper = false) public class TenantInfo extends Tenant { @Schema(description = "Tenant Profile name", example = "Default") private String tenantProfileName; diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/alarm/AlarmComment.java b/common/data/src/main/java/org/thingsboard/server/common/data/alarm/AlarmComment.java index ef7499fa33..20c1b218fc 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/alarm/AlarmComment.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/alarm/AlarmComment.java @@ -34,6 +34,7 @@ import java.io.Serial; @Schema @Data +@EqualsAndHashCode(callSuper = false) @Builder @AllArgsConstructor public class AlarmComment extends BaseData implements HasName { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/device/data/CoapDeviceTransportConfiguration.java b/common/data/src/main/java/org/thingsboard/server/common/data/device/data/CoapDeviceTransportConfiguration.java index 86a61e31b6..597cee3f1c 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/device/data/CoapDeviceTransportConfiguration.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/device/data/CoapDeviceTransportConfiguration.java @@ -20,6 +20,7 @@ import com.fasterxml.jackson.annotation.JsonAnySetter; import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import lombok.EqualsAndHashCode; import org.thingsboard.server.common.data.DeviceTransportType; import java.util.HashMap; @@ -27,6 +28,7 @@ import java.util.Map; @Data @Schema +@EqualsAndHashCode(callSuper = false) public class CoapDeviceTransportConfiguration extends PowerSavingConfiguration implements DeviceTransportConfiguration { private static final long serialVersionUID = 6061442236008925609L; diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/device/data/Lwm2mDeviceTransportConfiguration.java b/common/data/src/main/java/org/thingsboard/server/common/data/device/data/Lwm2mDeviceTransportConfiguration.java index 656262ab45..513accfe7b 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/device/data/Lwm2mDeviceTransportConfiguration.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/device/data/Lwm2mDeviceTransportConfiguration.java @@ -20,6 +20,7 @@ import com.fasterxml.jackson.annotation.JsonAnySetter; import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import lombok.EqualsAndHashCode; import org.thingsboard.server.common.data.DeviceTransportType; import java.util.HashMap; @@ -27,6 +28,7 @@ import java.util.Map; @Schema @Data +@EqualsAndHashCode(callSuper = false) public class Lwm2mDeviceTransportConfiguration extends PowerSavingConfiguration implements DeviceTransportConfiguration { @JsonIgnore diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/device/profile/lwm2m/bootstrap/LwM2MServerSecurityConfigDefault.java b/common/data/src/main/java/org/thingsboard/server/common/data/device/profile/lwm2m/bootstrap/LwM2MServerSecurityConfigDefault.java index 85c1e97e24..14ef402718 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/device/profile/lwm2m/bootstrap/LwM2MServerSecurityConfigDefault.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/device/profile/lwm2m/bootstrap/LwM2MServerSecurityConfigDefault.java @@ -17,9 +17,11 @@ package org.thingsboard.server.common.data.device.profile.lwm2m.bootstrap; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import lombok.EqualsAndHashCode; @Schema @Data +@EqualsAndHashCode(callSuper = false) public class LwM2MServerSecurityConfigDefault extends LwM2MServerSecurityConfig { @Schema(description = "Host for 'Security' mode (DTLS)", example = "0.0.0.0", accessMode = Schema.AccessMode.READ_ONLY) protected String securityHost; diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/edge/EdgeInfo.java b/common/data/src/main/java/org/thingsboard/server/common/data/edge/EdgeInfo.java index dd751b8b9d..5dbd0212b3 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/edge/EdgeInfo.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/edge/EdgeInfo.java @@ -16,9 +16,11 @@ package org.thingsboard.server.common.data.edge; import lombok.Data; +import lombok.EqualsAndHashCode; import org.thingsboard.server.common.data.id.EdgeId; @Data +@EqualsAndHashCode(callSuper = false) public class EdgeInfo extends Edge { private String customerTitle; diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/AssetFields.java b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/AssetFields.java index 40ad22ed19..d05147b4d7 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/AssetFields.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/AssetFields.java @@ -18,6 +18,7 @@ package org.thingsboard.server.common.data.edqs.fields; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.databind.JsonNode; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; @@ -26,6 +27,7 @@ import java.util.UUID; import static org.thingsboard.server.common.data.edqs.fields.FieldsUtil.getText; @Data +@EqualsAndHashCode(callSuper = false) @NoArgsConstructor @SuperBuilder public class AssetFields extends AbstractEntityFields implements ProfileAwareFields { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/AssetProfileFields.java b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/AssetProfileFields.java index ce91aac9d0..c519daa800 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/AssetProfileFields.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/AssetProfileFields.java @@ -16,12 +16,14 @@ package org.thingsboard.server.common.data.edqs.fields; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; import java.util.UUID; @Data +@EqualsAndHashCode(callSuper = false) @NoArgsConstructor @SuperBuilder public class AssetProfileFields extends AbstractEntityFields { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/CustomerFields.java b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/CustomerFields.java index e2cdf8f295..c324f0f1ab 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/CustomerFields.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/CustomerFields.java @@ -17,6 +17,7 @@ package org.thingsboard.server.common.data.edqs.fields; import com.fasterxml.jackson.databind.JsonNode; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; @@ -25,6 +26,7 @@ import java.util.UUID; import static org.thingsboard.server.common.data.edqs.fields.FieldsUtil.getText; @Data +@EqualsAndHashCode(callSuper = false) @NoArgsConstructor @SuperBuilder public class CustomerFields extends AbstractEntityFields { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/DashboardFields.java b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/DashboardFields.java index 4131d58e98..608a64436e 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/DashboardFields.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/DashboardFields.java @@ -19,6 +19,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; @@ -28,6 +29,7 @@ import java.util.UUID; @Data +@EqualsAndHashCode(callSuper = false) @NoArgsConstructor @SuperBuilder public class DashboardFields extends AbstractEntityFields { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/DeviceFields.java b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/DeviceFields.java index 90400ae70d..ef8aee952b 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/DeviceFields.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/DeviceFields.java @@ -18,6 +18,7 @@ package org.thingsboard.server.common.data.edqs.fields; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.databind.JsonNode; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; @@ -26,6 +27,7 @@ import java.util.UUID; import static org.thingsboard.server.common.data.edqs.fields.FieldsUtil.getText; @Data +@EqualsAndHashCode(callSuper = false) @NoArgsConstructor @SuperBuilder public class DeviceFields extends AbstractEntityFields implements ProfileAwareFields { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/DeviceProfileFields.java b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/DeviceProfileFields.java index 067c961b9e..2331829054 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/DeviceProfileFields.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/DeviceProfileFields.java @@ -16,6 +16,7 @@ package org.thingsboard.server.common.data.edqs.fields; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; import org.thingsboard.server.common.data.DeviceProfileType; @@ -23,6 +24,7 @@ import org.thingsboard.server.common.data.DeviceProfileType; import java.util.UUID; @Data +@EqualsAndHashCode(callSuper = false) @NoArgsConstructor @SuperBuilder public class DeviceProfileFields extends AbstractEntityFields { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/EdgeFields.java b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/EdgeFields.java index 1d257b06e1..e048eb22a8 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/EdgeFields.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/EdgeFields.java @@ -17,6 +17,7 @@ package org.thingsboard.server.common.data.edqs.fields; import com.fasterxml.jackson.databind.JsonNode; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; @@ -25,6 +26,7 @@ import java.util.UUID; import static org.thingsboard.server.common.data.edqs.fields.FieldsUtil.getText; @Data +@EqualsAndHashCode(callSuper = false) @NoArgsConstructor @SuperBuilder public class EdgeFields extends AbstractEntityFields { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/EntityViewFields.java b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/EntityViewFields.java index 4e326cf779..c5027dfc8f 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/EntityViewFields.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/EntityViewFields.java @@ -17,6 +17,7 @@ package org.thingsboard.server.common.data.edqs.fields; import com.fasterxml.jackson.databind.JsonNode; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; @@ -25,6 +26,7 @@ import java.util.UUID; import static org.thingsboard.server.common.data.edqs.fields.FieldsUtil.getText; @Data +@EqualsAndHashCode(callSuper = false) @NoArgsConstructor @SuperBuilder public class EntityViewFields extends AbstractEntityFields { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/QueueStatsFields.java b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/QueueStatsFields.java index 13e05daad4..5c5a139364 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/QueueStatsFields.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/QueueStatsFields.java @@ -16,12 +16,14 @@ package org.thingsboard.server.common.data.edqs.fields; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; import java.util.UUID; @Data +@EqualsAndHashCode(callSuper = false) @NoArgsConstructor @SuperBuilder public class QueueStatsFields extends AbstractEntityFields { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/RuleChainFields.java b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/RuleChainFields.java index 25b7db6aaa..d580f6b913 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/RuleChainFields.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/RuleChainFields.java @@ -17,6 +17,7 @@ package org.thingsboard.server.common.data.edqs.fields; import com.fasterxml.jackson.databind.JsonNode; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; @@ -25,6 +26,7 @@ import java.util.UUID; import static org.thingsboard.server.common.data.edqs.fields.FieldsUtil.getText; @Data +@EqualsAndHashCode(callSuper = false) @NoArgsConstructor @SuperBuilder public class RuleChainFields extends AbstractEntityFields { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/TenantFields.java b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/TenantFields.java index 9b538511b2..ba350fec54 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/TenantFields.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/TenantFields.java @@ -17,6 +17,7 @@ package org.thingsboard.server.common.data.edqs.fields; import com.fasterxml.jackson.databind.JsonNode; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; @@ -25,6 +26,7 @@ import java.util.UUID; import static org.thingsboard.server.common.data.edqs.fields.FieldsUtil.getText; @Data +@EqualsAndHashCode(callSuper = false) @NoArgsConstructor @SuperBuilder public class TenantFields extends AbstractEntityFields { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/TenantProfileFields.java b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/TenantProfileFields.java index f6a2889f67..5d1ff0e0e2 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/TenantProfileFields.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/TenantProfileFields.java @@ -16,6 +16,7 @@ package org.thingsboard.server.common.data.edqs.fields; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; import org.thingsboard.server.common.data.id.TenantId; @@ -23,6 +24,7 @@ import org.thingsboard.server.common.data.id.TenantId; import java.util.UUID; @Data +@EqualsAndHashCode(callSuper = false) @NoArgsConstructor @SuperBuilder public class TenantProfileFields extends AbstractEntityFields { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/UserFields.java b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/UserFields.java index 225b85680f..70fde8bf9c 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/UserFields.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/UserFields.java @@ -17,6 +17,7 @@ package org.thingsboard.server.common.data.edqs.fields; import com.fasterxml.jackson.databind.JsonNode; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; @@ -25,6 +26,7 @@ import java.util.UUID; import static org.thingsboard.server.common.data.edqs.fields.FieldsUtil.getText; @Data +@EqualsAndHashCode(callSuper = false) @NoArgsConstructor @SuperBuilder public class UserFields extends AbstractEntityFields { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/kv/BaseDeleteTsKvQuery.java b/common/data/src/main/java/org/thingsboard/server/common/data/kv/BaseDeleteTsKvQuery.java index 233c53849c..f46339c15a 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/kv/BaseDeleteTsKvQuery.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/kv/BaseDeleteTsKvQuery.java @@ -16,8 +16,10 @@ package org.thingsboard.server.common.data.kv; import lombok.Data; +import lombok.EqualsAndHashCode; @Data +@EqualsAndHashCode(callSuper = false) public class BaseDeleteTsKvQuery extends BaseTsKvQuery implements DeleteTsKvQuery { private final Boolean rewriteLatestIfDeleted; diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/query/AlarmCountQuery.java b/common/data/src/main/java/org/thingsboard/server/common/data/query/AlarmCountQuery.java index d45335021f..07be1d249d 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/query/AlarmCountQuery.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/query/AlarmCountQuery.java @@ -19,6 +19,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.ToString; import org.thingsboard.server.common.data.alarm.AlarmSearchStatus; @@ -31,6 +32,7 @@ import java.util.List; @NoArgsConstructor @AllArgsConstructor @Data +@EqualsAndHashCode(callSuper = false) @ToString @Schema public class AlarmCountQuery extends EntityCountQuery { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/queue/Queue.java b/common/data/src/main/java/org/thingsboard/server/common/data/queue/Queue.java index 57e0e6af66..d6a4f2b12f 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/queue/Queue.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/queue/Queue.java @@ -18,6 +18,7 @@ package org.thingsboard.server.common.data.queue; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.databind.JsonNode; import lombok.Data; +import lombok.EqualsAndHashCode; import org.thingsboard.server.common.data.BaseDataWithAdditionalInfo; import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.HasTenantId; @@ -30,6 +31,7 @@ import org.thingsboard.server.common.data.validation.NoXss; import java.util.Optional; @Data +@EqualsAndHashCode(callSuper = false) public class Queue extends BaseDataWithAdditionalInfo implements HasName, HasTenantId, QueueConfig { private TenantId tenantId; @NoXss diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/rule/RuleNodeState.java b/common/data/src/main/java/org/thingsboard/server/common/data/rule/RuleNodeState.java index cb861a6726..0624350d7e 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/rule/RuleNodeState.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/rule/RuleNodeState.java @@ -16,12 +16,14 @@ package org.thingsboard.server.common.data.rule; import lombok.Data; +import lombok.EqualsAndHashCode; import org.thingsboard.server.common.data.BaseData; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.RuleNodeId; import org.thingsboard.server.common.data.id.RuleNodeStateId; @Data +@EqualsAndHashCode(callSuper = false) public class RuleNodeState extends BaseData { private RuleNodeId ruleNodeId; diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetTypeInfo.java b/common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetTypeInfo.java index 9fe846796b..9acce93aa3 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetTypeInfo.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetTypeInfo.java @@ -18,6 +18,7 @@ package org.thingsboard.server.common.data.widget; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.Valid; import lombok.Data; +import lombok.EqualsAndHashCode; import org.thingsboard.server.common.data.id.WidgetTypeId; import org.thingsboard.server.common.data.validation.NoXss; @@ -26,6 +27,7 @@ import java.util.Collections; import java.util.List; @Data +@EqualsAndHashCode(callSuper = false) public class WidgetTypeInfo extends BaseWidgetType { @Serial diff --git a/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/limits/GatewaySessionLimits.java b/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/limits/GatewaySessionLimits.java index 45d9e21e39..8356a17748 100644 --- a/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/limits/GatewaySessionLimits.java +++ b/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/limits/GatewaySessionLimits.java @@ -16,8 +16,10 @@ package org.thingsboard.server.transport.mqtt.limits; import lombok.Data; +import lombok.EqualsAndHashCode; @Data +@EqualsAndHashCode(callSuper = false) public class GatewaySessionLimits extends SessionLimits { private SessionRateLimits gatewayRateLimits; diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sqlts/latest/TsKvLatestEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sqlts/latest/TsKvLatestEntity.java index 971c06c7a0..f73b634f08 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sqlts/latest/TsKvLatestEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sqlts/latest/TsKvLatestEntity.java @@ -26,6 +26,7 @@ import jakarta.persistence.SqlResultSetMapping; import jakarta.persistence.SqlResultSetMappings; import jakarta.persistence.Table; import lombok.Data; +import lombok.EqualsAndHashCode; import org.thingsboard.server.common.data.kv.TsKvEntry; import org.thingsboard.server.dao.model.sql.AbstractTsKvEntity; import org.thingsboard.server.dao.sqlts.latest.SearchTsKvLatestRepository; @@ -35,6 +36,7 @@ import java.util.UUID; import static org.thingsboard.server.dao.model.ModelConstants.VERSION_COLUMN; @Data +@EqualsAndHashCode(callSuper = false) @Entity @Table(name = "ts_kv_latest") @IdClass(TsKvLatestCompositeKey.class) diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbClearAlarmNodeConfiguration.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbClearAlarmNodeConfiguration.java index a69a157241..ab305919fd 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbClearAlarmNodeConfiguration.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbClearAlarmNodeConfiguration.java @@ -16,10 +16,12 @@ package org.thingsboard.rule.engine.action; import lombok.Data; +import lombok.EqualsAndHashCode; import org.thingsboard.rule.engine.api.NodeConfiguration; import org.thingsboard.server.common.data.script.ScriptLanguage; @Data +@EqualsAndHashCode(callSuper = false) public class TbClearAlarmNodeConfiguration extends TbAbstractAlarmNodeConfiguration implements NodeConfiguration { @Override diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbCreateAlarmNodeConfiguration.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbCreateAlarmNodeConfiguration.java index 8c791e7634..bf305a55d1 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbCreateAlarmNodeConfiguration.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbCreateAlarmNodeConfiguration.java @@ -16,6 +16,7 @@ package org.thingsboard.rule.engine.action; import lombok.Data; +import lombok.EqualsAndHashCode; import org.thingsboard.rule.engine.api.NodeConfiguration; import org.thingsboard.server.common.data.alarm.AlarmSeverity; import org.thingsboard.server.common.data.script.ScriptLanguage; @@ -25,6 +26,7 @@ import java.util.Collections; import java.util.List; @Data +@EqualsAndHashCode(callSuper = false) public class TbCreateAlarmNodeConfiguration extends TbAbstractAlarmNodeConfiguration implements NodeConfiguration { @NoXss diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/geo/TbGpsGeofencingActionNodeConfiguration.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/geo/TbGpsGeofencingActionNodeConfiguration.java index 3b59d814f1..6551352823 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/geo/TbGpsGeofencingActionNodeConfiguration.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/geo/TbGpsGeofencingActionNodeConfiguration.java @@ -16,6 +16,7 @@ package org.thingsboard.rule.engine.geo; import lombok.Data; +import lombok.EqualsAndHashCode; import org.thingsboard.common.util.geo.PerimeterType; import java.util.concurrent.TimeUnit; @@ -24,6 +25,7 @@ import java.util.concurrent.TimeUnit; * Created by ashvayka on 19.01.18. */ @Data +@EqualsAndHashCode(callSuper = false) public class TbGpsGeofencingActionNodeConfiguration extends TbGpsGeofencingFilterNodeConfiguration { private int minInsideDuration; diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/mqtt/azure/AzureIotHubSasCredentials.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/mqtt/azure/AzureIotHubSasCredentials.java index fe17c659e1..93d1ef7ef8 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/mqtt/azure/AzureIotHubSasCredentials.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/mqtt/azure/AzureIotHubSasCredentials.java @@ -20,6 +20,7 @@ import io.netty.handler.ssl.ClientAuth; import io.netty.handler.ssl.SslContext; import io.netty.handler.ssl.SslContextBuilder; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.thingsboard.common.util.AzureIotHubUtil; @@ -29,6 +30,7 @@ import org.thingsboard.rule.engine.credentials.CredentialsType; import java.security.Security; @Data +@EqualsAndHashCode(callSuper = false) @Slf4j @JsonIgnoreProperties(ignoreUnknown = true) public class AzureIotHubSasCredentials extends CertPemCredentials { diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/mqtt/azure/TbAzureIotHubNodeConfiguration.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/mqtt/azure/TbAzureIotHubNodeConfiguration.java index c786478575..f11173f3f9 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/mqtt/azure/TbAzureIotHubNodeConfiguration.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/mqtt/azure/TbAzureIotHubNodeConfiguration.java @@ -17,9 +17,11 @@ package org.thingsboard.rule.engine.mqtt.azure; import io.netty.handler.codec.mqtt.MqttVersion; import lombok.Data; +import lombok.EqualsAndHashCode; import org.thingsboard.rule.engine.mqtt.TbMqttNodeConfiguration; @Data +@EqualsAndHashCode(callSuper = false) public class TbAzureIotHubNodeConfiguration extends TbMqttNodeConfiguration { @Override From 0cb985cb92e44a511cbfe5f95cd73e29a858c6c0 Mon Sep 17 00:00:00 2001 From: Oleksandra Matviienko Date: Fri, 24 Apr 2026 11:31:54 +0200 Subject: [PATCH 11/12] Modernized Redis access in LwM2M transport and OTA cache --- .../cache/ota/RedisOtaPackageDataCache.java | 8 +-- .../store/TbLwM2MDtlsSessionRedisStore.java | 6 +- .../store/TbLwM2mRedisClientOtaInfoStore.java | 4 +- .../store/TbLwM2mRedisRegistrationStore.java | 68 +++++++++---------- .../store/TbLwM2mRedisSecurityStore.java | 24 +++---- .../server/store/TbRedisLwM2MClientStore.java | 10 +-- .../store/TbRedisLwM2MModelConfigStore.java | 8 +-- .../store/TbRedisLwM2MClientStoreTest.java | 21 +++--- 8 files changed, 75 insertions(+), 74 deletions(-) diff --git a/common/cache/src/main/java/org/thingsboard/server/cache/ota/RedisOtaPackageDataCache.java b/common/cache/src/main/java/org/thingsboard/server/cache/ota/RedisOtaPackageDataCache.java index c3a9ff0385..1e13b1cfe9 100644 --- a/common/cache/src/main/java/org/thingsboard/server/cache/ota/RedisOtaPackageDataCache.java +++ b/common/cache/src/main/java/org/thingsboard/server/cache/ota/RedisOtaPackageDataCache.java @@ -39,26 +39,26 @@ public class RedisOtaPackageDataCache implements OtaPackageDataCache { public byte[] get(String key, int chunkSize, int chunk) { try (RedisConnection connection = redisConnectionFactory.getConnection()) { if (chunkSize == 0) { - return connection.get(toOtaPackageCacheKey(key)); + return connection.stringCommands().get(toOtaPackageCacheKey(key)); } int startIndex = chunkSize * chunk; int endIndex = startIndex + chunkSize - 1; - return connection.getRange(toOtaPackageCacheKey(key), startIndex, endIndex); + return connection.stringCommands().getRange(toOtaPackageCacheKey(key), startIndex, endIndex); } } @Override public void put(String key, byte[] value) { try (RedisConnection connection = redisConnectionFactory.getConnection()) { - connection.set(toOtaPackageCacheKey(key), value); + connection.stringCommands().set(toOtaPackageCacheKey(key), value); } } @Override public void evict(String key) { try (RedisConnection connection = redisConnectionFactory.getConnection()) { - connection.del(toOtaPackageCacheKey(key)); + connection.keyCommands().del(toOtaPackageCacheKey(key)); } } diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbLwM2MDtlsSessionRedisStore.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbLwM2MDtlsSessionRedisStore.java index ead9269108..fa78bbb7bb 100644 --- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbLwM2MDtlsSessionRedisStore.java +++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbLwM2MDtlsSessionRedisStore.java @@ -33,7 +33,7 @@ public class TbLwM2MDtlsSessionRedisStore implements TbLwM2MDtlsSessionStore { try (var c = connectionFactory.getConnection()) { var serializedMsg = JavaSerDesUtil.encode(msg); if (serializedMsg != null) { - c.set(getKey(endpoint), serializedMsg); + c.stringCommands().set(getKey(endpoint), serializedMsg); } else { throw new RuntimeException("Problem with serialization of message: " + msg); } @@ -43,7 +43,7 @@ public class TbLwM2MDtlsSessionRedisStore implements TbLwM2MDtlsSessionStore { @Override public TbX509DtlsSessionInfo get(String endpoint) { try (var c = connectionFactory.getConnection()) { - var data = c.get(getKey(endpoint)); + var data = c.stringCommands().get(getKey(endpoint)); if (data != null) { return JavaSerDesUtil.decode(data); } else { @@ -55,7 +55,7 @@ public class TbLwM2MDtlsSessionRedisStore implements TbLwM2MDtlsSessionStore { @Override public void remove(String endpoint) { try (var c = connectionFactory.getConnection()) { - c.del(getKey(endpoint)); + c.keyCommands().del(getKey(endpoint)); } } diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbLwM2mRedisClientOtaInfoStore.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbLwM2mRedisClientOtaInfoStore.java index 8301d4a448..c75a5ff8a0 100644 --- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbLwM2mRedisClientOtaInfoStore.java +++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbLwM2mRedisClientOtaInfoStore.java @@ -33,7 +33,7 @@ public class TbLwM2mRedisClientOtaInfoStore implements TbLwM2MClientOtaInfoStore private void put(OtaPackageType type, LwM2MClientOtaInfo info) { try (var connection = connectionFactory.getConnection()) { - connection.set((OTA_EP + type + info.getEndpoint()).getBytes(), JacksonUtil.toString(info).getBytes()); + connection.stringCommands().set((OTA_EP + type + info.getEndpoint()).getBytes(), JacksonUtil.toString(info).getBytes()); } } @@ -59,7 +59,7 @@ public class TbLwM2mRedisClientOtaInfoStore implements TbLwM2MClientOtaInfoStore private > T getLwM2MClientOtaInfo(OtaPackageType type, String endpoint, Class clazz) { try (var connection = connectionFactory.getConnection()) { - byte[] data = connection.get((OTA_EP + type + endpoint).getBytes()); + byte[] data = connection.stringCommands().get((OTA_EP + type + endpoint).getBytes()); return JacksonUtil.fromBytes(data, clazz); } } diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbLwM2mRedisRegistrationStore.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbLwM2mRedisRegistrationStore.java index 8158e82a81..06f91729e4 100644 --- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbLwM2mRedisRegistrationStore.java +++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbLwM2mRedisRegistrationStore.java @@ -163,15 +163,15 @@ public class TbLwM2mRedisRegistrationStore implements RegistrationStore, Startab lock.lock(); // add registration byte[] k = toEndpointKey(registration.getEndpoint()); - byte[] old = connection.getSet(k, serializeReg(registration)); + byte[] old = connection.stringCommands().getSet(k, serializeReg(registration)); // add registration: secondary indexes byte[] regid_idx = toRegIdKey(registration.getId()); - connection.set(regid_idx, registration.getEndpoint().getBytes(UTF_8)); + connection.stringCommands().set(regid_idx, registration.getEndpoint().getBytes(UTF_8)); byte[] addr_idx = toRegAddrKey(registration.getSocketAddress()); - connection.set(addr_idx, registration.getEndpoint().getBytes(UTF_8)); + connection.stringCommands().set(addr_idx, registration.getEndpoint().getBytes(UTF_8)); byte[] identity_idx = toRegIdentityKey(registration.getClientTransportData().getIdentity()); - connection.set(identity_idx, registration.getEndpoint().getBytes(UTF_8)); + connection.stringCommands().set(identity_idx, registration.getEndpoint().getBytes(UTF_8)); // Add or update expiration addOrUpdateExpiration(connection, registration); @@ -180,7 +180,7 @@ public class TbLwM2mRedisRegistrationStore implements RegistrationStore, Startab Registration oldRegistration = deserializeReg(old); // remove old secondary index if (!registration.getId().equals(oldRegistration.getId())) - connection.del(toRegIdKey(oldRegistration.getId())); + connection.keyCommands().del(toRegIdKey(oldRegistration.getId())); if (!oldRegistration.getSocketAddress().equals(registration.getSocketAddress())) { removeAddrIndex(connection, oldRegistration); } @@ -209,7 +209,7 @@ public class TbLwM2mRedisRegistrationStore implements RegistrationStore, Startab try (var connection = connectionFactory.getConnection()) { // Fetch the registration ep by registration ID index - byte[] ep = connection.get(toRegIdKey(update.getRegistrationId())); + byte[] ep = connection.stringCommands().get(toRegIdKey(update.getRegistrationId())); if (ep == null) { return null; } @@ -220,7 +220,7 @@ public class TbLwM2mRedisRegistrationStore implements RegistrationStore, Startab lock.lock(); // Fetch the registration - byte[] data = connection.get(toEndpointKey(ep)); + byte[] data = connection.stringCommands().get(toEndpointKey(ep)); if (data == null) { return null; } @@ -230,7 +230,7 @@ public class TbLwM2mRedisRegistrationStore implements RegistrationStore, Startab Registration updatedRegistration = update.update(r); // Store the new registration - connection.set(toEndpointKey(updatedRegistration.getEndpoint()), serializeReg(updatedRegistration)); + connection.stringCommands().set(toEndpointKey(updatedRegistration.getEndpoint()), serializeReg(updatedRegistration)); // Add or update expiration addOrUpdateExpiration(connection, updatedRegistration); @@ -239,7 +239,7 @@ public class TbLwM2mRedisRegistrationStore implements RegistrationStore, Startab * If registration is already associated to this address we don't care as we only want to keep the most * recent binding. */ byte[] addr_idx = toRegAddrKey(updatedRegistration.getSocketAddress()); - connection.set(addr_idx, updatedRegistration.getEndpoint().getBytes(UTF_8)); + connection.stringCommands().set(addr_idx, updatedRegistration.getEndpoint().getBytes(UTF_8)); if (!r.getSocketAddress().equals(updatedRegistration.getSocketAddress())) { removeAddrIndex(connection, r); } @@ -265,11 +265,11 @@ public class TbLwM2mRedisRegistrationStore implements RegistrationStore, Startab } private Registration getRegistration(RedisConnection connection, String registrationId) { - byte[] ep = connection.get(toRegIdKey(registrationId)); + byte[] ep = connection.stringCommands().get(toRegIdKey(registrationId)); if (ep == null) { return null; } - byte[] data = connection.get(toEndpointKey(ep)); + byte[] data = connection.stringCommands().get(toEndpointKey(ep)); if (data == null) { return null; } @@ -281,7 +281,7 @@ public class TbLwM2mRedisRegistrationStore implements RegistrationStore, Startab public Registration getRegistrationByEndpoint(String endpoint) { Validate.notNull(endpoint); try (var connection = connectionFactory.getConnection()) { - byte[] data = connection.get(toEndpointKey(endpoint)); + byte[] data = connection.stringCommands().get(toEndpointKey(endpoint)); if (data == null) { return null; } @@ -293,11 +293,11 @@ public class TbLwM2mRedisRegistrationStore implements RegistrationStore, Startab public Registration getRegistrationByAdress(InetSocketAddress address) { Validate.notNull(address); try (var connection = connectionFactory.getConnection()) { - byte[] ep = connection.get(toRegAddrKey(address)); + byte[] ep = connection.stringCommands().get(toRegAddrKey(address)); if (ep == null) { return null; } - byte[] data = connection.get(toEndpointKey(ep)); + byte[] data = connection.stringCommands().get(toEndpointKey(ep)); if (data == null) { return null; } @@ -309,11 +309,11 @@ public class TbLwM2mRedisRegistrationStore implements RegistrationStore, Startab public Registration getRegistrationByIdentity(LwM2mIdentity identity) { Validate.notNull(identity); try (var connection = connectionFactory.getConnection()) { - byte[] ep = connection.get(toRegIdentityKey(identity)); + byte[] ep = connection.stringCommands().get(toRegIdentityKey(identity)); if (ep == null) { return null; } - byte[] data = connection.get(toEndpointKey(ep)); + byte[] data = connection.stringCommands().get(toEndpointKey(ep)); if (data == null) { return null; } @@ -332,12 +332,12 @@ public class TbLwM2mRedisRegistrationStore implements RegistrationStore, Startab clusterConnection.clusterGetNodes().forEach(node -> scans.add(clusterConnection.scan(node, scanOptions))); } else { - scans.add(scanConnection.scan(scanOptions)); + scans.add(scanConnection.keyCommands().scan(scanOptions)); } scans.forEach(scan -> { scan.forEachRemaining(key -> { - byte[] element = getConnection.get(key); + byte[] element = getConnection.stringCommands().get(key); if (element != null) { list.add(deserializeReg(element)); } @@ -357,7 +357,7 @@ public class TbLwM2mRedisRegistrationStore implements RegistrationStore, Startab private Deregistration removeRegistration(RedisConnection connection, String registrationId, boolean removeOnlyIfNotAlive) { // fetch the client ep by registration ID index - byte[] ep = connection.get(toRegIdKey(registrationId)); + byte[] ep = connection.stringCommands().get(toRegIdKey(registrationId)); if (ep == null) { return null; } @@ -369,16 +369,16 @@ public class TbLwM2mRedisRegistrationStore implements RegistrationStore, Startab lock.lock(); // fetch the client - byte[] data = connection.get(toEndpointKey(ep)); + byte[] data = connection.stringCommands().get(toEndpointKey(ep)); if (data == null) { return null; } Registration r = deserializeReg(data); if (!removeOnlyIfNotAlive || !r.isAlive(gracePeriod)) { - long nbRemoved = connection.del(toRegIdKey(r.getId())); + long nbRemoved = connection.keyCommands().del(toRegIdKey(r.getId())); if (nbRemoved > 0) { - connection.del(toEndpointKey(r.getEndpoint())); + connection.keyCommands().del(toEndpointKey(r.getEndpoint())); Collection obsRemoved = unsafeRemoveAllObservations(connection, r.getId()); removeAddrIndex(connection, r); removeIdentityIndex(connection, r); @@ -407,12 +407,12 @@ public class TbLwM2mRedisRegistrationStore implements RegistrationStore, Startab // Watch the key to remove. // connection.watch(indexKey); - byte[] epFromAddr = connection.get(indexKey); + byte[] epFromAddr = connection.stringCommands().get(indexKey); // Delete the key if needed. if (Arrays.equals(epFromAddr, endpointName.getBytes(UTF_8))) { // Try to delete the key // connection.multi(); - connection.del(indexKey); + connection.keyCommands().del(indexKey); // connection.exec(); // if transaction failed this is not an issue as the index is probably reused and we don't need to // delete it anymore. @@ -423,11 +423,11 @@ public class TbLwM2mRedisRegistrationStore implements RegistrationStore, Startab } private void addOrUpdateExpiration(RedisConnection connection, Registration registration) { - connection.zAdd(EXP_EP, registration.getExpirationTimeStamp(gracePeriod), registration.getEndpoint().getBytes(UTF_8)); + connection.zSetCommands().zAdd(EXP_EP, registration.getExpirationTimeStamp(gracePeriod), registration.getEndpoint().getBytes(UTF_8)); } private void removeExpiration(RedisConnection connection, Registration registration) { - connection.zRem(EXP_EP, registration.getEndpoint().getBytes(UTF_8)); + connection.zSetCommands().zRem(EXP_EP, registration.getEndpoint().getBytes(UTF_8)); } private byte[] toRegIdKey(String registrationId) { @@ -556,7 +556,7 @@ public class TbLwM2mRedisRegistrationStore implements RegistrationStore, Startab @Override public Observation getObservation(ObservationIdentifier observationId) { try (var connection = connectionFactory.getConnection()) { - byte[] observationValue = connection.get(toKey(OBS_TKN, observationId.getBytes())); + byte[] observationValue = connection.stringCommands().get(toKey(OBS_TKN, observationId.getBytes())); return deserializeObs(observationValue); } } @@ -570,7 +570,7 @@ public class TbLwM2mRedisRegistrationStore implements RegistrationStore, Startab try (var connection = connectionFactory.getConnection()) { // fetch the client ep by registration ID index - byte[] ep = connection.get(toRegIdKey(registrationId)); + byte[] ep = connection.stringCommands().get(toRegIdKey(registrationId)); if (ep == null) { return null; } @@ -635,7 +635,7 @@ public class TbLwM2mRedisRegistrationStore implements RegistrationStore, Startab public Observation get(Token token) { try (var connection = connectionFactory.getConnection()) { - byte[] obs = connection.get(toKey(OBS_TKN, token.getBytes())); + byte[] obs = connection.stringCommands().get(toKey(OBS_TKN, token.getBytes())); if (obs == null) { return null; } else { @@ -664,14 +664,14 @@ public class TbLwM2mRedisRegistrationStore implements RegistrationStore, Startab byte[] regIdKey = toKey(OBS_TKNS_REGID_IDX, registrationId); // fetch all observations by token - for (byte[] token : connection.lRange(regIdKey, 0, -1)) { - byte[] obs = connection.get(toKey(OBS_TKN, token)); + for (byte[] token : connection.listCommands().lRange(regIdKey, 0, -1)) { + byte[] obs = connection.stringCommands().get(toKey(OBS_TKN, token)); if (obs != null) { removed.add(deserializeObs(obs)); } - connection.del(toKey(OBS_TKN, token)); + connection.keyCommands().del(toKey(OBS_TKN, token)); } - connection.del(regIdKey); + connection.keyCommands().del(regIdKey); return removed; } @@ -752,7 +752,7 @@ public class TbLwM2mRedisRegistrationStore implements RegistrationStore, Startab System.currentTimeMillis(), 0, cleanLimit); for (byte[] endpoint : endpointsExpired) { - byte[] data = connection.get(toEndpointKey(endpoint)); + byte[] data = connection.stringCommands().get(toEndpointKey(endpoint)); if (data != null && data.length > 0) { Registration r = deserializeReg(data); if (!r.isAlive(gracePeriod)) { diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbLwM2mRedisSecurityStore.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbLwM2mRedisSecurityStore.java index b07156d0ef..1e5d480c81 100644 --- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbLwM2mRedisSecurityStore.java +++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbLwM2mRedisSecurityStore.java @@ -52,7 +52,7 @@ public class TbLwM2mRedisSecurityStore implements TbEditableSecurityStore { try (var connection = connectionFactory.getConnection()) { lock = redisLock.obtain(toLockKey(endpoint)); lock.lock(); - byte[] data = connection.get((SEC_EP + endpoint).getBytes()); + byte[] data = connection.stringCommands().get((SEC_EP + endpoint).getBytes()); if (data == null || data.length == 0) { return null; } else { @@ -96,11 +96,11 @@ public class TbLwM2mRedisSecurityStore implements TbEditableSecurityStore { try (var connection = connectionFactory.getConnection()) { lock = redisLock.obtain(toLockKey(identity)); lock.lock(); - byte[] ep = connection.hGet(PSKID_SEC.getBytes(), identity.getBytes()); + byte[] ep = connection.hashCommands().hGet(PSKID_SEC.getBytes(), identity.getBytes()); if (ep == null) { return null; } else { - byte[] data = connection.get((SEC_EP + new String(ep)).getBytes()); + byte[] data = connection.stringCommands().get((SEC_EP + new String(ep)).getBytes()); if (data == null || data.length == 0) { return null; } else { @@ -128,17 +128,17 @@ public class TbLwM2mRedisSecurityStore implements TbEditableSecurityStore { lock = redisLock.obtain(tbSecurityInfo.getEndpoint()); lock.lock(); if (info != null && info.getPskIdentity() != null) { - byte[] oldEndpointBytes = connection.hGet(PSKID_SEC.getBytes(), info.getPskIdentity().getBytes()); + byte[] oldEndpointBytes = connection.hashCommands().hGet(PSKID_SEC.getBytes(), info.getPskIdentity().getBytes()); if (oldEndpointBytes != null) { String oldEndpoint = new String(oldEndpointBytes); if (!oldEndpoint.equals(info.getEndpoint())) { throw new NonUniqueSecurityInfoException("PSK Identity " + info.getPskIdentity() + " is already used"); } - connection.hSet(PSKID_SEC.getBytes(), info.getPskIdentity().getBytes(), info.getEndpoint().getBytes()); + connection.hashCommands().hSet(PSKID_SEC.getBytes(), info.getPskIdentity().getBytes(), info.getEndpoint().getBytes()); } } - byte[] previousData = connection.getSet((SEC_EP + tbSecurityInfo.getEndpoint()).getBytes(), tbSecurityInfoSerialized); + byte[] previousData = connection.stringCommands().getSet((SEC_EP + tbSecurityInfo.getEndpoint()).getBytes(), tbSecurityInfoSerialized); // for tests: redis connect NoSec (securityInfo == null) log.info("lwm2m redis connect. Endpoint: [{}], secMode: [{}] key: [{}], tbSecurityInfoSerialized [{}]", @@ -147,7 +147,7 @@ public class TbLwM2mRedisSecurityStore implements TbEditableSecurityStore { if (previousData != null && info != null) { String previousIdentity = ((TbLwM2MSecurityInfo) JavaSerDesUtil.decode(previousData)).getSecurityInfo().getPskIdentity(); if (previousIdentity != null && !previousIdentity.equals(info.getPskIdentity())) { - connection.hDel(PSKID_SEC.getBytes(), previousIdentity.getBytes()); + connection.hashCommands().hDel(PSKID_SEC.getBytes(), previousIdentity.getBytes()); } } } finally { @@ -163,7 +163,7 @@ public class TbLwM2mRedisSecurityStore implements TbEditableSecurityStore { try (var connection = connectionFactory.getConnection()) { lock = redisLock.obtain(endpoint); lock.lock(); - byte[] data = connection.get((SEC_EP + endpoint).getBytes()); + byte[] data = connection.stringCommands().get((SEC_EP + endpoint).getBytes()); if (data != null && data.length > 0) { return JavaSerDesUtil.decode(data); } else { @@ -182,13 +182,13 @@ public class TbLwM2mRedisSecurityStore implements TbEditableSecurityStore { try (var connection = connectionFactory.getConnection()) { lock = redisLock.obtain(endpoint); lock.lock(); - byte[] data = connection.get((SEC_EP + endpoint).getBytes()); + byte[] data = connection.stringCommands().get((SEC_EP + endpoint).getBytes()); if (data != null && data.length > 0) { SecurityInfo info = ((TbLwM2MSecurityInfo) JavaSerDesUtil.decode(data)).getSecurityInfo(); if (info != null && info.getPskIdentity() != null) { - connection.hDel(PSKID_SEC.getBytes(), info.getPskIdentity().getBytes()); + connection.hashCommands().hDel(PSKID_SEC.getBytes(), info.getPskIdentity().getBytes()); } - connection.del((SEC_EP + endpoint).getBytes()); + connection.keyCommands().del((SEC_EP + endpoint).getBytes()); } } finally { if (lock != null) { @@ -203,7 +203,7 @@ public class TbLwM2mRedisSecurityStore implements TbEditableSecurityStore { private SecurityMode getSecurityModeByRegistration (RedisConnection connection, String endpoint) { try { - byte[] data = connection.get((REG_EP + endpoint).getBytes()); + byte[] data = connection.stringCommands().get((REG_EP + endpoint).getBytes()); JsonNode registrationNode = JacksonUtil.fromString(new String(data != null ? data : new byte[0]), JsonNode.class); String typeModeStr = registrationNode.get("transportdata").get("identity").get("type").asText(); return "unsecure".equals(typeModeStr) ? SecurityMode.NO_SEC : null; diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbRedisLwM2MClientStore.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbRedisLwM2MClientStore.java index 4beefb4896..73d4bd95da 100644 --- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbRedisLwM2MClientStore.java +++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbRedisLwM2MClientStore.java @@ -45,7 +45,7 @@ public class TbRedisLwM2MClientStore implements TbLwM2MClientStore { @Override public LwM2mClient get(String endpoint) { try (var connection = connectionFactory.getConnection()) { - byte[] data = connection.get(getKey(endpoint)); + byte[] data = connection.stringCommands().get(getKey(endpoint)); if (data == null) { return null; } else { @@ -70,12 +70,12 @@ public class TbRedisLwM2MClientStore implements TbLwM2MClientStore { clusterConnection.clusterGetNodes().forEach(node -> scans.add(clusterConnection.scan(node, scanOptions))); } else { - scans.add(scanConnection.scan(scanOptions)); + scans.add(scanConnection.keyCommands().scan(scanOptions)); } scans.forEach(scan -> { scan.forEachRemaining(key -> { - byte[] element = getConnection.get(key); + byte[] element = getConnection.stringCommands().get(key); if (element != null) { try { clients.add(deserialize(element)); @@ -97,7 +97,7 @@ public class TbRedisLwM2MClientStore implements TbLwM2MClientStore { try { byte[] clientSerialized = serialize(client); try (var connection = connectionFactory.getConnection()) { - connection.getSet(getKey(client.getEndpoint()), clientSerialized); + connection.stringCommands().getSet(getKey(client.getEndpoint()), clientSerialized); } } catch (Exception e) { log.warn("Failed to serialize client: {}", client, e); @@ -108,7 +108,7 @@ public class TbRedisLwM2MClientStore implements TbLwM2MClientStore { @Override public void remove(String endpoint) { try (var connection = connectionFactory.getConnection()) { - connection.del(getKey(endpoint)); + connection.keyCommands().del(getKey(endpoint)); } } diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbRedisLwM2MModelConfigStore.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbRedisLwM2MModelConfigStore.java index 31a78234d0..65ed90d15d 100644 --- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbRedisLwM2MModelConfigStore.java +++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/TbRedisLwM2MModelConfigStore.java @@ -44,12 +44,12 @@ public class TbRedisLwM2MModelConfigStore implements TbLwM2MModelConfigStore { clusterConnection.clusterGetNodes().forEach(node -> scans.add(clusterConnection.scan(node, scanOptions))); } else { - scans.add(scanConnection.scan(scanOptions)); + scans.add(scanConnection.keyCommands().scan(scanOptions)); } scans.forEach(scan -> { scan.forEachRemaining(key -> { - byte[] element = getConnection.get(key); + byte[] element = getConnection.stringCommands().get(key); if (element != null) { configs.add(JacksonUtil.fromBytes(element, LwM2MModelConfig.class)); } @@ -63,14 +63,14 @@ public class TbRedisLwM2MModelConfigStore implements TbLwM2MModelConfigStore { public void put(LwM2MModelConfig modelConfig) { byte[] clientSerialized = JacksonUtil.writeValueAsBytes(modelConfig); try (var connection = connectionFactory.getConnection()) { - connection.getSet(getKey(modelConfig.getEndpoint()), clientSerialized); + connection.stringCommands().getSet(getKey(modelConfig.getEndpoint()), clientSerialized); } } @Override public void remove(String endpoint) { try (var connection = connectionFactory.getConnection()) { - connection.del(getKey(endpoint)); + connection.keyCommands().del(getKey(endpoint)); } } diff --git a/common/transport/lwm2m/src/test/java/org/thingsboard/server/transport/lwm2m/server/store/TbRedisLwM2MClientStoreTest.java b/common/transport/lwm2m/src/test/java/org/thingsboard/server/transport/lwm2m/server/store/TbRedisLwM2MClientStoreTest.java index 9fe29c1188..fe8d66365f 100644 --- a/common/transport/lwm2m/src/test/java/org/thingsboard/server/transport/lwm2m/server/store/TbRedisLwM2MClientStoreTest.java +++ b/common/transport/lwm2m/src/test/java/org/thingsboard/server/transport/lwm2m/server/store/TbRedisLwM2MClientStoreTest.java @@ -18,6 +18,7 @@ package org.thingsboard.server.transport.lwm2m.server.store; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Answers; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.data.redis.connection.RedisConnection; @@ -51,10 +52,10 @@ class TbRedisLwM2MClientStoreTest { @Mock RedisConnectionFactory connectionFactory; - @Mock + @Mock(answer = Answers.RETURNS_DEEP_STUBS) RedisConnection scanConnection; - @Mock + @Mock(answer = Answers.RETURNS_DEEP_STUBS) RedisConnection getConnection; TbRedisLwM2MClientStore store; @@ -77,8 +78,8 @@ class TbRedisLwM2MClientStoreTest { // Cursor created before thenReturn to avoid Mockito unfinished-stubbing error Cursor cursor = cursorOf(key); - when(scanConnection.scan(any(ScanOptions.class))).thenReturn(cursor); - when(getConnection.get(key)).thenReturn(value); + when(scanConnection.keyCommands().scan(any(ScanOptions.class))).thenReturn(cursor); + when(getConnection.stringCommands().get(key)).thenReturn(value); Set result = store.getAll(); @@ -89,29 +90,29 @@ class TbRedisLwM2MClientStoreTest { @Test void getAll_getIsNeverCalledOnScanConnection() { Cursor cursor = cursorOf(); - when(scanConnection.scan(any(ScanOptions.class))).thenReturn(cursor); + when(scanConnection.keyCommands().scan(any(ScanOptions.class))).thenReturn(cursor); store.getAll(); - verify(scanConnection, never()).get(any(byte[].class)); + verify(scanConnection.stringCommands(), never()).get(any(byte[].class)); } @Test void getAll_scanIsNeverCalledOnGetConnection() { Cursor cursor = cursorOf(); - when(scanConnection.scan(any(ScanOptions.class))).thenReturn(cursor); + when(scanConnection.keyCommands().scan(any(ScanOptions.class))).thenReturn(cursor); store.getAll(); - verify(getConnection, never()).scan(any(ScanOptions.class)); + verify(getConnection.keyCommands(), never()).scan(any(ScanOptions.class)); } @Test void getAll_skipsKeyWhenValueIsNull() { byte[] key = "CLIENT#EP#gone".getBytes(); Cursor cursor = cursorOf(key); - when(scanConnection.scan(any(ScanOptions.class))).thenReturn(cursor); - // getConnection.get(key) returns null by default — no stubbing needed + when(scanConnection.keyCommands().scan(any(ScanOptions.class))).thenReturn(cursor); + // getConnection.stringCommands().get(key) returns null by default — no stubbing needed Set result = store.getAll(); From e874a91df0fa1fb4341eec659621ae4aef0e2248 Mon Sep 17 00:00:00 2001 From: Oleksandra Matviienko Date: Tue, 19 May 2026 15:25:43 +0200 Subject: [PATCH 12/12] Technical cleanup of deprecated Curator API in ZooKeeper discovery --- .../queue/discovery/ZkDiscoveryService.java | 48 ++++++++++--------- .../discovery/ZkDiscoveryServiceTest.java | 31 ++++++------ 2 files changed, 41 insertions(+), 38 deletions(-) diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/discovery/ZkDiscoveryService.java b/common/queue/src/main/java/org/thingsboard/server/queue/discovery/ZkDiscoveryService.java index ccc242a1a3..47c2761020 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/discovery/ZkDiscoveryService.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/discovery/ZkDiscoveryService.java @@ -26,9 +26,8 @@ import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.framework.imps.CuratorFrameworkState; import org.apache.curator.framework.recipes.cache.ChildData; -import org.apache.curator.framework.recipes.cache.PathChildrenCache; -import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent; -import org.apache.curator.framework.recipes.cache.PathChildrenCacheListener; +import org.apache.curator.framework.recipes.cache.CuratorCache; +import org.apache.curator.framework.recipes.cache.CuratorCacheListener; import org.apache.curator.framework.state.ConnectionState; import org.apache.curator.framework.state.ConnectionStateListener; import org.apache.curator.retry.RetryForever; @@ -54,12 +53,12 @@ import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -import static org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent.Type.CHILD_REMOVED; +import static org.apache.curator.framework.recipes.cache.CuratorCacheAccessor.parentPathFilter; @Service @ConditionalOnProperty(prefix = "zk", value = "enabled", havingValue = "true", matchIfMissing = false) @Slf4j -public class ZkDiscoveryService implements DiscoveryService, PathChildrenCacheListener { +public class ZkDiscoveryService implements DiscoveryService { @Value("${zk.url}") private String zkUrl; @@ -84,7 +83,7 @@ public class ZkDiscoveryService implements DiscoveryService, PathChildrenCacheLi private ScheduledExecutorService zkExecutorService; @Getter private CuratorFramework client; - private PathChildrenCache cache; + private CuratorCache cache; private String nodePath; private String zkNodesDir; @@ -117,7 +116,8 @@ public class ZkDiscoveryService implements DiscoveryService, PathChildrenCacheLi @Override public List getOtherServers() { - return cache.getCurrentData().stream() + return cache.stream() + .filter(parentPathFilter(zkNodesDir)) .filter(cd -> !cd.getPath().equals(nodePath)) .map(cd -> { try { @@ -241,7 +241,8 @@ public class ZkDiscoveryService implements DiscoveryService, PathChildrenCacheLi client = CuratorFrameworkFactory.newClient(zkUrl, zkSessionTimeout, zkConnectionTimeout, new RetryForever(zkRetryInterval)); client.start(); client.blockUntilConnected(); - cache = new PathChildrenCache(client, zkNodesDir, true); + client.createContainers(zkNodesDir); + cache = CuratorCache.builder(client, zkNodesDir).build(); cache.start(); stopped = false; log.info("ZK client connected"); @@ -254,7 +255,7 @@ public class ZkDiscoveryService implements DiscoveryService, PathChildrenCacheLi } private void subscribeToEvents() { - cache.getListenable().addListener(this); + cache.listenable().addListener(this::onCacheEvent); } private void unpublishCurrentServer() { @@ -286,29 +287,32 @@ public class ZkDiscoveryService implements DiscoveryService, PathChildrenCacheLi return "The " + propertyName + " property need to be set!"; } - @Override - public void childEvent(CuratorFramework curatorFramework, PathChildrenCacheEvent pathChildrenCacheEvent) throws Exception { + @SneakyThrows + void onCacheEvent(CuratorCacheListener.Type type, ChildData oldData, ChildData newData) { if (stopped) { - log.debug("Ignoring {}. Service is stopped.", pathChildrenCacheEvent); + log.debug("Ignoring {}. Service is stopped.", type); return; } if (client.getState() != CuratorFrameworkState.STARTED) { - log.debug("Ignoring {}, ZK client is not started, ZK client state [{}]", pathChildrenCacheEvent, client.getState()); + log.debug("Ignoring {}, ZK client is not started, ZK client state [{}]", type, client.getState()); return; } - ChildData data = pathChildrenCacheEvent.getData(); + ChildData data = type == CuratorCacheListener.Type.NODE_DELETED ? oldData : newData; if (data == null) { - log.debug("Ignoring {} due to empty child data", pathChildrenCacheEvent); + log.debug("Ignoring {} due to empty child data", type); return; } else if (data.getData() == null) { - log.debug("Ignoring {} due to empty child's data", pathChildrenCacheEvent); + log.debug("Ignoring {} due to empty child's data", type); + return; + } else if (zkNodesDir.equals(data.getPath())) { + log.debug("Ignoring event about parent node {}", data.getPath()); return; } else if (nodePath != null && nodePath.equals(data.getPath())) { - if (pathChildrenCacheEvent.getType() == CHILD_REMOVED) { + if (type == CuratorCacheListener.Type.NODE_DELETED) { log.info("ZK node for current instance is somehow deleted."); publishCurrentServer(); } - log.debug("Ignoring event about current server {}", pathChildrenCacheEvent); + log.debug("Ignoring event about current server {}", data.getPath()); return; } TransportProtos.ServiceInfo instance; @@ -322,9 +326,9 @@ public class ZkDiscoveryService implements DiscoveryService, PathChildrenCacheLi String serviceId = instance.getServiceId(); ProtocolStringList serviceTypesList = instance.getServiceTypesList(); - log.trace("Processing [{}] event for [{}]", pathChildrenCacheEvent.getType(), serviceId); - switch (pathChildrenCacheEvent.getType()) { - case CHILD_ADDED: + log.trace("Processing [{}] event for [{}]", type, serviceId); + switch (type) { + case NODE_CREATED: ScheduledFuture task = delayedTasks.remove(serviceId); if (task != null) { if (task.cancel(false)) { @@ -341,7 +345,7 @@ public class ZkDiscoveryService implements DiscoveryService, PathChildrenCacheLi recalculatePartitions(); } break; - case CHILD_REMOVED: + case NODE_DELETED: zkExecutorService.submit(() -> applicationEventPublisher.publishEvent(new OtherServiceShutdownEvent(this, serviceId, serviceTypesList))); ScheduledFuture future = zkExecutorService.schedule(() -> { log.debug("[{}] Going to recalculate partitions due to removed node [{}]", diff --git a/common/queue/src/test/java/org/thingsboard/server/queue/discovery/ZkDiscoveryServiceTest.java b/common/queue/src/test/java/org/thingsboard/server/queue/discovery/ZkDiscoveryServiceTest.java index 74bf30dca6..a7be216f66 100644 --- a/common/queue/src/test/java/org/thingsboard/server/queue/discovery/ZkDiscoveryServiceTest.java +++ b/common/queue/src/test/java/org/thingsboard/server/queue/discovery/ZkDiscoveryServiceTest.java @@ -18,8 +18,8 @@ package org.thingsboard.server.queue.discovery; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.imps.CuratorFrameworkState; import org.apache.curator.framework.recipes.cache.ChildData; -import org.apache.curator.framework.recipes.cache.PathChildrenCache; -import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent; +import org.apache.curator.framework.recipes.cache.CuratorCache; +import org.apache.curator.framework.recipes.cache.CuratorCacheListener; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -36,8 +36,8 @@ import java.util.Collections; import java.util.List; import java.util.concurrent.ScheduledExecutorService; -import static org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent.Type.CHILD_ADDED; -import static org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent.Type.CHILD_REMOVED; +import static org.apache.curator.framework.recipes.cache.CuratorCacheListener.Type.NODE_CREATED; +import static org.apache.curator.framework.recipes.cache.CuratorCacheListener.Type.NODE_DELETED; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; @@ -63,12 +63,10 @@ public class ZkDiscoveryServiceTest { private CuratorFramework client; @Mock - private PathChildrenCache cache; - - @Mock - private CuratorFramework curatorFramework; + private CuratorCache cache; private ZkDiscoveryService zkDiscoveryService; + private List dataList; private static final long RECALCULATE_DELAY = 100L; @@ -89,12 +87,13 @@ public class ZkDiscoveryServiceTest { ReflectionTestUtils.setField(zkDiscoveryService, "zkExecutorService", zkExecutorService); ReflectionTestUtils.setField(zkDiscoveryService, "recalculateDelay", RECALCULATE_DELAY); ReflectionTestUtils.setField(zkDiscoveryService, "zkDir", "/thingsboard"); + ReflectionTestUtils.setField(zkDiscoveryService, "zkNodesDir", "/thingsboard/nodes"); when(serviceInfoProvider.getServiceInfo()).thenReturn(currentInfo); - List dataList = new ArrayList<>(); + dataList = new ArrayList<>(); dataList.add(currentData); - when(cache.getCurrentData()).thenReturn(dataList); + when(cache.stream()).thenAnswer(inv -> dataList.stream()); } @Test @@ -178,14 +177,14 @@ public class ZkDiscoveryServiceTest { verify(partitionService, times(1)).recalculatePartitions(eq(currentInfo), eq(List.of(anotherInfo, childInfo))); } - private void startNode(ChildData data) throws Exception { - cache.getCurrentData().add(data); - zkDiscoveryService.childEvent(curatorFramework, new PathChildrenCacheEvent(CHILD_ADDED, data)); + private void startNode(ChildData data) { + dataList.add(data); + zkDiscoveryService.onCacheEvent(NODE_CREATED, null, data); } - private void stopNode(ChildData data) throws Exception { - cache.getCurrentData().remove(data); - zkDiscoveryService.childEvent(curatorFramework, new PathChildrenCacheEvent(CHILD_REMOVED, data)); + private void stopNode(ChildData data) { + dataList.remove(data); + zkDiscoveryService.onCacheEvent(NODE_DELETED, data, null); } }