Commit 58d9c313a89d3929ad7c3d0e46ed287b91132355

Authored by Andrii Shvaika
1 parent 341f0d14

Fixed tests

@@ -47,6 +47,7 @@ import java.util.stream.Collectors; @@ -47,6 +47,7 @@ import java.util.stream.Collectors;
47 @Slf4j 47 @Slf4j
48 public class DefaultRuleEngineStatisticsService implements RuleEngineStatisticsService { 48 public class DefaultRuleEngineStatisticsService implements RuleEngineStatisticsService {
49 49
  50 + public static final String TB_SERVICE_QUEUE = "TbServiceQueue";
50 public static final FutureCallback<Void> CALLBACK = new FutureCallback<Void>() { 51 public static final FutureCallback<Void> CALLBACK = new FutureCallback<Void>() {
51 @Override 52 @Override
52 public void onSuccess(@Nullable Void result) { 53 public void onSuccess(@Nullable Void result) {
@@ -95,7 +96,13 @@ public class DefaultRuleEngineStatisticsService implements RuleEngineStatisticsS @@ -95,7 +96,13 @@ public class DefaultRuleEngineStatisticsService implements RuleEngineStatisticsS
95 }); 96 });
96 ruleEngineStats.getTenantExceptions().forEach((tenantId, e) -> { 97 ruleEngineStats.getTenantExceptions().forEach((tenantId, e) -> {
97 TsKvEntry tsKv = new BasicTsKvEntry(ts, new JsonDataEntry("ruleEngineException", e.toJsonString())); 98 TsKvEntry tsKv = new BasicTsKvEntry(ts, new JsonDataEntry("ruleEngineException", e.toJsonString()));
98 - tsService.saveAndNotify(tenantId, getServiceAssetId(tenantId, queueName), Collections.singletonList(tsKv), CALLBACK); 99 + try {
  100 + tsService.saveAndNotify(tenantId, getServiceAssetId(tenantId, queueName), Collections.singletonList(tsKv), CALLBACK);
  101 + } catch (DataValidationException e2) {
  102 + if (!e2.getMessage().equalsIgnoreCase("Asset is referencing to non-existent tenant!")) {
  103 + throw e2;
  104 + }
  105 + }
99 }); 106 });
100 ruleEngineStats.reset(); 107 ruleEngineStats.reset();
101 } 108 }
@@ -113,7 +120,7 @@ public class DefaultRuleEngineStatisticsService implements RuleEngineStatisticsS @@ -113,7 +120,7 @@ public class DefaultRuleEngineStatisticsService implements RuleEngineStatisticsS
113 asset = new Asset(); 120 asset = new Asset();
114 asset.setTenantId(tenantId); 121 asset.setTenantId(tenantId);
115 asset.setName(queueName + "_" + serviceInfoProvider.getServiceId()); 122 asset.setName(queueName + "_" + serviceInfoProvider.getServiceId());
116 - asset.setType("TbServiceQueue"); 123 + asset.setType(TB_SERVICE_QUEUE);
117 asset = assetService.saveAsset(asset); 124 asset = assetService.saveAsset(asset);
118 } 125 }
119 assetId = asset.getId(); 126 assetId = asset.getId();
@@ -32,6 +32,7 @@ import org.thingsboard.server.common.data.page.TextPageData; @@ -32,6 +32,7 @@ import org.thingsboard.server.common.data.page.TextPageData;
32 import org.thingsboard.server.common.data.page.TextPageLink; 32 import org.thingsboard.server.common.data.page.TextPageLink;
33 import org.thingsboard.server.common.data.security.Authority; 33 import org.thingsboard.server.common.data.security.Authority;
34 import org.thingsboard.server.dao.model.ModelConstants; 34 import org.thingsboard.server.dao.model.ModelConstants;
  35 +import org.thingsboard.server.service.stats.DefaultRuleEngineStatisticsService;
