|
|
|
@ -158,6 +158,95 @@ public class BaseWebsocketApiTest extends AbstractWebsocketTest { |
|
|
|
Assert.assertEquals(new TsValue(dataPoint3.getTs(), dataPoint3.getValueAsString()), tsArray[2]); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testEntityDataLatestWidgetFlow() throws Exception { |
|
|
|
Device device = new Device(); |
|
|
|
device.setName("Device"); |
|
|
|
device.setType("default"); |
|
|
|
device.setLabel("testLabel" + (int) (Math.random() * 1000)); |
|
|
|
device = doPost("/api/device", device, Device.class); |
|
|
|
|
|
|
|
long now = System.currentTimeMillis(); |
|
|
|
|
|
|
|
DeviceTypeFilter dtf = new DeviceTypeFilter(); |
|
|
|
dtf.setDeviceNameFilter("D"); |
|
|
|
dtf.setDeviceType("default"); |
|
|
|
EntityDataQuery edq = new EntityDataQuery(dtf, new EntityDataPageLink(1, 0, null, null), Collections.emptyList(), |
|
|
|
Collections.singletonList(new EntityKey(EntityKeyType.TIME_SERIES, "temperature")), Collections.emptyList()); |
|
|
|
|
|
|
|
EntityDataCmd cmd = new EntityDataCmd(1, edq, null, null, null); |
|
|
|
|
|
|
|
TelemetryPluginCmdsWrapper wrapper = new TelemetryPluginCmdsWrapper(); |
|
|
|
wrapper.setEntityDataCmds(Collections.singletonList(cmd)); |
|
|
|
|
|
|
|
wsClient.send(mapper.writeValueAsString(wrapper)); |
|
|
|
String msg = wsClient.waitForReply(); |
|
|
|
EntityDataUpdate update = mapper.readValue(msg, EntityDataUpdate.class); |
|
|
|
Assert.assertEquals(1, update.getCmdId()); |
|
|
|
PageData<EntityData> pageData = update.getData(); |
|
|
|
Assert.assertNotNull(pageData); |
|
|
|
Assert.assertEquals(1, pageData.getData().size()); |
|
|
|
Assert.assertEquals(device.getId(), pageData.getData().get(0).getEntityId()); |
|
|
|
Assert.assertNotNull(pageData.getData().get(0).getLatest().get(EntityKeyType.TIME_SERIES).get("temperature")); |
|
|
|
Assert.assertEquals(0, pageData.getData().get(0).getLatest().get(EntityKeyType.TIME_SERIES).get("temperature").getTs()); |
|
|
|
Assert.assertEquals("", pageData.getData().get(0).getLatest().get(EntityKeyType.TIME_SERIES).get("temperature").getValue()); |
|
|
|
|
|
|
|
TsKvEntry dataPoint1 = new BasicTsKvEntry(now - TimeUnit.MINUTES.toMillis(1), new LongDataEntry("temperature", 42L)); |
|
|
|
List<TsKvEntry> tsData = Arrays.asList(dataPoint1); |
|
|
|
sendTelemetry(device, tsData); |
|
|
|
|
|
|
|
Thread.sleep(100); |
|
|
|
|
|
|
|
LatestValueCmd latestCmd = new LatestValueCmd(); |
|
|
|
latestCmd.setKeys(Collections.singletonList(new EntityKey(EntityKeyType.TIME_SERIES, "temperature"))); |
|
|
|
cmd = new EntityDataCmd(1, null, null, latestCmd, null); |
|
|
|
wrapper = new TelemetryPluginCmdsWrapper(); |
|
|
|
wrapper.setEntityDataCmds(Collections.singletonList(cmd)); |
|
|
|
|
|
|
|
wsClient.send(mapper.writeValueAsString(wrapper)); |
|
|
|
msg = wsClient.waitForReply(); |
|
|
|
update = mapper.readValue(msg, EntityDataUpdate.class); |
|
|
|
|
|
|
|
Assert.assertEquals(1, update.getCmdId()); |
|
|
|
|
|
|
|
List<EntityData> listData = update.getUpdate(); |
|
|
|
Assert.assertNotNull(listData); |
|
|
|
Assert.assertEquals(1, listData.size()); |
|
|
|
Assert.assertEquals(device.getId(), listData.get(0).getEntityId()); |
|
|
|
Assert.assertNotNull(listData.get(0).getLatest().get(EntityKeyType.TIME_SERIES)); |
|
|
|
TsValue tsValue = listData.get(0).getLatest().get(EntityKeyType.TIME_SERIES).get("temperature"); |
|
|
|
Assert.assertEquals(new TsValue(dataPoint1.getTs(), dataPoint1.getValueAsString()), tsValue); |
|
|
|
|
|
|
|
now = System.currentTimeMillis(); |
|
|
|
TsKvEntry dataPoint2 = new BasicTsKvEntry(now, new LongDataEntry("temperature", 52L)); |
|
|
|
|
|
|
|
wsClient.registerWaitForUpdate(); |
|
|
|
sendTelemetry(device, Arrays.asList(dataPoint2)); |
|
|
|
msg = wsClient.waitForUpdate(); |
|
|
|
|
|
|
|
update = mapper.readValue(msg, EntityDataUpdate.class); |
|
|
|
Assert.assertEquals(1, update.getCmdId()); |
|
|
|
List<EntityData> eData = update.getUpdate(); |
|
|
|
Assert.assertNotNull(eData); |
|
|
|
Assert.assertEquals(1, eData.size()); |
|
|
|
Assert.assertEquals(device.getId(), eData.get(0).getEntityId()); |
|
|
|
Assert.assertNotNull(eData.get(0).getLatest().get(EntityKeyType.TIME_SERIES)); |
|
|
|
tsValue = eData.get(0).getLatest().get(EntityKeyType.TIME_SERIES).get("temperature"); |
|
|
|
Assert.assertEquals(new TsValue(dataPoint2.getTs(), dataPoint2.getValueAsString()), tsValue); |
|
|
|
|
|
|
|
//Sending update from the past, while latest value has new timestamp;
|
|
|
|
wsClient.registerWaitForUpdate(); |
|
|
|
sendTelemetry(device, Arrays.asList(dataPoint1)); |
|
|
|
msg = wsClient.waitForUpdate(TimeUnit.SECONDS.toMillis(1)); |
|
|
|
Assert.assertNull(msg); |
|
|
|
|
|
|
|
//Sending duplicate update again
|
|
|
|
wsClient.registerWaitForUpdate(); |
|
|
|
sendTelemetry(device, Arrays.asList(dataPoint2)); |
|
|
|
msg = wsClient.waitForUpdate(TimeUnit.SECONDS.toMillis(1)); |
|
|
|
Assert.assertNull(msg); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testEntityDataLatestTsWsCmd() throws Exception { |
|
|
|
Device device = new Device(); |
|
|
|
|