Commit ba1aa7a579edd79e7b66dcc9157fae3339af6399
1 parent
206a3d38
Base Edge test - refactoring and stability fixes. Device Profile processor null …
…pointer exception fix is provision is not set
Showing
3 changed files
with
319 additions
and
178 deletions
... | ... | @@ -40,8 +40,6 @@ public class DeviceProfileMsgConstructor { |
40 | 40 | .setName(deviceProfile.getName()) |
41 | 41 | .setDefault(deviceProfile.isDefault()) |
42 | 42 | .setType(deviceProfile.getType().name()) |
43 | - .setTransportType(deviceProfile.getTransportType().name()) | |
44 | - .setProvisionType(deviceProfile.getProvisionType().name()) | |
45 | 43 | .setProfileDataBytes(ByteString.copyFrom(dataDecodingEncodingService.encode(deviceProfile.getProfileData()))); |
46 | 44 | // TODO: voba - should this be always null at the moment?? |
47 | 45 | // if (deviceProfile.getDefaultRuleChainId() != null) { |
... | ... | @@ -54,6 +52,12 @@ public class DeviceProfileMsgConstructor { |
54 | 52 | if (deviceProfile.getDescription() != null) { |
55 | 53 | builder.setDescription(deviceProfile.getDescription()); |
56 | 54 | } |
55 | + if (deviceProfile.getTransportType() != null) { | |
56 | + builder.setTransportType(deviceProfile.getTransportType().name()); | |
57 | + } | |
58 | + if (deviceProfile.getProvisionType() != null) { | |
59 | + builder.setProvisionType(deviceProfile.getProvisionType().name()); | |
60 | + } | |
57 | 61 | if (deviceProfile.getProvisionDeviceKey() != null) { |
58 | 62 | builder.setProvisionDeviceKey(deviceProfile.getProvisionDeviceKey()); |
59 | 63 | } | ... | ... |
... | ... | @@ -32,10 +32,12 @@ import org.junit.Assert; |
32 | 32 | import org.junit.Before; |
33 | 33 | import org.junit.Test; |
34 | 34 | import org.springframework.beans.factory.annotation.Autowired; |
35 | +import org.thingsboard.common.util.JacksonUtil; | |
35 | 36 | import org.thingsboard.server.common.data.Customer; |
36 | 37 | import org.thingsboard.server.common.data.Dashboard; |
37 | 38 | import org.thingsboard.server.common.data.DataConstants; |
38 | 39 | import org.thingsboard.server.common.data.Device; |
40 | +import org.thingsboard.server.common.data.DeviceProfile; | |
39 | 41 | import org.thingsboard.server.common.data.EntityType; |
40 | 42 | import org.thingsboard.server.common.data.EntityView; |
41 | 43 | import org.thingsboard.server.common.data.Tenant; |
... | ... | @@ -45,6 +47,15 @@ import org.thingsboard.server.common.data.alarm.AlarmInfo; |
45 | 47 | import org.thingsboard.server.common.data.alarm.AlarmSeverity; |
46 | 48 | import org.thingsboard.server.common.data.alarm.AlarmStatus; |
47 | 49 | import org.thingsboard.server.common.data.asset.Asset; |
50 | +import org.thingsboard.server.common.data.device.profile.AlarmCondition; | |
51 | +import org.thingsboard.server.common.data.device.profile.AlarmConditionFilter; | |
52 | +import org.thingsboard.server.common.data.device.profile.AlarmConditionFilterKey; | |
53 | +import org.thingsboard.server.common.data.device.profile.AlarmConditionKeyType; | |
54 | +import org.thingsboard.server.common.data.device.profile.AlarmRule; | |
55 | +import org.thingsboard.server.common.data.device.profile.AllowCreateNewDevicesDeviceProfileProvisionConfiguration; | |
56 | +import org.thingsboard.server.common.data.device.profile.DeviceProfileAlarm; | |
57 | +import org.thingsboard.server.common.data.device.profile.DeviceProfileData; | |
58 | +import org.thingsboard.server.common.data.device.profile.SimpleAlarmConditionSpec; | |
48 | 59 | import org.thingsboard.server.common.data.edge.Edge; |
49 | 60 | import org.thingsboard.server.common.data.edge.EdgeEvent; |
50 | 61 | import org.thingsboard.server.common.data.edge.EdgeEventActionType; |
... | ... | @@ -57,6 +68,9 @@ import org.thingsboard.server.common.data.id.TenantId; |
57 | 68 | import org.thingsboard.server.common.data.id.UserId; |
58 | 69 | import org.thingsboard.server.common.data.page.PageData; |
59 | 70 | import org.thingsboard.server.common.data.page.PageLink; |
71 | +import org.thingsboard.server.common.data.query.EntityKeyValueType; | |
72 | +import org.thingsboard.server.common.data.query.FilterPredicateValue; | |
73 | +import org.thingsboard.server.common.data.query.NumericFilterPredicate; | |
60 | 74 | import org.thingsboard.server.common.data.relation.EntityRelation; |
61 | 75 | import org.thingsboard.server.common.data.relation.RelationTypeGroup; |
62 | 76 | import org.thingsboard.server.common.data.rule.RuleChain; |
... | ... | @@ -71,7 +85,6 @@ import org.thingsboard.server.common.data.widget.WidgetsBundle; |
71 | 85 | import org.thingsboard.server.common.transport.adaptor.JsonConverter; |
72 | 86 | import org.thingsboard.server.controller.AbstractControllerTest; |
73 | 87 | import org.thingsboard.server.dao.edge.EdgeEventService; |
74 | -import org.thingsboard.common.util.JacksonUtil; | |
75 | 88 | import org.thingsboard.server.edge.imitator.EdgeImitator; |
76 | 89 | import org.thingsboard.server.gen.edge.AlarmUpdateMsg; |
77 | 90 | import org.thingsboard.server.gen.edge.AssetUpdateMsg; |
... | ... | @@ -81,6 +94,7 @@ import org.thingsboard.server.gen.edge.CustomerUpdateMsg; |
81 | 94 | import org.thingsboard.server.gen.edge.DashboardUpdateMsg; |
82 | 95 | import org.thingsboard.server.gen.edge.DeviceCredentialsRequestMsg; |
83 | 96 | import org.thingsboard.server.gen.edge.DeviceCredentialsUpdateMsg; |
97 | +import org.thingsboard.server.gen.edge.DeviceProfileUpdateMsg; | |
84 | 98 | import org.thingsboard.server.gen.edge.DeviceRpcCallMsg; |
85 | 99 | import org.thingsboard.server.gen.edge.DeviceUpdateMsg; |
86 | 100 | import org.thingsboard.server.gen.edge.EdgeConfiguration; |
... | ... | @@ -106,6 +120,7 @@ import java.util.List; |
106 | 120 | import java.util.Map; |
107 | 121 | import java.util.Optional; |
108 | 122 | import java.util.Random; |
123 | +import java.util.TreeMap; | |
109 | 124 | import java.util.UUID; |
110 | 125 | import java.util.concurrent.TimeUnit; |
111 | 126 | |
... | ... | @@ -114,6 +129,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. |
114 | 129 | @Slf4j |
115 | 130 | abstract public class BaseEdgeTest extends AbstractControllerTest { |
116 | 131 | |
132 | + private static final String CUSTOM_DEVICE_PROFILE_NAME = "Thermostat"; | |
133 | + | |
117 | 134 | private Tenant savedTenant; |
118 | 135 | private TenantId tenantId; |
119 | 136 | private User tenantAdmin; |
... | ... | @@ -145,11 +162,17 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
145 | 162 | tenantAdmin.setLastName("Downs"); |
146 | 163 | |
147 | 164 | tenantAdmin = createUserAndLogin(tenantAdmin, "testPassword1"); |
165 | + // sleep 1 seconds to avoid CREDENTIALS updated message for the user | |
166 | + // user credentials is going to be stored and updated event pushed to edge notification service | |
167 | + // while service will be processing this event edge could be already added and additional message will be pushed | |
168 | + Thread.sleep(1000); | |
169 | + | |
148 | 170 | installation(); |
149 | 171 | |
150 | 172 | edgeImitator = new EdgeImitator("localhost", 7070, edge.getRoutingKey(), edge.getSecret()); |
151 | - // should be less, but events from SyncEdgeService stack with events from controller. will be fixed in next releases | |
152 | - edgeImitator.expectMessageAmount(7); | |
173 | + // TODO: voba - should be less, but events from SyncEdgeService stack with events from controller. will be fixed in next releases | |
174 | + // so ideally sync process should check current edge queue and add only missing entities to the edge queue | |
175 | + edgeImitator.expectMessageAmount(10); | |
153 | 176 | edgeImitator.connect(); |
154 | 177 | } |
155 | 178 | |
... | ... | @@ -163,23 +186,49 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
163 | 186 | .andExpect(status().isOk()); |
164 | 187 | } |
165 | 188 | |
166 | - | |
167 | 189 | @Test |
168 | 190 | public void test() throws Exception { |
169 | 191 | testReceivedInitialData(); |
192 | + Assert.assertEquals(10, edgeImitator.getDownlinkMsgs().size()); | |
193 | + | |
170 | 194 | testDevices(); |
195 | + Assert.assertEquals(14, edgeImitator.getDownlinkMsgs().size()); | |
196 | + | |
171 | 197 | testAssets(); |
198 | + Assert.assertEquals(18, edgeImitator.getDownlinkMsgs().size()); | |
199 | + | |
172 | 200 | testRuleChains(); |
201 | + Assert.assertEquals(21, edgeImitator.getDownlinkMsgs().size()); | |
202 | + | |
173 | 203 | testDashboards(); |
204 | + Assert.assertEquals(24, edgeImitator.getDownlinkMsgs().size()); | |
205 | + | |
174 | 206 | testRelations(); |
207 | + Assert.assertEquals(26, edgeImitator.getDownlinkMsgs().size()); | |
208 | + | |
175 | 209 | testAlarms(); |
210 | + Assert.assertEquals(29, edgeImitator.getDownlinkMsgs().size()); | |
211 | + | |
176 | 212 | testEntityView(); |
213 | + Assert.assertEquals(31, edgeImitator.getDownlinkMsgs().size()); | |
214 | + | |
177 | 215 | testCustomer(); |
216 | + Assert.assertEquals(33, edgeImitator.getDownlinkMsgs().size()); | |
217 | + | |
178 | 218 | testWidgetsBundleAndWidgetType(); |
219 | + Assert.assertEquals(37, edgeImitator.getDownlinkMsgs().size()); | |
220 | + | |
179 | 221 | testTimeseries(); |
222 | + Assert.assertEquals(38, edgeImitator.getDownlinkMsgs().size()); | |
223 | + | |
180 | 224 | testAttributes(); |
225 | + Assert.assertEquals(41, edgeImitator.getDownlinkMsgs().size()); | |
226 | + | |
181 | 227 | testSendMessagesToCloud(); |
228 | + Assert.assertEquals(50, edgeImitator.getDownlinkMsgs().size()); | |
229 | + | |
182 | 230 | testRpcCall(); |
231 | + Assert.assertEquals(51, edgeImitator.getDownlinkMsgs().size()); | |
183 | 232 | } |
184 | 233 | |
185 | 234 | private Device findDeviceByName(String deviceName) throws Exception { |
... | ... | @@ -204,10 +253,10 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
204 | 253 | return asset; |
205 | 254 | } |
206 | 255 | |
207 | - private Device saveDevice(String deviceName) throws Exception { | |
256 | + private Device saveDevice(String deviceName, String type) throws Exception { | |
208 | 257 | Device device = new Device(); |
209 | 258 | device.setName(deviceName); |
210 | - device.setType("test"); | |
259 | + device.setType(type); | |
211 | 260 | return doPost("/api/device", device, Device.class); |
212 | 261 | } |
213 | 262 | |
... | ... | @@ -233,7 +282,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
233 | 282 | edgeImitator.expectMessageAmount(1); |
234 | 283 | edgeEventService.saveAsync(edgeEvent); |
235 | 284 | clusterService.onEdgeEventUpdate(tenantId, edge.getId()); |
236 | - edgeImitator.waitForMessages(); | |
285 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
237 | 286 | |
238 | 287 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
239 | 288 | Assert.assertTrue(latestMessage instanceof DeviceRpcCallMsg); |
... | ... | @@ -243,7 +292,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
243 | 292 | |
244 | 293 | private void testReceivedInitialData() throws Exception { |
245 | 294 | log.info("Checking received data"); |
246 | - edgeImitator.waitForMessages(); | |
295 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
247 | 296 | |
248 | 297 | EdgeConfiguration configuration = edgeImitator.getConfiguration(); |
249 | 298 | Assert.assertNotNull(configuration); |
... | ... | @@ -253,9 +302,9 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
253 | 302 | UserId userId = edgeImitator.getUserId(); |
254 | 303 | Assert.assertNotNull(userId); |
255 | 304 | |
256 | - Optional<DeviceUpdateMsg> optionalMsg1 = edgeImitator.findMessageByType(DeviceUpdateMsg.class); | |
257 | - Assert.assertTrue(optionalMsg1.isPresent()); | |
258 | - DeviceUpdateMsg deviceUpdateMsg = optionalMsg1.get(); | |
305 | + Optional<DeviceUpdateMsg> deviceUpdateMsgOpt = edgeImitator.findMessageByType(DeviceUpdateMsg.class); | |
306 | + Assert.assertTrue(deviceUpdateMsgOpt.isPresent()); | |
307 | + DeviceUpdateMsg deviceUpdateMsg = deviceUpdateMsgOpt.get(); | |
259 | 308 | Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, deviceUpdateMsg.getMsgType()); |
260 | 309 | UUID deviceUUID = new UUID(deviceUpdateMsg.getIdMSB(), deviceUpdateMsg.getIdLSB()); |
261 | 310 | Device device = doGet("/api/device/" + deviceUUID.toString(), Device.class); |
... | ... | @@ -264,9 +313,25 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
264 | 313 | new TypeReference<PageData<Device>>() {}, new PageLink(100)).getData(); |
265 | 314 | Assert.assertTrue(edgeDevices.contains(device)); |
266 | 315 | |
267 | - Optional<AssetUpdateMsg> optionalMsg2 = edgeImitator.findMessageByType(AssetUpdateMsg.class); | |
268 | - Assert.assertTrue(optionalMsg2.isPresent()); | |
269 | - AssetUpdateMsg assetUpdateMsg = optionalMsg2.get(); | |
316 | + List<DeviceProfileUpdateMsg> deviceProfileUpdateMsgList = edgeImitator.findAllMessagesByType(DeviceProfileUpdateMsg.class); | |
317 | + Assert.assertEquals(3, deviceProfileUpdateMsgList.size()); | |
318 | + Optional<DeviceProfileUpdateMsg> deviceProfileUpdateMsgOpt = | |
319 | + deviceProfileUpdateMsgList.stream().filter(dfum -> CUSTOM_DEVICE_PROFILE_NAME.equals(dfum.getName())).findAny(); | |
320 | + Assert.assertTrue(deviceProfileUpdateMsgOpt.isPresent()); | |
321 | + DeviceProfileUpdateMsg deviceProfileUpdateMsg = deviceProfileUpdateMsgOpt.get(); | |
322 | + Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, deviceProfileUpdateMsg.getMsgType()); | |
323 | + UUID deviceProfileUUID = new UUID(deviceProfileUpdateMsg.getIdMSB(), deviceProfileUpdateMsg.getIdLSB()); | |
324 | + DeviceProfile deviceProfile = doGet("/api/deviceProfile/" + deviceProfileUUID.toString(), DeviceProfile.class); | |
325 | + Assert.assertNotNull(deviceProfile); | |
326 | + Assert.assertNotNull(deviceProfile.getProfileData()); | |
327 | + Assert.assertNotNull(deviceProfile.getProfileData().getAlarms()); | |
328 | + Assert.assertNotNull(deviceProfile.getProfileData().getAlarms().get(0).getClearRule()); | |
329 | + | |
330 | + testAutoGeneratedCodeByProtobuf(deviceProfileUpdateMsg); | |
331 | + | |
332 | + Optional<AssetUpdateMsg> assetUpdateMsgOpt = edgeImitator.findMessageByType(AssetUpdateMsg.class); | |
333 | + Assert.assertTrue(assetUpdateMsgOpt.isPresent()); | |
334 | + AssetUpdateMsg assetUpdateMsg = assetUpdateMsgOpt.get(); | |
270 | 335 | Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, assetUpdateMsg.getMsgType()); |
271 | 336 | UUID assetUUID = new UUID(assetUpdateMsg.getIdMSB(), assetUpdateMsg.getIdLSB()); |
272 | 337 | Asset asset = doGet("/api/asset/" + assetUUID.toString(), Asset.class); |
... | ... | @@ -277,9 +342,9 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
277 | 342 | |
278 | 343 | testAutoGeneratedCodeByProtobuf(assetUpdateMsg); |
279 | 344 | |
280 | - Optional<RuleChainUpdateMsg> optionalMsg3 = edgeImitator.findMessageByType(RuleChainUpdateMsg.class); | |
281 | - Assert.assertTrue(optionalMsg3.isPresent()); | |
282 | - RuleChainUpdateMsg ruleChainUpdateMsg = optionalMsg3.get(); | |
345 | + Optional<RuleChainUpdateMsg> ruleChainUpdateMsgOpt = edgeImitator.findMessageByType(RuleChainUpdateMsg.class); | |
346 | + Assert.assertTrue(ruleChainUpdateMsgOpt.isPresent()); | |
347 | + RuleChainUpdateMsg ruleChainUpdateMsg = ruleChainUpdateMsgOpt.get(); | |
283 | 348 | Assert.assertEquals(UpdateMsgType.ENTITY_UPDATED_RPC_MESSAGE, ruleChainUpdateMsg.getMsgType()); |
284 | 349 | UUID ruleChainUUID = new UUID(ruleChainUpdateMsg.getIdMSB(), ruleChainUpdateMsg.getIdLSB()); |
285 | 350 | RuleChain ruleChain = doGet("/api/ruleChain/" + ruleChainUUID.toString(), RuleChain.class); |
... | ... | @@ -296,13 +361,12 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
296 | 361 | private void testDevices() throws Exception { |
297 | 362 | log.info("Testing devices"); |
298 | 363 | |
299 | - Device savedDevice = saveDevice("Edge Device 2"); | |
300 | - | |
364 | + // 1 | |
301 | 365 | edgeImitator.expectMessageAmount(1); |
366 | + Device savedDevice = saveDevice("Edge Device 2", "Default"); | |
302 | 367 | doPost("/api/edge/" + edge.getId().getId().toString() |
303 | 368 | + "/device/" + savedDevice.getId().getId().toString(), Device.class); |
304 | - edgeImitator.waitForMessages(); | |
305 | - | |
369 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
306 | 370 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
307 | 371 | Assert.assertTrue(latestMessage instanceof DeviceUpdateMsg); |
308 | 372 | DeviceUpdateMsg deviceUpdateMsg = (DeviceUpdateMsg) latestMessage; |
... | ... | @@ -312,11 +376,11 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
312 | 376 | Assert.assertEquals(deviceUpdateMsg.getName(), savedDevice.getName()); |
313 | 377 | Assert.assertEquals(deviceUpdateMsg.getType(), savedDevice.getType()); |
314 | 378 | |
379 | + // 2 | |
315 | 380 | edgeImitator.expectMessageAmount(1); |
316 | 381 | doDelete("/api/edge/" + edge.getId().getId().toString() |
317 | 382 | + "/device/" + savedDevice.getId().getId().toString(), Device.class); |
318 | - edgeImitator.waitForMessages(); | |
319 | - | |
383 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
320 | 384 | latestMessage = edgeImitator.getLatestMessage(); |
321 | 385 | Assert.assertTrue(latestMessage instanceof DeviceUpdateMsg); |
322 | 386 | deviceUpdateMsg = (DeviceUpdateMsg) latestMessage; |
... | ... | @@ -324,11 +388,34 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
324 | 388 | Assert.assertEquals(deviceUpdateMsg.getIdMSB(), savedDevice.getUuidId().getMostSignificantBits()); |
325 | 389 | Assert.assertEquals(deviceUpdateMsg.getIdLSB(), savedDevice.getUuidId().getLeastSignificantBits()); |
326 | 390 | |
391 | + // 3 | |
327 | 392 | edgeImitator.expectMessageAmount(1); |
328 | 393 | doDelete("/api/device/" + savedDevice.getId().getId().toString()) |
329 | 394 | .andExpect(status().isOk()); |
330 | - edgeImitator.waitForMessages(); | |
395 | + // we should not get any message because device is not assigned to edge any more | |
396 | + Assert.assertFalse(edgeImitator.waitForMessages(1)); | |
331 | 397 | |
398 | + // 4 | |
399 | + edgeImitator.expectMessageAmount(1); | |
400 | + savedDevice = saveDevice("Edge Device 3", "Default"); | |
401 | + doPost("/api/edge/" + edge.getId().getId().toString() | |
402 | + + "/device/" + savedDevice.getId().getId().toString(), Device.class); | |
403 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
404 | + latestMessage = edgeImitator.getLatestMessage(); | |
405 | + Assert.assertTrue(latestMessage instanceof DeviceUpdateMsg); | |
406 | + deviceUpdateMsg = (DeviceUpdateMsg) latestMessage; | |
407 | + Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, deviceUpdateMsg.getMsgType()); | |
408 | + Assert.assertEquals(deviceUpdateMsg.getIdMSB(), savedDevice.getUuidId().getMostSignificantBits()); | |
409 | + Assert.assertEquals(deviceUpdateMsg.getIdLSB(), savedDevice.getUuidId().getLeastSignificantBits()); | |
410 | + Assert.assertEquals(deviceUpdateMsg.getName(), savedDevice.getName()); | |
411 | + Assert.assertEquals(deviceUpdateMsg.getType(), savedDevice.getType()); | |
412 | + | |
413 | + // 5 | |
414 | + edgeImitator.expectMessageAmount(1); | |
415 | + doDelete("/api/device/" + savedDevice.getId().getId().toString()) | |
416 | + .andExpect(status().isOk()); | |
417 | + // in this case we should get messages because device was assigned to edge | |
418 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
332 | 419 | latestMessage = edgeImitator.getLatestMessage(); |
333 | 420 | Assert.assertTrue(latestMessage instanceof DeviceUpdateMsg); |
334 | 421 | deviceUpdateMsg = (DeviceUpdateMsg) latestMessage; |
... | ... | @@ -342,13 +429,13 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
342 | 429 | |
343 | 430 | private void testAssets() throws Exception { |
344 | 431 | log.info("Testing assets"); |
345 | - Asset savedAsset = saveAsset("Edge Asset 2"); | |
346 | 432 | |
433 | + // 1 | |
347 | 434 | edgeImitator.expectMessageAmount(1); |
435 | + Asset savedAsset = saveAsset("Edge Asset 2"); | |
348 | 436 | doPost("/api/edge/" + edge.getId().getId().toString() |
349 | 437 | + "/asset/" + savedAsset.getId().getId().toString(), Asset.class); |
350 | - edgeImitator.waitForMessages(); | |
351 | - | |
438 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
352 | 439 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
353 | 440 | Assert.assertTrue(latestMessage instanceof AssetUpdateMsg); |
354 | 441 | AssetUpdateMsg assetUpdateMsg = (AssetUpdateMsg) latestMessage; |
... | ... | @@ -358,11 +445,11 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
358 | 445 | Assert.assertEquals(assetUpdateMsg.getName(), savedAsset.getName()); |
359 | 446 | Assert.assertEquals(assetUpdateMsg.getType(), savedAsset.getType()); |
360 | 447 | |
448 | + // 2 | |
361 | 449 | edgeImitator.expectMessageAmount(1); |
362 | 450 | doDelete("/api/edge/" + edge.getId().getId().toString() |
363 | 451 | + "/asset/" + savedAsset.getId().getId().toString(), Asset.class); |
364 | - edgeImitator.waitForMessages(); | |
365 | - | |
452 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
366 | 453 | latestMessage = edgeImitator.getLatestMessage(); |
367 | 454 | Assert.assertTrue(latestMessage instanceof AssetUpdateMsg); |
368 | 455 | assetUpdateMsg = (AssetUpdateMsg) latestMessage; |
... | ... | @@ -370,11 +457,32 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
370 | 457 | Assert.assertEquals(assetUpdateMsg.getIdMSB(), savedAsset.getUuidId().getMostSignificantBits()); |
371 | 458 | Assert.assertEquals(assetUpdateMsg.getIdLSB(), savedAsset.getUuidId().getLeastSignificantBits()); |
372 | 459 | |
460 | + // 3 | |
373 | 461 | edgeImitator.expectMessageAmount(1); |
374 | 462 | doDelete("/api/asset/" + savedAsset.getId().getId().toString()) |
375 | 463 | .andExpect(status().isOk()); |
376 | - edgeImitator.waitForMessages(); | |
464 | + Assert.assertFalse(edgeImitator.waitForMessages(1)); | |
377 | 465 | |
466 | + // 4 | |
467 | + edgeImitator.expectMessageAmount(1); | |
468 | + savedAsset = saveAsset("Edge Asset 3"); | |
469 | + doPost("/api/edge/" + edge.getId().getId().toString() | |
470 | + + "/asset/" + savedAsset.getId().getId().toString(), Asset.class); | |
471 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
472 | + latestMessage = edgeImitator.getLatestMessage(); | |
473 | + Assert.assertTrue(latestMessage instanceof AssetUpdateMsg); | |
474 | + assetUpdateMsg = (AssetUpdateMsg) latestMessage; | |
475 | + Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, assetUpdateMsg.getMsgType()); | |
476 | + Assert.assertEquals(assetUpdateMsg.getIdMSB(), savedAsset.getUuidId().getMostSignificantBits()); | |
477 | + Assert.assertEquals(assetUpdateMsg.getIdLSB(), savedAsset.getUuidId().getLeastSignificantBits()); | |
478 | + Assert.assertEquals(assetUpdateMsg.getName(), savedAsset.getName()); | |
479 | + Assert.assertEquals(assetUpdateMsg.getType(), savedAsset.getType()); | |
480 | + | |
481 | + // 5 | |
482 | + edgeImitator.expectMessageAmount(1); | |
483 | + doDelete("/api/asset/" + savedAsset.getId().getId().toString()) | |
484 | + .andExpect(status().isOk()); | |
485 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
378 | 486 | latestMessage = edgeImitator.getLatestMessage(); |
379 | 487 | Assert.assertTrue(latestMessage instanceof AssetUpdateMsg); |
380 | 488 | assetUpdateMsg = (AssetUpdateMsg) latestMessage; |
... | ... | @@ -387,21 +495,21 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
387 | 495 | |
388 | 496 | private void testRuleChains() throws Exception { |
389 | 497 | log.info("Testing RuleChains"); |
498 | + | |
499 | + // 1 | |
500 | + edgeImitator.expectMessageAmount(1); | |
390 | 501 | RuleChain ruleChain = new RuleChain(); |
391 | 502 | ruleChain.setName("Edge Test Rule Chain"); |
392 | 503 | ruleChain.setType(RuleChainType.EDGE); |
393 | 504 | RuleChain savedRuleChain = doPost("/api/ruleChain", ruleChain, RuleChain.class); |
394 | - | |
395 | 505 | createRuleChainMetadata(savedRuleChain); |
396 | - | |
397 | - // Wait before rule chain metadata saved to database before rule chain is assigned to edge | |
506 | + // sleep 1 seconds to avoid ENTITY_UPDATED_RPC_MESSAGE for the rule chain | |
507 | + // rule chain metadata is going to be stored and updated event pushed to edge notification service | |
508 | + // while service will be processing this event assignment rule chain to edge will be completed if bad timing | |
398 | 509 | Thread.sleep(1000); |
399 | - | |
400 | - edgeImitator.expectMessageAmount(1); | |
401 | 510 | doPost("/api/edge/" + edge.getId().getId().toString() |
402 | 511 | + "/ruleChain/" + savedRuleChain.getId().getId().toString(), RuleChain.class); |
403 | - edgeImitator.waitForMessages(); | |
404 | - | |
512 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
405 | 513 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
406 | 514 | Assert.assertTrue(latestMessage instanceof RuleChainUpdateMsg); |
407 | 515 | RuleChainUpdateMsg ruleChainUpdateMsg = (RuleChainUpdateMsg) latestMessage; |
... | ... | @@ -410,13 +518,14 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
410 | 518 | Assert.assertEquals(ruleChainUpdateMsg.getIdLSB(), savedRuleChain.getUuidId().getLeastSignificantBits()); |
411 | 519 | Assert.assertEquals(ruleChainUpdateMsg.getName(), savedRuleChain.getName()); |
412 | 520 | |
521 | + // 2 | |
413 | 522 | testRuleChainMetadataRequestMsg(savedRuleChain.getId()); |
414 | 523 | |
524 | + // 3 | |
415 | 525 | edgeImitator.expectMessageAmount(1); |
416 | 526 | doDelete("/api/edge/" + edge.getId().getId().toString() |
417 | 527 | + "/ruleChain/" + savedRuleChain.getId().getId().toString(), RuleChain.class); |
418 | - edgeImitator.waitForMessages(); | |
419 | - | |
528 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
420 | 529 | latestMessage = edgeImitator.getLatestMessage(); |
421 | 530 | Assert.assertTrue(latestMessage instanceof RuleChainUpdateMsg); |
422 | 531 | ruleChainUpdateMsg = (RuleChainUpdateMsg) latestMessage; |
... | ... | @@ -424,17 +533,11 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
424 | 533 | Assert.assertEquals(ruleChainUpdateMsg.getIdMSB(), savedRuleChain.getUuidId().getMostSignificantBits()); |
425 | 534 | Assert.assertEquals(ruleChainUpdateMsg.getIdLSB(), savedRuleChain.getUuidId().getLeastSignificantBits()); |
426 | 535 | |
536 | + // 4 | |
427 | 537 | edgeImitator.expectMessageAmount(1); |
428 | 538 | doDelete("/api/ruleChain/" + savedRuleChain.getId().getId().toString()) |
429 | 539 | .andExpect(status().isOk()); |
430 | - edgeImitator.waitForMessages(); | |
431 | - | |
432 | - latestMessage = edgeImitator.getLatestMessage(); | |
433 | - Assert.assertTrue(latestMessage instanceof RuleChainUpdateMsg); | |
434 | - ruleChainUpdateMsg = (RuleChainUpdateMsg) latestMessage; | |
435 | - Assert.assertEquals(UpdateMsgType.ENTITY_DELETED_RPC_MESSAGE, ruleChainUpdateMsg.getMsgType()); | |
436 | - Assert.assertEquals(ruleChainUpdateMsg.getIdMSB(), savedRuleChain.getUuidId().getMostSignificantBits()); | |
437 | - Assert.assertEquals(ruleChainUpdateMsg.getIdLSB(), savedRuleChain.getUuidId().getLeastSignificantBits()); | |
540 | + Assert.assertFalse(edgeImitator.waitForMessages(1)); | |
438 | 541 | |
439 | 542 | log.info("RuleChains tested successfully"); |
440 | 543 | } |
... | ... | @@ -452,8 +555,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
452 | 555 | edgeImitator.expectResponsesAmount(1); |
453 | 556 | edgeImitator.expectMessageAmount(1); |
454 | 557 | edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build()); |
455 | - edgeImitator.waitForResponses(); | |
456 | - edgeImitator.waitForMessages(); | |
558 | + Assert.assertTrue(edgeImitator.waitForResponses()); | |
559 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
457 | 560 | |
458 | 561 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
459 | 562 | Assert.assertTrue(latestMessage instanceof RuleChainMetadataUpdateMsg); |
... | ... | @@ -502,15 +605,15 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
502 | 605 | |
503 | 606 | private void testDashboards() throws Exception { |
504 | 607 | log.info("Testing Dashboards"); |
608 | + | |
609 | + // 1 | |
610 | + edgeImitator.expectMessageAmount(1); | |
505 | 611 | Dashboard dashboard = new Dashboard(); |
506 | 612 | dashboard.setTitle("Edge Test Dashboard"); |
507 | 613 | Dashboard savedDashboard = doPost("/api/dashboard", dashboard, Dashboard.class); |
508 | - | |
509 | - edgeImitator.expectMessageAmount(1); | |
510 | 614 | doPost("/api/edge/" + edge.getId().getId().toString() |
511 | 615 | + "/dashboard/" + savedDashboard.getId().getId().toString(), Dashboard.class); |
512 | - edgeImitator.waitForMessages(); | |
513 | - | |
616 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
514 | 617 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
515 | 618 | Assert.assertTrue(latestMessage instanceof DashboardUpdateMsg); |
516 | 619 | DashboardUpdateMsg dashboardUpdateMsg = (DashboardUpdateMsg) latestMessage; |
... | ... | @@ -518,25 +621,24 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
518 | 621 | Assert.assertEquals(dashboardUpdateMsg.getIdMSB(), savedDashboard.getUuidId().getMostSignificantBits()); |
519 | 622 | Assert.assertEquals(dashboardUpdateMsg.getIdLSB(), savedDashboard.getUuidId().getLeastSignificantBits()); |
520 | 623 | Assert.assertEquals(dashboardUpdateMsg.getTitle(), savedDashboard.getName()); |
521 | - | |
522 | 624 | testAutoGeneratedCodeByProtobuf(dashboardUpdateMsg); |
523 | 625 | |
626 | + // 2 | |
524 | 627 | edgeImitator.expectMessageAmount(1); |
525 | 628 | savedDashboard.setTitle("Updated Edge Test Dashboard"); |
526 | 629 | doPost("/api/dashboard", savedDashboard, Dashboard.class); |
527 | - edgeImitator.waitForMessages(); | |
528 | - | |
630 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
529 | 631 | latestMessage = edgeImitator.getLatestMessage(); |
530 | 632 | Assert.assertTrue(latestMessage instanceof DashboardUpdateMsg); |
531 | 633 | dashboardUpdateMsg = (DashboardUpdateMsg) latestMessage; |
532 | 634 | Assert.assertEquals(UpdateMsgType.ENTITY_UPDATED_RPC_MESSAGE, dashboardUpdateMsg.getMsgType()); |
533 | 635 | Assert.assertEquals(dashboardUpdateMsg.getTitle(), savedDashboard.getName()); |
534 | 636 | |
637 | + // 3 | |
535 | 638 | edgeImitator.expectMessageAmount(1); |
536 | 639 | doDelete("/api/edge/" + edge.getId().getId().toString() |
537 | 640 | + "/dashboard/" + savedDashboard.getId().getId().toString(), Dashboard.class); |
538 | - edgeImitator.waitForMessages(); | |
539 | - | |
641 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
540 | 642 | latestMessage = edgeImitator.getLatestMessage(); |
541 | 643 | Assert.assertTrue(latestMessage instanceof DashboardUpdateMsg); |
542 | 644 | dashboardUpdateMsg = (DashboardUpdateMsg) latestMessage; |
... | ... | @@ -544,17 +646,11 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
544 | 646 | Assert.assertEquals(dashboardUpdateMsg.getIdMSB(), savedDashboard.getUuidId().getMostSignificantBits()); |
545 | 647 | Assert.assertEquals(dashboardUpdateMsg.getIdLSB(), savedDashboard.getUuidId().getLeastSignificantBits()); |
546 | 648 | |
649 | + // 4 | |
547 | 650 | edgeImitator.expectMessageAmount(1); |
548 | 651 | doDelete("/api/dashboard/" + savedDashboard.getId().getId().toString()) |
549 | 652 | .andExpect(status().isOk()); |
550 | - edgeImitator.waitForMessages(); | |
551 | - | |
552 | - latestMessage = edgeImitator.getLatestMessage(); | |
553 | - Assert.assertTrue(latestMessage instanceof DashboardUpdateMsg); | |
554 | - dashboardUpdateMsg = (DashboardUpdateMsg) latestMessage; | |
555 | - Assert.assertEquals(UpdateMsgType.ENTITY_DELETED_RPC_MESSAGE, dashboardUpdateMsg.getMsgType()); | |
556 | - Assert.assertEquals(dashboardUpdateMsg.getIdMSB(), savedDashboard.getUuidId().getMostSignificantBits()); | |
557 | - Assert.assertEquals(dashboardUpdateMsg.getIdLSB(), savedDashboard.getUuidId().getLeastSignificantBits()); | |
653 | + Assert.assertFalse(edgeImitator.waitForMessages(1)); | |
558 | 654 | |
559 | 655 | log.info("Dashboards tested successfully"); |
560 | 656 | } |
... | ... | @@ -562,19 +658,17 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
562 | 658 | private void testRelations() throws Exception { |
563 | 659 | log.info("Testing Relations"); |
564 | 660 | |
661 | + // 1 | |
662 | + edgeImitator.expectMessageAmount(1); | |
565 | 663 | Device device = findDeviceByName("Edge Device 1"); |
566 | 664 | Asset asset = findAssetByName("Edge Asset 1"); |
567 | - | |
568 | 665 | EntityRelation relation = new EntityRelation(); |
569 | 666 | relation.setType("test"); |
570 | 667 | relation.setFrom(device.getId()); |
571 | 668 | relation.setTo(asset.getId()); |
572 | 669 | relation.setTypeGroup(RelationTypeGroup.COMMON); |
573 | - | |
574 | - edgeImitator.expectMessageAmount(1); | |
575 | 670 | doPost("/api/relation", relation); |
576 | - edgeImitator.waitForMessages(); | |
577 | - | |
671 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
578 | 672 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
579 | 673 | Assert.assertTrue(latestMessage instanceof RelationUpdateMsg); |
580 | 674 | RelationUpdateMsg relationUpdateMsg = (RelationUpdateMsg) latestMessage; |
... | ... | @@ -588,6 +682,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
588 | 682 | Assert.assertEquals(relationUpdateMsg.getToEntityType(), relation.getTo().getEntityType().name()); |
589 | 683 | Assert.assertEquals(relationUpdateMsg.getTypeGroup(), relation.getTypeGroup().name()); |
590 | 684 | |
685 | + // 2 | |
591 | 686 | edgeImitator.expectMessageAmount(1); |
592 | 687 | doDelete("/api/relation?" + |
593 | 688 | "fromId=" + relation.getFrom().getId().toString() + |
... | ... | @@ -597,8 +692,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
597 | 692 | "&toId=" + relation.getTo().getId().toString() + |
598 | 693 | "&toType=" + relation.getTo().getEntityType().name()) |
599 | 694 | .andExpect(status().isOk()); |
600 | - edgeImitator.waitForMessages(); | |
601 | - | |
695 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
602 | 696 | latestMessage = edgeImitator.getLatestMessage(); |
603 | 697 | Assert.assertTrue(latestMessage instanceof RelationUpdateMsg); |
604 | 698 | relationUpdateMsg = (RelationUpdateMsg) latestMessage; |
... | ... | @@ -617,18 +711,17 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
617 | 711 | |
618 | 712 | private void testAlarms() throws Exception { |
619 | 713 | log.info("Testing Alarms"); |
620 | - Device device = findDeviceByName("Edge Device 1"); | |
621 | 714 | |
715 | + // 1 | |
716 | + edgeImitator.expectMessageAmount(1); | |
717 | + Device device = findDeviceByName("Edge Device 1"); | |
622 | 718 | Alarm alarm = new Alarm(); |
623 | 719 | alarm.setOriginator(device.getId()); |
624 | 720 | alarm.setStatus(AlarmStatus.ACTIVE_UNACK); |
625 | 721 | alarm.setType("alarm"); |
626 | 722 | alarm.setSeverity(AlarmSeverity.CRITICAL); |
627 | - | |
628 | - edgeImitator.expectMessageAmount(1); | |
629 | 723 | Alarm savedAlarm = doPost("/api/alarm", alarm, Alarm.class); |
630 | - edgeImitator.waitForMessages(); | |
631 | - | |
724 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
632 | 725 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
633 | 726 | Assert.assertTrue(latestMessage instanceof AlarmUpdateMsg); |
634 | 727 | AlarmUpdateMsg alarmUpdateMsg = (AlarmUpdateMsg) latestMessage; |
... | ... | @@ -639,10 +732,10 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
639 | 732 | Assert.assertEquals(alarmUpdateMsg.getStatus(), savedAlarm.getStatus().name()); |
640 | 733 | Assert.assertEquals(alarmUpdateMsg.getSeverity(), savedAlarm.getSeverity().name()); |
641 | 734 | |
735 | + // 2 | |
642 | 736 | edgeImitator.expectMessageAmount(1); |
643 | 737 | doPost("/api/alarm/" + savedAlarm.getId().getId().toString() + "/ack"); |
644 | - edgeImitator.waitForMessages(); | |
645 | - | |
738 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
646 | 739 | latestMessage = edgeImitator.getLatestMessage(); |
647 | 740 | Assert.assertTrue(latestMessage instanceof AlarmUpdateMsg); |
648 | 741 | alarmUpdateMsg = (AlarmUpdateMsg) latestMessage; |
... | ... | @@ -652,10 +745,10 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
652 | 745 | Assert.assertEquals(alarmUpdateMsg.getOriginatorName(), device.getName()); |
653 | 746 | Assert.assertEquals(alarmUpdateMsg.getStatus(), AlarmStatus.ACTIVE_ACK.name()); |
654 | 747 | |
748 | + // 3 | |
655 | 749 | edgeImitator.expectMessageAmount(1); |
656 | 750 | doPost("/api/alarm/" + savedAlarm.getId().getId().toString() + "/clear"); |
657 | - edgeImitator.waitForMessages(); | |
658 | - | |
751 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
659 | 752 | latestMessage = edgeImitator.getLatestMessage(); |
660 | 753 | Assert.assertTrue(latestMessage instanceof AlarmUpdateMsg); |
661 | 754 | alarmUpdateMsg = (AlarmUpdateMsg) latestMessage; |
... | ... | @@ -665,26 +758,29 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
665 | 758 | Assert.assertEquals(alarmUpdateMsg.getOriginatorName(), device.getName()); |
666 | 759 | Assert.assertEquals(alarmUpdateMsg.getStatus(), AlarmStatus.CLEARED_ACK.name()); |
667 | 760 | |
761 | + // 4 | |
762 | + edgeImitator.expectMessageAmount(1); | |
668 | 763 | doDelete("/api/alarm/" + savedAlarm.getId().getId().toString()) |
669 | 764 | .andExpect(status().isOk()); |
765 | + Assert.assertFalse(edgeImitator.waitForMessages(1)); | |
766 | + | |
670 | 767 | log.info("Alarms tested successfully"); |
671 | 768 | } |
672 | 769 | |
673 | 770 | private void testEntityView() throws Exception { |
674 | 771 | log.info("Testing EntityView"); |
675 | - Device device = findDeviceByName("Edge Device 1"); | |
676 | 772 | |
773 | + // 1 | |
774 | + edgeImitator.expectMessageAmount(1); | |
775 | + Device device = findDeviceByName("Edge Device 1"); | |
677 | 776 | EntityView entityView = new EntityView(); |
678 | 777 | entityView.setName("Edge EntityView 1"); |
679 | 778 | entityView.setType("test"); |
680 | 779 | entityView.setEntityId(device.getId()); |
681 | 780 | EntityView savedEntityView = doPost("/api/entityView", entityView, EntityView.class); |
682 | - | |
683 | - edgeImitator.expectMessageAmount(1); | |
684 | 781 | doPost("/api/edge/" + edge.getId().getId().toString() |
685 | 782 | + "/entityView/" + savedEntityView.getId().getId().toString(), EntityView.class); |
686 | - edgeImitator.waitForMessages(); | |
687 | - | |
783 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
688 | 784 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
689 | 785 | Assert.assertTrue(latestMessage instanceof EntityViewUpdateMsg); |
690 | 786 | EntityViewUpdateMsg entityViewUpdateMsg = (EntityViewUpdateMsg) latestMessage; |
... | ... | @@ -697,11 +793,11 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
697 | 793 | Assert.assertEquals(entityViewUpdateMsg.getEntityIdLSB(), device.getUuidId().getLeastSignificantBits()); |
698 | 794 | Assert.assertEquals(entityViewUpdateMsg.getEntityType().name(), device.getId().getEntityType().name()); |
699 | 795 | |
796 | + // 2 | |
700 | 797 | edgeImitator.expectMessageAmount(1); |
701 | 798 | doDelete("/api/edge/" + edge.getId().getId().toString() |
702 | 799 | + "/entityView/" + savedEntityView.getId().getId().toString(), EntityView.class); |
703 | - edgeImitator.waitForMessages(); | |
704 | - | |
800 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
705 | 801 | latestMessage = edgeImitator.getLatestMessage(); |
706 | 802 | Assert.assertTrue(latestMessage instanceof EntityViewUpdateMsg); |
707 | 803 | entityViewUpdateMsg = (EntityViewUpdateMsg) latestMessage; |
... | ... | @@ -709,17 +805,11 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
709 | 805 | Assert.assertEquals(entityViewUpdateMsg.getIdMSB(), savedEntityView.getUuidId().getMostSignificantBits()); |
710 | 806 | Assert.assertEquals(entityViewUpdateMsg.getIdLSB(), savedEntityView.getUuidId().getLeastSignificantBits()); |
711 | 807 | |
808 | + // 3 | |
712 | 809 | edgeImitator.expectMessageAmount(1); |
713 | 810 | doDelete("/api/entityView/" + savedEntityView.getId().getId().toString()) |
714 | 811 | .andExpect(status().isOk()); |
715 | - edgeImitator.waitForMessages(); | |
716 | - | |
717 | - latestMessage = edgeImitator.getLatestMessage(); | |
718 | - Assert.assertTrue(latestMessage instanceof EntityViewUpdateMsg); | |
719 | - entityViewUpdateMsg = (EntityViewUpdateMsg) latestMessage; | |
720 | - Assert.assertEquals(UpdateMsgType.ENTITY_DELETED_RPC_MESSAGE, entityViewUpdateMsg.getMsgType()); | |
721 | - Assert.assertEquals(entityViewUpdateMsg.getIdMSB(), savedEntityView.getUuidId().getMostSignificantBits()); | |
722 | - Assert.assertEquals(entityViewUpdateMsg.getIdLSB(), savedEntityView.getUuidId().getLeastSignificantBits()); | |
812 | + Assert.assertFalse(edgeImitator.waitForMessages(1)); | |
723 | 813 | |
724 | 814 | log.info("EntityView tested successfully"); |
725 | 815 | } |
... | ... | @@ -727,15 +817,14 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
727 | 817 | private void testCustomer() throws Exception { |
728 | 818 | log.info("Testing Customer"); |
729 | 819 | |
820 | + // 1 | |
821 | + edgeImitator.expectMessageAmount(1); | |
730 | 822 | Customer customer = new Customer(); |
731 | 823 | customer.setTitle("Edge Customer 1"); |
732 | 824 | Customer savedCustomer = doPost("/api/customer", customer, Customer.class); |
733 | - | |
734 | - edgeImitator.expectMessageAmount(1); | |
735 | 825 | doPost("/api/customer/" + savedCustomer.getId().getId().toString() |
736 | 826 | + "/edge/" + edge.getId().getId().toString(), Edge.class); |
737 | - edgeImitator.waitForMessages(); | |
738 | - | |
827 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
739 | 828 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
740 | 829 | Assert.assertTrue(latestMessage instanceof CustomerUpdateMsg); |
741 | 830 | CustomerUpdateMsg customerUpdateMsg = (CustomerUpdateMsg) latestMessage; |
... | ... | @@ -743,13 +832,12 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
743 | 832 | Assert.assertEquals(customerUpdateMsg.getIdMSB(), savedCustomer.getUuidId().getMostSignificantBits()); |
744 | 833 | Assert.assertEquals(customerUpdateMsg.getIdLSB(), savedCustomer.getUuidId().getLeastSignificantBits()); |
745 | 834 | Assert.assertEquals(customerUpdateMsg.getTitle(), savedCustomer.getTitle()); |
746 | - | |
747 | 835 | testAutoGeneratedCodeByProtobuf(customerUpdateMsg); |
748 | 836 | |
837 | + // 2 | |
749 | 838 | edgeImitator.expectMessageAmount(1); |
750 | 839 | doDelete("/api/customer/edge/" + edge.getId().getId().toString(), Edge.class); |
751 | - edgeImitator.waitForMessages(); | |
752 | - | |
840 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
753 | 841 | latestMessage = edgeImitator.getLatestMessage(); |
754 | 842 | Assert.assertTrue(latestMessage instanceof CustomerUpdateMsg); |
755 | 843 | customerUpdateMsg = (CustomerUpdateMsg) latestMessage; |
... | ... | @@ -757,17 +845,11 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
757 | 845 | Assert.assertEquals(customerUpdateMsg.getIdMSB(), savedCustomer.getUuidId().getMostSignificantBits()); |
758 | 846 | Assert.assertEquals(customerUpdateMsg.getIdLSB(), savedCustomer.getUuidId().getLeastSignificantBits()); |
759 | 847 | |
848 | + // 3 | |
760 | 849 | edgeImitator.expectMessageAmount(1); |
761 | 850 | doDelete("/api/customer/" + savedCustomer.getId().getId().toString()) |
762 | 851 | .andExpect(status().isOk()); |
763 | - edgeImitator.waitForMessages(); | |
764 | - | |
765 | - latestMessage = edgeImitator.getLatestMessage(); | |
766 | - Assert.assertTrue(latestMessage instanceof CustomerUpdateMsg); | |
767 | - customerUpdateMsg = (CustomerUpdateMsg) latestMessage; | |
768 | - Assert.assertEquals(UpdateMsgType.ENTITY_DELETED_RPC_MESSAGE, customerUpdateMsg.getMsgType()); | |
769 | - Assert.assertEquals(customerUpdateMsg.getIdMSB(), savedCustomer.getUuidId().getMostSignificantBits()); | |
770 | - Assert.assertEquals(customerUpdateMsg.getIdLSB(), savedCustomer.getUuidId().getLeastSignificantBits()); | |
852 | + Assert.assertFalse(edgeImitator.waitForMessages(1)); | |
771 | 853 | |
772 | 854 | log.info("Customer tested successfully"); |
773 | 855 | } |
... | ... | @@ -775,13 +857,12 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
775 | 857 | private void testWidgetsBundleAndWidgetType() throws Exception { |
776 | 858 | log.info("Testing WidgetsBundle and WidgetType"); |
777 | 859 | |
860 | + // 1 | |
861 | + edgeImitator.expectMessageAmount(1); | |
778 | 862 | WidgetsBundle widgetsBundle = new WidgetsBundle(); |
779 | 863 | widgetsBundle.setTitle("Test Widget Bundle"); |
780 | - | |
781 | - edgeImitator.expectMessageAmount(1); | |
782 | 864 | WidgetsBundle savedWidgetsBundle = doPost("/api/widgetsBundle", widgetsBundle, WidgetsBundle.class); |
783 | - edgeImitator.waitForMessages(); | |
784 | - | |
865 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
785 | 866 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
786 | 867 | Assert.assertTrue(latestMessage instanceof WidgetsBundleUpdateMsg); |
787 | 868 | WidgetsBundleUpdateMsg widgetsBundleUpdateMsg = (WidgetsBundleUpdateMsg) latestMessage; |
... | ... | @@ -790,20 +871,18 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
790 | 871 | Assert.assertEquals(widgetsBundleUpdateMsg.getIdLSB(), savedWidgetsBundle.getUuidId().getLeastSignificantBits()); |
791 | 872 | Assert.assertEquals(widgetsBundleUpdateMsg.getAlias(), savedWidgetsBundle.getAlias()); |
792 | 873 | Assert.assertEquals(widgetsBundleUpdateMsg.getTitle(), savedWidgetsBundle.getTitle()); |
793 | - | |
794 | 874 | testAutoGeneratedCodeByProtobuf(widgetsBundleUpdateMsg); |
795 | 875 | |
876 | + // 2 | |
877 | + edgeImitator.expectMessageAmount(1); | |
796 | 878 | WidgetType widgetType = new WidgetType(); |
797 | 879 | widgetType.setName("Test Widget Type"); |
798 | 880 | widgetType.setBundleAlias(savedWidgetsBundle.getAlias()); |
799 | 881 | ObjectNode descriptor = mapper.createObjectNode(); |
800 | 882 | descriptor.put("key", "value"); |
801 | 883 | widgetType.setDescriptor(descriptor); |
802 | - | |
803 | - edgeImitator.expectMessageAmount(1); | |
804 | 884 | WidgetType savedWidgetType = doPost("/api/widgetType", widgetType, WidgetType.class); |
805 | - edgeImitator.waitForMessages(); | |
806 | - | |
885 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
807 | 886 | latestMessage = edgeImitator.getLatestMessage(); |
808 | 887 | Assert.assertTrue(latestMessage instanceof WidgetTypeUpdateMsg); |
809 | 888 | WidgetTypeUpdateMsg widgetTypeUpdateMsg = (WidgetTypeUpdateMsg) latestMessage; |
... | ... | @@ -814,11 +893,11 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
814 | 893 | Assert.assertEquals(widgetTypeUpdateMsg.getName(), savedWidgetType.getName()); |
815 | 894 | Assert.assertEquals(JacksonUtil.toJsonNode(widgetTypeUpdateMsg.getDescriptorJson()), savedWidgetType.getDescriptor()); |
816 | 895 | |
896 | + // 3 | |
817 | 897 | edgeImitator.expectMessageAmount(1); |
818 | 898 | doDelete("/api/widgetType/" + savedWidgetType.getId().getId().toString()) |
819 | 899 | .andExpect(status().isOk()); |
820 | - edgeImitator.waitForMessages(); | |
821 | - | |
900 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
822 | 901 | latestMessage = edgeImitator.getLatestMessage(); |
823 | 902 | Assert.assertTrue(latestMessage instanceof WidgetTypeUpdateMsg); |
824 | 903 | widgetTypeUpdateMsg = (WidgetTypeUpdateMsg) latestMessage; |
... | ... | @@ -826,11 +905,11 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
826 | 905 | Assert.assertEquals(widgetTypeUpdateMsg.getIdMSB(), savedWidgetType.getUuidId().getMostSignificantBits()); |
827 | 906 | Assert.assertEquals(widgetTypeUpdateMsg.getIdLSB(), savedWidgetType.getUuidId().getLeastSignificantBits()); |
828 | 907 | |
908 | + // 4 | |
829 | 909 | edgeImitator.expectMessageAmount(1); |
830 | 910 | doDelete("/api/widgetsBundle/" + savedWidgetsBundle.getId().getId().toString()) |
831 | 911 | .andExpect(status().isOk()); |
832 | - edgeImitator.waitForMessages(); | |
833 | - | |
912 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
834 | 913 | latestMessage = edgeImitator.getLatestMessage(); |
835 | 914 | Assert.assertTrue(latestMessage instanceof WidgetsBundleUpdateMsg); |
836 | 915 | widgetsBundleUpdateMsg = (WidgetsBundleUpdateMsg) latestMessage; |
... | ... | @@ -843,15 +922,15 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
843 | 922 | |
844 | 923 | private void testTimeseries() throws Exception { |
845 | 924 | log.info("Testing timeseries"); |
846 | - Device device = findDeviceByName("Edge Device 1"); | |
847 | 925 | |
926 | + edgeImitator.expectMessageAmount(1); | |
927 | + Device device = findDeviceByName("Edge Device 1"); | |
848 | 928 | String timeseriesData = "{\"data\":{\"temperature\":25},\"ts\":" + System.currentTimeMillis() + "}"; |
849 | 929 | JsonNode timeseriesEntityData = mapper.readTree(timeseriesData); |
850 | - EdgeEvent edgeEvent1 = constructEdgeEvent(tenantId, edge.getId(), EdgeEventActionType.TIMESERIES_UPDATED, device.getId().getId(), EdgeEventType.DEVICE, timeseriesEntityData); | |
851 | - edgeImitator.expectMessageAmount(1); | |
852 | - edgeEventService.saveAsync(edgeEvent1); | |
930 | + EdgeEvent edgeEvent = constructEdgeEvent(tenantId, edge.getId(), EdgeEventActionType.TIMESERIES_UPDATED, device.getId().getId(), EdgeEventType.DEVICE, timeseriesEntityData); | |
931 | + edgeEventService.saveAsync(edgeEvent); | |
853 | 932 | clusterService.onEdgeEventUpdate(tenantId, edge.getId()); |
854 | - edgeImitator.waitForMessages(); | |
933 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
855 | 934 | |
856 | 935 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
857 | 936 | Assert.assertTrue(latestMessage instanceof EntityDataProto); |
... | ... | @@ -890,7 +969,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
890 | 969 | edgeImitator.expectMessageAmount(1); |
891 | 970 | edgeEventService.saveAsync(edgeEvent); |
892 | 971 | clusterService.onEdgeEventUpdate(tenantId, edge.getId()); |
893 | - edgeImitator.waitForMessages(); | |
972 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
894 | 973 | |
895 | 974 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
896 | 975 | Assert.assertTrue(latestMessage instanceof EntityDataProto); |
... | ... | @@ -916,7 +995,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
916 | 995 | edgeImitator.expectMessageAmount(1); |
917 | 996 | edgeEventService.saveAsync(edgeEvent); |
918 | 997 | clusterService.onEdgeEventUpdate(tenantId, edge.getId()); |
919 | - edgeImitator.waitForMessages(); | |
998 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
920 | 999 | |
921 | 1000 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
922 | 1001 | Assert.assertTrue(latestMessage instanceof EntityDataProto); |
... | ... | @@ -941,7 +1020,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
941 | 1020 | edgeImitator.expectMessageAmount(1); |
942 | 1021 | edgeEventService.saveAsync(edgeEvent1); |
943 | 1022 | clusterService.onEdgeEventUpdate(tenantId, edge.getId()); |
944 | - edgeImitator.waitForMessages(); | |
1023 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
945 | 1024 | |
946 | 1025 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
947 | 1026 | Assert.assertTrue(latestMessage instanceof EntityDataProto); |
... | ... | @@ -996,8 +1075,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
996 | 1075 | |
997 | 1076 | edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build()); |
998 | 1077 | |
999 | - edgeImitator.waitForResponses(); | |
1000 | - edgeImitator.waitForMessages(); | |
1078 | + Assert.assertTrue(edgeImitator.waitForResponses()); | |
1079 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
1001 | 1080 | |
1002 | 1081 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
1003 | 1082 | Assert.assertTrue(latestMessage instanceof DeviceUpdateMsg); |
... | ... | @@ -1013,7 +1092,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1013 | 1092 | |
1014 | 1093 | private void sendDeviceWithNameThatAlreadyExistsOnCloud() throws Exception { |
1015 | 1094 | String deviceOnCloudName = RandomStringUtils.randomAlphanumeric(15); |
1016 | - Device deviceOnCloud = saveDevice(deviceOnCloudName); | |
1095 | + Device deviceOnCloud = saveDevice(deviceOnCloudName, "Default"); | |
1017 | 1096 | |
1018 | 1097 | UUID uuid = Uuids.timeBased(); |
1019 | 1098 | |
... | ... | @@ -1033,8 +1112,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1033 | 1112 | |
1034 | 1113 | edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build()); |
1035 | 1114 | |
1036 | - edgeImitator.waitForResponses(); | |
1037 | - edgeImitator.waitForMessages(); | |
1115 | + Assert.assertTrue(edgeImitator.waitForResponses()); | |
1116 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
1038 | 1117 | |
1039 | 1118 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
1040 | 1119 | Assert.assertTrue(latestMessage instanceof DeviceUpdateMsg); |
... | ... | @@ -1063,7 +1142,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1063 | 1142 | |
1064 | 1143 | edgeImitator.expectMessageAmount(1); |
1065 | 1144 | doPost("/api/relation", relation); |
1066 | - edgeImitator.waitForMessages(); | |
1145 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
1067 | 1146 | |
1068 | 1147 | UplinkMsg.Builder uplinkMsgBuilder = UplinkMsg.newBuilder(); |
1069 | 1148 | RelationRequestMsg.Builder relationRequestMsgBuilder = RelationRequestMsg.newBuilder(); |
... | ... | @@ -1078,8 +1157,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1078 | 1157 | edgeImitator.expectResponsesAmount(1); |
1079 | 1158 | edgeImitator.expectMessageAmount(1); |
1080 | 1159 | edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build()); |
1081 | - edgeImitator.waitForResponses(); | |
1082 | - edgeImitator.waitForMessages(); | |
1160 | + Assert.assertTrue(edgeImitator.waitForResponses()); | |
1161 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
1083 | 1162 | |
1084 | 1163 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
1085 | 1164 | Assert.assertTrue(latestMessage instanceof RelationUpdateMsg); |
... | ... | @@ -1115,7 +1194,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1115 | 1194 | |
1116 | 1195 | edgeImitator.expectResponsesAmount(1); |
1117 | 1196 | edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build()); |
1118 | - edgeImitator.waitForResponses(); | |
1197 | + Assert.assertTrue(edgeImitator.waitForResponses()); | |
1119 | 1198 | |
1120 | 1199 | |
1121 | 1200 | List<AlarmInfo> alarms = doGetTypedWithPageLink("/api/alarm/{entityType}/{entityId}?", |
... | ... | @@ -1158,7 +1237,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1158 | 1237 | |
1159 | 1238 | edgeImitator.expectResponsesAmount(1); |
1160 | 1239 | edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build()); |
1161 | - edgeImitator.waitForResponses(); | |
1240 | + Assert.assertTrue(edgeImitator.waitForResponses()); | |
1162 | 1241 | |
1163 | 1242 | EntityRelation relation = doGet("/api/relation?" + |
1164 | 1243 | "&fromId=" + device2.getId().getId().toString() + |
... | ... | @@ -1212,7 +1291,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1212 | 1291 | testAutoGeneratedCodeByProtobuf(uplinkMsgBuilder2); |
1213 | 1292 | |
1214 | 1293 | edgeImitator.sendUplinkMsg(uplinkMsgBuilder2.build()); |
1215 | - edgeImitator.waitForResponses(); | |
1294 | + Assert.assertTrue(edgeImitator.waitForResponses()); | |
1216 | 1295 | |
1217 | 1296 | // Wait before device attributes saved to database before requesting them from controller |
1218 | 1297 | Thread.sleep(1000); |
... | ... | @@ -1243,8 +1322,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1243 | 1322 | edgeImitator.expectResponsesAmount(1); |
1244 | 1323 | edgeImitator.expectMessageAmount(1); |
1245 | 1324 | edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build()); |
1246 | - edgeImitator.waitForResponses(); | |
1247 | - edgeImitator.waitForMessages(); | |
1325 | + Assert.assertTrue(edgeImitator.waitForResponses()); | |
1326 | + Assert.assertTrue(edgeImitator.waitForMessages());; | |
1248 | 1327 | |
1249 | 1328 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
1250 | 1329 | Assert.assertTrue(latestMessage instanceof RuleChainMetadataUpdateMsg); |
... | ... | @@ -1270,8 +1349,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1270 | 1349 | edgeImitator.expectResponsesAmount(1); |
1271 | 1350 | edgeImitator.expectMessageAmount(1); |
1272 | 1351 | edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build()); |
1273 | - edgeImitator.waitForResponses(); | |
1274 | - edgeImitator.waitForMessages(); | |
1352 | + Assert.assertTrue(edgeImitator.waitForResponses()); | |
1353 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
1275 | 1354 | |
1276 | 1355 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
1277 | 1356 | Assert.assertTrue(latestMessage instanceof UserCredentialsUpdateMsg); |
... | ... | @@ -1299,8 +1378,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1299 | 1378 | edgeImitator.expectResponsesAmount(1); |
1300 | 1379 | edgeImitator.expectMessageAmount(1); |
1301 | 1380 | edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build()); |
1302 | - edgeImitator.waitForResponses(); | |
1303 | - edgeImitator.waitForMessages(); | |
1381 | + Assert.assertTrue(edgeImitator.waitForResponses()); | |
1382 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
1304 | 1383 | |
1305 | 1384 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
1306 | 1385 | Assert.assertTrue(latestMessage instanceof DeviceCredentialsUpdateMsg); |
... | ... | @@ -1327,7 +1406,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1327 | 1406 | |
1328 | 1407 | edgeImitator.expectResponsesAmount(1); |
1329 | 1408 | edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build()); |
1330 | - edgeImitator.waitForResponses(); | |
1409 | + Assert.assertTrue(edgeImitator.waitForResponses()); | |
1331 | 1410 | } |
1332 | 1411 | |
1333 | 1412 | private void sendDeviceRpcResponse() throws Exception { |
... | ... | @@ -1352,7 +1431,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1352 | 1431 | |
1353 | 1432 | edgeImitator.expectResponsesAmount(1); |
1354 | 1433 | edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build()); |
1355 | - edgeImitator.waitForResponses(); | |
1434 | + Assert.assertTrue(edgeImitator.waitForResponses()); | |
1356 | 1435 | } |
1357 | 1436 | |
1358 | 1437 | private void sendAttributesRequest() throws Exception { |
... | ... | @@ -1383,8 +1462,8 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1383 | 1462 | edgeImitator.expectResponsesAmount(1); |
1384 | 1463 | edgeImitator.expectMessageAmount(1); |
1385 | 1464 | edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build()); |
1386 | - edgeImitator.waitForResponses(); | |
1387 | - edgeImitator.waitForMessages(); | |
1465 | + Assert.assertTrue(edgeImitator.waitForResponses()); | |
1466 | + Assert.assertTrue(edgeImitator.waitForMessages()); | |
1388 | 1467 | |
1389 | 1468 | AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
1390 | 1469 | Assert.assertTrue(latestMessage instanceof EntityDataProto); |
... | ... | @@ -1416,7 +1495,7 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1416 | 1495 | |
1417 | 1496 | edgeImitator.expectResponsesAmount(1); |
1418 | 1497 | edgeImitator.sendUplinkMsg(upLinkMsgBuilder.build()); |
1419 | - edgeImitator.waitForResponses(); | |
1498 | + Assert.assertTrue(edgeImitator.waitForResponses()); | |
1420 | 1499 | device = doGet("/api/device/" + device.getId().getId().toString(), Device.class); |
1421 | 1500 | Assert.assertNotNull(device); |
1422 | 1501 | List<Device> edgeDevices = doGetTypedWithPageLink("/api/edge/" + edge.getId().getId().toString() + "/devices?", |
... | ... | @@ -1428,7 +1507,11 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1428 | 1507 | private void installation() throws Exception { |
1429 | 1508 | edge = doPost("/api/edge", constructEdge("Test Edge", "test"), Edge.class); |
1430 | 1509 | |
1431 | - Device savedDevice = saveDevice("Edge Device 1"); | |
1510 | + DeviceProfile deviceProfile = this.createDeviceProfile(CUSTOM_DEVICE_PROFILE_NAME, null); | |
1511 | + extendDeviceProfileData(deviceProfile); | |
1512 | + doPost("/api/deviceProfile", deviceProfile, DeviceProfile.class); | |
1513 | + | |
1514 | + Device savedDevice = saveDevice("Edge Device 1", CUSTOM_DEVICE_PROFILE_NAME); | |
1432 | 1515 | doPost("/api/edge/" + edge.getId().getId().toString() |
1433 | 1516 | + "/device/" + savedDevice.getId().getId().toString(), Device.class); |
1434 | 1517 | |
... | ... | @@ -1437,6 +1520,35 @@ abstract public class BaseEdgeTest extends AbstractControllerTest { |
1437 | 1520 | + "/asset/" + savedAsset.getId().getId().toString(), Asset.class); |
1438 | 1521 | } |
1439 | 1522 | |
1523 | + private void extendDeviceProfileData(DeviceProfile deviceProfile) { | |
1524 | + DeviceProfileData profileData = deviceProfile.getProfileData(); | |
1525 | + List<DeviceProfileAlarm> alarms = new ArrayList<>(); | |
1526 | + DeviceProfileAlarm deviceProfileAlarm = new DeviceProfileAlarm(); | |
1527 | + deviceProfileAlarm.setAlarmType("High Temperature"); | |
1528 | + AlarmRule alarmRule = new AlarmRule(); | |
1529 | + alarmRule.setAlarmDetails("Alarm Details"); | |
1530 | + AlarmCondition alarmCondition = new AlarmCondition(); | |
1531 | + alarmCondition.setSpec(new SimpleAlarmConditionSpec()); | |
1532 | + List<AlarmConditionFilter> condition = new ArrayList<>(); | |
1533 | + AlarmConditionFilter alarmConditionFilter = new AlarmConditionFilter(); | |
1534 | + alarmConditionFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.ATTRIBUTE, "temperature")); | |
1535 | + NumericFilterPredicate predicate = new NumericFilterPredicate(); | |
1536 | + predicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER); | |
1537 | + predicate.setValue(new FilterPredicateValue<>(55.0)); | |
1538 | + alarmConditionFilter.setPredicate(predicate); | |
1539 | + alarmConditionFilter.setValueType(EntityKeyValueType.NUMERIC); | |
1540 | + condition.add(alarmConditionFilter); | |
1541 | + alarmCondition.setCondition(condition); | |
1542 | + alarmRule.setCondition(alarmCondition); | |
1543 | + deviceProfileAlarm.setClearRule(alarmRule); | |
1544 | + TreeMap<AlarmSeverity, AlarmRule> createRules = new TreeMap<>(); | |
1545 | + createRules.put(AlarmSeverity.CRITICAL, alarmRule); | |
1546 | + deviceProfileAlarm.setCreateRules(createRules); | |
1547 | + alarms.add(deviceProfileAlarm); | |
1548 | + profileData.setAlarms(alarms); | |
1549 | + profileData.setProvisionConfiguration(new AllowCreateNewDevicesDeviceProfileProvisionConfiguration("123")); | |
1550 | + } | |
1551 | + | |
1440 | 1552 | private EdgeEvent constructEdgeEvent(TenantId tenantId, EdgeId edgeId, EdgeEventActionType edgeEventAction, UUID entityId, EdgeEventType edgeEventType, JsonNode entityBody) { |
1441 | 1553 | EdgeEvent edgeEvent = new EdgeEvent(); |
1442 | 1554 | edgeEvent.setEdgeId(edgeId); | ... | ... |
... | ... | @@ -32,6 +32,7 @@ import org.thingsboard.server.gen.edge.CustomerUpdateMsg; |
32 | 32 | import org.thingsboard.server.gen.edge.DashboardUpdateMsg; |
33 | 33 | import org.thingsboard.server.gen.edge.DeviceCredentialsRequestMsg; |
34 | 34 | import org.thingsboard.server.gen.edge.DeviceCredentialsUpdateMsg; |
35 | +import org.thingsboard.server.gen.edge.DeviceProfileUpdateMsg; | |
35 | 36 | import org.thingsboard.server.gen.edge.DeviceRpcCallMsg; |
36 | 37 | import org.thingsboard.server.gen.edge.DeviceUpdateMsg; |
37 | 38 | import org.thingsboard.server.gen.edge.DownlinkMsg; |
... | ... | @@ -58,6 +59,7 @@ import java.util.concurrent.CountDownLatch; |
58 | 59 | import java.util.concurrent.TimeUnit; |
59 | 60 | import java.util.concurrent.locks.Lock; |
60 | 61 | import java.util.concurrent.locks.ReentrantLock; |
62 | +import java.util.stream.Collectors; | |
61 | 63 | |
62 | 64 | @Slf4j |
63 | 65 | public class EdgeImitator { |
... | ... | @@ -154,88 +156,93 @@ public class EdgeImitator { |
154 | 156 | |
155 | 157 | private ListenableFuture<List<Void>> processDownlinkMsg(DownlinkMsg downlinkMsg) { |
156 | 158 | List<ListenableFuture<Void>> result = new ArrayList<>(); |
157 | - if (downlinkMsg.getDeviceUpdateMsgList() != null && !downlinkMsg.getDeviceUpdateMsgList().isEmpty()) { | |
159 | + if (downlinkMsg.getDeviceUpdateMsgCount() > 0) { | |
158 | 160 | for (DeviceUpdateMsg deviceUpdateMsg: downlinkMsg.getDeviceUpdateMsgList()) { |
159 | 161 | result.add(saveDownlinkMsg(deviceUpdateMsg)); |
160 | 162 | } |
161 | 163 | } |
162 | - if (downlinkMsg.getDeviceCredentialsUpdateMsgList() != null && !downlinkMsg.getDeviceCredentialsUpdateMsgList().isEmpty()) { | |
164 | + if (downlinkMsg.getDeviceProfileUpdateMsgCount() > 0) { | |
165 | + for (DeviceProfileUpdateMsg deviceProfileUpdateMsg : downlinkMsg.getDeviceProfileUpdateMsgList()) { | |
166 | + result.add(saveDownlinkMsg(deviceProfileUpdateMsg)); | |
167 | + } | |
168 | + } | |
169 | + if (downlinkMsg.getDeviceCredentialsUpdateMsgCount() > 0) { | |
163 | 170 | for (DeviceCredentialsUpdateMsg deviceCredentialsUpdateMsg: downlinkMsg.getDeviceCredentialsUpdateMsgList()) { |
164 | 171 | result.add(saveDownlinkMsg(deviceCredentialsUpdateMsg)); |
165 | 172 | } |
166 | 173 | } |
167 | - if (downlinkMsg.getAssetUpdateMsgList() != null && !downlinkMsg.getAssetUpdateMsgList().isEmpty()) { | |
174 | + if (downlinkMsg.getAssetUpdateMsgCount() > 0) { | |
168 | 175 | for (AssetUpdateMsg assetUpdateMsg: downlinkMsg.getAssetUpdateMsgList()) { |
169 | 176 | result.add(saveDownlinkMsg(assetUpdateMsg)); |
170 | 177 | } |
171 | 178 | } |
172 | - if (downlinkMsg.getRuleChainUpdateMsgList() != null && !downlinkMsg.getRuleChainUpdateMsgList().isEmpty()) { | |
179 | + if (downlinkMsg.getRuleChainUpdateMsgCount() > 0) { | |
173 | 180 | for (RuleChainUpdateMsg ruleChainUpdateMsg: downlinkMsg.getRuleChainUpdateMsgList()) { |
174 | 181 | result.add(saveDownlinkMsg(ruleChainUpdateMsg)); |
175 | 182 | } |
176 | 183 | } |
177 | - if (downlinkMsg.getRuleChainMetadataUpdateMsgList() != null && !downlinkMsg.getRuleChainMetadataUpdateMsgList().isEmpty()) { | |
184 | + if (downlinkMsg.getRuleChainMetadataUpdateMsgCount() > 0) { | |
178 | 185 | for (RuleChainMetadataUpdateMsg ruleChainMetadataUpdateMsg: downlinkMsg.getRuleChainMetadataUpdateMsgList()) { |
179 | 186 | result.add(saveDownlinkMsg(ruleChainMetadataUpdateMsg)); |
180 | 187 | } |
181 | 188 | } |
182 | - if (downlinkMsg.getDashboardUpdateMsgList() != null && !downlinkMsg.getDashboardUpdateMsgList().isEmpty()) { | |
189 | + if (downlinkMsg.getDashboardUpdateMsgCount() > 0) { | |
183 | 190 | for (DashboardUpdateMsg dashboardUpdateMsg: downlinkMsg.getDashboardUpdateMsgList()) { |
184 | 191 | result.add(saveDownlinkMsg(dashboardUpdateMsg)); |
185 | 192 | } |
186 | 193 | } |
187 | - if (downlinkMsg.getRelationUpdateMsgList() != null && !downlinkMsg.getRelationUpdateMsgList().isEmpty()) { | |
194 | + if (downlinkMsg.getRelationUpdateMsgCount() > 0) { | |
188 | 195 | for (RelationUpdateMsg relationUpdateMsg: downlinkMsg.getRelationUpdateMsgList()) { |
189 | 196 | result.add(saveDownlinkMsg(relationUpdateMsg)); |
190 | 197 | } |
191 | 198 | } |
192 | - if (downlinkMsg.getAlarmUpdateMsgList() != null && !downlinkMsg.getAlarmUpdateMsgList().isEmpty()) { | |
199 | + if (downlinkMsg.getAlarmUpdateMsgCount() > 0) { | |
193 | 200 | for (AlarmUpdateMsg alarmUpdateMsg: downlinkMsg.getAlarmUpdateMsgList()) { |
194 | 201 | result.add(saveDownlinkMsg(alarmUpdateMsg)); |
195 | 202 | } |
196 | 203 | } |
197 | - if (downlinkMsg.getEntityDataList() != null && !downlinkMsg.getEntityDataList().isEmpty()) { | |
204 | + if (downlinkMsg.getEntityDataCount() > 0) { | |
198 | 205 | for (EntityDataProto entityData: downlinkMsg.getEntityDataList()) { |
199 | 206 | result.add(saveDownlinkMsg(entityData)); |
200 | 207 | } |
201 | 208 | } |
202 | - if (downlinkMsg.getEntityViewUpdateMsgList() != null && !downlinkMsg.getEntityViewUpdateMsgList().isEmpty()) { | |
209 | + if (downlinkMsg.getEntityViewUpdateMsgCount() > 0) { | |
203 | 210 | for (EntityViewUpdateMsg entityViewUpdateMsg: downlinkMsg.getEntityViewUpdateMsgList()) { |
204 | 211 | result.add(saveDownlinkMsg(entityViewUpdateMsg)); |
205 | 212 | } |
206 | 213 | } |
207 | - if (downlinkMsg.getCustomerUpdateMsgList() != null && !downlinkMsg.getCustomerUpdateMsgList().isEmpty()) { | |
214 | + if (downlinkMsg.getCustomerUpdateMsgCount() > 0) { | |
208 | 215 | for (CustomerUpdateMsg customerUpdateMsg: downlinkMsg.getCustomerUpdateMsgList()) { |
209 | 216 | result.add(saveDownlinkMsg(customerUpdateMsg)); |
210 | 217 | } |
211 | 218 | } |
212 | - if (downlinkMsg.getWidgetsBundleUpdateMsgList() != null && !downlinkMsg.getWidgetsBundleUpdateMsgList().isEmpty()) { | |
219 | + if (downlinkMsg.getWidgetsBundleUpdateMsgCount() > 0) { | |
213 | 220 | for (WidgetsBundleUpdateMsg widgetsBundleUpdateMsg: downlinkMsg.getWidgetsBundleUpdateMsgList()) { |
214 | 221 | result.add(saveDownlinkMsg(widgetsBundleUpdateMsg)); |
215 | 222 | } |
216 | 223 | } |
217 | - if (downlinkMsg.getWidgetTypeUpdateMsgList() != null && !downlinkMsg.getWidgetTypeUpdateMsgList().isEmpty()) { | |
224 | + if (downlinkMsg.getWidgetTypeUpdateMsgCount() > 0) { | |
218 | 225 | for (WidgetTypeUpdateMsg widgetTypeUpdateMsg: downlinkMsg.getWidgetTypeUpdateMsgList()) { |
219 | 226 | result.add(saveDownlinkMsg(widgetTypeUpdateMsg)); |
220 | 227 | } |
221 | 228 | } |
222 | - if (downlinkMsg.getUserUpdateMsgList() != null && !downlinkMsg.getUserUpdateMsgList().isEmpty()) { | |
229 | + if (downlinkMsg.getUserUpdateMsgCount() > 0) { | |
223 | 230 | for (UserUpdateMsg userUpdateMsg: downlinkMsg.getUserUpdateMsgList()) { |
224 | 231 | onUserUpdate(userUpdateMsg); |
225 | 232 | result.add(saveDownlinkMsg(userUpdateMsg)); |
226 | 233 | } |
227 | 234 | } |
228 | - if (downlinkMsg.getUserCredentialsUpdateMsgList() != null && !downlinkMsg.getUserCredentialsUpdateMsgList().isEmpty()) { | |
235 | + if (downlinkMsg.getUserCredentialsUpdateMsgCount() > 0) { | |
229 | 236 | for (UserCredentialsUpdateMsg userCredentialsUpdateMsg: downlinkMsg.getUserCredentialsUpdateMsgList()) { |
230 | 237 | result.add(saveDownlinkMsg(userCredentialsUpdateMsg)); |
231 | 238 | } |
232 | 239 | } |
233 | - if (downlinkMsg.getDeviceRpcCallMsgList() != null && !downlinkMsg.getDeviceRpcCallMsgList().isEmpty()) { | |
240 | + if (downlinkMsg.getDeviceRpcCallMsgCount() > 0) { | |
234 | 241 | for (DeviceRpcCallMsg deviceRpcCallMsg: downlinkMsg.getDeviceRpcCallMsgList()) { |
235 | 242 | result.add(saveDownlinkMsg(deviceRpcCallMsg)); |
236 | 243 | } |
237 | 244 | } |
238 | - if (downlinkMsg.getDeviceCredentialsRequestMsgList() != null && !downlinkMsg.getDeviceCredentialsRequestMsgList().isEmpty()) { | |
245 | + if (downlinkMsg.getDeviceCredentialsRequestMsgCount() > 0) { | |
239 | 246 | for (DeviceCredentialsRequestMsg deviceCredentialsRequestMsg: downlinkMsg.getDeviceCredentialsRequestMsgList()) { |
240 | 247 | result.add(saveDownlinkMsg(deviceCredentialsRequestMsg)); |
241 | 248 | } |
... | ... | @@ -256,15 +263,21 @@ public class EdgeImitator { |
256 | 263 | return Futures.immediateFuture(null); |
257 | 264 | } |
258 | 265 | |
259 | - public void waitForMessages() throws InterruptedException { | |
260 | - messagesLatch.await(5, TimeUnit.SECONDS); | |
266 | + public boolean waitForMessages() throws InterruptedException { | |
267 | + return waitForMessages(5); | |
268 | + } | |
269 | + | |
270 | + public boolean waitForMessages(int timeout) throws InterruptedException { | |
271 | + return messagesLatch.await(timeout, TimeUnit.SECONDS); | |
261 | 272 | } |
262 | 273 | |
263 | 274 | public void expectMessageAmount(int messageAmount) { |
264 | 275 | messagesLatch = new CountDownLatch(messageAmount); |
265 | 276 | } |
266 | 277 | |
267 | - public void waitForResponses() throws InterruptedException { responsesLatch.await(5, TimeUnit.SECONDS); } | |
278 | + public boolean waitForResponses() throws InterruptedException { | |
279 | + return responsesLatch.await(5, TimeUnit.SECONDS); | |
280 | + } | |
268 | 281 | |
269 | 282 | public void expectResponsesAmount(int messageAmount) { |
270 | 283 | responsesLatch = new CountDownLatch(messageAmount); |
... | ... | @@ -282,6 +295,18 @@ public class EdgeImitator { |
282 | 295 | return result; |
283 | 296 | } |
284 | 297 | |
298 | + @SuppressWarnings("unchecked") | |
299 | + public <T extends AbstractMessage> List<T> findAllMessagesByType(Class<T> tClass) { | |
300 | + List<T> result; | |
301 | + try { | |
302 | + lock.lock(); | |
303 | + result = (List<T>) downlinkMsgs.stream().filter(downlinkMsg -> downlinkMsg.getClass().isAssignableFrom(tClass)).collect(Collectors.toList()); | |
304 | + } finally { | |
305 | + lock.unlock(); | |
306 | + } | |
307 | + return result; | |
308 | + } | |
309 | + | |
285 | 310 | public AbstractMessage getLatestMessage() { |
286 | 311 | return downlinkMsgs.get(downlinkMsgs.size() - 1); |
287 | 312 | } | ... | ... |