...
|
...
|
@@ -166,7 +166,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
166
|
166
|
// sleep 1 seconds to avoid CREDENTIALS updated message for the user
|
167
|
167
|
// user credentials is going to be stored and updated event pushed to edge notification service
|
168
|
168
|
// while service will be processing this event edge could be already added and additional message will be pushed
|
169
|
|
- Thread.sleep(1000);
|
|
169
|
+ Thread.sleep(500);
|
170
|
170
|
|
171
|
171
|
installation();
|
172
|
172
|
|
...
|
...
|
@@ -177,6 +177,22 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
177
|
177
|
testReceivedInitialData();
|
178
|
178
|
}
|
179
|
179
|
|
|
180
|
+ private void installation() throws Exception {
|
|
181
|
+ edge = doPost("/api/edge", constructEdge("Test Edge", "test"), Edge.class);
|
|
182
|
+
|
|
183
|
+ DeviceProfile deviceProfile = this.createDeviceProfile(CUSTOM_DEVICE_PROFILE_NAME, null);
|
|
184
|
+ extendDeviceProfileData(deviceProfile);
|
|
185
|
+ doPost("/api/deviceProfile", deviceProfile, DeviceProfile.class);
|
|
186
|
+
|
|
187
|
+ Device savedDevice = saveDevice("Edge Device 1", CUSTOM_DEVICE_PROFILE_NAME);
|
|
188
|
+ doPost("/api/edge/" + edge.getId().getId().toString()
|
|
189
|
+ + "/device/" + savedDevice.getId().getId().toString(), Device.class);
|
|
190
|
+
|
|
191
|
+ Asset savedAsset = saveAsset("Edge Asset 1");
|
|
192
|
+ doPost("/api/edge/" + edge.getId().getId().toString()
|
|
193
|
+ + "/asset/" + savedAsset.getId().getId().toString(), Asset.class);
|
|
194
|
+ }
|
|
195
|
+
|
180
|
196
|
@After
|
181
|
197
|
public void afterTest() throws Exception {
|
182
|
198
|
try {
|
...
|
...
|
@@ -190,7 +206,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
190
|
206
|
}
|
191
|
207
|
|
192
|
208
|
@Test
|
193
|
|
- public void generalTest() throws Exception {
|
|
209
|
+ public void test() throws Exception {
|
194
|
210
|
testDevices();
|
195
|
211
|
|
196
|
212
|
testAssets();
|
...
|
...
|
@@ -216,179 +232,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
216
|
232
|
testSendMessagesToCloud();
|
217
|
233
|
|
218
|
234
|
testRpcCall();
|
219
|
|
- }
|
220
|
|
-
|
221
|
|
- @Test
|
222
|
|
- public void testTimeseriesWithFailures() throws Exception {
|
223
|
|
- log.info("Testing timeseries with failures");
|
224
|
|
-
|
225
|
|
- int numberOfTimeseriesToSend = 1000;
|
226
|
|
-
|
227
|
|
- edgeImitator.setRandomFailuresOnTimeseriesDownlink(true);
|
228
|
|
- // imitator will generate failure in 5% of cases
|
229
|
|
- edgeImitator.setFailureProbability(5.0);
|
230
|
|
-
|
231
|
|
- edgeImitator.expectMessageAmount(numberOfTimeseriesToSend);
|
232
|
|
- Device device = findDeviceByName("Edge Device 1");
|
233
|
|
- for (int idx = 1; idx <= numberOfTimeseriesToSend; idx++) {
|
234
|
|
- String timeseriesData = "{\"data\":{\"idx\":" + idx + "},\"ts\":" + System.currentTimeMillis() + "}";
|
235
|
|
- JsonNode timeseriesEntityData = mapper.readTree(timeseriesData);
|
236
|
|
- EdgeEvent edgeEvent = constructEdgeEvent(tenantId, edge.getId(), EdgeEventActionType.TIMESERIES_UPDATED,
|
237
|
|
- device.getId().getId(), EdgeEventType.DEVICE, timeseriesEntityData);
|
238
|
|
- edgeEventService.saveAsync(edgeEvent);
|
239
|
|
- clusterService.onEdgeEventUpdate(tenantId, edge.getId());
|
240
|
|
- }
|
241
|
235
|
|
242
|
|
- Assert.assertTrue(edgeImitator.waitForMessages(60));
|
243
|
|
-
|
244
|
|
- List<EntityDataProto> allTelemetryMsgs = edgeImitator.findAllMessagesByType(EntityDataProto.class);
|
245
|
|
- Assert.assertEquals(numberOfTimeseriesToSend, allTelemetryMsgs.size());
|
246
|
|
-
|
247
|
|
- for (int idx = 1; idx <= numberOfTimeseriesToSend; idx++) {
|
248
|
|
- Assert.assertTrue(isIdxExistsInTheDownlinkList(idx, allTelemetryMsgs));
|
249
|
|
- }
|
250
|
|
-
|
251
|
|
- edgeImitator.setRandomFailuresOnTimeseriesDownlink(false);
|
252
|
|
- log.info("Timeseries with failures tested successfully");
|
253
|
|
- }
|
254
|
|
-
|
255
|
|
- private boolean isIdxExistsInTheDownlinkList(int idx, List<EntityDataProto> allTelemetryMsgs) {
|
256
|
|
- for (EntityDataProto proto : allTelemetryMsgs) {
|
257
|
|
- TransportProtos.PostTelemetryMsg postTelemetryMsg = proto.getPostTelemetryMsg();
|
258
|
|
- Assert.assertEquals(1, postTelemetryMsg.getTsKvListCount());
|
259
|
|
- TransportProtos.TsKvListProto tsKvListProto = postTelemetryMsg.getTsKvList(0);
|
260
|
|
- Assert.assertEquals(1, tsKvListProto.getKvCount());
|
261
|
|
- TransportProtos.KeyValueProto keyValueProto = tsKvListProto.getKv(0);
|
262
|
|
- Assert.assertEquals("idx", keyValueProto.getKey());
|
263
|
|
- if (keyValueProto.getLongV() == idx) {
|
264
|
|
- return true;
|
265
|
|
- }
|
266
|
|
- }
|
267
|
|
- return false;
|
268
|
|
- }
|
269
|
|
-
|
270
|
|
- private Device findDeviceByName(String deviceName) throws Exception {
|
271
|
|
- List<Device> edgeDevices = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/devices?",
|
272
|
|
- new TypeReference<PageData<Device>>() {
|
273
|
|
- }, new PageLink(100)).getData();
|
274
|
|
- Optional<Device> foundDevice = edgeDevices.stream().filter(d -> d.getName().equals(deviceName)).findAny();
|
275
|
|
- Assert.assertTrue(foundDevice.isPresent());
|
276
|
|
- Device device = foundDevice.get();
|
277
|
|
- Assert.assertEquals(deviceName, device.getName());
|
278
|
|
- return device;
|
279
|
|
- }
|
280
|
|
-
|
281
|
|
- private Asset findAssetByName(String assetName) throws Exception {
|
282
|
|
- List<Asset> edgeAssets = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/assets?",
|
283
|
|
- new TypeReference<PageData<Asset>>() {
|
284
|
|
- }, new PageLink(100)).getData();
|
285
|
|
-
|
286
|
|
- Assert.assertEquals(1, edgeAssets.size());
|
287
|
|
- Asset asset = edgeAssets.get(0);
|
288
|
|
- Assert.assertEquals(assetName, asset.getName());
|
289
|
|
- return asset;
|
290
|
|
- }
|
291
|
|
-
|
292
|
|
- private Device saveDevice(String deviceName, String type) throws Exception {
|
293
|
|
- Device device = new Device();
|
294
|
|
- device.setName(deviceName);
|
295
|
|
- device.setType(type);
|
296
|
|
- return doPost("/api/device", device, Device.class);
|
297
|
|
- }
|
298
|
|
-
|
299
|
|
- private Asset saveAsset(String assetName) throws Exception {
|
300
|
|
- Asset asset = new Asset();
|
301
|
|
- asset.setName(assetName);
|
302
|
|
- asset.setType("test");
|
303
|
|
- return doPost("/api/asset", asset, Asset.class);
|
304
|
|
- }
|
305
|
|
-
|
306
|
|
- private void testRpcCall() throws Exception {
|
307
|
|
- Device device = findDeviceByName("Edge Device 1");
|
308
|
|
-
|
309
|
|
- ObjectNode body = mapper.createObjectNode();
|
310
|
|
- body.put("requestId", new Random().nextInt());
|
311
|
|
- body.put("requestUUID", Uuids.timeBased().toString());
|
312
|
|
- body.put("oneway", false);
|
313
|
|
- body.put("expirationTime", System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(10));
|
314
|
|
- body.put("method", "test_method");
|
315
|
|
- body.put("params", "{\"param1\":\"value1\"}");
|
316
|
|
-
|
317
|
|
- EdgeEvent edgeEvent = constructEdgeEvent(tenantId, edge.getId(), EdgeEventActionType.RPC_CALL, device.getId().getId(), EdgeEventType.DEVICE, body);
|
318
|
|
- edgeImitator.expectMessageAmount(1);
|
319
|
|
- edgeEventService.saveAsync(edgeEvent);
|
320
|
|
- clusterService.onEdgeEventUpdate(tenantId, edge.getId());
|
321
|
|
- Assert.assertTrue(edgeImitator.waitForMessages());
|
322
|
|
-
|
323
|
|
- AbstractMessage latestMessage = edgeImitator.getLatestMessage();
|
324
|
|
- Assert.assertTrue(latestMessage instanceof DeviceRpcCallMsg);
|
325
|
|
- DeviceRpcCallMsg latestDeviceRpcCallMsg = (DeviceRpcCallMsg) latestMessage;
|
326
|
|
- Assert.assertEquals("test_method", latestDeviceRpcCallMsg.getRequestMsg().getMethod());
|
327
|
|
- }
|
328
|
|
-
|
329
|
|
- private void testReceivedInitialData() throws Exception {
|
330
|
|
- log.info("Checking received data");
|
331
|
|
- Assert.assertTrue(edgeImitator.waitForMessages());
|
332
|
|
-
|
333
|
|
- EdgeConfiguration configuration = edgeImitator.getConfiguration();
|
334
|
|
- Assert.assertNotNull(configuration);
|
335
|
|
-
|
336
|
|
- testAutoGeneratedCodeByProtobuf(configuration);
|
337
|
|
-
|
338
|
|
- Optional<DeviceUpdateMsg> deviceUpdateMsgOpt = edgeImitator.findMessageByType(DeviceUpdateMsg.class);
|
339
|
|
- Assert.assertTrue(deviceUpdateMsgOpt.isPresent());
|
340
|
|
- DeviceUpdateMsg deviceUpdateMsg = deviceUpdateMsgOpt.get();
|
341
|
|
- Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, deviceUpdateMsg.getMsgType());
|
342
|
|
- UUID deviceUUID = new UUID(deviceUpdateMsg.getIdMSB(), deviceUpdateMsg.getIdLSB());
|
343
|
|
- Device device = doGet("/api/device/" + deviceUUID.toString(), Device.class);
|
344
|
|
- Assert.assertNotNull(device);
|
345
|
|
- List<Device> edgeDevices = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/devices?",
|
346
|
|
- new TypeReference<PageData<Device>>() {}, new PageLink(100)).getData();
|
347
|
|
- Assert.assertTrue(edgeDevices.contains(device));
|
348
|
|
-
|
349
|
|
- List<DeviceProfileUpdateMsg> deviceProfileUpdateMsgList = edgeImitator.findAllMessagesByType(DeviceProfileUpdateMsg.class);
|
350
|
|
- Assert.assertEquals(3, deviceProfileUpdateMsgList.size());
|
351
|
|
- Optional<DeviceProfileUpdateMsg> deviceProfileUpdateMsgOpt =
|
352
|
|
- deviceProfileUpdateMsgList.stream().filter(dfum -> CUSTOM_DEVICE_PROFILE_NAME.equals(dfum.getName())).findAny();
|
353
|
|
- Assert.assertTrue(deviceProfileUpdateMsgOpt.isPresent());
|
354
|
|
- DeviceProfileUpdateMsg deviceProfileUpdateMsg = deviceProfileUpdateMsgOpt.get();
|
355
|
|
- Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, deviceProfileUpdateMsg.getMsgType());
|
356
|
|
- UUID deviceProfileUUID = new UUID(deviceProfileUpdateMsg.getIdMSB(), deviceProfileUpdateMsg.getIdLSB());
|
357
|
|
- DeviceProfile deviceProfile = doGet("/api/deviceProfile/" + deviceProfileUUID.toString(), DeviceProfile.class);
|
358
|
|
- Assert.assertNotNull(deviceProfile);
|
359
|
|
- Assert.assertNotNull(deviceProfile.getProfileData());
|
360
|
|
- Assert.assertNotNull(deviceProfile.getProfileData().getAlarms());
|
361
|
|
- Assert.assertNotNull(deviceProfile.getProfileData().getAlarms().get(0).getClearRule());
|
362
|
|
-
|
363
|
|
- testAutoGeneratedCodeByProtobuf(deviceProfileUpdateMsg);
|
364
|
|
-
|
365
|
|
- Optional<AssetUpdateMsg> assetUpdateMsgOpt = edgeImitator.findMessageByType(AssetUpdateMsg.class);
|
366
|
|
- Assert.assertTrue(assetUpdateMsgOpt.isPresent());
|
367
|
|
- AssetUpdateMsg assetUpdateMsg = assetUpdateMsgOpt.get();
|
368
|
|
- Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, assetUpdateMsg.getMsgType());
|
369
|
|
- UUID assetUUID = new UUID(assetUpdateMsg.getIdMSB(), assetUpdateMsg.getIdLSB());
|
370
|
|
- Asset asset = doGet("/api/asset/" + assetUUID.toString(), Asset.class);
|
371
|
|
- Assert.assertNotNull(asset);
|
372
|
|
- List<Asset> edgeAssets = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/assets?",
|
373
|
|
- new TypeReference<PageData<Asset>>() {}, new PageLink(100)).getData();
|
374
|
|
- Assert.assertTrue(edgeAssets.contains(asset));
|
375
|
|
-
|
376
|
|
- testAutoGeneratedCodeByProtobuf(assetUpdateMsg);
|
377
|
|
-
|
378
|
|
- Optional<RuleChainUpdateMsg> ruleChainUpdateMsgOpt = edgeImitator.findMessageByType(RuleChainUpdateMsg.class);
|
379
|
|
- Assert.assertTrue(ruleChainUpdateMsgOpt.isPresent());
|
380
|
|
- RuleChainUpdateMsg ruleChainUpdateMsg = ruleChainUpdateMsgOpt.get();
|
381
|
|
- Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, ruleChainUpdateMsg.getMsgType());
|
382
|
|
- UUID ruleChainUUID = new UUID(ruleChainUpdateMsg.getIdMSB(), ruleChainUpdateMsg.getIdLSB());
|
383
|
|
- RuleChain ruleChain = doGet("/api/ruleChain/" + ruleChainUUID.toString(), RuleChain.class);
|
384
|
|
- Assert.assertNotNull(ruleChain);
|
385
|
|
- List<RuleChain> edgeRuleChains = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/ruleChains?",
|
386
|
|
- new TypeReference<PageData<RuleChain>>() {}, new PageLink(100)).getData();
|
387
|
|
- Assert.assertTrue(edgeRuleChains.contains(ruleChain));
|
388
|
|
-
|
389
|
|
- testAutoGeneratedCodeByProtobuf(ruleChainUpdateMsg);
|
390
|
|
-
|
391
|
|
- log.info("Received data checked");
|
|
236
|
+ testTimeseriesWithFailures();
|
392
|
237
|
}
|
393
|
238
|
|
394
|
239
|
private void testDevices() throws Exception {
|
...
|
...
|
@@ -529,23 +374,20 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
529
|
374
|
log.info("Testing RuleChains");
|
530
|
375
|
|
531
|
376
|
// 1
|
532
|
|
- edgeImitator.expectMessageAmount(1);
|
|
377
|
+ edgeImitator.expectMessageAmount(2);
|
533
|
378
|
RuleChain ruleChain = new RuleChain();
|
534
|
379
|
ruleChain.setName("Edge Test Rule Chain");
|
535
|
380
|
ruleChain.setType(RuleChainType.EDGE);
|
536
|
381
|
RuleChain savedRuleChain = doPost("/api/ruleChain", ruleChain, RuleChain.class);
|
537
|
|
- createRuleChainMetadata(savedRuleChain);
|
538
|
|
- // sleep 1 seconds to avoid ENTITY_UPDATED_RPC_MESSAGE for the rule chain
|
539
|
|
- // rule chain metadata is going to be stored and updated event pushed to edge notification service
|
540
|
|
- // while service will be processing this event assignment rule chain to edge will be completed if bad timing
|
541
|
|
- Thread.sleep(1000);
|
542
|
382
|
doPost("/api/edge/" + edge.getId().getId().toString()
|
543
|
383
|
+ "/ruleChain/" + savedRuleChain.getId().getId().toString(), RuleChain.class);
|
|
384
|
+ createRuleChainMetadata(savedRuleChain);
|
544
|
385
|
Assert.assertTrue(edgeImitator.waitForMessages());
|
545
|
|
- AbstractMessage latestMessage = edgeImitator.getLatestMessage();
|
546
|
|
- Assert.assertTrue(latestMessage instanceof RuleChainUpdateMsg);
|
547
|
|
- RuleChainUpdateMsg ruleChainUpdateMsg = (RuleChainUpdateMsg) latestMessage;
|
548
|
|
- Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, ruleChainUpdateMsg.getMsgType());
|
|
386
|
+ Optional<RuleChainUpdateMsg> ruleChainUpdateMsgOpt = edgeImitator.findMessageByType(RuleChainUpdateMsg.class);
|
|
387
|
+ Assert.assertTrue(ruleChainUpdateMsgOpt.isPresent());
|
|
388
|
+ RuleChainUpdateMsg ruleChainUpdateMsg = ruleChainUpdateMsgOpt.get();
|
|
389
|
+ Assert.assertTrue(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE.equals(ruleChainUpdateMsg.getMsgType()) ||
|
|
390
|
+ UpdateMsgType.ENTITY_UPDATED_RPC_MESSAGE.equals(ruleChainUpdateMsg.getMsgType()));
|
549
|
391
|
Assert.assertEquals(ruleChainUpdateMsg.getIdMSB(), savedRuleChain.getUuidId().getMostSignificantBits());
|
550
|
392
|
Assert.assertEquals(ruleChainUpdateMsg.getIdLSB(), savedRuleChain.getUuidId().getLeastSignificantBits());
|
551
|
393
|
Assert.assertEquals(ruleChainUpdateMsg.getName(), savedRuleChain.getName());
|
...
|
...
|
@@ -558,9 +400,9 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
558
|
400
|
doDelete("/api/edge/" + edge.getId().getId().toString()
|
559
|
401
|
+ "/ruleChain/" + savedRuleChain.getId().getId().toString(), RuleChain.class);
|
560
|
402
|
Assert.assertTrue(edgeImitator.waitForMessages());
|
561
|
|
- latestMessage = edgeImitator.getLatestMessage();
|
562
|
|
- Assert.assertTrue(latestMessage instanceof RuleChainUpdateMsg);
|
563
|
|
- ruleChainUpdateMsg = (RuleChainUpdateMsg) latestMessage;
|
|
403
|
+ ruleChainUpdateMsgOpt = edgeImitator.findMessageByType(RuleChainUpdateMsg.class);
|
|
404
|
+ Assert.assertTrue(ruleChainUpdateMsgOpt.isPresent());
|
|
405
|
+ ruleChainUpdateMsg = ruleChainUpdateMsgOpt.get();
|
564
|
406
|
Assert.assertEquals(UpdateMsgType.ENTITY_DELETED_RPC_MESSAGE, ruleChainUpdateMsg.getMsgType());
|
565
|
407
|
Assert.assertEquals(ruleChainUpdateMsg.getIdMSB(), savedRuleChain.getUuidId().getMostSignificantBits());
|
566
|
408
|
Assert.assertEquals(ruleChainUpdateMsg.getIdLSB(), savedRuleChain.getUuidId().getLeastSignificantBits());
|
...
|
...
|
@@ -574,67 +416,6 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
574
|
416
|
log.info("RuleChains tested successfully");
|
575
|
417
|
}
|
576
|
418
|
|
577
|
|
- private void testRuleChainMetadataRequestMsg(RuleChainId ruleChainId) throws Exception {
|
578
|
|
- RuleChainMetadataRequestMsg.Builder ruleChainMetadataRequestMsgBuilder = RuleChainMetadataRequestMsg.newBuilder()
|
579
|
|
- .setRuleChainIdMSB(ruleChainId.getId().getMostSignificantBits())
|
580
|
|
- .setRuleChainIdLSB(ruleChainId.getId().getLeastSignificantBits());
|
581
|
|
- testAutoGeneratedCodeByProtobuf(ruleChainMetadataRequestMsgBuilder);
|
582
|
|
-
|
583
|
|
- UplinkMsg.Builder uplinkMsgBuilder = UplinkMsg.newBuilder()
|
584
|
|
- .addRuleChainMetadataRequestMsg(ruleChainMetadataRequestMsgBuilder.build());
|
585
|
|
- testAutoGeneratedCodeByProtobuf(uplinkMsgBuilder);
|
586
|
|
-
|
587
|
|
- edgeImitator.expectResponsesAmount(1);
|
588
|
|
- edgeImitator.expectMessageAmount(1);
|
589
|
|
- edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build());
|
590
|
|
- Assert.assertTrue(edgeImitator.waitForResponses());
|
591
|
|
- Assert.assertTrue(edgeImitator.waitForMessages());
|
592
|
|
-
|
593
|
|
- AbstractMessage latestMessage = edgeImitator.getLatestMessage();
|
594
|
|
- Assert.assertTrue(latestMessage instanceof RuleChainMetadataUpdateMsg);
|
595
|
|
- RuleChainMetadataUpdateMsg ruleChainMetadataUpdateMsg = (RuleChainMetadataUpdateMsg) latestMessage;
|
596
|
|
- RuleChainId receivedRuleChainId =
|
597
|
|
- new RuleChainId(new UUID(ruleChainMetadataUpdateMsg.getRuleChainIdMSB(), ruleChainMetadataUpdateMsg.getRuleChainIdLSB()));
|
598
|
|
- Assert.assertEquals(ruleChainId, receivedRuleChainId);
|
599
|
|
- }
|
600
|
|
-
|
601
|
|
- private void createRuleChainMetadata(RuleChain ruleChain) throws Exception {
|
602
|
|
- RuleChainMetaData ruleChainMetaData = new RuleChainMetaData();
|
603
|
|
- ruleChainMetaData.setRuleChainId(ruleChain.getId());
|
604
|
|
-
|
605
|
|
- ObjectMapper mapper = new ObjectMapper();
|
606
|
|
-
|
607
|
|
- RuleNode ruleNode1 = new RuleNode();
|
608
|
|
- ruleNode1.setName("name1");
|
609
|
|
- ruleNode1.setType("type1");
|
610
|
|
- ruleNode1.setConfiguration(mapper.readTree("\"key1\": \"val1\""));
|
611
|
|
-
|
612
|
|
- RuleNode ruleNode2 = new RuleNode();
|
613
|
|
- ruleNode2.setName("name2");
|
614
|
|
- ruleNode2.setType("type2");
|
615
|
|
- ruleNode2.setConfiguration(mapper.readTree("\"key2\": \"val2\""));
|
616
|
|
-
|
617
|
|
- RuleNode ruleNode3 = new RuleNode();
|
618
|
|
- ruleNode3.setName("name3");
|
619
|
|
- ruleNode3.setType("type3");
|
620
|
|
- ruleNode3.setConfiguration(mapper.readTree("\"key3\": \"val3\""));
|
621
|
|
-
|
622
|
|
- List<RuleNode> ruleNodes = new ArrayList<>();
|
623
|
|
- ruleNodes.add(ruleNode1);
|
624
|
|
- ruleNodes.add(ruleNode2);
|
625
|
|
- ruleNodes.add(ruleNode3);
|
626
|
|
- ruleChainMetaData.setFirstNodeIndex(0);
|
627
|
|
- ruleChainMetaData.setNodes(ruleNodes);
|
628
|
|
-
|
629
|
|
- ruleChainMetaData.addConnectionInfo(0, 1, "success");
|
630
|
|
- ruleChainMetaData.addConnectionInfo(0, 2, "fail");
|
631
|
|
- ruleChainMetaData.addConnectionInfo(1, 2, "success");
|
632
|
|
-
|
633
|
|
- ruleChainMetaData.addRuleChainConnectionInfo(2, edge.getRootRuleChainId(), "success", mapper.createObjectNode());
|
634
|
|
-
|
635
|
|
- doPost("/api/ruleChain/metadata", ruleChainMetaData, RuleChainMetaData.class);
|
636
|
|
- }
|
637
|
|
-
|
638
|
419
|
private void testDashboards() throws Exception {
|
639
|
420
|
log.info("Testing Dashboards");
|
640
|
421
|
|
...
|
...
|
@@ -1037,12 +818,12 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1037
|
818
|
log.info("Attributes tested successfully");
|
1038
|
819
|
}
|
1039
|
820
|
|
1040
|
|
- private void testAttributesDeleteMsg(Device device) throws JsonProcessingException, InterruptedException {
|
1041
|
|
- String deleteAttributesData = "{\"scope\":\"SERVER_SCOPE\",\"keys\":[\"key1\",\"key2\"]}";
|
1042
|
|
- JsonNode deleteAttributesEntityData = mapper.readTree(deleteAttributesData);
|
1043
|
|
- EdgeEvent edgeEvent = constructEdgeEvent(tenantId, edge.getId(), EdgeEventActionType.ATTRIBUTES_DELETED, device.getId().getId(), EdgeEventType.DEVICE, deleteAttributesEntityData);
|
|
821
|
+ private void testAttributesUpdatedMsg(Device device) throws JsonProcessingException, InterruptedException {
|
|
822
|
+ String attributesData = "{\"scope\":\"SERVER_SCOPE\",\"kv\":{\"key1\":\"value1\"}}";
|
|
823
|
+ JsonNode attributesEntityData = mapper.readTree(attributesData);
|
|
824
|
+ EdgeEvent edgeEvent1 = constructEdgeEvent(tenantId, edge.getId(), EdgeEventActionType.ATTRIBUTES_UPDATED, device.getId().getId(), EdgeEventType.DEVICE, attributesEntityData);
|
1044
|
825
|
edgeImitator.expectMessageAmount(1);
|
1045
|
|
- edgeEventService.saveAsync(edgeEvent);
|
|
826
|
+ edgeEventService.saveAsync(edgeEvent1);
|
1046
|
827
|
clusterService.onEdgeEventUpdate(tenantId, edge.getId());
|
1047
|
828
|
Assert.assertTrue(edgeImitator.waitForMessages());
|
1048
|
829
|
|
...
|
...
|
@@ -1052,15 +833,14 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1052
|
833
|
Assert.assertEquals(device.getUuidId().getMostSignificantBits(), latestEntityDataMsg.getEntityIdMSB());
|
1053
|
834
|
Assert.assertEquals(device.getUuidId().getLeastSignificantBits(), latestEntityDataMsg.getEntityIdLSB());
|
1054
|
835
|
Assert.assertEquals(device.getId().getEntityType().name(), latestEntityDataMsg.getEntityType());
|
|
836
|
+ Assert.assertEquals("SERVER_SCOPE", latestEntityDataMsg.getPostAttributeScope());
|
|
837
|
+ Assert.assertTrue(latestEntityDataMsg.hasAttributesUpdatedMsg());
|
1055
|
838
|
|
1056
|
|
- Assert.assertTrue(latestEntityDataMsg.hasAttributeDeleteMsg());
|
1057
|
|
-
|
1058
|
|
- AttributeDeleteMsg attributeDeleteMsg = latestEntityDataMsg.getAttributeDeleteMsg();
|
1059
|
|
- Assert.assertEquals(attributeDeleteMsg.getScope(), deleteAttributesEntityData.get("scope").asText());
|
1060
|
|
-
|
1061
|
|
- Assert.assertEquals(2, attributeDeleteMsg.getAttributeNamesCount());
|
1062
|
|
- Assert.assertEquals("key1", attributeDeleteMsg.getAttributeNames(0));
|
1063
|
|
- Assert.assertEquals("key2", attributeDeleteMsg.getAttributeNames(1));
|
|
839
|
+ TransportProtos.PostAttributeMsg attributesUpdatedMsg = latestEntityDataMsg.getAttributesUpdatedMsg();
|
|
840
|
+ Assert.assertEquals(1, attributesUpdatedMsg.getKvCount());
|
|
841
|
+ TransportProtos.KeyValueProto keyValueProto = attributesUpdatedMsg.getKv(0);
|
|
842
|
+ Assert.assertEquals("key1", keyValueProto.getKey());
|
|
843
|
+ Assert.assertEquals("value1", keyValueProto.getStringV());
|
1064
|
844
|
}
|
1065
|
845
|
|
1066
|
846
|
private void testPostAttributesMsg(Device device) throws JsonProcessingException, InterruptedException {
|
...
|
...
|
@@ -1088,29 +868,192 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1088
|
868
|
Assert.assertEquals("value2", keyValueProto.getStringV());
|
1089
|
869
|
}
|
1090
|
870
|
|
1091
|
|
- private void testAttributesUpdatedMsg(Device device) throws JsonProcessingException, InterruptedException {
|
1092
|
|
- String attributesData = "{\"scope\":\"SERVER_SCOPE\",\"kv\":{\"key1\":\"value1\"}}";
|
1093
|
|
- JsonNode attributesEntityData = mapper.readTree(attributesData);
|
1094
|
|
- EdgeEvent edgeEvent1 = constructEdgeEvent(tenantId, edge.getId(), EdgeEventActionType.ATTRIBUTES_UPDATED, device.getId().getId(), EdgeEventType.DEVICE, attributesEntityData);
|
|
871
|
+ private void testAttributesDeleteMsg(Device device) throws JsonProcessingException, InterruptedException {
|
|
872
|
+ String deleteAttributesData = "{\"scope\":\"SERVER_SCOPE\",\"keys\":[\"key1\",\"key2\"]}";
|
|
873
|
+ JsonNode deleteAttributesEntityData = mapper.readTree(deleteAttributesData);
|
|
874
|
+ EdgeEvent edgeEvent = constructEdgeEvent(tenantId, edge.getId(), EdgeEventActionType.ATTRIBUTES_DELETED, device.getId().getId(), EdgeEventType.DEVICE, deleteAttributesEntityData);
|
1095
|
875
|
edgeImitator.expectMessageAmount(1);
|
1096
|
|
- edgeEventService.saveAsync(edgeEvent1);
|
|
876
|
+ edgeEventService.saveAsync(edgeEvent);
|
1097
|
877
|
clusterService.onEdgeEventUpdate(tenantId, edge.getId());
|
1098
|
878
|
Assert.assertTrue(edgeImitator.waitForMessages());
|
1099
|
879
|
|
1100
|
|
- AbstractMessage latestMessage = edgeImitator.getLatestMessage();
|
1101
|
|
- Assert.assertTrue(latestMessage instanceof EntityDataProto);
|
1102
|
|
- EntityDataProto latestEntityDataMsg = (EntityDataProto) latestMessage;
|
1103
|
|
- Assert.assertEquals(device.getUuidId().getMostSignificantBits(), latestEntityDataMsg.getEntityIdMSB());
|
1104
|
|
- Assert.assertEquals(device.getUuidId().getLeastSignificantBits(), latestEntityDataMsg.getEntityIdLSB());
|
1105
|
|
- Assert.assertEquals(device.getId().getEntityType().name(), latestEntityDataMsg.getEntityType());
|
1106
|
|
- Assert.assertEquals("SERVER_SCOPE", latestEntityDataMsg.getPostAttributeScope());
|
1107
|
|
- Assert.assertTrue(latestEntityDataMsg.hasAttributesUpdatedMsg());
|
|
880
|
+ AbstractMessage latestMessage = edgeImitator.getLatestMessage();
|
|
881
|
+ Assert.assertTrue(latestMessage instanceof EntityDataProto);
|
|
882
|
+ EntityDataProto latestEntityDataMsg = (EntityDataProto) latestMessage;
|
|
883
|
+ Assert.assertEquals(device.getUuidId().getMostSignificantBits(), latestEntityDataMsg.getEntityIdMSB());
|
|
884
|
+ Assert.assertEquals(device.getUuidId().getLeastSignificantBits(), latestEntityDataMsg.getEntityIdLSB());
|
|
885
|
+ Assert.assertEquals(device.getId().getEntityType().name(), latestEntityDataMsg.getEntityType());
|
|
886
|
+
|
|
887
|
+ Assert.assertTrue(latestEntityDataMsg.hasAttributeDeleteMsg());
|
|
888
|
+
|
|
889
|
+ AttributeDeleteMsg attributeDeleteMsg = latestEntityDataMsg.getAttributeDeleteMsg();
|
|
890
|
+ Assert.assertEquals(attributeDeleteMsg.getScope(), deleteAttributesEntityData.get("scope").asText());
|
|
891
|
+
|
|
892
|
+ Assert.assertEquals(2, attributeDeleteMsg.getAttributeNamesCount());
|
|
893
|
+ Assert.assertEquals("key1", attributeDeleteMsg.getAttributeNames(0));
|
|
894
|
+ Assert.assertEquals("key2", attributeDeleteMsg.getAttributeNames(1));
|
|
895
|
+ }
|
|
896
|
+
|
|
897
|
+ private Device findDeviceByName(String deviceName) throws Exception {
|
|
898
|
+ List<Device> edgeDevices = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/devices?",
|
|
899
|
+ new TypeReference<PageData<Device>>() {
|
|
900
|
+ }, new PageLink(100)).getData();
|
|
901
|
+ Optional<Device> foundDevice = edgeDevices.stream().filter(d -> d.getName().equals(deviceName)).findAny();
|
|
902
|
+ Assert.assertTrue(foundDevice.isPresent());
|
|
903
|
+ Device device = foundDevice.get();
|
|
904
|
+ Assert.assertEquals(deviceName, device.getName());
|
|
905
|
+ return device;
|
|
906
|
+ }
|
|
907
|
+
|
|
908
|
+ private Asset findAssetByName(String assetName) throws Exception {
|
|
909
|
+ List<Asset> edgeAssets = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/assets?",
|
|
910
|
+ new TypeReference<PageData<Asset>>() {
|
|
911
|
+ }, new PageLink(100)).getData();
|
|
912
|
+
|
|
913
|
+ Assert.assertEquals(1, edgeAssets.size());
|
|
914
|
+ Asset asset = edgeAssets.get(0);
|
|
915
|
+ Assert.assertEquals(assetName, asset.getName());
|
|
916
|
+ return asset;
|
|
917
|
+ }
|
|
918
|
+
|
|
919
|
+ private Device saveDevice(String deviceName, String type) throws Exception {
|
|
920
|
+ Device device = new Device();
|
|
921
|
+ device.setName(deviceName);
|
|
922
|
+ device.setType(type);
|
|
923
|
+ return doPost("/api/device", device, Device.class);
|
|
924
|
+ }
|
|
925
|
+
|
|
926
|
+ private Asset saveAsset(String assetName) throws Exception {
|
|
927
|
+ Asset asset = new Asset();
|
|
928
|
+ asset.setName(assetName);
|
|
929
|
+ asset.setType("test");
|
|
930
|
+ return doPost("/api/asset", asset, Asset.class);
|
|
931
|
+ }
|
|
932
|
+
|
|
933
|
+ private void testReceivedInitialData() throws Exception {
|
|
934
|
+ log.info("Checking received data");
|
|
935
|
+ Assert.assertTrue(edgeImitator.waitForMessages());
|
|
936
|
+
|
|
937
|
+ EdgeConfiguration configuration = edgeImitator.getConfiguration();
|
|
938
|
+ Assert.assertNotNull(configuration);
|
|
939
|
+
|
|
940
|
+ testAutoGeneratedCodeByProtobuf(configuration);
|
|
941
|
+
|
|
942
|
+ Optional<DeviceUpdateMsg> deviceUpdateMsgOpt = edgeImitator.findMessageByType(DeviceUpdateMsg.class);
|
|
943
|
+ Assert.assertTrue(deviceUpdateMsgOpt.isPresent());
|
|
944
|
+ DeviceUpdateMsg deviceUpdateMsg = deviceUpdateMsgOpt.get();
|
|
945
|
+ Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, deviceUpdateMsg.getMsgType());
|
|
946
|
+ UUID deviceUUID = new UUID(deviceUpdateMsg.getIdMSB(), deviceUpdateMsg.getIdLSB());
|
|
947
|
+ Device device = doGet("/api/device/" + deviceUUID.toString(), Device.class);
|
|
948
|
+ Assert.assertNotNull(device);
|
|
949
|
+ List<Device> edgeDevices = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/devices?",
|
|
950
|
+ new TypeReference<PageData<Device>>() {}, new PageLink(100)).getData();
|
|
951
|
+ Assert.assertTrue(edgeDevices.contains(device));
|
|
952
|
+
|
|
953
|
+ List<DeviceProfileUpdateMsg> deviceProfileUpdateMsgList = edgeImitator.findAllMessagesByType(DeviceProfileUpdateMsg.class);
|
|
954
|
+ Assert.assertEquals(3, deviceProfileUpdateMsgList.size());
|
|
955
|
+ Optional<DeviceProfileUpdateMsg> deviceProfileUpdateMsgOpt =
|
|
956
|
+ deviceProfileUpdateMsgList.stream().filter(dfum -> CUSTOM_DEVICE_PROFILE_NAME.equals(dfum.getName())).findAny();
|
|
957
|
+ Assert.assertTrue(deviceProfileUpdateMsgOpt.isPresent());
|
|
958
|
+ DeviceProfileUpdateMsg deviceProfileUpdateMsg = deviceProfileUpdateMsgOpt.get();
|
|
959
|
+ Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, deviceProfileUpdateMsg.getMsgType());
|
|
960
|
+ UUID deviceProfileUUID = new UUID(deviceProfileUpdateMsg.getIdMSB(), deviceProfileUpdateMsg.getIdLSB());
|
|
961
|
+ DeviceProfile deviceProfile = doGet("/api/deviceProfile/" + deviceProfileUUID.toString(), DeviceProfile.class);
|
|
962
|
+ Assert.assertNotNull(deviceProfile);
|
|
963
|
+ Assert.assertNotNull(deviceProfile.getProfileData());
|
|
964
|
+ Assert.assertNotNull(deviceProfile.getProfileData().getAlarms());
|
|
965
|
+ Assert.assertNotNull(deviceProfile.getProfileData().getAlarms().get(0).getClearRule());
|
|
966
|
+
|
|
967
|
+ testAutoGeneratedCodeByProtobuf(deviceProfileUpdateMsg);
|
|
968
|
+
|
|
969
|
+ Optional<AssetUpdateMsg> assetUpdateMsgOpt = edgeImitator.findMessageByType(AssetUpdateMsg.class);
|
|
970
|
+ Assert.assertTrue(assetUpdateMsgOpt.isPresent());
|
|
971
|
+ AssetUpdateMsg assetUpdateMsg = assetUpdateMsgOpt.get();
|
|
972
|
+ Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, assetUpdateMsg.getMsgType());
|
|
973
|
+ UUID assetUUID = new UUID(assetUpdateMsg.getIdMSB(), assetUpdateMsg.getIdLSB());
|
|
974
|
+ Asset asset = doGet("/api/asset/" + assetUUID.toString(), Asset.class);
|
|
975
|
+ Assert.assertNotNull(asset);
|
|
976
|
+ List<Asset> edgeAssets = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/assets?",
|
|
977
|
+ new TypeReference<PageData<Asset>>() {}, new PageLink(100)).getData();
|
|
978
|
+ Assert.assertTrue(edgeAssets.contains(asset));
|
|
979
|
+
|
|
980
|
+ testAutoGeneratedCodeByProtobuf(assetUpdateMsg);
|
|
981
|
+
|
|
982
|
+ Optional<RuleChainUpdateMsg> ruleChainUpdateMsgOpt = edgeImitator.findMessageByType(RuleChainUpdateMsg.class);
|
|
983
|
+ Assert.assertTrue(ruleChainUpdateMsgOpt.isPresent());
|
|
984
|
+ RuleChainUpdateMsg ruleChainUpdateMsg = ruleChainUpdateMsgOpt.get();
|
|
985
|
+ Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, ruleChainUpdateMsg.getMsgType());
|
|
986
|
+ UUID ruleChainUUID = new UUID(ruleChainUpdateMsg.getIdMSB(), ruleChainUpdateMsg.getIdLSB());
|
|
987
|
+ RuleChain ruleChain = doGet("/api/ruleChain/" + ruleChainUUID.toString(), RuleChain.class);
|
|
988
|
+ Assert.assertNotNull(ruleChain);
|
|
989
|
+ List<RuleChain> edgeRuleChains = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/ruleChains?",
|
|
990
|
+ new TypeReference<PageData<RuleChain>>() {}, new PageLink(100)).getData();
|
|
991
|
+ Assert.assertTrue(edgeRuleChains.contains(ruleChain));
|
|
992
|
+
|
|
993
|
+ testAutoGeneratedCodeByProtobuf(ruleChainUpdateMsg);
|
|
994
|
+
|
|
995
|
+ log.info("Received data checked");
|
|
996
|
+ }
|
|
997
|
+
|
|
998
|
+ private void testRuleChainMetadataRequestMsg(RuleChainId ruleChainId) throws Exception {
|
|
999
|
+ RuleChainMetadataRequestMsg.Builder ruleChainMetadataRequestMsgBuilder = RuleChainMetadataRequestMsg.newBuilder()
|
|
1000
|
+ .setRuleChainIdMSB(ruleChainId.getId().getMostSignificantBits())
|
|
1001
|
+ .setRuleChainIdLSB(ruleChainId.getId().getLeastSignificantBits());
|
|
1002
|
+ testAutoGeneratedCodeByProtobuf(ruleChainMetadataRequestMsgBuilder);
|
|
1003
|
+
|
|
1004
|
+ UplinkMsg.Builder uplinkMsgBuilder = UplinkMsg.newBuilder()
|
|
1005
|
+ .addRuleChainMetadataRequestMsg(ruleChainMetadataRequestMsgBuilder.build());
|
|
1006
|
+ testAutoGeneratedCodeByProtobuf(uplinkMsgBuilder);
|
|
1007
|
+
|
|
1008
|
+ edgeImitator.expectResponsesAmount(1);
|
|
1009
|
+ edgeImitator.expectMessageAmount(1);
|
|
1010
|
+ edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build());
|
|
1011
|
+ Assert.assertTrue(edgeImitator.waitForResponses());
|
|
1012
|
+ Assert.assertTrue(edgeImitator.waitForMessages());
|
|
1013
|
+
|
|
1014
|
+ AbstractMessage latestMessage = edgeImitator.getLatestMessage();
|
|
1015
|
+ Assert.assertTrue(latestMessage instanceof RuleChainMetadataUpdateMsg);
|
|
1016
|
+ RuleChainMetadataUpdateMsg ruleChainMetadataUpdateMsg = (RuleChainMetadataUpdateMsg) latestMessage;
|
|
1017
|
+ RuleChainId receivedRuleChainId =
|
|
1018
|
+ new RuleChainId(new UUID(ruleChainMetadataUpdateMsg.getRuleChainIdMSB(), ruleChainMetadataUpdateMsg.getRuleChainIdLSB()));
|
|
1019
|
+ Assert.assertEquals(ruleChainId, receivedRuleChainId);
|
|
1020
|
+ }
|
|
1021
|
+
|
|
1022
|
+ private void createRuleChainMetadata(RuleChain ruleChain) throws Exception {
|
|
1023
|
+ RuleChainMetaData ruleChainMetaData = new RuleChainMetaData();
|
|
1024
|
+ ruleChainMetaData.setRuleChainId(ruleChain.getId());
|
|
1025
|
+
|
|
1026
|
+ ObjectMapper mapper = new ObjectMapper();
|
|
1027
|
+
|
|
1028
|
+ RuleNode ruleNode1 = new RuleNode();
|
|
1029
|
+ ruleNode1.setName("name1");
|
|
1030
|
+ ruleNode1.setType("type1");
|
|
1031
|
+ ruleNode1.setConfiguration(mapper.readTree("\"key1\": \"val1\""));
|
|
1032
|
+
|
|
1033
|
+ RuleNode ruleNode2 = new RuleNode();
|
|
1034
|
+ ruleNode2.setName("name2");
|
|
1035
|
+ ruleNode2.setType("type2");
|
|
1036
|
+ ruleNode2.setConfiguration(mapper.readTree("\"key2\": \"val2\""));
|
|
1037
|
+
|
|
1038
|
+ RuleNode ruleNode3 = new RuleNode();
|
|
1039
|
+ ruleNode3.setName("name3");
|
|
1040
|
+ ruleNode3.setType("type3");
|
|
1041
|
+ ruleNode3.setConfiguration(mapper.readTree("\"key3\": \"val3\""));
|
|
1042
|
+
|
|
1043
|
+ List<RuleNode> ruleNodes = new ArrayList<>();
|
|
1044
|
+ ruleNodes.add(ruleNode1);
|
|
1045
|
+ ruleNodes.add(ruleNode2);
|
|
1046
|
+ ruleNodes.add(ruleNode3);
|
|
1047
|
+ ruleChainMetaData.setFirstNodeIndex(0);
|
|
1048
|
+ ruleChainMetaData.setNodes(ruleNodes);
|
|
1049
|
+
|
|
1050
|
+ ruleChainMetaData.addConnectionInfo(0, 1, "success");
|
|
1051
|
+ ruleChainMetaData.addConnectionInfo(0, 2, "fail");
|
|
1052
|
+ ruleChainMetaData.addConnectionInfo(1, 2, "success");
|
1108
|
1053
|
|
1109
|
|
- TransportProtos.PostAttributeMsg attributesUpdatedMsg = latestEntityDataMsg.getAttributesUpdatedMsg();
|
1110
|
|
- Assert.assertEquals(1, attributesUpdatedMsg.getKvCount());
|
1111
|
|
- TransportProtos.KeyValueProto keyValueProto = attributesUpdatedMsg.getKv(0);
|
1112
|
|
- Assert.assertEquals("key1", keyValueProto.getKey());
|
1113
|
|
- Assert.assertEquals("value1", keyValueProto.getStringV());
|
|
1054
|
+ ruleChainMetaData.addRuleChainConnectionInfo(2, edge.getRootRuleChainId(), "success", mapper.createObjectNode());
|
|
1055
|
+
|
|
1056
|
+ doPost("/api/ruleChain/metadata", ruleChainMetaData, RuleChainMetaData.class);
|
1114
|
1057
|
}
|
1115
|
1058
|
|
1116
|
1059
|
private void testSendMessagesToCloud() throws Exception {
|
...
|
...
|
@@ -1284,46 +1227,6 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1284
|
1227
|
Assert.assertEquals(AlarmSeverity.CRITICAL, alarmInfo.getSeverity());
|
1285
|
1228
|
}
|
1286
|
1229
|
|
1287
|
|
- private void sendRelation() throws Exception {
|
1288
|
|
- List<Device> edgeDevices = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/devices?",
|
1289
|
|
- new TypeReference<PageData<Device>>() {}, new PageLink(100)).getData();
|
1290
|
|
- Optional<Device> foundDevice1 = edgeDevices.stream().filter(device1 -> device1.getName().equals("Edge Device 1")).findAny();
|
1291
|
|
- Assert.assertTrue(foundDevice1.isPresent());
|
1292
|
|
- Device device1 = foundDevice1.get();
|
1293
|
|
- Optional<Device> foundDevice2 = edgeDevices.stream().filter(device2 -> device2.getName().equals("Edge Device 2")).findAny();
|
1294
|
|
- Assert.assertTrue(foundDevice2.isPresent());
|
1295
|
|
- Device device2 = foundDevice2.get();
|
1296
|
|
-
|
1297
|
|
- UplinkMsg.Builder uplinkMsgBuilder = UplinkMsg.newBuilder();
|
1298
|
|
- RelationUpdateMsg.Builder relationUpdateMsgBuilder = RelationUpdateMsg.newBuilder();
|
1299
|
|
- relationUpdateMsgBuilder.setType("test");
|
1300
|
|
- relationUpdateMsgBuilder.setTypeGroup(RelationTypeGroup.COMMON.name());
|
1301
|
|
- relationUpdateMsgBuilder.setToIdMSB(device1.getId().getId().getMostSignificantBits());
|
1302
|
|
- relationUpdateMsgBuilder.setToIdLSB(device1.getId().getId().getLeastSignificantBits());
|
1303
|
|
- relationUpdateMsgBuilder.setToEntityType(device1.getId().getEntityType().name());
|
1304
|
|
- relationUpdateMsgBuilder.setFromIdMSB(device2.getId().getId().getMostSignificantBits());
|
1305
|
|
- relationUpdateMsgBuilder.setFromIdLSB(device2.getId().getId().getLeastSignificantBits());
|
1306
|
|
- relationUpdateMsgBuilder.setFromEntityType(device2.getId().getEntityType().name());
|
1307
|
|
- relationUpdateMsgBuilder.setAdditionalInfo("{}");
|
1308
|
|
- testAutoGeneratedCodeByProtobuf(relationUpdateMsgBuilder);
|
1309
|
|
- uplinkMsgBuilder.addRelationUpdateMsg(relationUpdateMsgBuilder.build());
|
1310
|
|
-
|
1311
|
|
- testAutoGeneratedCodeByProtobuf(uplinkMsgBuilder);
|
1312
|
|
-
|
1313
|
|
- edgeImitator.expectResponsesAmount(1);
|
1314
|
|
- edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build());
|
1315
|
|
- Assert.assertTrue(edgeImitator.waitForResponses());
|
1316
|
|
-
|
1317
|
|
- EntityRelation relation = doGet("/api/relation?" +
|
1318
|
|
- "&fromId=" + device2.getId().getId().toString() +
|
1319
|
|
- "&fromType=" + device2.getId().getEntityType().name() +
|
1320
|
|
- "&relationType=" + "test" +
|
1321
|
|
- "&relationTypeGroup=" + RelationTypeGroup.COMMON.name() +
|
1322
|
|
- "&toId=" + device1.getId().getId().toString() +
|
1323
|
|
- "&toType=" + device1.getId().getEntityType().name(), EntityRelation.class);
|
1324
|
|
- Assert.assertNotNull(relation);
|
1325
|
|
- }
|
1326
|
|
-
|
1327
|
1230
|
private void sendTelemetry() throws Exception {
|
1328
|
1231
|
List<Device> edgeDevices = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/devices?",
|
1329
|
1232
|
new TypeReference<PageData<Device>>() {}, new PageLink(100)).getData();
|
...
|
...
|
@@ -1368,9 +1271,15 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1368
|
1271
|
edgeImitator.sendUplinkMsg(uplinkMsgBuilder2.build());
|
1369
|
1272
|
Assert.assertTrue(edgeImitator.waitForResponses());
|
1370
|
1273
|
|
1371
|
|
- // Wait before device attributes saved to database before requesting them from controller
|
1372
|
|
- Thread.sleep(1000);
|
1373
|
|
- Map<String, List<Map<String, String>>> timeseries = doGetAsyncTyped("/api/plugins/telemetry/DEVICE/" + device.getUuidId() + "/values/timeseries?keys=" + timeseriesKey, new TypeReference<>() {});
|
|
1274
|
+ int attempt = 0;
|
|
1275
|
+ Map<String, List<Map<String, String>>> timeseries;
|
|
1276
|
+ do {
|
|
1277
|
+ timeseries = doGetAsyncTyped("/api/plugins/telemetry/DEVICE/" + device.getUuidId() + "/values/timeseries?keys=" + timeseriesKey,
|
|
1278
|
+ new TypeReference<>() {});
|
|
1279
|
+ // Wait before device attributes saved to database before requesting them from controller
|
|
1280
|
+ Thread.sleep(100);
|
|
1281
|
+ attempt++;
|
|
1282
|
+ } while (!timeseries.containsKey(timeseriesKey) || attempt < 10);
|
1374
|
1283
|
Assert.assertTrue(timeseries.containsKey(timeseriesKey));
|
1375
|
1284
|
Assert.assertEquals(1, timeseries.get(timeseriesKey).size());
|
1376
|
1285
|
Assert.assertEquals(timeseriesValue, timeseries.get(timeseriesKey).get(0).get("value"));
|
...
|
...
|
@@ -1382,6 +1291,69 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1382
|
1291
|
|
1383
|
1292
|
}
|
1384
|
1293
|
|
|
1294
|
+ private void sendRelation() throws Exception {
|
|
1295
|
+ List<Device> edgeDevices = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/devices?",
|
|
1296
|
+ new TypeReference<PageData<Device>>() {}, new PageLink(100)).getData();
|
|
1297
|
+ Optional<Device> foundDevice1 = edgeDevices.stream().filter(device1 -> device1.getName().equals("Edge Device 1")).findAny();
|
|
1298
|
+ Assert.assertTrue(foundDevice1.isPresent());
|
|
1299
|
+ Device device1 = foundDevice1.get();
|
|
1300
|
+ Optional<Device> foundDevice2 = edgeDevices.stream().filter(device2 -> device2.getName().equals("Edge Device 2")).findAny();
|
|
1301
|
+ Assert.assertTrue(foundDevice2.isPresent());
|
|
1302
|
+ Device device2 = foundDevice2.get();
|
|
1303
|
+
|
|
1304
|
+ UplinkMsg.Builder uplinkMsgBuilder = UplinkMsg.newBuilder();
|
|
1305
|
+ RelationUpdateMsg.Builder relationUpdateMsgBuilder = RelationUpdateMsg.newBuilder();
|
|
1306
|
+ relationUpdateMsgBuilder.setType("test");
|
|
1307
|
+ relationUpdateMsgBuilder.setTypeGroup(RelationTypeGroup.COMMON.name());
|
|
1308
|
+ relationUpdateMsgBuilder.setToIdMSB(device1.getId().getId().getMostSignificantBits());
|
|
1309
|
+ relationUpdateMsgBuilder.setToIdLSB(device1.getId().getId().getLeastSignificantBits());
|
|
1310
|
+ relationUpdateMsgBuilder.setToEntityType(device1.getId().getEntityType().name());
|
|
1311
|
+ relationUpdateMsgBuilder.setFromIdMSB(device2.getId().getId().getMostSignificantBits());
|
|
1312
|
+ relationUpdateMsgBuilder.setFromIdLSB(device2.getId().getId().getLeastSignificantBits());
|
|
1313
|
+ relationUpdateMsgBuilder.setFromEntityType(device2.getId().getEntityType().name());
|
|
1314
|
+ relationUpdateMsgBuilder.setAdditionalInfo("{}");
|
|
1315
|
+ testAutoGeneratedCodeByProtobuf(relationUpdateMsgBuilder);
|
|
1316
|
+ uplinkMsgBuilder.addRelationUpdateMsg(relationUpdateMsgBuilder.build());
|
|
1317
|
+
|
|
1318
|
+ testAutoGeneratedCodeByProtobuf(uplinkMsgBuilder);
|
|
1319
|
+
|
|
1320
|
+ edgeImitator.expectResponsesAmount(1);
|
|
1321
|
+ edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build());
|
|
1322
|
+ Assert.assertTrue(edgeImitator.waitForResponses());
|
|
1323
|
+
|
|
1324
|
+ EntityRelation relation = doGet("/api/relation?" +
|
|
1325
|
+ "&fromId=" + device2.getId().getId().toString() +
|
|
1326
|
+ "&fromType=" + device2.getId().getEntityType().name() +
|
|
1327
|
+ "&relationType=" + "test" +
|
|
1328
|
+ "&relationTypeGroup=" + RelationTypeGroup.COMMON.name() +
|
|
1329
|
+ "&toId=" + device1.getId().getId().toString() +
|
|
1330
|
+ "&toType=" + device1.getId().getEntityType().name(), EntityRelation.class);
|
|
1331
|
+ Assert.assertNotNull(relation);
|
|
1332
|
+ }
|
|
1333
|
+
|
|
1334
|
+ private void sendDeleteDeviceOnEdge() throws Exception {
|
|
1335
|
+ Device device = findDeviceByName("Edge Device 2");
|
|
1336
|
+ UplinkMsg.Builder upLinkMsgBuilder = UplinkMsg.newBuilder();
|
|
1337
|
+ DeviceUpdateMsg.Builder deviceDeleteMsgBuilder = DeviceUpdateMsg.newBuilder();
|
|
1338
|
+ deviceDeleteMsgBuilder.setMsgType(UpdateMsgType.ENTITY_DELETED_RPC_MESSAGE);
|
|
1339
|
+ deviceDeleteMsgBuilder.setIdMSB(device.getId().getId().getMostSignificantBits());
|
|
1340
|
+ deviceDeleteMsgBuilder.setIdLSB(device.getId().getId().getLeastSignificantBits());
|
|
1341
|
+ testAutoGeneratedCodeByProtobuf(deviceDeleteMsgBuilder);
|
|
1342
|
+
|
|
1343
|
+ upLinkMsgBuilder.addDeviceUpdateMsg(deviceDeleteMsgBuilder.build());
|
|
1344
|
+ testAutoGeneratedCodeByProtobuf(upLinkMsgBuilder);
|
|
1345
|
+
|
|
1346
|
+ edgeImitator.expectResponsesAmount(1);
|
|
1347
|
+ edgeImitator.sendUplinkMsg(upLinkMsgBuilder.build());
|
|
1348
|
+ Assert.assertTrue(edgeImitator.waitForResponses());
|
|
1349
|
+ device = doGet("/api/device/" + device.getId().getId().toString(), Device.class);
|
|
1350
|
+ Assert.assertNotNull(device);
|
|
1351
|
+ List<Device> edgeDevices = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/devices?",
|
|
1352
|
+ new TypeReference<PageData<Device>>() {
|
|
1353
|
+ }, new PageLink(100)).getData();
|
|
1354
|
+ Assert.assertFalse(edgeDevices.contains(device));
|
|
1355
|
+ }
|
|
1356
|
+
|
1385
|
1357
|
private void sendRuleChainMetadataRequest() throws Exception {
|
1386
|
1358
|
RuleChainId edgeRootRuleChainId = edge.getRootRuleChainId();
|
1387
|
1359
|
|
...
|
...
|
@@ -1463,25 +1435,6 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1463
|
1435
|
Assert.assertEquals(deviceCredentialsUpdateMsg.getCredentialsId(), deviceCredentials.getCredentialsId());
|
1464
|
1436
|
}
|
1465
|
1437
|
|
1466
|
|
- private void sendDeviceCredentialsUpdate() throws Exception {
|
1467
|
|
- Device device = findDeviceByName("Edge Device 1");
|
1468
|
|
-
|
1469
|
|
- UplinkMsg.Builder uplinkMsgBuilder = UplinkMsg.newBuilder();
|
1470
|
|
- DeviceCredentialsUpdateMsg.Builder deviceCredentialsUpdateMsgBuilder = DeviceCredentialsUpdateMsg.newBuilder();
|
1471
|
|
- deviceCredentialsUpdateMsgBuilder.setDeviceIdMSB(device.getUuidId().getMostSignificantBits());
|
1472
|
|
- deviceCredentialsUpdateMsgBuilder.setDeviceIdLSB(device.getUuidId().getLeastSignificantBits());
|
1473
|
|
- deviceCredentialsUpdateMsgBuilder.setCredentialsType(DeviceCredentialsType.ACCESS_TOKEN.name());
|
1474
|
|
- deviceCredentialsUpdateMsgBuilder.setCredentialsId("NEW_TOKEN");
|
1475
|
|
- testAutoGeneratedCodeByProtobuf(deviceCredentialsUpdateMsgBuilder);
|
1476
|
|
- uplinkMsgBuilder.addDeviceCredentialsUpdateMsg(deviceCredentialsUpdateMsgBuilder.build());
|
1477
|
|
-
|
1478
|
|
- testAutoGeneratedCodeByProtobuf(uplinkMsgBuilder);
|
1479
|
|
-
|
1480
|
|
- edgeImitator.expectResponsesAmount(1);
|
1481
|
|
- edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build());
|
1482
|
|
- Assert.assertTrue(edgeImitator.waitForResponses());
|
1483
|
|
- }
|
1484
|
|
-
|
1485
|
1438
|
private void sendDeviceRpcResponse() throws Exception {
|
1486
|
1439
|
Device device = findDeviceByName("Edge Device 1");
|
1487
|
1440
|
|
...
|
...
|
@@ -1507,6 +1460,25 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1507
|
1460
|
Assert.assertTrue(edgeImitator.waitForResponses());
|
1508
|
1461
|
}
|
1509
|
1462
|
|
|
1463
|
+ private void sendDeviceCredentialsUpdate() throws Exception {
|
|
1464
|
+ Device device = findDeviceByName("Edge Device 1");
|
|
1465
|
+
|
|
1466
|
+ UplinkMsg.Builder uplinkMsgBuilder = UplinkMsg.newBuilder();
|
|
1467
|
+ DeviceCredentialsUpdateMsg.Builder deviceCredentialsUpdateMsgBuilder = DeviceCredentialsUpdateMsg.newBuilder();
|
|
1468
|
+ deviceCredentialsUpdateMsgBuilder.setDeviceIdMSB(device.getUuidId().getMostSignificantBits());
|
|
1469
|
+ deviceCredentialsUpdateMsgBuilder.setDeviceIdLSB(device.getUuidId().getLeastSignificantBits());
|
|
1470
|
+ deviceCredentialsUpdateMsgBuilder.setCredentialsType(DeviceCredentialsType.ACCESS_TOKEN.name());
|
|
1471
|
+ deviceCredentialsUpdateMsgBuilder.setCredentialsId("NEW_TOKEN");
|
|
1472
|
+ testAutoGeneratedCodeByProtobuf(deviceCredentialsUpdateMsgBuilder);
|
|
1473
|
+ uplinkMsgBuilder.addDeviceCredentialsUpdateMsg(deviceCredentialsUpdateMsgBuilder.build());
|
|
1474
|
+
|
|
1475
|
+ testAutoGeneratedCodeByProtobuf(uplinkMsgBuilder);
|
|
1476
|
+
|
|
1477
|
+ edgeImitator.expectResponsesAmount(1);
|
|
1478
|
+ edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build());
|
|
1479
|
+ Assert.assertTrue(edgeImitator.waitForResponses());
|
|
1480
|
+ }
|
|
1481
|
+
|
1510
|
1482
|
private void sendAttributesRequest() throws Exception {
|
1511
|
1483
|
Device device = findDeviceByName("Edge Device 1");
|
1512
|
1484
|
sendAttributesRequest(device, DataConstants.SERVER_SCOPE, "{\"key1\":\"value1\"}", "key1", "value1");
|
...
|
...
|
@@ -1520,7 +1492,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1520
|
1492
|
attributesData);
|
1521
|
1493
|
|
1522
|
1494
|
// Wait before device attributes saved to database before requesting them from edge
|
1523
|
|
- Thread.sleep(1000);
|
|
1495
|
+ // queue used to save attributes to database
|
|
1496
|
+ Thread.sleep(500);
|
1524
|
1497
|
|
1525
|
1498
|
UplinkMsg.Builder uplinkMsgBuilder = UplinkMsg.newBuilder();
|
1526
|
1499
|
AttributesRequestMsg.Builder attributesRequestMsgBuilder = AttributesRequestMsg.newBuilder();
|
...
|
...
|
@@ -1554,43 +1527,75 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1554
|
1527
|
Assert.assertEquals(expectedValue, keyValueProto.getStringV());
|
1555
|
1528
|
}
|
1556
|
1529
|
|
1557
|
|
- private void sendDeleteDeviceOnEdge() throws Exception {
|
1558
|
|
- Device device = findDeviceByName("Edge Device 2");
|
1559
|
|
- UplinkMsg.Builder upLinkMsgBuilder = UplinkMsg.newBuilder();
|
1560
|
|
- DeviceUpdateMsg.Builder deviceDeleteMsgBuilder = DeviceUpdateMsg.newBuilder();
|
1561
|
|
- deviceDeleteMsgBuilder.setMsgType(UpdateMsgType.ENTITY_DELETED_RPC_MESSAGE);
|
1562
|
|
- deviceDeleteMsgBuilder.setIdMSB(device.getId().getId().getMostSignificantBits());
|
1563
|
|
- deviceDeleteMsgBuilder.setIdLSB(device.getId().getId().getLeastSignificantBits());
|
1564
|
|
- testAutoGeneratedCodeByProtobuf(deviceDeleteMsgBuilder);
|
|
1530
|
+ private void testRpcCall() throws Exception {
|
|
1531
|
+ Device device = findDeviceByName("Edge Device 1");
|
1565
|
1532
|
|
1566
|
|
- upLinkMsgBuilder.addDeviceUpdateMsg(deviceDeleteMsgBuilder.build());
|
1567
|
|
- testAutoGeneratedCodeByProtobuf(upLinkMsgBuilder);
|
|
1533
|
+ ObjectNode body = mapper.createObjectNode();
|
|
1534
|
+ body.put("requestId", new Random().nextInt());
|
|
1535
|
+ body.put("requestUUID", Uuids.timeBased().toString());
|
|
1536
|
+ body.put("oneway", false);
|
|
1537
|
+ body.put("expirationTime", System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(10));
|
|
1538
|
+ body.put("method", "test_method");
|
|
1539
|
+ body.put("params", "{\"param1\":\"value1\"}");
|
1568
|
1540
|
|
1569
|
|
- edgeImitator.expectResponsesAmount(1);
|
1570
|
|
- edgeImitator.sendUplinkMsg(upLinkMsgBuilder.build());
|
1571
|
|
- Assert.assertTrue(edgeImitator.waitForResponses());
|
1572
|
|
- device = doGet("/api/device/" + device.getId().getId().toString(), Device.class);
|
1573
|
|
- Assert.assertNotNull(device);
|
1574
|
|
- List<Device> edgeDevices = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/devices?",
|
1575
|
|
- new TypeReference<PageData<Device>>() {
|
1576
|
|
- }, new PageLink(100)).getData();
|
1577
|
|
- Assert.assertFalse(edgeDevices.contains(device));
|
|
1541
|
+ EdgeEvent edgeEvent = constructEdgeEvent(tenantId, edge.getId(), EdgeEventActionType.RPC_CALL, device.getId().getId(), EdgeEventType.DEVICE, body);
|
|
1542
|
+ edgeImitator.expectMessageAmount(1);
|
|
1543
|
+ edgeEventService.saveAsync(edgeEvent);
|
|
1544
|
+ clusterService.onEdgeEventUpdate(tenantId, edge.getId());
|
|
1545
|
+ Assert.assertTrue(edgeImitator.waitForMessages());
|
|
1546
|
+
|
|
1547
|
+ AbstractMessage latestMessage = edgeImitator.getLatestMessage();
|
|
1548
|
+ Assert.assertTrue(latestMessage instanceof DeviceRpcCallMsg);
|
|
1549
|
+ DeviceRpcCallMsg latestDeviceRpcCallMsg = (DeviceRpcCallMsg) latestMessage;
|
|
1550
|
+ Assert.assertEquals("test_method", latestDeviceRpcCallMsg.getRequestMsg().getMethod());
|
1578
|
1551
|
}
|
1579
|
1552
|
|
1580
|
|
- private void installation() throws Exception {
|
1581
|
|
- edge = doPost("/api/edge", constructEdge("Test Edge", "test"), Edge.class);
|
|
1553
|
+ private void testTimeseriesWithFailures() throws Exception {
|
|
1554
|
+ log.info("Testing timeseries with failures");
|
1582
|
1555
|
|
1583
|
|
- DeviceProfile deviceProfile = this.createDeviceProfile(CUSTOM_DEVICE_PROFILE_NAME, null);
|
1584
|
|
- extendDeviceProfileData(deviceProfile);
|
1585
|
|
- doPost("/api/deviceProfile", deviceProfile, DeviceProfile.class);
|
|
1556
|
+ int numberOfTimeseriesToSend = 1000;
|
1586
|
1557
|
|
1587
|
|
- Device savedDevice = saveDevice("Edge Device 1", CUSTOM_DEVICE_PROFILE_NAME);
|
1588
|
|
- doPost("/api/edge/" + edge.getId().getId().toString()
|
1589
|
|
- + "/device/" + savedDevice.getId().getId().toString(), Device.class);
|
|
1558
|
+ edgeImitator.setRandomFailuresOnTimeseriesDownlink(true);
|
|
1559
|
+ // imitator will generate failure in 5% of cases
|
|
1560
|
+ edgeImitator.setFailureProbability(5.0);
|
1590
|
1561
|
|
1591
|
|
- Asset savedAsset = saveAsset("Edge Asset 1");
|
1592
|
|
- doPost("/api/edge/" + edge.getId().getId().toString()
|
1593
|
|
- + "/asset/" + savedAsset.getId().getId().toString(), Asset.class);
|
|
1562
|
+ edgeImitator.expectMessageAmount(numberOfTimeseriesToSend);
|
|
1563
|
+ Device device = findDeviceByName("Edge Device 1");
|
|
1564
|
+ for (int idx = 1; idx <= numberOfTimeseriesToSend; idx++) {
|
|
1565
|
+ String timeseriesData = "{\"data\":{\"idx\":" + idx + "},\"ts\":" + System.currentTimeMillis() + "}";
|
|
1566
|
+ JsonNode timeseriesEntityData = mapper.readTree(timeseriesData);
|
|
1567
|
+ EdgeEvent edgeEvent = constructEdgeEvent(tenantId, edge.getId(), EdgeEventActionType.TIMESERIES_UPDATED,
|
|
1568
|
+ device.getId().getId(), EdgeEventType.DEVICE, timeseriesEntityData);
|
|
1569
|
+ edgeEventService.saveAsync(edgeEvent);
|
|
1570
|
+ clusterService.onEdgeEventUpdate(tenantId, edge.getId());
|
|
1571
|
+ }
|
|
1572
|
+
|
|
1573
|
+ Assert.assertTrue(edgeImitator.waitForMessages(60));
|
|
1574
|
+
|
|
1575
|
+ List<EntityDataProto> allTelemetryMsgs = edgeImitator.findAllMessagesByType(EntityDataProto.class);
|
|
1576
|
+ Assert.assertEquals(numberOfTimeseriesToSend, allTelemetryMsgs.size());
|
|
1577
|
+
|
|
1578
|
+ for (int idx = 1; idx <= numberOfTimeseriesToSend; idx++) {
|
|
1579
|
+ Assert.assertTrue(isIdxExistsInTheDownlinkList(idx, allTelemetryMsgs));
|
|
1580
|
+ }
|
|
1581
|
+
|
|
1582
|
+ edgeImitator.setRandomFailuresOnTimeseriesDownlink(false);
|
|
1583
|
+ log.info("Timeseries with failures tested successfully");
|
|
1584
|
+ }
|
|
1585
|
+
|
|
1586
|
+ private boolean isIdxExistsInTheDownlinkList(int idx, List<EntityDataProto> allTelemetryMsgs) {
|
|
1587
|
+ for (EntityDataProto proto : allTelemetryMsgs) {
|
|
1588
|
+ TransportProtos.PostTelemetryMsg postTelemetryMsg = proto.getPostTelemetryMsg();
|
|
1589
|
+ Assert.assertEquals(1, postTelemetryMsg.getTsKvListCount());
|
|
1590
|
+ TransportProtos.TsKvListProto tsKvListProto = postTelemetryMsg.getTsKvList(0);
|
|
1591
|
+ Assert.assertEquals(1, tsKvListProto.getKvCount());
|
|
1592
|
+ TransportProtos.KeyValueProto keyValueProto = tsKvListProto.getKv(0);
|
|
1593
|
+ Assert.assertEquals("idx", keyValueProto.getKey());
|
|
1594
|
+ if (keyValueProto.getLongV() == idx) {
|
|
1595
|
+ return true;
|
|
1596
|
+ }
|
|
1597
|
+ }
|
|
1598
|
+ return false;
|
1594
|
1599
|
}
|
1595
|
1600
|
|
1596
|
1601
|
private void extendDeviceProfileData(DeviceProfile deviceProfile) {
|
...
|
...
|
|