35 36
36 import java.util.ArrayList; 37 import java.util.ArrayList;
37 import java.util.Collections; 38 import java.util.Collections;
@@ -71,7 +72,7 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -71,7 +72,7 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
71 public void afterTest() throws Exception { 72 public void afterTest() throws Exception {
72 loginSysAdmin(); 73 loginSysAdmin();
73 74
74 - doDelete("/api/tenant/"+savedTenant.getId().getId().toString()) 75 + doDelete("/api/tenant/" + savedTenant.getId().getId().toString())
75 .andExpect(status().isOk()); 76 .andExpect(status().isOk());
76 } 77 }
77 78
@@ -111,26 +112,27 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -111,26 +112,27 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
111 @Test 112 @Test
112 public void testFindAssetTypesByTenantId() throws Exception { 113 public void testFindAssetTypesByTenantId() throws Exception {
113 List<Asset> assets = new ArrayList<>(); 114 List<Asset> assets = new ArrayList<>();
114 - for (int i=0;i<3;i++) { 115 + for (int i = 0; i < 3; i++) {
115 Asset asset = new Asset(); 116 Asset asset = new Asset();
116 - asset.setName("My asset B"+i); 117 + asset.setName("My asset B" + i);
117 asset.setType("typeB"); 118 asset.setType("typeB");
118 assets.add(doPost("/api/asset", asset, Asset.class)); 119 assets.add(doPost("/api/asset", asset, Asset.class));
119 } 120 }
120 - for (int i=0;i<7;i++) { 121 + for (int i = 0; i < 7; i++) {
121 Asset asset = new Asset(); 122 Asset asset = new Asset();
122 - asset.setName("My asset C"+i); 123 + asset.setName("My asset C" + i);
123 asset.setType("typeC"); 124 asset.setType("typeC");
124 assets.add(doPost("/api/asset", asset, Asset.class)); 125 assets.add(doPost("/api/asset", asset, Asset.class));
125 } 126 }
126 - for (int i=0;i<9;i++) { 127 + for (int i = 0; i < 9; i++) {
127 Asset asset = new Asset(); 128 Asset asset = new Asset();
128 - asset.setName("My asset A"+i); 129 + asset.setName("My asset A" + i);
129 asset.setType("typeA"); 130 asset.setType("typeA");
130 assets.add(doPost("/api/asset", asset, Asset.class)); 131 assets.add(doPost("/api/asset", asset, Asset.class));
131 } 132 }
132 List<EntitySubtype> assetTypes = doGetTyped("/api/asset/types", 133 List<EntitySubtype> assetTypes = doGetTyped("/api/asset/types",
133 - new TypeReference<List<EntitySubtype>>(){}); 134 + new TypeReference<List<EntitySubtype>>() {
  135 + });
134 136
135 Assert.assertNotNull(assetTypes); 137 Assert.assertNotNull(assetTypes);
136 Assert.assertEquals(3, assetTypes.size()); 138 Assert.assertEquals(3, assetTypes.size());
@@ -146,10 +148,10 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -146,10 +148,10 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
146 asset.setType("default"); 148 asset.setType("default");
147 Asset savedAsset = doPost("/api/asset", asset, Asset.class); 149 Asset savedAsset = doPost("/api/asset", asset, Asset.class);
148 150
149 - doDelete("/api/asset/"+savedAsset.getId().getId().toString()) 151 + doDelete("/api/asset/" + savedAsset.getId().getId().toString())
150 .andExpect(status().isOk()); 152 .andExpect(status().isOk());
151 153
152 - doGet("/api/asset/"+savedAsset.getId().getId().toString()) 154 + doGet("/api/asset/" + savedAsset.getId().getId().toString())
153 .andExpect(status().isNotFound()); 155 .andExpect(status().isNotFound());
154 } 156 }
155 157
@@ -244,16 +246,16 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -244,16 +246,16 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
244 246
245 loginSysAdmin(); 247 loginSysAdmin();
246 248
247 - doDelete("/api/tenant/"+savedTenant2.getId().getId().toString()) 249 + doDelete("/api/tenant/" + savedTenant2.getId().getId().toString())
248 .andExpect(status().isOk()); 250 .andExpect(status().isOk());
249 } 251 }
250 252
251 @Test 253 @Test
252 public void testFindTenantAssets() throws Exception { 254 public void testFindTenantAssets() throws Exception {
253 List<Asset> assets = new ArrayList<>(); 255 List<Asset> assets = new ArrayList<>();
254 - for (int i=0;i<178;i++) { 256 + for (int i = 0; i < 178; i++) {
255 Asset asset = new Asset(); 257 Asset asset = new Asset();
256 - asset.setName("Asset"+i); 258 + asset.setName("Asset" + i);
257 asset.setType("default"); 259 asset.setType("default");
258 assets.add(doPost("/api/asset", asset, Asset.class)); 260 assets.add(doPost("/api/asset", asset, Asset.class));
259 } 261 }
@@ -262,13 +264,16 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -262,13 +264,16 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
262 TextPageData<Asset> pageData = null; 264 TextPageData<Asset> pageData = null;
263 do { 265 do {
264 pageData = doGetTypedWithPageLink("/api/tenant/assets?", 266 pageData = doGetTypedWithPageLink("/api/tenant/assets?",
265 - new TypeReference<TextPageData<Asset>>(){}, pageLink); 267 + new TypeReference<TextPageData<Asset>>() {
  268 + }, pageLink);
266 loadedAssets.addAll(pageData.getData()); 269 loadedAssets.addAll(pageData.getData());
267 if (pageData.hasNext()) { 270 if (pageData.hasNext()) {
268 pageLink = pageData.getNextPageLink(); 271 pageLink = pageData.getNextPageLink();
269 } 272 }
270 } while (pageData.hasNext()); 273 } while (pageData.hasNext());
271 274
  275 + loadedAssets.removeIf(asset -> asset.getType().equals(DefaultRuleEngineStatisticsService.TB_SERVICE_QUEUE));
  276 +
272 Collections.sort(assets, idComparator); 277 Collections.sort(assets, idComparator);
273 Collections.sort(loadedAssets, idComparator); 278 Collections.sort(loadedAssets, idComparator);
274 279
@@ -279,10 +284,10 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -279,10 +284,10 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
279 public void testFindTenantAssetsByName() throws Exception { 284 public void testFindTenantAssetsByName() throws Exception {
280 String title1 = "Asset title 1"; 285 String title1 = "Asset title 1";
281 List<Asset> assetsTitle1 = new ArrayList<>(); 286 List<Asset> assetsTitle1 = new ArrayList<>();
282 - for (int i=0;i<143;i++) { 287 + for (int i = 0; i < 143; i++) {
283 Asset asset = new Asset(); 288 Asset asset = new Asset();
284 String suffix = RandomStringUtils.randomAlphanumeric(15); 289 String suffix = RandomStringUtils.randomAlphanumeric(15);
285 - String name = title1+suffix; 290 + String name = title1 + suffix;
286 name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); 291 name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase();
287 asset.setName(name); 292 asset.setName(name);
288 asset.setType("default"); 293 asset.setType("default");
@@ -290,10 +295,10 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -290,10 +295,10 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
290 } 295 }
291 String title2 = "Asset title 2"; 296 String title2 = "Asset title 2";
292 List<Asset> assetsTitle2 = new ArrayList<>(); 297 List<Asset> assetsTitle2 = new ArrayList<>();
293 - for (int i=0;i<75;i++) { 298 + for (int i = 0; i < 75; i++) {
294 Asset asset = new Asset(); 299 Asset asset = new Asset();
295 String suffix = RandomStringUtils.randomAlphanumeric(15); 300 String suffix = RandomStringUtils.randomAlphanumeric(15);
296 - String name = title2+suffix; 301 + String name = title2 + suffix;
297 name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); 302 name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase();
298 asset.setName(name); 303 asset.setName(name);
299 asset.setType("default"); 304 asset.setType("default");
@@ -305,7 +310,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -305,7 +310,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
305 TextPageData<Asset> pageData = null; 310 TextPageData<Asset> pageData = null;
306 do { 311 do {
307 pageData = doGetTypedWithPageLink("/api/tenant/assets?", 312 pageData = doGetTypedWithPageLink("/api/tenant/assets?",
308 - new TypeReference<TextPageData<Asset>>(){}, pageLink); 313 + new TypeReference<TextPageData<Asset>>() {
  314 + }, pageLink);
309 loadedAssetsTitle1.addAll(pageData.getData()); 315 loadedAssetsTitle1.addAll(pageData.getData());
310 if (pageData.hasNext()) { 316 if (pageData.hasNext()) {
311 pageLink = pageData.getNextPageLink(); 317 pageLink = pageData.getNextPageLink();
@@ -321,7 +327,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -321,7 +327,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
321 pageLink = new TextPageLink(4, title2); 327 pageLink = new TextPageLink(4, title2);
322 do { 328 do {
323 pageData = doGetTypedWithPageLink("/api/tenant/assets?", 329 pageData = doGetTypedWithPageLink("/api/tenant/assets?",
324 - new TypeReference<TextPageData<Asset>>(){}, pageLink); 330 + new TypeReference<TextPageData<Asset>>() {
  331 + }, pageLink);
325 loadedAssetsTitle2.addAll(pageData.getData()); 332 loadedAssetsTitle2.addAll(pageData.getData());
326 if (pageData.hasNext()) { 333 if (pageData.hasNext()) {
327 pageLink = pageData.getNextPageLink(); 334 pageLink = pageData.getNextPageLink();
@@ -334,24 +341,26 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -334,24 +341,26 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
334 Assert.assertEquals(assetsTitle2, loadedAssetsTitle2); 341 Assert.assertEquals(assetsTitle2, loadedAssetsTitle2);
335 342
336 for (Asset asset : loadedAssetsTitle1) { 343 for (Asset asset : loadedAssetsTitle1) {
337 - doDelete("/api/asset/"+asset.getId().getId().toString()) 344 + doDelete("/api/asset/" + asset.getId().getId().toString())
338 .andExpect(status().isOk()); 345 .andExpect(status().isOk());
339 } 346 }
340 347
341 pageLink = new TextPageLink(4, title1); 348 pageLink = new TextPageLink(4, title1);
342 pageData = doGetTypedWithPageLink("/api/tenant/assets?", 349 pageData = doGetTypedWithPageLink("/api/tenant/assets?",
343 - new TypeReference<TextPageData<Asset>>(){}, pageLink); 350 + new TypeReference<TextPageData<Asset>>() {
  351 + }, pageLink);
344 Assert.assertFalse(pageData.hasNext()); 352 Assert.assertFalse(pageData.hasNext());
345 Assert.assertEquals(0, pageData.getData().size()); 353 Assert.assertEquals(0, pageData.getData().size());
346 354
347 for (Asset asset : loadedAssetsTitle2) { 355 for (Asset asset : loadedAssetsTitle2) {
348 - doDelete("/api/asset/"+asset.getId().getId().toString()) 356 + doDelete("/api/asset/" + asset.getId().getId().toString())
349 .andExpect(status().isOk()); 357 .andExpect(status().isOk());
350 } 358 }
351 359
352 pageLink = new TextPageLink(4, title2); 360 pageLink = new TextPageLink(4, title2);
353 pageData = doGetTypedWithPageLink("/api/tenant/assets?", 361 pageData = doGetTypedWithPageLink("/api/tenant/assets?",
354 - new TypeReference<TextPageData<Asset>>(){}, pageLink); 362 + new TypeReference<TextPageData<Asset>>() {
  363 + }, pageLink);
355 Assert.assertFalse(pageData.hasNext()); 364 Assert.assertFalse(pageData.hasNext());
356 Assert.assertEquals(0, pageData.getData().size()); 365 Assert.assertEquals(0, pageData.getData().size());
357 } 366 }
@@ -361,10 +370,10 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -361,10 +370,10 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
361 String title1 = "Asset title 1"; 370 String title1 = "Asset title 1";
362 String type1 = "typeA"; 371 String type1 = "typeA";
363 List<Asset> assetsType1 = new ArrayList<>(); 372 List<Asset> assetsType1 = new ArrayList<>();
364 - for (int i=0;i<143;i++) { 373 + for (int i = 0; i < 143; i++) {
365 Asset asset = new Asset(); 374 Asset asset = new Asset();
366 String suffix = RandomStringUtils.randomAlphanumeric(15); 375 String suffix = RandomStringUtils.randomAlphanumeric(15);
367 - String name = title1+suffix; 376 + String name = title1 + suffix;
368 name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); 377 name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase();
369 asset.setName(name); 378 asset.setName(name);
370 asset.setType(type1); 379 asset.setType(type1);
@@ -373,10 +382,10 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -373,10 +382,10 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
373 String title2 = "Asset title 2"; 382 String title2 = "Asset title 2";
374 String type2 = "typeB"; 383 String type2 = "typeB";
375 List<Asset> assetsType2 = new ArrayList<>(); 384 List<Asset> assetsType2 = new ArrayList<>();
376 - for (int i=0;i<75;i++) { 385 + for (int i = 0; i < 75; i++) {
377 Asset asset = new Asset(); 386 Asset asset = new Asset();
378 String suffix = RandomStringUtils.randomAlphanumeric(15); 387 String suffix = RandomStringUtils.randomAlphanumeric(15);
379 - String name = title2+suffix; 388 + String name = title2 + suffix;
380 name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); 389 name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase();
381 asset.setName(name); 390 asset.setName(name);
382 asset.setType(type2); 391 asset.setType(type2);
@@ -388,7 +397,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -388,7 +397,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
388 TextPageData<Asset> pageData = null; 397 TextPageData<Asset> pageData = null;
389 do { 398 do {
390 pageData = doGetTypedWithPageLink("/api/tenant/assets?type={type}&", 399 pageData = doGetTypedWithPageLink("/api/tenant/assets?type={type}&",
391 - new TypeReference<TextPageData<Asset>>(){}, pageLink, type1); 400 + new TypeReference<TextPageData<Asset>>() {
  401 + }, pageLink, type1);
392 loadedAssetsType1.addAll(pageData.getData()); 402 loadedAssetsType1.addAll(pageData.getData());
393 if (pageData.hasNext()) { 403 if (pageData.hasNext()) {
394 pageLink = pageData.getNextPageLink(); 404 pageLink = pageData.getNextPageLink();
@@ -404,7 +414,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -404,7 +414,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
404 pageLink = new TextPageLink(4); 414 pageLink = new TextPageLink(4);
405 do { 415 do {
406 pageData = doGetTypedWithPageLink("/api/tenant/assets?type={type}&", 416 pageData = doGetTypedWithPageLink("/api/tenant/assets?type={type}&",
407 - new TypeReference<TextPageData<Asset>>(){}, pageLink, type2); 417 + new TypeReference<TextPageData<Asset>>() {
  418 + }, pageLink, type2);
408 loadedAssetsType2.addAll(pageData.getData()); 419 loadedAssetsType2.addAll(pageData.getData());
409 if (pageData.hasNext()) { 420 if (pageData.hasNext()) {
410 pageLink = pageData.getNextPageLink(); 421 pageLink = pageData.getNextPageLink();
@@ -417,24 +428,26 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -417,24 +428,26 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
417 Assert.assertEquals(assetsType2, loadedAssetsType2); 428 Assert.assertEquals(assetsType2, loadedAssetsType2);
418 429
419 for (Asset asset : loadedAssetsType1) { 430 for (Asset asset : loadedAssetsType1) {
420 - doDelete("/api/asset/"+asset.getId().getId().toString()) 431 + doDelete("/api/asset/" + asset.getId().getId().toString())
421 .andExpect(status().isOk()); 432 .andExpect(status().isOk());
422 } 433 }
423 434
424 pageLink = new TextPageLink(4); 435 pageLink = new TextPageLink(4);
425 pageData = doGetTypedWithPageLink("/api/tenant/assets?type={type}&", 436 pageData = doGetTypedWithPageLink("/api/tenant/assets?type={type}&",
426 - new TypeReference<TextPageData<Asset>>(){}, pageLink, type1); 437 + new TypeReference<TextPageData<Asset>>() {
  438 + }, pageLink, type1);
427 Assert.assertFalse(pageData.hasNext()); 439 Assert.assertFalse(pageData.hasNext());
428 Assert.assertEquals(0, pageData.getData().size()); 440 Assert.assertEquals(0, pageData.getData().size());
429 441
430 for (Asset asset : loadedAssetsType2) { 442 for (Asset asset : loadedAssetsType2) {
431 - doDelete("/api/asset/"+asset.getId().getId().toString()) 443 + doDelete("/api/asset/" + asset.getId().getId().toString())
432 .andExpect(status().isOk()); 444 .andExpect(status().isOk());
433 } 445 }
434 446
435 pageLink = new TextPageLink(4); 447 pageLink = new TextPageLink(4);
436 pageData = doGetTypedWithPageLink("/api/tenant/assets?type={type}&", 448 pageData = doGetTypedWithPageLink("/api/tenant/assets?type={type}&",
437 - new TypeReference<TextPageData<Asset>>(){}, pageLink, type2); 449 + new TypeReference<TextPageData<Asset>>() {
  450 + }, pageLink, type2);
438 Assert.assertFalse(pageData.hasNext()); 451 Assert.assertFalse(pageData.hasNext());
439 Assert.assertEquals(0, pageData.getData().size()); 452 Assert.assertEquals(0, pageData.getData().size());
440 } 453 }
@@ -447,9 +460,9 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -447,9 +460,9 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
447 CustomerId customerId = customer.getId(); 460 CustomerId customerId = customer.getId();
448 461
449 List<Asset> assets = new ArrayList<>(); 462 List<Asset> assets = new ArrayList<>();
450 - for (int i=0;i<128;i++) { 463 + for (int i = 0; i < 128; i++) {
451 Asset asset = new Asset(); 464 Asset asset = new Asset();
452 - asset.setName("Asset"+i); 465 + asset.setName("Asset" + i);
453 asset.setType("default"); 466 asset.setType("default");
454 asset = doPost("/api/asset", asset, Asset.class); 467 asset = doPost("/api/asset", asset, Asset.class);
455 assets.add(doPost("/api/customer/" + customerId.getId().toString() 468 assets.add(doPost("/api/customer/" + customerId.getId().toString()
@@ -461,7 +474,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -461,7 +474,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
461 TextPageData<Asset> pageData = null; 474 TextPageData<Asset> pageData = null;
462 do { 475 do {
463 pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/assets?", 476 pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/assets?",
464 - new TypeReference<TextPageData<Asset>>(){}, pageLink); 477 + new TypeReference<TextPageData<Asset>>() {
  478 + }, pageLink);
465 loadedAssets.addAll(pageData.getData()); 479 loadedAssets.addAll(pageData.getData());
466 if (pageData.hasNext()) { 480 if (pageData.hasNext()) {
467 pageLink = pageData.getNextPageLink(); 481 pageLink = pageData.getNextPageLink();
@@ -483,10 +497,10 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -483,10 +497,10 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
483 497
484 String title1 = "Asset title 1"; 498 String title1 = "Asset title 1";
485 List<Asset> assetsTitle1 = new ArrayList<>(); 499 List<Asset> assetsTitle1 = new ArrayList<>();
486 - for (int i=0;i<125;i++) { 500 + for (int i = 0; i < 125; i++) {
487 Asset asset = new Asset(); 501 Asset asset = new Asset();
488 String suffix = RandomStringUtils.randomAlphanumeric(15); 502 String suffix = RandomStringUtils.randomAlphanumeric(15);
489 - String name = title1+suffix; 503 + String name = title1 + suffix;
490 name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); 504 name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase();
491 asset.setName(name); 505 asset.setName(name);
492 asset.setType("default"); 506 asset.setType("default");
@@ -496,10 +510,10 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -496,10 +510,10 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
496 } 510 }
497 String title2 = "Asset title 2"; 511 String title2 = "Asset title 2";
498 List<Asset> assetsTitle2 = new ArrayList<>(); 512 List<Asset> assetsTitle2 = new ArrayList<>();
499 - for (int i=0;i<143;i++) { 513 + for (int i = 0; i < 143; i++) {
500 Asset asset = new Asset(); 514 Asset asset = new Asset();
501 String suffix = RandomStringUtils.randomAlphanumeric(15); 515 String suffix = RandomStringUtils.randomAlphanumeric(15);
502 - String name = title2+suffix; 516 + String name = title2 + suffix;
503 name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); 517 name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase();
504 asset.setName(name); 518 asset.setName(name);
505 asset.setType("default"); 519 asset.setType("default");
@@ -513,7 +527,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -513,7 +527,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
513 TextPageData<Asset> pageData = null; 527 TextPageData<Asset> pageData = null;
514 do { 528 do {
515 pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/assets?", 529 pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/assets?",
516 - new TypeReference<TextPageData<Asset>>(){}, pageLink); 530 + new TypeReference<TextPageData<Asset>>() {
  531 + }, pageLink);
517 loadedAssetsTitle1.addAll(pageData.getData()); 532 loadedAssetsTitle1.addAll(pageData.getData());
518 if (pageData.hasNext()) { 533 if (pageData.hasNext()) {
519 pageLink = pageData.getNextPageLink(); 534 pageLink = pageData.getNextPageLink();
@@ -529,7 +544,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -529,7 +544,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
529 pageLink = new TextPageLink(4, title2); 544 pageLink = new TextPageLink(4, title2);
530 do { 545 do {
531 pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/assets?", 546 pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/assets?",
532 - new TypeReference<TextPageData<Asset>>(){}, pageLink); 547 + new TypeReference<TextPageData<Asset>>() {
  548 + }, pageLink);
533 loadedAssetsTitle2.addAll(pageData.getData()); 549 loadedAssetsTitle2.addAll(pageData.getData());
534 if (pageData.hasNext()) { 550 if (pageData.hasNext()) {
535 pageLink = pageData.getNextPageLink(); 551 pageLink = pageData.getNextPageLink();
@@ -548,7 +564,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -548,7 +564,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
548 564
549 pageLink = new TextPageLink(4, title1); 565 pageLink = new TextPageLink(4, title1);
550 pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/assets?", 566 pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/assets?",
551 - new TypeReference<TextPageData<Asset>>(){}, pageLink); 567 + new TypeReference<TextPageData<Asset>>() {
  568 + }, pageLink);
552 Assert.assertFalse(pageData.hasNext()); 569 Assert.assertFalse(pageData.hasNext());
553 Assert.assertEquals(0, pageData.getData().size()); 570 Assert.assertEquals(0, pageData.getData().size());
554 571
@@ -559,7 +576,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -559,7 +576,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
559 576
560 pageLink = new TextPageLink(4, title2); 577 pageLink = new TextPageLink(4, title2);
561 pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/assets?", 578 pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/assets?",
562 - new TypeReference<TextPageData<Asset>>(){}, pageLink); 579 + new TypeReference<TextPageData<Asset>>() {
  580 + }, pageLink);
563 Assert.assertFalse(pageData.hasNext()); 581 Assert.assertFalse(pageData.hasNext());
564 Assert.assertEquals(0, pageData.getData().size()); 582 Assert.assertEquals(0, pageData.getData().size());
565 } 583 }
@@ -574,10 +592,10 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -574,10 +592,10 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
574 String title1 = "Asset title 1"; 592 String title1 = "Asset title 1";
575 String type1 = "typeC"; 593 String type1 = "typeC";
576 List<Asset> assetsType1 = new ArrayList<>(); 594 List<Asset> assetsType1 = new ArrayList<>();
577 - for (int i=0;i<125;i++) { 595 + for (int i = 0; i < 125; i++) {
578 Asset asset = new Asset(); 596 Asset asset = new Asset();
579 String suffix = RandomStringUtils.randomAlphanumeric(15); 597 String suffix = RandomStringUtils.randomAlphanumeric(15);
580 - String name = title1+suffix; 598 + String name = title1 + suffix;
581 name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); 599 name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase();
582 asset.setName(name); 600 asset.setName(name);
583 asset.setType(type1); 601 asset.setType(type1);
@@ -588,10 +606,10 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -588,10 +606,10 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
588 String title2 = "Asset title 2"; 606 String title2 = "Asset title 2";
589 String type2 = "typeD"; 607 String type2 = "typeD";
590 List<Asset> assetsType2 = new ArrayList<>(); 608 List<Asset> assetsType2 = new ArrayList<>();
591 - for (int i=0;i<143;i++) { 609 + for (int i = 0; i < 143; i++) {
592 Asset asset = new Asset(); 610 Asset asset = new Asset();
593 String suffix = RandomStringUtils.randomAlphanumeric(15); 611 String suffix = RandomStringUtils.randomAlphanumeric(15);
594 - String name = title2+suffix; 612 + String name = title2 + suffix;
595 name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); 613 name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase();
596 asset.setName(name); 614 asset.setName(name);
597 asset.setType(type2); 615 asset.setType(type2);
@@ -605,7 +623,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -605,7 +623,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
605 TextPageData<Asset> pageData = null; 623 TextPageData<Asset> pageData = null;
606 do { 624 do {
607 pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/assets?type={type}&", 625 pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/assets?type={type}&",
608 - new TypeReference<TextPageData<Asset>>(){}, pageLink, type1); 626 + new TypeReference<TextPageData<Asset>>() {
  627 + }, pageLink, type1);
609 loadedAssetsType1.addAll(pageData.getData()); 628 loadedAssetsType1.addAll(pageData.getData());
610 if (pageData.hasNext()) { 629 if (pageData.hasNext()) {
611 pageLink = pageData.getNextPageLink(); 630 pageLink = pageData.getNextPageLink();
@@ -621,7 +640,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -621,7 +640,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
621 pageLink = new TextPageLink(4); 640 pageLink = new TextPageLink(4);
622 do { 641 do {
623 pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/assets?type={type}&", 642 pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/assets?type={type}&",
624 - new TypeReference<TextPageData<Asset>>(){}, pageLink, type2); 643 + new TypeReference<TextPageData<Asset>>() {
  644 + }, pageLink, type2);
625 loadedAssetsType2.addAll(pageData.getData()); 645 loadedAssetsType2.addAll(pageData.getData());
626 if (pageData.hasNext()) { 646 if (pageData.hasNext()) {
627 pageLink = pageData.getNextPageLink(); 647 pageLink = pageData.getNextPageLink();
@@ -640,7 +660,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -640,7 +660,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
640 660
641 pageLink = new TextPageLink(4); 661 pageLink = new TextPageLink(4);
642 pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/assets?type={type}&", 662 pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/assets?type={type}&",
643 - new TypeReference<TextPageData<Asset>>(){}, pageLink, type1); 663 + new TypeReference<TextPageData<Asset>>() {
  664 + }, pageLink, type1);
644 Assert.assertFalse(pageData.hasNext()); 665 Assert.assertFalse(pageData.hasNext());
645 Assert.assertEquals(0, pageData.getData().size()); 666 Assert.assertEquals(0, pageData.getData().size());
646 667
@@ -651,7 +672,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest { @@ -651,7 +672,8 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
651 672
652 pageLink = new TextPageLink(4); 673 pageLink = new TextPageLink(4);
653 pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/assets?type={type}&", 674 pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/assets?type={type}&",
654 - new TypeReference<TextPageData<Asset>>(){}, pageLink, type2); 675 + new TypeReference<TextPageData<Asset>>() {
  676 + }, pageLink, type2);
655 Assert.assertFalse(pageData.hasNext()); 677 Assert.assertFalse(pageData.hasNext());
656 Assert.assertEquals(0, pageData.getData().size()); 678 Assert.assertEquals(0, pageData.getData().size());
657 } 679 }
@@ -426,7 +426,7 @@ public abstract class BaseEntityViewControllerTest extends AbstractControllerTes @@ -426,7 +426,7 @@ public abstract class BaseEntityViewControllerTest extends AbstractControllerTes
426 message.setPayload(strKvs.getBytes()); 426 message.setPayload(strKvs.getBytes());
427 client.publish("v1/devices/me/telemetry", message); 427 client.publish("v1/devices/me/telemetry", message);
428 Thread.sleep(1000); 428 Thread.sleep(1000);
429 -// client.disconnect(); 429 + client.disconnect();
430 } 430 }
431 431
432 private void awaitConnected(MqttAsyncClient client, long ms) throws InterruptedException { 432 private void awaitConnected(MqttAsyncClient client, long ms) throws InterruptedException {
@@ -463,13 +463,13 @@ public abstract class BaseEntityViewControllerTest extends AbstractControllerTes @@ -463,13 +463,13 @@ public abstract class BaseEntityViewControllerTest extends AbstractControllerTes
463 MqttConnectOptions options = new MqttConnectOptions(); 463 MqttConnectOptions options = new MqttConnectOptions();
464 options.setUserName(accessToken); 464 options.setUserName(accessToken);
465 client.connect(options); 465 client.connect(options);
466 - Thread.sleep(3000); 466 + awaitConnected(client, TimeUnit.SECONDS.toMillis(30));
467 467
468 MqttMessage message = new MqttMessage(); 468 MqttMessage message = new MqttMessage();
469 message.setPayload((stringKV).getBytes()); 469 message.setPayload((stringKV).getBytes());
470 client.publish("v1/devices/me/attributes", message); 470 client.publish("v1/devices/me/attributes", message);
471 Thread.sleep(1000); 471 Thread.sleep(1000);
472 - 472 + client.disconnect();
473 return new HashSet<>(doGetAsync("/api/plugins/telemetry/DEVICE/" + viewDeviceId + "/keys/attributes", List.class)); 473 return new HashSet<>(doGetAsync("/api/plugins/telemetry/DEVICE/" + viewDeviceId + "/keys/attributes", List.class));
474 } 474 }
475 475
@@ -16,10 +16,12 @@ @@ -16,10 +16,12 @@
16 package org.thingsboard.server.controller; 16 package org.thingsboard.server.controller;
17 17
18 import org.cassandraunit.dataset.cql.ClassPathCQLDataSet; 18 import org.cassandraunit.dataset.cql.ClassPathCQLDataSet;
  19 +import org.junit.BeforeClass;
19 import org.junit.ClassRule; 20 import org.junit.ClassRule;
20 import org.junit.extensions.cpsuite.ClasspathSuite; 21 import org.junit.extensions.cpsuite.ClasspathSuite;
21 import org.junit.runner.RunWith; 22 import org.junit.runner.RunWith;
22 import org.thingsboard.server.dao.CustomCassandraCQLUnit; 23 import org.thingsboard.server.dao.CustomCassandraCQLUnit;
  24 +import org.thingsboard.server.queue.memory.InMemoryStorage;
23 25
24 import java.util.Arrays; 26 import java.util.Arrays;
25 27
@@ -37,4 +39,9 @@ public class ControllerNoSqlTestSuite { @@ -37,4 +39,9 @@ public class ControllerNoSqlTestSuite {
37 new ClassPathCQLDataSet("cassandra/system-data.cql", false, false), 39 new ClassPathCQLDataSet("cassandra/system-data.cql", false, false),
38 new ClassPathCQLDataSet("cassandra/system-test.cql", false, false)), 40 new ClassPathCQLDataSet("cassandra/system-test.cql", false, false)),
39 "cassandra-test.yaml", 30000l); 41 "cassandra-test.yaml", 30000l);
  42 +
  43 + @BeforeClass
  44 + public static void cleanupInMemStorage(){
  45 + InMemoryStorage.getInstance().cleanup();
  46 + }
40 } 47 }
@@ -15,10 +15,12 @@ @@ -15,10 +15,12 @@
15 */ 15 */
16 package org.thingsboard.server.controller; 16 package org.thingsboard.server.controller;
17 17
  18 +import org.junit.BeforeClass;
18 import org.junit.ClassRule; 19 import org.junit.ClassRule;
19 import org.junit.extensions.cpsuite.ClasspathSuite; 20 import org.junit.extensions.cpsuite.ClasspathSuite;
20 import org.junit.runner.RunWith; 21 import org.junit.runner.RunWith;
21 import org.thingsboard.server.dao.CustomSqlUnit; 22 import org.thingsboard.server.dao.CustomSqlUnit;
  23 +import org.thingsboard.server.queue.memory.InMemoryStorage;
22 24
23 import java.util.Arrays; 25 import java.util.Arrays;
24 26
@@ -33,4 +35,9 @@ public class ControllerSqlTestSuite { @@ -33,4 +35,9 @@ public class ControllerSqlTestSuite {
33 Arrays.asList("sql/schema-ts-hsql.sql", "sql/schema-entities-hsql.sql", "sql/schema-entities-idx.sql", "sql/system-data.sql"), 35 Arrays.asList("sql/schema-ts-hsql.sql", "sql/schema-entities-hsql.sql", "sql/schema-entities-idx.sql", "sql/system-data.sql"),
34 "sql/drop-all-tables.sql", 36 "sql/drop-all-tables.sql",
35 "sql-test.properties"); 37 "sql-test.properties");
  38 +
  39 + @BeforeClass
  40 + public static void cleanupInMemStorage(){
  41 + InMemoryStorage.getInstance().cleanup();
  42 + }
36 } 43 }
@@ -16,10 +16,12 @@ @@ -16,10 +16,12 @@
16 package org.thingsboard.server.mqtt; 16 package org.thingsboard.server.mqtt;
17 17
18 import org.cassandraunit.dataset.cql.ClassPathCQLDataSet; 18 import org.cassandraunit.dataset.cql.ClassPathCQLDataSet;
  19 +import org.junit.BeforeClass;
19 import org.junit.ClassRule; 20 import org.junit.ClassRule;
20 import org.junit.extensions.cpsuite.ClasspathSuite; 21 import org.junit.extensions.cpsuite.ClasspathSuite;
21 import org.junit.runner.RunWith; 22 import org.junit.runner.RunWith;
22 import org.thingsboard.server.dao.CustomCassandraCQLUnit; 23 import org.thingsboard.server.dao.CustomCassandraCQLUnit;
  24 +import org.thingsboard.server.queue.memory.InMemoryStorage;
23 25
24 import java.util.Arrays; 26 import java.util.Arrays;
25 27
@@ -36,4 +38,9 @@ public class MqttNoSqlTestSuite { @@ -36,4 +38,9 @@ public class MqttNoSqlTestSuite {
36 new ClassPathCQLDataSet("cassandra/schema-entities.cql", false, false), 38 new ClassPathCQLDataSet("cassandra/schema-entities.cql", false, false),
37 new ClassPathCQLDataSet("cassandra/system-data.cql", false, false)), 39 new ClassPathCQLDataSet("cassandra/system-data.cql", false, false)),
38 "cassandra-test.yaml", 30000l); 40 "cassandra-test.yaml", 30000l);
  41 +
  42 + @BeforeClass
  43 + public static void cleanupInMemStorage(){
  44 + InMemoryStorage.getInstance().cleanup();
  45 + }
39 } 46 }
@@ -15,10 +15,12 @@ @@ -15,10 +15,12 @@
15 */ 15 */
16 package org.thingsboard.server.mqtt; 16 package org.thingsboard.server.mqtt;
17 17
  18 +import org.junit.BeforeClass;
18 import org.junit.ClassRule; 19 import org.junit.ClassRule;
19 import org.junit.extensions.cpsuite.ClasspathSuite; 20 import org.junit.extensions.cpsuite.ClasspathSuite;
20 import org.junit.runner.RunWith; 21 import org.junit.runner.RunWith;
21 import org.thingsboard.server.dao.CustomSqlUnit; 22 import org.thingsboard.server.dao.CustomSqlUnit;
  23 +import org.thingsboard.server.queue.memory.InMemoryStorage;
22 24
23 import java.util.Arrays; 25 import java.util.Arrays;
24 26
@@ -32,4 +34,9 @@ public class MqttSqlTestSuite { @@ -32,4 +34,9 @@ public class MqttSqlTestSuite {
32 Arrays.asList("sql/schema-ts-hsql.sql", "sql/schema-entities-hsql.sql", "sql/system-data.sql"), 34 Arrays.asList("sql/schema-ts-hsql.sql", "sql/schema-entities-hsql.sql", "sql/system-data.sql"),
33 "sql/drop-all-tables.sql", 35 "sql/drop-all-tables.sql",
34 "sql-test.properties"); 36 "sql-test.properties");
  37 +
  38 + @BeforeClass
  39 + public static void cleanupInMemStorage(){
  40 + InMemoryStorage.getInstance().cleanup();
  41 + }
35 } 42 }
@@ -16,11 +16,13 @@ @@ -16,11 +16,13 @@
16 package org.thingsboard.server.rules; 16 package org.thingsboard.server.rules;
17 17
18 import org.cassandraunit.dataset.cql.ClassPathCQLDataSet; 18 import org.cassandraunit.dataset.cql.ClassPathCQLDataSet;
  19 +import org.junit.BeforeClass;
19 import org.junit.ClassRule; 20 import org.junit.ClassRule;
20 import org.junit.extensions.cpsuite.ClasspathSuite; 21 import org.junit.extensions.cpsuite.ClasspathSuite;
21 import org.junit.runner.RunWith; 22 import org.junit.runner.RunWith;
22 import org.thingsboard.server.dao.CustomCassandraCQLUnit; 23 import org.thingsboard.server.dao.CustomCassandraCQLUnit;
23 import org.thingsboard.server.dao.CustomSqlUnit; 24 import org.thingsboard.server.dao.CustomSqlUnit;
  25 +import org.thingsboard.server.queue.memory.InMemoryStorage;
24 26
25 import java.util.Arrays; 27 import java.util.Arrays;
26 28
@@ -40,4 +42,9 @@ public class RuleEngineNoSqlTestSuite { @@ -40,4 +42,9 @@ public class RuleEngineNoSqlTestSuite {
40 new ClassPathCQLDataSet("cassandra/system-data.cql", false, false)), 42 new ClassPathCQLDataSet("cassandra/system-data.cql", false, false)),
41 "cassandra-test.yaml", 30000l); 43 "cassandra-test.yaml", 30000l);
42 44
  45 + @BeforeClass
  46 + public static void cleanupInMemStorage(){
  47 + InMemoryStorage.getInstance().cleanup();
  48 + }
  49 +
43 } 50 }
@@ -15,10 +15,12 @@ @@ -15,10 +15,12 @@
15 */ 15 */
16 package org.thingsboard.server.rules; 16 package org.thingsboard.server.rules;
17 17
  18 +import org.junit.BeforeClass;
18 import org.junit.ClassRule; 19 import org.junit.ClassRule;
19 import org.junit.extensions.cpsuite.ClasspathSuite; 20 import org.junit.extensions.cpsuite.ClasspathSuite;
20 import org.junit.runner.RunWith; 21 import org.junit.runner.RunWith;
21 import org.thingsboard.server.dao.CustomSqlUnit; 22 import org.thingsboard.server.dao.CustomSqlUnit;
  23 +import org.thingsboard.server.queue.memory.InMemoryStorage;
22 24
23 import java.util.Arrays; 25 import java.util.Arrays;
24 26
@@ -33,4 +35,9 @@ public class RuleEngineSqlTestSuite { @@ -33,4 +35,9 @@ public class RuleEngineSqlTestSuite {
33 Arrays.asList("sql/schema-ts-hsql.sql", "sql/schema-entities-hsql.sql", "sql/system-data.sql"), 35 Arrays.asList("sql/schema-ts-hsql.sql", "sql/schema-entities-hsql.sql", "sql/system-data.sql"),
34 "sql/drop-all-tables.sql", 36 "sql/drop-all-tables.sql",
35 "sql-test.properties"); 37 "sql-test.properties");
  38 +
  39 + @BeforeClass
  40 + public static void cleanupInMemStorage(){
  41 + InMemoryStorage.getInstance().cleanup();
  42 + }
36 } 43 }
@@ -16,10 +16,12 @@ @@ -16,10 +16,12 @@
16 package org.thingsboard.server.system; 16 package org.thingsboard.server.system;
17 17
18 import org.cassandraunit.dataset.cql.ClassPathCQLDataSet; 18 import org.cassandraunit.dataset.cql.ClassPathCQLDataSet;
  19 +import org.junit.BeforeClass;
19 import org.junit.ClassRule; 20 import org.junit.ClassRule;
20 import org.junit.extensions.cpsuite.ClasspathSuite; 21 import org.junit.extensions.cpsuite.ClasspathSuite;
21 import org.junit.runner.RunWith; 22 import org.junit.runner.RunWith;
22 import org.thingsboard.server.dao.CustomCassandraCQLUnit; 23 import org.thingsboard.server.dao.CustomCassandraCQLUnit;
  24 +import org.thingsboard.server.queue.memory.InMemoryStorage;
23 25
24 import java.util.Arrays; 26 import java.util.Arrays;
25 27
@@ -38,4 +40,9 @@ public class SystemNoSqlTestSuite { @@ -38,4 +40,9 @@ public class SystemNoSqlTestSuite {
38 new ClassPathCQLDataSet("cassandra/schema-entities.cql", false, false), 40 new ClassPathCQLDataSet("cassandra/schema-entities.cql", false, false),
39 new ClassPathCQLDataSet("cassandra/system-data.cql", false, false)), 41 new ClassPathCQLDataSet("cassandra/system-data.cql", false, false)),
40 "cassandra-test.yaml", 30000l); 42 "cassandra-test.yaml", 30000l);
  43 +
  44 + @BeforeClass
  45 + public static void cleanupInMemStorage(){
  46 + InMemoryStorage.getInstance().cleanup();
  47 + }
41 } 48 }
@@ -15,10 +15,12 @@ @@ -15,10 +15,12 @@
15 */ 15 */
16 package org.thingsboard.server.system; 16 package org.thingsboard.server.system;
17 17
  18 +import org.junit.BeforeClass;
18 import org.junit.ClassRule; 19 import org.junit.ClassRule;
19 import org.junit.extensions.cpsuite.ClasspathSuite; 20 import org.junit.extensions.cpsuite.ClasspathSuite;
20 import org.junit.runner.RunWith; 21 import org.junit.runner.RunWith;
21 import org.thingsboard.server.dao.CustomSqlUnit; 22 import org.thingsboard.server.dao.CustomSqlUnit;
  23 +import org.thingsboard.server.queue.memory.InMemoryStorage;
22 24
23 import java.util.Arrays; 25 import java.util.Arrays;
24 26
@@ -35,4 +37,9 @@ public class SystemSqlTestSuite { @@ -35,4 +37,9 @@ public class SystemSqlTestSuite {
35 "sql/drop-all-tables.sql", 37 "sql/drop-all-tables.sql",
36 "sql-test.properties"); 38 "sql-test.properties");
37 39
  40 + @BeforeClass
  41 + public static void cleanupInMemStorage(){
  42 + InMemoryStorage.getInstance().cleanup();
  43 + }
  44 +
38 } 45 }
@@ -30,11 +30,9 @@ import java.util.concurrent.TimeUnit; @@ -30,11 +30,9 @@ import java.util.concurrent.TimeUnit;
30 public final class InMemoryStorage { 30 public final class InMemoryStorage {
31 private static InMemoryStorage instance; 31 private static InMemoryStorage instance;
32 private final ConcurrentHashMap<String, BlockingQueue<TbQueueMsg>> storage; 32 private final ConcurrentHashMap<String, BlockingQueue<TbQueueMsg>> storage;
33 - private volatile boolean stopped;  
34 33
35 private InMemoryStorage() { 34 private InMemoryStorage() {
36 storage = new ConcurrentHashMap<>(); 35 storage = new ConcurrentHashMap<>();
37 - stopped = false;  
38 } 36 }
39 37
40 public static InMemoryStorage getInstance() { 38 public static InMemoryStorage getInstance() {
@@ -52,33 +50,31 @@ public final class InMemoryStorage { @@ -52,33 +50,31 @@ public final class InMemoryStorage {
52 return storage.computeIfAbsent(topic, (t) -> new LinkedBlockingQueue<>()).add(msg); 50 return storage.computeIfAbsent(topic, (t) -> new LinkedBlockingQueue<>()).add(msg);
53 } 51 }
54 52
55 - public <T extends TbQueueMsg> List<T> get(String topic, long durationInMillis) { 53 + public <T extends TbQueueMsg> List<T> get(String topic, long durationInMillis) throws InterruptedException {
56 if (storage.containsKey(topic)) { 54 if (storage.containsKey(topic)) {
57 - try {  
58 - List<T> entities;  
59 - T first = (T) storage.get(topic).poll(durationInMillis, TimeUnit.MILLISECONDS);  
60 - if (first != null) {  
61 - entities = new ArrayList<>();  
62 - entities.add(first);  
63 - List<TbQueueMsg> otherList = new ArrayList<>();  
64 - storage.get(topic).drainTo(otherList, 999);  
65 - for (TbQueueMsg other : otherList) {  
66 - entities.add((T) other);  
67 - }  
68 - } else {  
69 - entities = Collections.emptyList();  
70 - }  
71 - return entities;  
72 - } catch (InterruptedException e) {  
73 - if (!stopped) {  
74 - log.warn("Queue was interrupted", e); 55 + List<T> entities;
  56 + T first = (T) storage.get(topic).poll(durationInMillis, TimeUnit.MILLISECONDS);
  57 + if (first != null) {
  58 + entities = new ArrayList<>();
  59 + entities.add(first);
  60 + List<TbQueueMsg> otherList = new ArrayList<>();
  61 + storage.get(topic).drainTo(otherList, 999);
  62 + for (TbQueueMsg other : otherList) {
  63 + entities.add((T) other);
75 } 64 }
  65 + } else {
  66 + entities = Collections.emptyList();
76 } 67 }
  68 + return entities;
77 } 69 }
78 return Collections.emptyList(); 70 return Collections.emptyList();
79 } 71 }
80 72
81 - public void stop() {  
82 - stopped = true; 73 + /**
  74 + * Used primarily for testing.
  75 + */
  76 + public void cleanup() {
  77 + storage.clear();
83 } 78 }
  79 +
84 } 80 }
@@ -66,7 +66,16 @@ public class InMemoryTbQueueConsumer<T extends TbQueueMsg> implements TbQueueCon @@ -66,7 +66,16 @@ public class InMemoryTbQueueConsumer<T extends TbQueueMsg> implements TbQueueCon
66 if (subscribed) { 66 if (subscribed) {
67 List<T> messages = partitions 67 List<T> messages = partitions
68 .stream() 68 .stream()
69 - .map(tpi -> storage.get(tpi.getFullTopicName(), durationInMillis)) 69 + .map(tpi -> {
  70 + try {
  71 + return storage.get(tpi.getFullTopicName(), durationInMillis);
  72 + } catch (InterruptedException e) {
  73 + if (!stopped) {
  74 + log.error("Queue was interrupted.", e);
  75 + }
  76 + return Collections.emptyList();
  77 + }
  78 + })
70 .flatMap(List::stream) 79 .flatMap(List::stream)
71 .map(msg -> (T) msg).collect(Collectors.toList()); 80 .map(msg -> (T) msg).collect(Collectors.toList());
72 if (messages.size() > 0) { 81 if (messages.size() > 0) {
@@ -54,7 +54,7 @@ @@ -54,7 +54,7 @@
54 <dependency> 54 <dependency>
55 <groupId>org.apache.cassandra</groupId> 55 <groupId>org.apache.cassandra</groupId>
56 <artifactId>cassandra-all</artifactId> 56 <artifactId>cassandra-all</artifactId>
57 - <version>3.11.4</version> 57 + <version>3.11.6</version>
58 </dependency> 58 </dependency>
59 <dependency> 59 <dependency>
60 <groupId>com.datastax.cassandra</groupId> 60 <groupId>com.datastax.cassandra</groupId>