Browse Source

Merge upstream/lts-4.3 to bring branch up to date

pull/15911/head
dshvaika 1 week ago
parent
commit
f028e6b6c1
  1. 2
      application/pom.xml
  2. 2
      application/src/main/java/org/thingsboard/server/service/install/DefaultSystemDataLoaderService.java
  3. 4
      application/src/main/java/org/thingsboard/server/service/notification/channels/MicrosoftTeamsNotificationChannel.java
  4. 2
      application/src/main/java/org/thingsboard/server/service/security/auth/mfa/provider/impl/TotpTwoFaProvider.java
  5. 2
      application/src/main/java/org/thingsboard/server/service/security/model/token/JwtTokenFactory.java
  6. 4
      application/src/main/java/org/thingsboard/server/service/ws/WebSocketSessionType.java
  7. 10
      application/src/test/java/org/thingsboard/server/controller/AbstractNotifyEntityTest.java
  8. 2
      application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java
  9. 2
      application/src/test/java/org/thingsboard/server/controller/AdminControllerTest.java
  10. 54
      application/src/test/java/org/thingsboard/server/controller/AlarmCommentControllerTest.java
  11. 6
      application/src/test/java/org/thingsboard/server/controller/AuditLogControllerTest.java
  12. 4
      application/src/test/java/org/thingsboard/server/controller/AuditLogControllerTest_DedicatedEventsDataSource.java
  13. 12
      application/src/test/java/org/thingsboard/server/controller/AuthControllerTest.java
  14. 2
      application/src/test/java/org/thingsboard/server/controller/BaseQueueControllerTest.java
  15. 6
      application/src/test/java/org/thingsboard/server/controller/DeviceControllerTest.java
  16. 4
      application/src/test/java/org/thingsboard/server/controller/EdgeEventControllerTest.java
  17. 4
      application/src/test/java/org/thingsboard/server/controller/EntityQueryControllerTest.java
  18. 6
      application/src/test/java/org/thingsboard/server/controller/HomePageApiTest.java
  19. 4
      application/src/test/java/org/thingsboard/server/controller/RepositorySettingsTest.java
  20. 4
      application/src/test/java/org/thingsboard/server/controller/RuleEngineControllerTest.java
  21. 10
      application/src/test/java/org/thingsboard/server/controller/TwoFactorAuthConfigTest.java
  22. 8
      application/src/test/java/org/thingsboard/server/controller/TwoFactorAuthTest.java
  23. 4
      application/src/test/java/org/thingsboard/server/controller/UserControllerTest.java
  24. 8
      application/src/test/java/org/thingsboard/server/controller/WebsocketApiTest.java
  25. 8
      application/src/test/java/org/thingsboard/server/queue/discovery/HashPartitionServiceTest.java
  26. 52
      application/src/test/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldCacheTest.java
  27. 45
      application/src/test/java/org/thingsboard/server/service/device/provision/DeviceProvisionServiceTest.java
  28. 221
      application/src/test/java/org/thingsboard/server/service/edge/rpc/processor/BaseEdgeProcessorTest.java
  29. 6
      application/src/test/java/org/thingsboard/server/service/entitiy/EntityServiceTest.java
  30. 32
      application/src/test/java/org/thingsboard/server/service/entitiy/alarm/DefaultTbAlarmServiceTest.java
  31. 34
      application/src/test/java/org/thingsboard/server/service/entitiy/alarmComment/DefaultTbAlarmCommentServiceTest.java
  32. 4
      application/src/test/java/org/thingsboard/server/service/housekeeper/HousekeeperServiceTest.java
  33. 28
      application/src/test/java/org/thingsboard/server/service/install/InstallScriptsTest.java
  34. 6
      application/src/test/java/org/thingsboard/server/service/job/JobManagerTest.java
  35. 2
      application/src/test/java/org/thingsboard/server/service/notification/AbstractNotificationApiTest.java
  36. 2
      application/src/test/java/org/thingsboard/server/service/notification/NotificationApiTest.java
  37. 2
      application/src/test/java/org/thingsboard/server/service/notification/NotificationApiWsClient.java
  38. 2
      application/src/test/java/org/thingsboard/server/service/notification/NotificationTargetApiTest.java
  39. 14
      application/src/test/java/org/thingsboard/server/service/profile/DefaultTbAssetProfileCacheTest.java
  40. 14
      application/src/test/java/org/thingsboard/server/service/profile/DefaultTbDeviceProfileCacheTest.java
  41. 48
      application/src/test/java/org/thingsboard/server/service/queue/DefaultTbClusterServiceTest.java
  42. 14
      application/src/test/java/org/thingsboard/server/service/queue/ruleengine/TbRuleEngineQueueConsumerManagerTest.java
  43. 14
      application/src/test/java/org/thingsboard/server/service/sms/DefaultSmsServiceTest.java
  44. 6
      application/src/test/java/org/thingsboard/server/service/subscription/DefaultTbLocalSubscriptionServiceTest.java
  45. 10
      application/src/test/java/org/thingsboard/server/service/subscription/TbEntityDataSubCtxTest.java
  46. 2
      application/src/test/java/org/thingsboard/server/service/subscription/TbEntityLocalSubsInfoTest.java
  47. 6
      application/src/test/java/org/thingsboard/server/service/sync/ie/ExportImportServiceSqlTest.java
  48. 2
      application/src/test/java/org/thingsboard/server/service/sync/vc/VersionControlTest.java
  49. 60
      application/src/test/java/org/thingsboard/server/service/transport/DefaultTransportApiServiceTest.java
  50. 6
      application/src/test/java/org/thingsboard/server/service/ttl/AlarmsCleanUpServiceTest.java
  51. 2
      application/src/test/java/org/thingsboard/server/service/ws/DefaultWebSocketServiceTest.java
  52. 8
      application/src/test/java/org/thingsboard/server/transport/lwm2m/AbstractLwM2MIntegrationTest.java
  53. 14
      application/src/test/java/org/thingsboard/server/transport/lwm2m/rpc/AbstractRpcLwM2MIntegrationTest.java
  54. 4
      application/src/test/java/org/thingsboard/server/transport/lwm2m/security/diffPort/AbstractLwM2MIntegrationDiffPortTest.java
  55. 4
      application/src/test/java/org/thingsboard/server/transport/mqtt/MqttGatewayRateLimitsTest.java
  56. 4
      application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv3/telemetry/timeseries/AbstractMqttTimeseriesIntegrationTest.java
  57. 2
      common/actor/pom.xml
  58. 2
      common/cache/pom.xml
  59. 8
      common/cache/src/main/java/org/thingsboard/server/cache/ota/RedisOtaPackageDataCache.java
  60. 2
      common/cluster-api/pom.xml
  61. 2
      common/coap-server/pom.xml
  62. 2
      common/dao-api/pom.xml
  63. 2
      common/data/pom.xml
  64. 2
      common/data/src/main/java/org/thingsboard/server/common/data/Dashboard.java
  65. 4
      common/data/src/main/java/org/thingsboard/server/common/data/EntityType.java
  66. 2
      common/data/src/main/java/org/thingsboard/server/common/data/EventInfo.java
  67. 2
      common/data/src/main/java/org/thingsboard/server/common/data/HomeDashboard.java
  68. 2
      common/data/src/main/java/org/thingsboard/server/common/data/StringUtils.java
  69. 2
      common/data/src/main/java/org/thingsboard/server/common/data/TenantInfo.java
  70. 1
      common/data/src/main/java/org/thingsboard/server/common/data/alarm/AlarmComment.java
  71. 2
      common/data/src/main/java/org/thingsboard/server/common/data/device/data/CoapDeviceTransportConfiguration.java
  72. 2
      common/data/src/main/java/org/thingsboard/server/common/data/device/data/Lwm2mDeviceTransportConfiguration.java
  73. 2
      common/data/src/main/java/org/thingsboard/server/common/data/device/profile/lwm2m/bootstrap/LwM2MServerSecurityConfigDefault.java
  74. 4
      common/data/src/main/java/org/thingsboard/server/common/data/edge/EdgeInfo.java
  75. 2
      common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/AssetFields.java
  76. 2
      common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/AssetProfileFields.java
  77. 2
      common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/CustomerFields.java
  78. 2
      common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/DashboardFields.java
  79. 2
      common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/DeviceFields.java
  80. 2
      common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/DeviceProfileFields.java
  81. 2
      common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/EdgeFields.java
  82. 2
      common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/EntityViewFields.java
  83. 2
      common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/QueueStatsFields.java
  84. 2
      common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/RuleChainFields.java
  85. 2
      common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/TenantFields.java
  86. 2
      common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/TenantProfileFields.java
  87. 2
      common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/UserFields.java
  88. 2
      common/data/src/main/java/org/thingsboard/server/common/data/job/task/Task.java
  89. 2
      common/data/src/main/java/org/thingsboard/server/common/data/kv/BaseDeleteTsKvQuery.java
  90. 1
      common/data/src/main/java/org/thingsboard/server/common/data/mobile/layout/MobileLayoutConfig.java
  91. 2
      common/data/src/main/java/org/thingsboard/server/common/data/query/AlarmCountQuery.java
  92. 2
      common/data/src/main/java/org/thingsboard/server/common/data/queue/Queue.java
  93. 2
      common/data/src/main/java/org/thingsboard/server/common/data/rule/RuleNodeState.java
  94. 4
      common/data/src/main/java/org/thingsboard/server/common/data/tenant/profile/DefaultTenantProfileConfiguration.java
  95. 3
      common/data/src/main/java/org/thingsboard/server/common/data/util/CollectionsUtil.java
  96. 2
      common/data/src/main/java/org/thingsboard/server/common/data/util/TemplateUtils.java
  97. 2
      common/data/src/main/java/org/thingsboard/server/common/data/util/TypeCastUtil.java
  98. 2
      common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetTypeInfo.java
  99. 2
      common/discovery-api/pom.xml
  100. 2
      common/edge-api/pom.xml

