diff --git a/application/src/test/java/org/thingsboard/server/controller/EntityQueryControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/EntityQueryControllerTest.java index 7b33c88062..5d7f9ec7d6 100644 --- a/application/src/test/java/org/thingsboard/server/controller/EntityQueryControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/EntityQueryControllerTest.java @@ -918,7 +918,7 @@ public class EntityQueryControllerTest extends AbstractControllerTest { List queueStatsList = new ArrayList<>(); for (int i = 0; i < 97; i++) { QueueStats queueStats = new QueueStats(); - queueStats.setQueueName(StringUtils.randomAlphabetic(5)); + queueStats.setQueueName("test" + StringUtils.randomAlphabetic(5)); queueStats.setServiceId(StringUtils.randomAlphabetic(5)); queueStats.setTenantId(savedTenant.getTenantId()); queueStatsList.add(queueStatsService.save(savedTenant.getId(), queueStats)); @@ -934,8 +934,11 @@ public class EntityQueryControllerTest extends AbstractControllerTest { EntityDataPageLink pageLink = new EntityDataPageLink(10, 0, null, sortOrder); List entityFields = Arrays.asList(new EntityKey(EntityKeyType.ENTITY_FIELD, "name"), new EntityKey(EntityKeyType.ENTITY_FIELD, "queueName"), new EntityKey(EntityKeyType.ENTITY_FIELD, "serviceId")); + List keyFilters = Collections.singletonList( + getEntityFieldStartsWithFilter("queueName", "test") + ); - EntityDataQuery query = new EntityDataQuery(entityTypeFilter, pageLink, entityFields, null, null); + EntityDataQuery query = new EntityDataQuery(entityTypeFilter, pageLink, entityFields, null, keyFilters); PageData data = findByQueryAndCheck(query, 97); Assert.assertEquals(10, data.getTotalPages()); @@ -977,10 +980,10 @@ public class EntityQueryControllerTest extends AbstractControllerTest { KeyFilter activeAlarmTimeFilter = getServerAttributeNumericGreaterThanKeyFilter("alarmActiveTime", 5); KeyFilter activeAlarmTimeToLongFilter = getServerAttributeNumericGreaterThanKeyFilter("alarmActiveTime", 30); - KeyFilter tenantOwnerNameFilter = getEntityFieldStringEqualToKeyFilter("ownerName", TEST_TENANT_NAME); - KeyFilter wrongOwnerNameFilter = getEntityFieldStringEqualToKeyFilter("ownerName", "wrongName"); - KeyFilter tenantOwnerTypeFilter = getEntityFieldStringEqualToKeyFilter("ownerType", "TENANT"); - KeyFilter customerOwnerTypeFilter = getEntityFieldStringEqualToKeyFilter("ownerType", "CUSTOMER"); + KeyFilter tenantOwnerNameFilter = getEntityFieldEqualFilter("ownerName", TEST_TENANT_NAME); + KeyFilter wrongOwnerNameFilter = getEntityFieldEqualFilter("ownerName", "wrongName"); + KeyFilter tenantOwnerTypeFilter = getEntityFieldEqualFilter("ownerType", "TENANT"); + KeyFilter customerOwnerTypeFilter = getEntityFieldEqualFilter("ownerType", "CUSTOMER"); // all devices with ownerName = TEST TENANT EntityCountQuery query = new EntityCountQuery(filter, List.of(activeAlarmTimeFilter, tenantOwnerNameFilter)); @@ -1026,10 +1029,10 @@ public class EntityQueryControllerTest extends AbstractControllerTest { filter.setDeviceNameFilter(""); KeyFilter activeAlarmTimeFilter = getServerAttributeNumericGreaterThanKeyFilter("alarmActiveTime", 5); - KeyFilter tenantOwnerNameFilter = getEntityFieldStringEqualToKeyFilter("ownerName", TEST_TENANT_NAME); - KeyFilter wrongOwnerNameFilter = getEntityFieldStringEqualToKeyFilter("ownerName", "wrongName"); - KeyFilter tenantOwnerTypeFilter = getEntityFieldStringEqualToKeyFilter("ownerType", "TENANT"); - KeyFilter customerOwnerTypeFilter = getEntityFieldStringEqualToKeyFilter("ownerType", "CUSTOMER"); + KeyFilter tenantOwnerNameFilter = getEntityFieldEqualFilter("ownerName", TEST_TENANT_NAME); + KeyFilter wrongOwnerNameFilter = getEntityFieldEqualFilter("ownerName", "wrongName"); + KeyFilter tenantOwnerTypeFilter = getEntityFieldEqualFilter("ownerType", "TENANT"); + KeyFilter customerOwnerTypeFilter = getEntityFieldEqualFilter("ownerType", "CUSTOMER"); EntityDataSortOrder sortOrder = new EntityDataSortOrder( new EntityKey(EntityKeyType.ENTITY_FIELD, "createdTime"), EntityDataSortOrder.Direction.ASC @@ -1171,15 +1174,23 @@ public class EntityQueryControllerTest extends AbstractControllerTest { return result; } - private KeyFilter getEntityFieldStringEqualToKeyFilter(String keyName, String value) { - KeyFilter tenantOwnerNameFilter = new KeyFilter(); - tenantOwnerNameFilter.setKey(new EntityKey(EntityKeyType.ENTITY_FIELD, keyName)); - tenantOwnerNameFilter.setValueType(EntityKeyValueType.STRING); - StringFilterPredicate ownerNamePredicate = new StringFilterPredicate(); - ownerNamePredicate.setValue(FilterPredicateValue.fromString(value)); - ownerNamePredicate.setOperation(StringFilterPredicate.StringOperation.EQUAL); - tenantOwnerNameFilter.setPredicate(ownerNamePredicate); - return tenantOwnerNameFilter; + private KeyFilter getEntityFieldEqualFilter(String keyName, String value) { + return getEntityFieldKeyFilter(keyName, value, StringFilterPredicate.StringOperation.EQUAL); + } + + private KeyFilter getEntityFieldStartsWithFilter(String keyName, String value) { + return getEntityFieldKeyFilter(keyName, value, StringFilterPredicate.StringOperation.STARTS_WITH); + } + + private KeyFilter getEntityFieldKeyFilter(String keyName, String value, StringFilterPredicate.StringOperation operation) { + KeyFilter filter = new KeyFilter(); + filter.setKey(new EntityKey(EntityKeyType.ENTITY_FIELD, keyName)); + filter.setValueType(EntityKeyValueType.STRING); + StringFilterPredicate predicate = new StringFilterPredicate(); + predicate.setValue(FilterPredicateValue.fromString(value)); + predicate.setOperation(operation); + filter.setPredicate(predicate); + return filter; } private KeyFilter getServerAttributeNumericGreaterThanKeyFilter(String attribute, int value) { diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/cf/CalculatedFieldTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/cf/CalculatedFieldTest.java index 2593e18a55..456d320e11 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/cf/CalculatedFieldTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/cf/CalculatedFieldTest.java @@ -133,6 +133,7 @@ public class CalculatedFieldTest extends AbstractContainerTest { .untilAsserted(() -> { JsonNode fahrenheitTemp = testRestClient.getLatestTelemetry(device.getId()); assertThat(fahrenheitTemp).isNotNull(); + assertThat(fahrenheitTemp.get("fahrenheitTemp")).isNotNull(); assertThat(fahrenheitTemp.get("fahrenheitTemp").get(0).get("value").asText()).isEqualTo("77.0"); }); @@ -155,6 +156,7 @@ public class CalculatedFieldTest extends AbstractContainerTest { .untilAsserted(() -> { JsonNode fahrenheitTemp = testRestClient.getLatestTelemetry(device.getId()); assertThat(fahrenheitTemp).isNotNull(); + assertThat(fahrenheitTemp.get("fahrenheitTemp")).isNotNull(); assertThat(fahrenheitTemp.get("fahrenheitTemp").get(0).get("value").asText()).isEqualTo("104.0"); }); @@ -179,6 +181,7 @@ public class CalculatedFieldTest extends AbstractContainerTest { .untilAsserted(() -> { JsonNode temperatureF = testRestClient.getAttributes(device.getId(), AttributeScope.SERVER_SCOPE, "temperatureF"); assertThat(temperatureF).isNotNull(); + assertThat(temperatureF.get(0)).isNotNull(); assertThat(temperatureF.get(0).get("value").asText()).isEqualTo("77.0"); }); @@ -201,6 +204,7 @@ public class CalculatedFieldTest extends AbstractContainerTest { .untilAsserted(() -> { JsonNode fahrenheitTemp = testRestClient.getLatestTelemetry(device.getId()); assertThat(fahrenheitTemp).isNotNull(); + assertThat(fahrenheitTemp.get("fahrenheitTemp")).isNotNull(); assertThat(fahrenheitTemp.get("fahrenheitTemp").get(0).get("value").asText()).isEqualTo("-3.89"); }); @@ -221,6 +225,7 @@ public class CalculatedFieldTest extends AbstractContainerTest { .untilAsserted(() -> { JsonNode fahrenheitTemp = testRestClient.getLatestTelemetry(device.getId()); assertThat(fahrenheitTemp).isNotNull(); + assertThat(fahrenheitTemp.get("fahrenheitTemp")).isNotNull(); assertThat(fahrenheitTemp.get("fahrenheitTemp").get(0).get("value").asText()).isEqualTo("86.0"); }); @@ -239,6 +244,7 @@ public class CalculatedFieldTest extends AbstractContainerTest { .untilAsserted(() -> { JsonNode fahrenheitTemp = testRestClient.getLatestTelemetry(device.getId()); assertThat(fahrenheitTemp).isNotNull(); + assertThat(fahrenheitTemp.get("fahrenheitTemp")).isNotNull(); assertThat(fahrenheitTemp.get("fahrenheitTemp").get(0).get("value").asText()).isEqualTo("77.0"); }); @@ -261,6 +267,7 @@ public class CalculatedFieldTest extends AbstractContainerTest { // used default value since telemetry is not present JsonNode fahrenheitTemp = testRestClient.getLatestTelemetry(newDevice.getId()); assertThat(fahrenheitTemp).isNotNull(); + assertThat(fahrenheitTemp.get("fahrenheitTemp")).isNotNull(); assertThat(fahrenheitTemp.get("fahrenheitTemp").get(0).get("value").asText()).isEqualTo("53.6"); }); @@ -275,6 +282,7 @@ public class CalculatedFieldTest extends AbstractContainerTest { .untilAsserted(() -> { JsonNode fahrenheitTemp = testRestClient.getLatestTelemetry(newDevice.getId()); assertThat(fahrenheitTemp).isNotNull(); + assertThat(fahrenheitTemp.get("fahrenheitTemp")).isNotNull(); assertThat(fahrenheitTemp.get("fahrenheitTemp").get(0).get("value").asText()).isEqualTo("53.6"); }); @@ -286,13 +294,14 @@ public class CalculatedFieldTest extends AbstractContainerTest { // login tenant admin testRestClient.getAndSetUserToken(tenantAdminId); - CalculatedField savedCalculatedField = createScriptCalculatedField(deviceProfileId); + CalculatedField savedCalculatedField = createScriptCalculatedField(deviceProfileId, asset.getId()); await().alias("create CF -> perform initial calculation for device by profile").atMost(TIMEOUT, TimeUnit.SECONDS) .pollInterval(POLL_INTERVAL, TimeUnit.SECONDS) .untilAsserted(() -> { JsonNode airDensity = testRestClient.getLatestTelemetry(device.getId()); assertThat(airDensity).isNotNull(); + assertThat(airDensity.get("airDensity")).isNotNull(); assertThat(airDensity.get("airDensity").get(0).get("value").asText()).isEqualTo("1.05"); }); @@ -303,6 +312,7 @@ public class CalculatedFieldTest extends AbstractContainerTest { .untilAsserted(() -> { JsonNode airDensity = testRestClient.getLatestTelemetry(device.getId()); assertThat(airDensity).isNotNull(); + assertThat(airDensity.get("airDensity")).isNotNull(); assertThat(airDensity.get("airDensity").get(0).get("value").asText()).isEqualTo("0.99"); }); @@ -342,10 +352,10 @@ public class CalculatedFieldTest extends AbstractContainerTest { } private CalculatedField createScriptCalculatedField() { - return createScriptCalculatedField(device.getId()); + return createScriptCalculatedField(device.getId(), asset.getId()); } - private CalculatedField createScriptCalculatedField(EntityId entityId) { + private CalculatedField createScriptCalculatedField(EntityId entityId, EntityId refEntityId) { CalculatedField calculatedField = new CalculatedField(); calculatedField.setEntityId(entityId); calculatedField.setType(CalculatedFieldType.SCRIPT); @@ -355,12 +365,12 @@ public class CalculatedFieldTest extends AbstractContainerTest { ScriptCalculatedFieldConfiguration config = new ScriptCalculatedFieldConfiguration(); Argument argument1 = new Argument(); - argument1.setRefEntityId(asset.getId()); + argument1.setRefEntityId(refEntityId); ReferencedEntityKey refEntityKey1 = new ReferencedEntityKey("altitude", ArgumentType.ATTRIBUTE, AttributeScope.SERVER_SCOPE); argument1.setRefEntityKey(refEntityKey1); Argument argument2 = new Argument(); ReferencedEntityKey refEntityKey2 = new ReferencedEntityKey("temperatureInF", ArgumentType.TS_ROLLING, null); - argument2.setTimeWindow(30000L); + argument2.setTimeWindow(300000L); argument2.setLimit(5); argument2.setRefEntityKey(refEntityKey2); diff --git a/msa/black-box-tests/src/test/resources/connectivity.xml b/msa/black-box-tests/src/test/resources/connectivity.xml index 425fbd67eb..7253d87e63 100644 --- a/msa/black-box-tests/src/test/resources/connectivity.xml +++ b/msa/black-box-tests/src/test/resources/connectivity.xml @@ -21,8 +21,10 @@ - - + + + + \ No newline at end of file