|
|
@ -17,7 +17,10 @@ package org.thingsboard.server.dao.service.timeseries; |
|
|
|
|
|
|
|
|
import com.datastax.oss.driver.api.core.uuid.Uuids; |
|
|
import com.datastax.oss.driver.api.core.uuid.Uuids; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
import org.junit.*; |
|
|
import org.junit.After; |
|
|
|
|
|
import org.junit.Assert; |
|
|
|
|
|
import org.junit.Before; |
|
|
|
|
|
import org.junit.Test; |
|
|
import org.thingsboard.server.common.data.EntityView; |
|
|
import org.thingsboard.server.common.data.EntityView; |
|
|
import org.thingsboard.server.common.data.Tenant; |
|
|
import org.thingsboard.server.common.data.Tenant; |
|
|
import org.thingsboard.server.common.data.id.DeviceId; |
|
|
import org.thingsboard.server.common.data.id.DeviceId; |
|
|
@ -42,6 +45,8 @@ import java.util.Arrays; |
|
|
import java.util.Collections; |
|
|
import java.util.Collections; |
|
|
import java.util.List; |
|
|
import java.util.List; |
|
|
import java.util.concurrent.ExecutionException; |
|
|
import java.util.concurrent.ExecutionException; |
|
|
|
|
|
import java.util.concurrent.TimeUnit; |
|
|
|
|
|
import java.util.concurrent.TimeoutException; |
|
|
|
|
|
|
|
|
import static org.junit.Assert.assertEquals; |
|
|
import static org.junit.Assert.assertEquals; |
|
|
import static org.junit.Assert.assertNotNull; |
|
|
import static org.junit.Assert.assertNotNull; |
|
|
@ -52,6 +57,7 @@ import static org.junit.Assert.assertNotNull; |
|
|
|
|
|
|
|
|
@Slf4j |
|
|
@Slf4j |
|
|
public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
|
|
|
static final int MAX_TIMEOUT = 30; |
|
|
|
|
|
|
|
|
private static final String STRING_KEY = "stringKey"; |
|
|
private static final String STRING_KEY = "stringKey"; |
|
|
private static final String LONG_KEY = "longKey"; |
|
|
private static final String LONG_KEY = "longKey"; |
|
|
@ -93,8 +99,8 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
testLatestTsAndVerify(deviceId); |
|
|
testLatestTsAndVerify(deviceId); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private void testLatestTsAndVerify(EntityId entityId) throws ExecutionException, InterruptedException { |
|
|
private void testLatestTsAndVerify(EntityId entityId) throws ExecutionException, InterruptedException, TimeoutException { |
|
|
List<TsKvEntry> tsList = tsService.findAllLatest(tenantId, entityId).get(); |
|
|
List<TsKvEntry> tsList = tsService.findAllLatest(tenantId, entityId).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
|
|
|
|
|
|
assertNotNull(tsList); |
|
|
assertNotNull(tsList); |
|
|
assertEquals(4, tsList.size()); |
|
|
assertEquals(4, tsList.size()); |
|
|
@ -134,11 +140,24 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
saveEntries(deviceId, TS - 1); |
|
|
saveEntries(deviceId, TS - 1); |
|
|
saveEntries(deviceId, TS); |
|
|
saveEntries(deviceId, TS); |
|
|
|
|
|
|
|
|
List<TsKvEntry> entries = tsService.findLatest(tenantId, deviceId, Collections.singleton(STRING_KEY)).get(); |
|
|
List<TsKvEntry> entries = tsService.findLatest(tenantId, deviceId, Collections.singleton(STRING_KEY)).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
Assert.assertEquals(1, entries.size()); |
|
|
Assert.assertEquals(1, entries.size()); |
|
|
Assert.assertEquals(toTsEntry(TS, stringKvEntry), entries.get(0)); |
|
|
Assert.assertEquals(toTsEntry(TS, stringKvEntry), entries.get(0)); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
public void testFindLatestWithoutLatestUpdate() throws Exception { |
|
|
|
|
|
DeviceId deviceId = new DeviceId(Uuids.timeBased()); |
|
|
|
|
|
|
|
|
|
|
|
saveEntries(deviceId, TS - 2); |
|
|
|
|
|
saveEntries(deviceId, TS - 1); |
|
|
|
|
|
saveEntriesWithoutLatest(deviceId, TS); |
|
|
|
|
|
|
|
|
|
|
|
List<TsKvEntry> entries = tsService.findLatest(tenantId, deviceId, Collections.singleton(STRING_KEY)).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
|
|
|
Assert.assertEquals(1, entries.size()); |
|
|
|
|
|
Assert.assertEquals(toTsEntry(TS - 1, stringKvEntry), entries.get(0)); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
@Test |
|
|
@Test |
|
|
public void testFindByQueryAscOrder() throws Exception { |
|
|
public void testFindByQueryAscOrder() throws Exception { |
|
|
DeviceId deviceId = new DeviceId(Uuids.timeBased()); |
|
|
DeviceId deviceId = new DeviceId(Uuids.timeBased()); |
|
|
@ -150,7 +169,7 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
List<ReadTsKvQuery> queries = new ArrayList<>(); |
|
|
List<ReadTsKvQuery> queries = new ArrayList<>(); |
|
|
queries.add(new BaseReadTsKvQuery(STRING_KEY, TS - 3, TS, 0, 1000, Aggregation.NONE, "ASC")); |
|
|
queries.add(new BaseReadTsKvQuery(STRING_KEY, TS - 3, TS, 0, 1000, Aggregation.NONE, "ASC")); |
|
|
|
|
|
|
|
|
List<TsKvEntry> entries = tsService.findAll(tenantId, deviceId, queries).get(); |
|
|
List<TsKvEntry> entries = tsService.findAll(tenantId, deviceId, queries).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
Assert.assertEquals(3, entries.size()); |
|
|
Assert.assertEquals(3, entries.size()); |
|
|
Assert.assertEquals(toTsEntry(TS - 3, stringKvEntry), entries.get(0)); |
|
|
Assert.assertEquals(toTsEntry(TS - 3, stringKvEntry), entries.get(0)); |
|
|
Assert.assertEquals(toTsEntry(TS - 2, stringKvEntry), entries.get(1)); |
|
|
Assert.assertEquals(toTsEntry(TS - 2, stringKvEntry), entries.get(1)); |
|
|
@ -158,7 +177,7 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
|
|
|
|
|
|
EntityView entityView = saveAndCreateEntityView(deviceId, Arrays.asList(STRING_KEY)); |
|
|
EntityView entityView = saveAndCreateEntityView(deviceId, Arrays.asList(STRING_KEY)); |
|
|
|
|
|
|
|
|
entries = tsService.findAll(tenantId, entityView.getId(), queries).get(); |
|
|
entries = tsService.findAll(tenantId, entityView.getId(), queries).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
Assert.assertEquals(3, entries.size()); |
|
|
Assert.assertEquals(3, entries.size()); |
|
|
Assert.assertEquals(toTsEntry(TS - 3, stringKvEntry), entries.get(0)); |
|
|
Assert.assertEquals(toTsEntry(TS - 3, stringKvEntry), entries.get(0)); |
|
|
Assert.assertEquals(toTsEntry(TS - 2, stringKvEntry), entries.get(1)); |
|
|
Assert.assertEquals(toTsEntry(TS - 2, stringKvEntry), entries.get(1)); |
|
|
@ -176,7 +195,7 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
List<ReadTsKvQuery> queries = new ArrayList<>(); |
|
|
List<ReadTsKvQuery> queries = new ArrayList<>(); |
|
|
queries.add(new BaseReadTsKvQuery(STRING_KEY, TS - 3, TS, 0, 1000, Aggregation.NONE, "DESC")); |
|
|
queries.add(new BaseReadTsKvQuery(STRING_KEY, TS - 3, TS, 0, 1000, Aggregation.NONE, "DESC")); |
|
|
|
|
|
|
|
|
List<TsKvEntry> entries = tsService.findAll(tenantId, deviceId, queries).get(); |
|
|
List<TsKvEntry> entries = tsService.findAll(tenantId, deviceId, queries).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
Assert.assertEquals(3, entries.size()); |
|
|
Assert.assertEquals(3, entries.size()); |
|
|
Assert.assertEquals(toTsEntry(TS - 1, stringKvEntry), entries.get(0)); |
|
|
Assert.assertEquals(toTsEntry(TS - 1, stringKvEntry), entries.get(0)); |
|
|
Assert.assertEquals(toTsEntry(TS - 2, stringKvEntry), entries.get(1)); |
|
|
Assert.assertEquals(toTsEntry(TS - 2, stringKvEntry), entries.get(1)); |
|
|
@ -184,7 +203,7 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
|
|
|
|
|
|
EntityView entityView = saveAndCreateEntityView(deviceId, Arrays.asList(STRING_KEY)); |
|
|
EntityView entityView = saveAndCreateEntityView(deviceId, Arrays.asList(STRING_KEY)); |
|
|
|
|
|
|
|
|
entries = tsService.findAll(tenantId, entityView.getId(), queries).get(); |
|
|
entries = tsService.findAll(tenantId, entityView.getId(), queries).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
Assert.assertEquals(3, entries.size()); |
|
|
Assert.assertEquals(3, entries.size()); |
|
|
Assert.assertEquals(toTsEntry(TS - 1, stringKvEntry), entries.get(0)); |
|
|
Assert.assertEquals(toTsEntry(TS - 1, stringKvEntry), entries.get(0)); |
|
|
Assert.assertEquals(toTsEntry(TS - 2, stringKvEntry), entries.get(1)); |
|
|
Assert.assertEquals(toTsEntry(TS - 2, stringKvEntry), entries.get(1)); |
|
|
@ -201,13 +220,13 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
saveEntries(deviceId, 40000); |
|
|
saveEntries(deviceId, 40000); |
|
|
|
|
|
|
|
|
tsService.remove(tenantId, deviceId, Collections.singletonList( |
|
|
tsService.remove(tenantId, deviceId, Collections.singletonList( |
|
|
new BaseDeleteTsKvQuery(STRING_KEY, 25000, 45000, true))).get(); |
|
|
new BaseDeleteTsKvQuery(STRING_KEY, 25000, 45000, true))).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
|
|
|
|
|
|
List<TsKvEntry> list = tsService.findAll(tenantId, deviceId, Collections.singletonList( |
|
|
List<TsKvEntry> list = tsService.findAll(tenantId, deviceId, Collections.singletonList( |
|
|
new BaseReadTsKvQuery(STRING_KEY, 5000, 45000, 10000, 10, Aggregation.NONE))).get(); |
|
|
new BaseReadTsKvQuery(STRING_KEY, 5000, 45000, 10000, 10, Aggregation.NONE))).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
Assert.assertEquals(2, list.size()); |
|
|
Assert.assertEquals(2, list.size()); |
|
|
|
|
|
|
|
|
List<TsKvEntry> latest = tsService.findLatest(tenantId, deviceId, Collections.singletonList(STRING_KEY)).get(); |
|
|
List<TsKvEntry> latest = tsService.findLatest(tenantId, deviceId, Collections.singletonList(STRING_KEY)).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
Assert.assertEquals(20000, latest.get(0).getTs()); |
|
|
Assert.assertEquals(20000, latest.get(0).getTs()); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -226,7 +245,7 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
entries.add(save(deviceId, 55000, 600)); |
|
|
entries.add(save(deviceId, 55000, 600)); |
|
|
|
|
|
|
|
|
List<TsKvEntry> list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
List<TsKvEntry> list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
60000, 20000, 3, Aggregation.NONE))).get(); |
|
|
60000, 20000, 3, Aggregation.NONE))).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(55000, list.get(0).getTs()); |
|
|
assertEquals(55000, list.get(0).getTs()); |
|
|
assertEquals(java.util.Optional.of(600L), list.get(0).getLongValue()); |
|
|
assertEquals(java.util.Optional.of(600L), list.get(0).getLongValue()); |
|
|
@ -238,7 +257,7 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
assertEquals(java.util.Optional.of(400L), list.get(2).getLongValue()); |
|
|
assertEquals(java.util.Optional.of(400L), list.get(2).getLongValue()); |
|
|
|
|
|
|
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
60000, 20000, 3, Aggregation.AVG))).get(); |
|
|
60000, 20000, 3, Aggregation.AVG))).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(10000, list.get(0).getTs()); |
|
|
assertEquals(10000, list.get(0).getTs()); |
|
|
assertEquals(java.util.Optional.of(150.0), list.get(0).getDoubleValue()); |
|
|
assertEquals(java.util.Optional.of(150.0), list.get(0).getDoubleValue()); |
|
|
@ -250,7 +269,7 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
assertEquals(java.util.Optional.of(550.0), list.get(2).getDoubleValue()); |
|
|
assertEquals(java.util.Optional.of(550.0), list.get(2).getDoubleValue()); |
|
|
|
|
|
|
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
60000, 20000, 3, Aggregation.SUM))).get(); |
|
|
60000, 20000, 3, Aggregation.SUM))).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
|
|
|
|
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(10000, list.get(0).getTs()); |
|
|
assertEquals(10000, list.get(0).getTs()); |
|
|
@ -263,7 +282,7 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
assertEquals(java.util.Optional.of(1100L), list.get(2).getLongValue()); |
|
|
assertEquals(java.util.Optional.of(1100L), list.get(2).getLongValue()); |
|
|
|
|
|
|
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
60000, 20000, 3, Aggregation.MIN))).get(); |
|
|
60000, 20000, 3, Aggregation.MIN))).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
|
|
|
|
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(10000, list.get(0).getTs()); |
|
|
assertEquals(10000, list.get(0).getTs()); |
|
|
@ -276,7 +295,7 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
assertEquals(java.util.Optional.of(500L), list.get(2).getLongValue()); |
|
|
assertEquals(java.util.Optional.of(500L), list.get(2).getLongValue()); |
|
|
|
|
|
|
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
60000, 20000, 3, Aggregation.MAX))).get(); |
|
|
60000, 20000, 3, Aggregation.MAX))).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
|
|
|
|
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(10000, list.get(0).getTs()); |
|
|
assertEquals(10000, list.get(0).getTs()); |
|
|
@ -289,7 +308,7 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
assertEquals(java.util.Optional.of(600L), list.get(2).getLongValue()); |
|
|
assertEquals(java.util.Optional.of(600L), list.get(2).getLongValue()); |
|
|
|
|
|
|
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
60000, 20000, 3, Aggregation.COUNT))).get(); |
|
|
60000, 20000, 3, Aggregation.COUNT))).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
|
|
|
|
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(10000, list.get(0).getTs()); |
|
|
assertEquals(10000, list.get(0).getTs()); |
|
|
@ -310,7 +329,7 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
entries.add(save(deviceId, 115000, "C2")); |
|
|
entries.add(save(deviceId, 115000, "C2")); |
|
|
|
|
|
|
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 60000, |
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 60000, |
|
|
120000, 20000, 3, Aggregation.NONE))).get(); |
|
|
120000, 20000, 3, Aggregation.NONE))).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(115000, list.get(0).getTs()); |
|
|
assertEquals(115000, list.get(0).getTs()); |
|
|
assertEquals(java.util.Optional.of("C2"), list.get(0).getStrValue()); |
|
|
assertEquals(java.util.Optional.of("C2"), list.get(0).getStrValue()); |
|
|
@ -323,7 +342,7 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 60000, |
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 60000, |
|
|
120000, 20000, 3, Aggregation.MIN))).get(); |
|
|
120000, 20000, 3, Aggregation.MIN))).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
|
|
|
|
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(70000, list.get(0).getTs()); |
|
|
assertEquals(70000, list.get(0).getTs()); |
|
|
@ -336,7 +355,7 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
assertEquals(java.util.Optional.of("C1"), list.get(2).getStrValue()); |
|
|
assertEquals(java.util.Optional.of("C1"), list.get(2).getStrValue()); |
|
|
|
|
|
|
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 60000, |
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 60000, |
|
|
120000, 20000, 3, Aggregation.MAX))).get(); |
|
|
120000, 20000, 3, Aggregation.MAX))).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
|
|
|
|
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(70000, list.get(0).getTs()); |
|
|
assertEquals(70000, list.get(0).getTs()); |
|
|
@ -349,7 +368,7 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
assertEquals(java.util.Optional.of("C2"), list.get(2).getStrValue()); |
|
|
assertEquals(java.util.Optional.of("C2"), list.get(2).getStrValue()); |
|
|
|
|
|
|
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 60000, |
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 60000, |
|
|
120000, 20000, 3, Aggregation.COUNT))).get(); |
|
|
120000, 20000, 3, Aggregation.COUNT))).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
|
|
|
|
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(70000, list.get(0).getTs()); |
|
|
assertEquals(70000, list.get(0).getTs()); |
|
|
@ -377,7 +396,7 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
entries.add(save(deviceId, 55000, 600.0)); |
|
|
entries.add(save(deviceId, 55000, 600.0)); |
|
|
|
|
|
|
|
|
List<TsKvEntry> list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
List<TsKvEntry> list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
60000, 20000, 3, Aggregation.NONE))).get(); |
|
|
60000, 20000, 3, Aggregation.NONE))).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(55000, list.get(0).getTs()); |
|
|
assertEquals(55000, list.get(0).getTs()); |
|
|
assertEquals(java.util.Optional.of(600.0), list.get(0).getDoubleValue()); |
|
|
assertEquals(java.util.Optional.of(600.0), list.get(0).getDoubleValue()); |
|
|
@ -389,7 +408,7 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
assertEquals(java.util.Optional.of(400.0), list.get(2).getDoubleValue()); |
|
|
assertEquals(java.util.Optional.of(400.0), list.get(2).getDoubleValue()); |
|
|
|
|
|
|
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
60000, 20000, 3, Aggregation.AVG))).get(); |
|
|
60000, 20000, 3, Aggregation.AVG))).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(10000, list.get(0).getTs()); |
|
|
assertEquals(10000, list.get(0).getTs()); |
|
|
assertEquals(java.util.Optional.of(150.0), list.get(0).getDoubleValue()); |
|
|
assertEquals(java.util.Optional.of(150.0), list.get(0).getDoubleValue()); |
|
|
@ -401,7 +420,7 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
assertEquals(java.util.Optional.of(550.0), list.get(2).getDoubleValue()); |
|
|
assertEquals(java.util.Optional.of(550.0), list.get(2).getDoubleValue()); |
|
|
|
|
|
|
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
60000, 20000, 3, Aggregation.SUM))).get(); |
|
|
60000, 20000, 3, Aggregation.SUM))).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
|
|
|
|
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(10000, list.get(0).getTs()); |
|
|
assertEquals(10000, list.get(0).getTs()); |
|
|
@ -414,7 +433,7 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
assertEquals(java.util.Optional.of(1100.0), list.get(2).getDoubleValue()); |
|
|
assertEquals(java.util.Optional.of(1100.0), list.get(2).getDoubleValue()); |
|
|
|
|
|
|
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
60000, 20000, 3, Aggregation.MIN))).get(); |
|
|
60000, 20000, 3, Aggregation.MIN))).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
|
|
|
|
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(10000, list.get(0).getTs()); |
|
|
assertEquals(10000, list.get(0).getTs()); |
|
|
@ -427,7 +446,7 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
assertEquals(java.util.Optional.of(500.0), list.get(2).getDoubleValue()); |
|
|
assertEquals(java.util.Optional.of(500.0), list.get(2).getDoubleValue()); |
|
|
|
|
|
|
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
60000, 20000, 3, Aggregation.MAX))).get(); |
|
|
60000, 20000, 3, Aggregation.MAX))).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
|
|
|
|
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(10000, list.get(0).getTs()); |
|
|
assertEquals(10000, list.get(0).getTs()); |
|
|
@ -440,7 +459,7 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
assertEquals(java.util.Optional.of(600.0), list.get(2).getDoubleValue()); |
|
|
assertEquals(java.util.Optional.of(600.0), list.get(2).getDoubleValue()); |
|
|
|
|
|
|
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
list = tsService.findAll(tenantId, deviceId, Collections.singletonList(new BaseReadTsKvQuery(LONG_KEY, 0, |
|
|
60000, 20000, 3, Aggregation.COUNT))).get(); |
|
|
60000, 20000, 3, Aggregation.COUNT))).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
|
|
|
|
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(3, list.size()); |
|
|
assertEquals(10000, list.get(0).getTs()); |
|
|
assertEquals(10000, list.get(0).getTs()); |
|
|
@ -455,28 +474,37 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { |
|
|
|
|
|
|
|
|
private TsKvEntry save(DeviceId deviceId, long ts, long value) throws Exception { |
|
|
private TsKvEntry save(DeviceId deviceId, long ts, long value) throws Exception { |
|
|
TsKvEntry entry = new BasicTsKvEntry(ts, new LongDataEntry(LONG_KEY, value)); |
|
|
TsKvEntry entry = new BasicTsKvEntry(ts, new LongDataEntry(LONG_KEY, value)); |
|
|
tsService.save(tenantId, deviceId, entry).get(); |
|
|
tsService.save(tenantId, deviceId, entry).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
return entry; |
|
|
return entry; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private TsKvEntry save(DeviceId deviceId, long ts, double value) throws Exception { |
|
|
private TsKvEntry save(DeviceId deviceId, long ts, double value) throws Exception { |
|
|
TsKvEntry entry = new BasicTsKvEntry(ts, new DoubleDataEntry(LONG_KEY, value)); |
|
|
TsKvEntry entry = new BasicTsKvEntry(ts, new DoubleDataEntry(LONG_KEY, value)); |
|
|
tsService.save(tenantId, deviceId, entry).get(); |
|
|
tsService.save(tenantId, deviceId, entry).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
return entry; |
|
|
return entry; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private TsKvEntry save(DeviceId deviceId, long ts, String value) throws Exception { |
|
|
private TsKvEntry save(DeviceId deviceId, long ts, String value) throws Exception { |
|
|
TsKvEntry entry = new BasicTsKvEntry(ts, new StringDataEntry(LONG_KEY, value)); |
|
|
TsKvEntry entry = new BasicTsKvEntry(ts, new StringDataEntry(LONG_KEY, value)); |
|
|
tsService.save(tenantId, deviceId, entry).get(); |
|
|
tsService.save(tenantId, deviceId, entry).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
return entry; |
|
|
return entry; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void saveEntries(DeviceId deviceId, long ts) throws ExecutionException, InterruptedException { |
|
|
private void saveEntries(DeviceId deviceId, long ts) throws ExecutionException, InterruptedException, TimeoutException { |
|
|
tsService.save(tenantId, deviceId, toTsEntry(ts, stringKvEntry)).get(); |
|
|
tsService.save(tenantId, deviceId, toTsEntry(ts, stringKvEntry)).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
tsService.save(tenantId, deviceId, toTsEntry(ts, longKvEntry)).get(); |
|
|
tsService.save(tenantId, deviceId, toTsEntry(ts, longKvEntry)).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
tsService.save(tenantId, deviceId, toTsEntry(ts, doubleKvEntry)).get(); |
|
|
tsService.save(tenantId, deviceId, toTsEntry(ts, doubleKvEntry)).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
tsService.save(tenantId, deviceId, toTsEntry(ts, booleanKvEntry)).get(); |
|
|
tsService.save(tenantId, deviceId, toTsEntry(ts, booleanKvEntry)).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void saveEntriesWithoutLatest(DeviceId deviceId, long ts) throws ExecutionException, InterruptedException, TimeoutException { |
|
|
|
|
|
List<TsKvEntry> tsKvEntry = List.of( |
|
|
|
|
|
toTsEntry(ts, stringKvEntry), |
|
|
|
|
|
toTsEntry(ts, longKvEntry), |
|
|
|
|
|
toTsEntry(ts, doubleKvEntry), |
|
|
|
|
|
toTsEntry(ts, booleanKvEntry)); |
|
|
|
|
|
tsService.saveWithoutLatest(tenantId, deviceId, tsKvEntry, 0).get(MAX_TIMEOUT, TimeUnit.SECONDS); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private static TsKvEntry toTsEntry(long ts, KvEntry entry) { |
|
|
private static TsKvEntry toTsEntry(long ts, KvEntry entry) { |
|
|
|