2
application/pom.xml

@ -20,7 +20,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.thingsboard</groupId>
<version>4.3.1.3-SNAPSHOT</version>
<version>4.3.1.4-SNAPSHOT</version>
<artifactId>thingsboard</artifactId>
</parent>
<artifactId>application</artifactId>

2
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

4
application/src/main/java/org/thingsboard/server/service/notification/channels/MicrosoftTeamsNotificationChannel.java

@ -54,8 +54,8 @@ public class MicrosoftTeamsNotificationChannel implements NotificationChannel<Mi
@Setter
private RestTemplate restTemplate = new RestTemplateBuilder()
.setConnectTimeout(Duration.of(15, ChronoUnit.SECONDS))
.setReadTimeout(Duration.of(15, ChronoUnit.SECONDS))
.connectTimeout(Duration.of(15, ChronoUnit.SECONDS))
.readTimeout(Duration.of(15, ChronoUnit.SECONDS))
.build();
@Override

2
application/src/main/java/org/thingsboard/server/service/security/auth/mfa/provider/impl/TotpTwoFaProvider.java

@ -62,7 +62,7 @@ public class TotpTwoFaProvider implements TwoFaProvider<TotpTwoFaProviderConfig,
}
private String generateSecretKey() {
return Base32.encode(RandomUtils.nextBytes(20));
return Base32.encode(RandomUtils.secure().randomBytes(20));
}

