diff --git a/application/src/test/java/org/thingsboard/server/transport/mqtt/attributes/request/AbstractMqttAttributesRequestIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/mqtt/attributes/request/AbstractMqttAttributesRequestIntegrationTest.java index a75ad9b5ce..ba9a7b887e 100644 --- a/application/src/test/java/org/thingsboard/server/transport/mqtt/attributes/request/AbstractMqttAttributesRequestIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/mqtt/attributes/request/AbstractMqttAttributesRequestIntegrationTest.java @@ -66,7 +66,7 @@ public abstract class AbstractMqttAttributesRequestIntegrationTest extends Abstr postAttributesAndSubscribeToTopic(savedDevice, client); - Thread.sleep(1000); + Thread.sleep(2000); TestMqttCallback callback = getTestMqttCallback(); client.setCallback(callback); @@ -86,13 +86,13 @@ public abstract class AbstractMqttAttributesRequestIntegrationTest extends Abstr assertNotNull(savedDevice); - Thread.sleep(1000); + Thread.sleep(2000); doPostAsync("/api/plugins/telemetry/DEVICE/" + savedDevice.getId().getId() + "/attributes/SHARED_SCOPE", POST_ATTRIBUTES_PAYLOAD, String.class, status().isOk()); - Thread.sleep(1000); + Thread.sleep(2000); - client.subscribe(MqttTopics.GATEWAY_ATTRIBUTES_RESPONSE_TOPIC, MqttQoS.AT_LEAST_ONCE.value()); + client.subscribe(MqttTopics.GATEWAY_ATTRIBUTES_RESPONSE_TOPIC, MqttQoS.AT_LEAST_ONCE.value()).waitForCompletion(TimeUnit.MINUTES.toMillis(1)); TestMqttCallback clientAttributesCallback = getTestMqttCallback(); client.setCallback(clientAttributesCallback); @@ -105,13 +105,13 @@ public abstract class AbstractMqttAttributesRequestIntegrationTest extends Abstr protected void postAttributesAndSubscribeToTopic(Device savedDevice, MqttAsyncClient client) throws Exception { doPostAsync("/api/plugins/telemetry/DEVICE/" + savedDevice.getId().getId() + "/attributes/SHARED_SCOPE", POST_ATTRIBUTES_PAYLOAD, String.class, status().isOk()); - client.publish(MqttTopics.DEVICE_ATTRIBUTES_TOPIC, new MqttMessage(POST_ATTRIBUTES_PAYLOAD.getBytes())); - client.subscribe(MqttTopics.DEVICE_ATTRIBUTES_RESPONSES_TOPIC, MqttQoS.AT_MOST_ONCE.value()); + client.publish(MqttTopics.DEVICE_ATTRIBUTES_TOPIC, new MqttMessage(POST_ATTRIBUTES_PAYLOAD.getBytes())).waitForCompletion(TimeUnit.MINUTES.toMillis(1)); + client.subscribe(MqttTopics.DEVICE_ATTRIBUTES_RESPONSES_TOPIC, MqttQoS.AT_MOST_ONCE.value()).waitForCompletion(TimeUnit.MINUTES.toMillis(1)); } protected void postGatewayDeviceClientAttributes(MqttAsyncClient client) throws Exception { String postClientAttributes = "{\"" + "Gateway Device Request Attributes" + "\":{\"attribute1\":\"value1\",\"attribute2\":true,\"attribute3\":42.0,\"attribute4\":73,\"attribute5\":{\"someNumber\":42,\"someArray\":[1,2,3],\"someNestedObject\":{\"key\":\"value\"}}}}"; - client.publish(MqttTopics.GATEWAY_ATTRIBUTES_TOPIC, new MqttMessage(postClientAttributes.getBytes())); + client.publish(MqttTopics.GATEWAY_ATTRIBUTES_TOPIC, new MqttMessage(postClientAttributes.getBytes())).waitForCompletion(TimeUnit.MINUTES.toMillis(1)); } protected void validateResponse(MqttAsyncClient client, CountDownLatch latch, TestMqttCallback callback) throws MqttException, InterruptedException, InvalidProtocolBufferException { @@ -119,8 +119,8 @@ public abstract class AbstractMqttAttributesRequestIntegrationTest extends Abstr String payloadStr = "{\"clientKeys\":\"" + keys + "\", \"sharedKeys\":\"" + keys + "\"}"; MqttMessage mqttMessage = new MqttMessage(); mqttMessage.setPayload(payloadStr.getBytes()); - client.publish(MqttTopics.DEVICE_ATTRIBUTES_REQUEST_TOPIC_PREFIX + "1", mqttMessage); - latch.await(3, TimeUnit.SECONDS); + client.publish(MqttTopics.DEVICE_ATTRIBUTES_REQUEST_TOPIC_PREFIX + "1", mqttMessage).waitForCompletion(TimeUnit.MINUTES.toMillis(1)); + latch.await(1, TimeUnit.MINUTES); assertEquals(MqttQoS.AT_MOST_ONCE.value(), callback.getQoS()); String expectedRequestPayload = "{\"client\":{\"attribute1\":\"value1\",\"attribute2\":true,\"attribute3\":42.0,\"attribute4\":73,\"attribute5\":{\"someNumber\":42,\"someArray\":[1,2,3],\"someNestedObject\":{\"key\":\"value\"}}},\"shared\":{\"attribute1\":\"value1\",\"attribute2\":true,\"attribute3\":42.0,\"attribute4\":73,\"attribute5\":{\"someNumber\":42,\"someArray\":[1,2,3],\"someNestedObject\":{\"key\":\"value\"}}}}"; assertEquals(JacksonUtil.toJsonNode(expectedRequestPayload), JacksonUtil.toJsonNode(new String(callback.getPayloadBytes(), StandardCharsets.UTF_8))); @@ -130,8 +130,8 @@ public abstract class AbstractMqttAttributesRequestIntegrationTest extends Abstr String payloadStr = "{\"id\": 1, \"device\": \"" + "Gateway Device Request Attributes" + "\", \"client\": true, \"keys\": [\"attribute1\", \"attribute2\", \"attribute3\", \"attribute4\", \"attribute5\"]}"; MqttMessage mqttMessage = new MqttMessage(); mqttMessage.setPayload(payloadStr.getBytes()); - client.publish(MqttTopics.GATEWAY_ATTRIBUTES_REQUEST_TOPIC, mqttMessage); - callback.getLatch().await(3, TimeUnit.SECONDS); + client.publish(MqttTopics.GATEWAY_ATTRIBUTES_REQUEST_TOPIC, mqttMessage).waitForCompletion(TimeUnit.MINUTES.toMillis(1)); + callback.getLatch().await(1, TimeUnit.MINUTES); assertEquals(MqttQoS.AT_LEAST_ONCE.value(), callback.getQoS()); String expectedRequestPayload = "{\"id\":1,\"device\":\"" + "Gateway Device Request Attributes" + "\",\"values\":{\"attribute1\":\"value1\",\"attribute2\":true,\"attribute3\":42.0,\"attribute4\":73,\"attribute5\":{\"someNumber\":42,\"someArray\":[1,2,3],\"someNestedObject\":{\"key\":\"value\"}}}}"; assertEquals(JacksonUtil.toJsonNode(expectedRequestPayload), JacksonUtil.toJsonNode(new String(callback.getPayloadBytes(), StandardCharsets.UTF_8))); @@ -141,8 +141,8 @@ public abstract class AbstractMqttAttributesRequestIntegrationTest extends Abstr String payloadStr = "{\"id\": 1, \"device\": \"" + "Gateway Device Request Attributes" + "\", \"client\": false, \"keys\": [\"attribute1\", \"attribute2\", \"attribute3\", \"attribute4\", \"attribute5\"]}"; MqttMessage mqttMessage = new MqttMessage(); mqttMessage.setPayload(payloadStr.getBytes()); - client.publish(MqttTopics.GATEWAY_ATTRIBUTES_REQUEST_TOPIC, mqttMessage); - callback.getLatch().await(3, TimeUnit.SECONDS); + client.publish(MqttTopics.GATEWAY_ATTRIBUTES_REQUEST_TOPIC, mqttMessage).waitForCompletion(TimeUnit.MINUTES.toMillis(1)); + callback.getLatch().await(1, TimeUnit.MINUTES); assertEquals(MqttQoS.AT_LEAST_ONCE.value(), callback.getQoS()); String expectedRequestPayload = "{\"id\":1,\"device\":\"" + "Gateway Device Request Attributes" + "\",\"values\":{\"attribute1\":\"value1\",\"attribute2\":true,\"attribute3\":42.0,\"attribute4\":73,\"attribute5\":{\"someNumber\":42,\"someArray\":[1,2,3],\"someNestedObject\":{\"key\":\"value\"}}}}"; assertEquals(JacksonUtil.toJsonNode(expectedRequestPayload), JacksonUtil.toJsonNode(new String(callback.getPayloadBytes(), StandardCharsets.UTF_8))); diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/uplink/DefaultLwM2MUplinkMsgHandler.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/uplink/DefaultLwM2MUplinkMsgHandler.java index 257fff72eb..799ba54b4a 100644 --- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/uplink/DefaultLwM2MUplinkMsgHandler.java +++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/uplink/DefaultLwM2MUplinkMsgHandler.java @@ -422,6 +422,7 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl private void sendReadRequests(LwM2mClient lwM2MClient, Lwm2mDeviceProfileTransportConfiguration profile, Set supportedObjects) { Set targetIds = new HashSet<>(profile.getObserveAttr().getAttribute()); targetIds.addAll(profile.getObserveAttr().getTelemetry()); + targetIds = diffSets(profile.getObserveAttr().getObserve(), targetIds); targetIds = targetIds.stream().filter(target -> isSupportedTargetId(supportedObjects, target)).collect(Collectors.toSet()); CountDownLatch latch = new CountDownLatch(targetIds.size()); diff --git a/dao/src/main/resources/sql/schema-entities-hsql.sql b/dao/src/main/resources/sql/schema-entities-hsql.sql index 812f65fce5..be227828d6 100644 --- a/dao/src/main/resources/sql/schema-entities-hsql.sql +++ b/dao/src/main/resources/sql/schema-entities-hsql.sql @@ -14,6 +14,9 @@ -- limitations under the License. -- +SET DATABASE SQL SYNTAX PGS TRUE; +SET DATABASE TRANSACTION CONTROL MVCC; + CREATE TABLE IF NOT EXISTS admin_settings ( id uuid NOT NULL CONSTRAINT admin_settings_pkey PRIMARY KEY, created_time bigint NOT NULL, diff --git a/dao/src/main/resources/sql/schema-ts-hsql.sql b/dao/src/main/resources/sql/schema-ts-hsql.sql index 2897938c67..3a54438340 100644 --- a/dao/src/main/resources/sql/schema-ts-hsql.sql +++ b/dao/src/main/resources/sql/schema-ts-hsql.sql @@ -15,6 +15,7 @@ -- SET DATABASE SQL SYNTAX PGS TRUE; +SET DATABASE TRANSACTION CONTROL MVCC; CREATE TABLE IF NOT EXISTS ts_kv ( entity_id uuid NOT NULL, diff --git a/msa/black-box-tests/pom.xml b/msa/black-box-tests/pom.xml index 5c6740e61d..7840b2ecf2 100644 --- a/msa/black-box-tests/pom.xml +++ b/msa/black-box-tests/pom.xml @@ -34,7 +34,6 @@ UTF-8 ${basedir}/../.. - true 1.11.4 1.10 4.5.13 @@ -92,8 +91,47 @@ org.thingsboard rest-client + + org.thingsboard.msa + js-executor + docker-info + + + org.thingsboard.msa + web-ui + docker-info + + + org.thingsboard.msa + tb-node + docker-info + + + org.thingsboard.msa.transport + coap + docker-info + + + org.thingsboard.msa.transport + http + docker-info + + + org.thingsboard.msa.transport + mqtt + docker-info + + + org.thingsboard.msa.transport + lwm2m + docker-info + + + org.thingsboard.msa.transport + snmp + docker-info + - diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ThingsBoardDbInstaller.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ThingsBoardDbInstaller.java index 6308b603c3..e3b5fe2263 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ThingsBoardDbInstaller.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ThingsBoardDbInstaller.java @@ -15,6 +15,7 @@ */ package org.thingsboard.server.msa; +import org.apache.commons.lang3.RandomStringUtils; import org.junit.rules.ExternalResource; import org.testcontainers.utility.Base58; @@ -136,13 +137,15 @@ public class ThingsBoardDbInstaller extends ExternalResource { File tbLogsDir = new File(targetDir); tbLogsDir.mkdirs(); - dockerCompose.withCommand("run -d --rm --name tb-logs-container -v " + volumeName + ":/root alpine tail -f /dev/null"); + String logsContainerName = "tb-logs-container-" + RandomStringUtils.randomAlphanumeric(10); + + dockerCompose.withCommand("run -d --rm --name " + logsContainerName + " -v " + volumeName + ":/root alpine tail -f /dev/null"); dockerCompose.invokeDocker(); - dockerCompose.withCommand("cp tb-logs-container:/root/. "+tbLogsDir.getAbsolutePath()); + dockerCompose.withCommand("cp " + logsContainerName + ":/root/. "+tbLogsDir.getAbsolutePath()); dockerCompose.invokeDocker(); - dockerCompose.withCommand("rm -f tb-logs-container"); + dockerCompose.withCommand("rm -f " + logsContainerName); dockerCompose.invokeDocker(); } diff --git a/msa/js-executor/pom.xml b/msa/js-executor/pom.xml index a254b1acde..03ccd23714 100644 --- a/msa/js-executor/pom.xml +++ b/msa/js-executor/pom.xml @@ -59,7 +59,6 @@ com.github.eirslett frontend-maven-plugin - 1.7.5 target ${basedir} @@ -149,7 +148,6 @@ com.github.eirslett frontend-maven-plugin - 1.7.5 target ${basedir} diff --git a/msa/pom.xml b/msa/pom.xml index 3d7bf3f347..79dce4ae87 100644 --- a/msa/pom.xml +++ b/msa/pom.xml @@ -33,6 +33,8 @@ ${basedir}/.. thingsboard true + true + 1.4.13 @@ -41,16 +43,37 @@ web-ui tb-node transport - black-box-tests + + + black-box-tests + + + blackBoxTests.skip + false + + + + black-box-tests + + + + + + + com.spotify + dockerfile-maven-extension + ${dockerfile-maven.version} + + com.spotify dockerfile-maven-plugin - 1.4.13 + ${dockerfile-maven.version} diff --git a/msa/web-ui/pom.xml b/msa/web-ui/pom.xml index 85f5db6ce3..d9b99a5a50 100644 --- a/msa/web-ui/pom.xml +++ b/msa/web-ui/pom.xml @@ -68,7 +68,6 @@ com.github.eirslett frontend-maven-plugin - 1.7.5 target ${basedir} @@ -196,7 +195,6 @@ com.github.eirslett frontend-maven-plugin - 1.7.5 target ${basedir} diff --git a/pom.xml b/pom.xml index 248baec7cd..6d54fcdaa5 100755 --- a/pom.xml +++ b/pom.xml @@ -635,6 +635,11 @@ gradle-maven-plugin 1.0.10 + + com.github.eirslett + frontend-maven-plugin + 1.12.0 + org.apache.maven.plugins maven-surefire-plugin @@ -960,6 +965,62 @@ ${project.version} test + + org.thingsboard.msa + js-executor + ${project.version} + docker-info + test + + + org.thingsboard.msa + web-ui + ${project.version} + docker-info + test + + + org.thingsboard.msa + tb-node + ${project.version} + docker-info + test + + + org.thingsboard.msa.transport + coap + ${project.version} + docker-info + test + + + org.thingsboard.msa.transport + http + ${project.version} + docker-info + test + + + org.thingsboard.msa.transport + mqtt + ${project.version} + docker-info + test + + + org.thingsboard.msa.transport + lwm2m + ${project.version} + docker-info + test + + + org.thingsboard.msa.transport + snmp + ${project.version} + docker-info + test + org.thingsboard dao diff --git a/ui-ngx/pom.xml b/ui-ngx/pom.xml index fb8c809260..73249759bc 100644 --- a/ui-ngx/pom.xml +++ b/ui-ngx/pom.xml @@ -45,7 +45,6 @@ com.github.eirslett frontend-maven-plugin - 1.7.5 target ${basedir} @@ -85,7 +84,6 @@ com.github.eirslett frontend-maven-plugin - 1.7.5 target ${basedir} @@ -117,7 +115,6 @@ com.github.eirslett frontend-maven-plugin - 1.7.5 target ${basedir}