2
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;

4
application/src/main/java/org/thingsboard/server/service/ws/WebSocketSessionType.java

@ -17,9 +17,9 @@ package org.thingsboard.server.service.ws;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;
@NoArgsConstructor
@ -33,7 +33,7 @@ public enum WebSocketSessionType {
public static Optional<WebSocketSessionType> forName(String name) {
return Arrays.stream(values())
.filter(sessionType -> StringUtils.equals(sessionType.name, name))
.filter(sessionType -> Objects.equals(sessionType.name, name))
.findFirst();
}

10
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!";

2
application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java

@ -1379,7 +1379,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);

2
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());

54
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;
@ -226,15 +226,13 @@ public class AlarmCommentControllerTest extends AbstractControllerTest {
doDelete("/api/alarm/" + alarm.getId() + "/comment/" + alarmComment.getId())
.andExpect(status().isOk());
AlarmComment expectedAlarmComment = AlarmComment.builder()
.alarmId(alarm.getId())
.type(AlarmCommentType.SYSTEM)
.comment(JacksonUtil.newObjectNode()
.put("text", String.format(COMMENT_DELETED.getText(), CUSTOMER_USER_EMAIL))
.put("subtype", COMMENT_DELETED.name())
.put("userName", CUSTOMER_USER_EMAIL))
.build();
testLogEntityActionEntityEqClass(alarm, alarm.getId(), tenantId, customerId, customerUserId, CUSTOMER_USER_EMAIL, ActionType.DELETED_COMMENT, 1, expectedAlarmComment);
alarmComment.setType(AlarmCommentType.SYSTEM);
alarmComment.setUserId(null);
alarmComment.setComment(JacksonUtil.newObjectNode()
.put("text", String.format(COMMENT_DELETED.getText(), CUSTOMER_USER_EMAIL))
.put("subtype", COMMENT_DELETED.name())
.put("userName", CUSTOMER_USER_EMAIL));
testLogEntityActionEntityEqClass(alarm, alarm.getId(), tenantId, customerId, customerUserId, CUSTOMER_USER_EMAIL, ActionType.DELETED_COMMENT, 1, alarmComment);
}
@Test
@ -252,15 +250,13 @@ public class AlarmCommentControllerTest extends AbstractControllerTest {
loginTenantAdmin();
doDelete("/api/alarm/" + alarm.getId() + "/comment/" + alarmComment.getId())
.andExpect(status().isOk());
AlarmComment expectedAlarmComment = AlarmComment.builder()
.alarmId(alarm.getId())
.type(AlarmCommentType.SYSTEM)
.comment(JacksonUtil.newObjectNode()
.put("text", String.format(COMMENT_DELETED.getText(), TENANT_ADMIN_EMAIL))
.put("subtype", COMMENT_DELETED.name())
.put("userName", TENANT_ADMIN_EMAIL))
.build();
testLogEntityActionEntityEqClass(alarm, alarm.getId(), tenantId, customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.DELETED_COMMENT, 1, expectedAlarmComment);
alarmComment.setType(AlarmCommentType.SYSTEM);
alarmComment.setUserId(null);
alarmComment.setComment(JacksonUtil.newObjectNode()
.put("text", String.format(COMMENT_DELETED.getText(), TENANT_ADMIN_EMAIL))
.put("subtype", COMMENT_DELETED.name())
.put("userName", TENANT_ADMIN_EMAIL));
testLogEntityActionEntityEqClass(alarm, alarm.getId(), tenantId, customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.DELETED_COMMENT, 1, alarmComment);
}
@Test
@ -285,15 +281,13 @@ public class AlarmCommentControllerTest extends AbstractControllerTest {
assertThat(systemComment.getComment().get("text").asText()).isEqualTo(String.format("Comment was deleted by user %s",
TENANT_ADMIN_EMAIL));
AlarmComment expectedAlarmComment = AlarmComment.builder()
.alarmId(alarm.getId())
.type(AlarmCommentType.SYSTEM)
.comment(JacksonUtil.newObjectNode()
.put("text", String.format(COMMENT_DELETED.getText(), TENANT_ADMIN_EMAIL))
.put("subtype", COMMENT_DELETED.name())
.put("userName", TENANT_ADMIN_EMAIL))
.build();
testLogEntityActionEntityEqClass(alarm, alarm.getId(), tenantId, customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.DELETED_COMMENT, 1, expectedAlarmComment);
alarmComment.setType(AlarmCommentType.SYSTEM);
alarmComment.setUserId(null);
alarmComment.setComment(JacksonUtil.newObjectNode()
.put("text", String.format(COMMENT_DELETED.getText(), TENANT_ADMIN_EMAIL))
.put("subtype", COMMENT_DELETED.name())
.put("userName", TENANT_ADMIN_EMAIL));
testLogEntityActionEntityEqClass(alarm, alarm.getId(), tenantId, customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.DELETED_COMMENT, 1, alarmComment);
}
@Test
@ -337,7 +331,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))
);
}
@ -368,7 +362,7 @@ public class AlarmCommentControllerTest extends AbstractControllerTest {
List<AlarmComment> 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))
);
}

6
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}")

4
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;
}

12
application/src/test/java/org/thingsboard/server/controller/AuthControllerTest.java

@ -20,9 +20,9 @@ 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.apache.commons.lang3.RandomStringUtils;
import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.server.common.data.StringUtils;
import org.thingsboard.server.common.data.User;
@ -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
@ -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);

2
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

6
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

4
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;

4
application/src/test/java/org/thingsboard/server/controller/EntityQueryControllerTest.java

@ -30,7 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.TestPropertySource;
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;
@ -201,7 +201,7 @@ public class EntityQueryControllerTest extends AbstractControllerTest {
loginTenantAdmin();
List<Device> 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);

6
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;

4
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

4
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

10
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

8
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;

4
application/src/test/java/org/thingsboard/server/controller/UserControllerTest.java

@ -1297,9 +1297,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);

8
application/src/test/java/org/thingsboard/server/controller/WebsocketApiTest.java

@ -28,9 +28,9 @@ 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.apache.commons.lang3.RandomStringUtils;
import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.rule.engine.api.AttributesSaveRequest;
import org.thingsboard.rule.engine.api.TimeseriesSaveRequest;
@ -100,7 +100,7 @@ public class WebsocketApiTest extends AbstractControllerTest {
@Autowired
private TelemetrySubscriptionService tsService;
@SpyBean
@MockitoSpyBean
private TimeseriesService timeseriesService;
Device device;
@ -556,7 +556,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);

8
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<TenantId, TenantProfileId> 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);
@ -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<QueueKey> queues = Stream.generate(() -> RandomStringUtils.randomAlphabetic(10))
List<QueueKey> queues = Stream.generate(() -> RandomStringUtils.secure().nextAlphabetic(10))
.map(queueName -> new QueueKey(ServiceType.TB_RULE_ENGINE, queueName, tenantId))
.limit(100).toList();

52
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);

45
application/src/test/java/org/thingsboard/server/service/device/provision/DeviceProvisionServiceTest.java

@ -21,8 +21,10 @@ 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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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 +75,43 @@ import static org.mockito.Mockito.when;
@Slf4j
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = DeviceProvisionServiceImpl.class)
@ContextConfiguration(classes = DeviceProvisionServiceTest.TestConfig.class)
public class DeviceProvisionServiceTest {
@MockBean
@Configuration
static class TestConfig {
@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<TbProtoQueueMsg<TransportProtos.ToRuleEngineMsg>> 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;
@ -220,7 +237,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;
}

221
application/src/test/java/org/thingsboard/server/service/edge/rpc/processor/BaseEdgeProcessorTest.java

@ -0,0 +1,221 @@
/**
* Copyright © 2016-2026 The Thingsboard Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.service.edge.rpc.processor;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import org.junit.jupiter.api.Test;
import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.server.common.data.Dashboard;
import org.thingsboard.server.common.data.Device;
import org.thingsboard.server.common.data.EntityView;
import org.thingsboard.server.common.data.User;
import org.thingsboard.server.common.data.asset.Asset;
import org.thingsboard.server.common.data.device.data.DeviceData;
import org.thingsboard.server.common.data.device.data.DefaultDeviceConfiguration;
import org.thingsboard.server.common.data.device.data.DefaultDeviceTransportConfiguration;
import org.thingsboard.server.common.data.id.AssetId;
import org.thingsboard.server.common.data.id.DashboardId;
import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.data.id.EntityViewId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.id.UserId;
import org.thingsboard.server.gen.transport.TransportProtos;
import java.util.UUID;
import static org.assertj.core.api.Assertions.assertThat;
public class BaseEdgeProcessorTest {
private final BaseEdgeProcessor processor = new BaseEdgeProcessor() {
@Override
public ListenableFuture<Void> processEntityNotification(TenantId tenantId, TransportProtos.EdgeNotificationMsgProto msg) {
return Futures.immediateFuture(null);
}
};
@Test
public void dashboardSaveRequiredWhenConfigurationChanges() {
DashboardId dashboardId = new DashboardId(UUID.randomUUID());
Dashboard current = new Dashboard(dashboardId);
current.setTitle("Dashboard");
current.setConfiguration(JacksonUtil.toJsonNode("{\"widgets\":{\"w1\":{\"type\":\"timeseries\"}}}"));
Dashboard updated = new Dashboard(current);
updated.setConfiguration(JacksonUtil.toJsonNode("{\"widgets\":{\"w1\":{\"type\":\"latest\"}}}"));
assertThat(processor.isSaveRequired(current, updated)).isTrue();
}
@Test
public void dashboardSaveNotRequiredWhenOnlyVersionChanges() {
DashboardId dashboardId = new DashboardId(UUID.randomUUID());
Dashboard current = new Dashboard(dashboardId);
current.setTitle("Dashboard");
current.setConfiguration(JacksonUtil.toJsonNode("{\"widgets\":{\"w1\":{\"type\":\"timeseries\"}}}"));
current.setVersion(1L);
Dashboard updated = new Dashboard(current);
updated.setVersion(2L);
assertThat(processor.isSaveRequired(current, updated)).isFalse();
}
@Test
public void dashboardSaveNotRequiredWhenIdentical() {
DashboardId dashboardId = new DashboardId(UUID.randomUUID());
Dashboard current = new Dashboard(dashboardId);
current.setTitle("Dashboard");
current.setConfiguration(JacksonUtil.toJsonNode("{\"widgets\":{\"w1\":{\"type\":\"timeseries\"}}}"));
Dashboard updated = new Dashboard(current);
assertThat(processor.isSaveRequired(current, updated)).isFalse();
}
@Test
public void deviceSaveRequiredWhenDeviceDataChanges() {
DeviceId deviceId = new DeviceId(UUID.randomUUID());
Device current = new Device(deviceId);
current.setName("Device");
current.setDeviceData(deviceDataWithTransport());
Device updated = new Device(current);
DeviceData withoutTransport = new DeviceData();
withoutTransport.setConfiguration(new DefaultDeviceConfiguration());
updated.setDeviceData(withoutTransport);
assertThat(processor.isSaveRequired(current, updated)).isTrue();
}
@Test
public void deviceSaveRequiredWhenAdditionalInfoChanges() {
DeviceId deviceId = new DeviceId(UUID.randomUUID());
Device current = new Device(deviceId);
current.setName("Device");
current.setAdditionalInfo(JacksonUtil.toJsonNode("{\"description\":\"old\"}"));
Device updated = new Device(current);
updated.setAdditionalInfo(JacksonUtil.toJsonNode("{\"description\":\"new\"}"));
assertThat(processor.isSaveRequired(current, updated)).isTrue();
}
@Test
public void deviceSaveNotRequiredWhenOnlyVersionChanges() {
DeviceId deviceId = new DeviceId(UUID.randomUUID());
Device current = new Device(deviceId);
current.setName("Device");
current.setDeviceData(deviceDataWithTransport());
current.setAdditionalInfo(JacksonUtil.toJsonNode("{\"description\":\"same\"}"));
current.setVersion(1L);
Device updated = new Device(current);
updated.setVersion(2L);
assertThat(processor.isSaveRequired(current, updated)).isFalse();
}
@Test
public void assetSaveRequiredWhenAdditionalInfoChanges() {
AssetId assetId = new AssetId(UUID.randomUUID());
Asset current = new Asset(assetId);
current.setName("Asset");
current.setAdditionalInfo(JacksonUtil.toJsonNode("{\"description\":\"old\"}"));
Asset updated = new Asset(current);
updated.setAdditionalInfo(JacksonUtil.toJsonNode("{\"description\":\"new\"}"));
assertThat(processor.isSaveRequired(current, updated)).isTrue();
}
@Test
public void assetSaveNotRequiredWhenOnlyVersionChanges() {
AssetId assetId = new AssetId(UUID.randomUUID());
Asset current = new Asset(assetId);
current.setName("Asset");
current.setAdditionalInfo(JacksonUtil.toJsonNode("{\"description\":\"same\"}"));
current.setVersion(1L);
Asset updated = new Asset(current);
updated.setVersion(2L);
assertThat(processor.isSaveRequired(current, updated)).isFalse();
}
@Test
public void entityViewSaveRequiredWhenAdditionalInfoChanges() {
EntityViewId entityViewId = new EntityViewId(UUID.randomUUID());
EntityView current = new EntityView(entityViewId);
current.setName("EntityView");
current.setAdditionalInfo(JacksonUtil.toJsonNode("{\"description\":\"old\"}"));
EntityView updated = new EntityView(current);
updated.setAdditionalInfo(JacksonUtil.toJsonNode("{\"description\":\"new\"}"));
assertThat(processor.isSaveRequired(current, updated)).isTrue();
}
@Test
public void entityViewSaveNotRequiredWhenOnlyVersionChanges() {
EntityViewId entityViewId = new EntityViewId(UUID.randomUUID());
EntityView current = new EntityView(entityViewId);
current.setName("EntityView");
current.setAdditionalInfo(JacksonUtil.toJsonNode("{\"description\":\"same\"}"));
current.setVersion(1L);
EntityView updated = new EntityView(current);
updated.setVersion(2L);
assertThat(processor.isSaveRequired(current, updated)).isFalse();
}
@Test
public void userSaveRequiredWhenAdditionalInfoChanges() {
UserId userId = new UserId(UUID.randomUUID());
User current = new User(userId);
current.setEmail("user@thingsboard.io");
current.setAdditionalInfo(JacksonUtil.toJsonNode("{\"description\":\"old\"}"));
User updated = new User(current);
updated.setAdditionalInfo(JacksonUtil.toJsonNode("{\"description\":\"new\"}"));
assertThat(processor.isSaveRequired(current, updated)).isTrue();
}
@Test
public void userSaveNotRequiredWhenOnlyVersionChanges() {
UserId userId = new UserId(UUID.randomUUID());
User current = new User(userId);
current.setEmail("user@thingsboard.io");
current.setAdditionalInfo(JacksonUtil.toJsonNode("{\"description\":\"same\"}"));
current.setVersion(1L);
User updated = new User(current);
updated.setVersion(2L);
assertThat(processor.isSaveRequired(current, updated)).isFalse();
}
private static DeviceData deviceDataWithTransport() {
DeviceData deviceData = new DeviceData();
deviceData.setConfiguration(new DefaultDeviceConfiguration());
deviceData.setTransportConfiguration(new DefaultDeviceTransportConfiguration());
return deviceData;
}
}

6
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<Device> 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)

32
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

34
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

4
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();
}

28
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"));

6
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

2
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);

2
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<Map<String, String>> msgCaptor = ArgumentCaptor.forClass(Map.class);
ArgumentCaptor<Map<String, String>> msgCaptor = ArgumentCaptor.captor();
await().atMost(TIMEOUT, TimeUnit.SECONDS).untilAsserted(() -> {
verify(firebaseService).sendMessage(eq(tenantId), eq("testCredentials"),
eq(TEST_MOBILE_TOKEN), eq(expectedSubject),

2
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);
}
}

2
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);

14
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());

14
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());

48
application/src/test/java/org/thingsboard/server/service/queue/DefaultTbClusterServiceTest.java

@ -17,11 +17,12 @@ package org.thingsboard.server.service.queue;
import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
import org.junit.Before;
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 +57,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 +69,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 +90,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<EdgeId, String> edgeCache;
@MockBean
@MockitoBean
protected CalculatedFieldService calculatedFieldService;
@SpyBean
@MockitoBean
protected TopicService topicService;
@SpyBean
@MockitoBean
protected OtaPackageStateService otaPackageStateService;
@MockitoSpyBean
protected TbClusterService clusterService;
@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));
@ -393,7 +411,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);
@ -413,7 +431,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);

14
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;
@ -542,18 +542,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<Set<TopicPartitionInfo>> 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));

14
application/src/test/java/org/thingsboard/server/service/sms/DefaultSmsServiceTest.java

@ -22,9 +22,9 @@ 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.apache.commons.lang3.RandomStringUtils;
import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.server.common.data.AdminSettings;
import org.thingsboard.server.common.data.TenantProfile;
@ -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;
@ -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");
}
}

6
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<String, Long> 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)

10
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;

2
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<TbAttributeSubscription> expectedSubs, ComponentLifecycleEvent expectedType) {

6
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

2
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<String, JsonNode> entityAlias = importedDashboard.getConfiguration().get("entityAliases").fields().next();
Map.Entry<String, JsonNode> entityAlias = importedDashboard.getConfiguration().get("entityAliases").properties().iterator().next();
assertThat(entityAlias.getKey()).isEqualTo(aliasId);
assertThat(entityAlias.getValue().get("id").asText()).isEqualTo(aliasId);

60
application/src/test/java/org/thingsboard/server/service/transport/DefaultTransportApiServiceTest.java

@ -20,8 +20,10 @@ 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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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 +71,60 @@ import static org.mockito.Mockito.when;
@Slf4j
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = DefaultTransportApiService.class)
@ContextConfiguration(classes = DefaultTransportApiServiceTest.TestConfig.class)
public class DefaultTransportApiServiceTest {
@MockBean
@Configuration
static class TestConfig {
@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;

6
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;

2
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)

8
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;
@ -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;
@ -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

14
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;
@ -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<String> expectedObjects;
public Set<String> expectedObjectIdVers;
public Set<String> expectedInstances;
public Set<String> 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<String> PREDICATE_3 = path -> (!((String) path).startsWith("/" + TEMPERATURE_SENSOR) && ((String) path).startsWith("/" + DEVICE));
protected String objectIdVer_3;
protected String objectInstanceIdVer_3;
protected String objectInstanceIdVer_5;
@ -103,7 +103,7 @@ public abstract class AbstractRpcLwM2MIntegrationTest extends AbstractLwM2MInteg
protected String idVer_19_0_0;
@SpyBean
@MockitoSpyBean
protected LwM2mTransportServerHelper lwM2mTransportServerHelperTest;
@Before

4
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,

4
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

4
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

2
common/actor/pom.xml

@ -20,7 +20,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.thingsboard</groupId>
<version>4.3.1.3-SNAPSHOT</version>
<version>4.3.1.4-SNAPSHOT</version>
<artifactId>common</artifactId>
</parent>
<groupId>org.thingsboard.common</groupId>

2
common/cache/pom.xml

@ -20,7 +20,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.thingsboard</groupId>
<version>4.3.1.3-SNAPSHOT</version>
<version>4.3.1.4-SNAPSHOT</version>
<artifactId>common</artifactId>
</parent>
<groupId>org.thingsboard.common</groupId>

8
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));
}
}

2
common/cluster-api/pom.xml

@ -20,7 +20,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.thingsboard</groupId>
<version>4.3.1.3-SNAPSHOT</version>
<version>4.3.1.4-SNAPSHOT</version>
<artifactId>common</artifactId>
</parent>
<groupId>org.thingsboard.common</groupId>

2
common/coap-server/pom.xml

@ -22,7 +22,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.thingsboard</groupId>
<version>4.3.1.3-SNAPSHOT</version>
<version>4.3.1.4-SNAPSHOT</version>
<artifactId>common</artifactId>
</parent>
<groupId>org.thingsboard.common</groupId>

2
common/dao-api/pom.xml

@ -20,7 +20,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.thingsboard</groupId>
<version>4.3.1.3-SNAPSHOT</version>
<version>4.3.1.4-SNAPSHOT</version>
<artifactId>common</artifactId>
</parent>
<groupId>org.thingsboard.common</groupId>

2
common/data/pom.xml

@ -20,7 +20,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.thingsboard</groupId>
<version>4.3.1.3-SNAPSHOT</version>
<version>4.3.1.4-SNAPSHOT</version>
<artifactId>common</artifactId>
</parent>
<groupId>org.thingsboard.common</groupId>

2
common/data/src/main/java/org/thingsboard/server/common/data/Dashboard.java

@ -38,7 +38,7 @@ public class Dashboard extends DashboardInfo implements ExportableEntity<Dashboa
private static final long serialVersionUID = 872682138346187503L;
private transient JsonNode configuration;
private JsonNode configuration;
@Getter
@Setter

4
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),
@ -79,7 +81,7 @@ public enum EntityType {
@Getter
private final String tableName;
@Getter
private final String normalName = StringUtils.capitalize(Strings.CS.removeStart(name(), "TB_")
private final String normalName = StringUtils.capitalize(removeStart(name(), "TB_")
.toLowerCase().replaceAll("_", " "));
public static final List<String> NORMAL_NAMES = EnumSet.allOf(EntityType.class).stream()

2
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 = true)
@Schema
public class EventInfo extends BaseData<EventId> {

2
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 = true)
public class HomeDashboard extends Dashboard {
public static final String HIDE_DASHBOARD_TOOLBAR_DESCRIPTION = "Hide dashboard toolbar flag. Useful for rendering dashboards on mobile.";

2
common/data/src/main/java/org/thingsboard/server/common/data/StringUtils.java

@ -164,7 +164,7 @@ public class StringUtils {
}
public static boolean equals(String str1, String str2) {
return Strings.CS.equals(str1, str2);
return Objects.equals(str1, str2);
}
public static boolean equalsAny(String string, String... otherStrings) {

2
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 = true)
public class TenantInfo extends Tenant {
@Schema(description = "Tenant Profile name", example = "Default")
private String tenantProfileName;

1
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 = true)
@Builder
@AllArgsConstructor
public class AlarmComment extends BaseData<AlarmCommentId> implements HasName {

2
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 = true)
public class CoapDeviceTransportConfiguration extends PowerSavingConfiguration implements DeviceTransportConfiguration {
private static final long serialVersionUID = 6061442236008925609L;

2
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 = true)
public class Lwm2mDeviceTransportConfiguration extends PowerSavingConfiguration implements DeviceTransportConfiguration {
@JsonIgnore

2
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 = true)
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;

4
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 = true)
public class EdgeInfo extends Edge {
private String customerTitle;
@ -37,4 +39,4 @@ public class EdgeInfo extends Edge {
this.customerTitle = customerTitle;
this.customerIsPublic = customerIsPublic;
}
}
}

2
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 = true)
@NoArgsConstructor
@SuperBuilder
public class AssetFields extends AbstractEntityFields implements ProfileAwareFields {

2
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 = true)
@NoArgsConstructor
@SuperBuilder
public class AssetProfileFields extends AbstractEntityFields {

2
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 = true)
@NoArgsConstructor
@SuperBuilder
public class CustomerFields extends AbstractEntityFields {

2
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 = true)
@NoArgsConstructor
@SuperBuilder
public class DashboardFields extends AbstractEntityFields {

2
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 = true)
@NoArgsConstructor
@SuperBuilder
public class DeviceFields extends AbstractEntityFields implements ProfileAwareFields {

2
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 = true)
@NoArgsConstructor
@SuperBuilder
public class DeviceProfileFields extends AbstractEntityFields {

2
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 = true)
@NoArgsConstructor
@SuperBuilder
public class EdgeFields extends AbstractEntityFields {

2
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 = true)
@NoArgsConstructor
@SuperBuilder
public class EntityViewFields extends AbstractEntityFields {

2
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 = true)
@NoArgsConstructor
@SuperBuilder
public class QueueStatsFields extends AbstractEntityFields {

2
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 = true)
@NoArgsConstructor
@SuperBuilder
public class RuleChainFields extends AbstractEntityFields {

2
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 = true)
@NoArgsConstructor
@SuperBuilder
public class TenantFields extends AbstractEntityFields {

2
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 = true)
@NoArgsConstructor
@SuperBuilder
public class TenantProfileFields extends AbstractEntityFields {

2
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 = true)
@NoArgsConstructor
@SuperBuilder
public class UserFields extends AbstractEntityFields {

2
common/data/src/main/java/org/thingsboard/server/common/data/job/task/Task.java

@ -46,7 +46,7 @@ public abstract class Task<R extends TaskResult> {
public Task() {
}
private int attempt = 0;
private int attempt;
public abstract R toFailed(Throwable error);

2
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 = true)
public class BaseDeleteTsKvQuery extends BaseTsKvQuery implements DeleteTsKvQuery {
private final Boolean rewriteLatestIfDeleted;

1
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<MobilePage> pages = new ArrayList<>();
}

2
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 = true)
@ToString
@Schema
public class AlarmCountQuery extends EntityCountQuery {

2
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 = true)
public class Queue extends BaseDataWithAdditionalInfo<QueueId> implements HasName, HasTenantId, QueueConfig {
private TenantId tenantId;
@NoXss

2
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 = true)
public class RuleNodeState extends BaseData<RuleNodeStateId> {
private RuleNodeId ruleNodeId;

4
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")

3
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 <V> boolean isOneOf(V value, V... others) {
if (value == null) {
return false;
@ -134,7 +135,7 @@ public class CollectionsUtil {
Set<T> newSet = new HashSet<>(existing.size() + 1);
newSet.addAll(existing);
newSet.add(value);
return (Set<T>) Set.of(newSet.toArray());
return Set.copyOf(newSet);
}
public static boolean isEmpty(Map<?, ?> map) {

2
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 {

2
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) {

2
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 = true)
public class WidgetTypeInfo extends BaseWidgetType {
@Serial

2
common/discovery-api/pom.xml

@ -20,7 +20,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.thingsboard</groupId>
<version>4.3.1.3-SNAPSHOT</version>
<version>4.3.1.4-SNAPSHOT</version>
<artifactId>common</artifactId>
</parent>
<groupId>org.thingsboard.common</groupId>

2
common/edge-api/pom.xml

@ -20,7 +20,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.thingsboard</groupId>
<version>4.3.1.3-SNAPSHOT</version>
<version>4.3.1.4-SNAPSHOT</version>
<artifactId>common</artifactId>
</parent>
<groupId>org.thingsboard.common</groupId>

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save