committed by
GitHub
11 changed files with 296 additions and 22 deletions
@ -0,0 +1,92 @@ |
|||||
|
/** |
||||
|
* Copyright © 2016-2025 The Thingsboard Authors |
||||
|
* |
||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
|
* you may not use this file except in compliance with the License. |
||||
|
* You may obtain a copy of the License at |
||||
|
* |
||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
* |
||||
|
* Unless required by applicable law or agreed to in writing, software |
||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
|
* See the License for the specific language governing permissions and |
||||
|
* limitations under the License. |
||||
|
*/ |
||||
|
package org.thingsboard.server.transport.lwm2m.rpc.sql; |
||||
|
|
||||
|
import com.fasterxml.jackson.core.type.TypeReference; |
||||
|
import com.fasterxml.jackson.databind.node.ObjectNode; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.junit.Test; |
||||
|
import org.thingsboard.server.transport.lwm2m.rpc.AbstractRpcLwM2MIntegrationTest; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.concurrent.atomic.AtomicReference; |
||||
|
|
||||
|
import static java.util.concurrent.TimeUnit.SECONDS; |
||||
|
import static org.awaitility.Awaitility.await; |
||||
|
import static org.thingsboard.server.transport.lwm2m.Lwm2mTestHelper.OBJECT_INSTANCE_ID_0; |
||||
|
import static org.thingsboard.server.transport.lwm2m.Lwm2mTestHelper.RESOURCE_ID_2; |
||||
|
import static org.thingsboard.server.transport.lwm2m.Lwm2mTestHelper.RESOURCE_ID_6; |
||||
|
import static org.thingsboard.server.transport.lwm2m.Lwm2mTestHelper.RESOURCE_ID_7; |
||||
|
import static org.thingsboard.server.transport.lwm2m.Lwm2mTestHelper.RESOURCE_ID_9; |
||||
|
|
||||
|
@Slf4j |
||||
|
public class RpcLwm2mIntegrationInitReadCompositeAllTest extends AbstractRpcLwM2MIntegrationTest { |
||||
|
|
||||
|
/** |
||||
|
" \"/3_1.2/0/9\": \"batteryLevel\", - Telemetry |
||||
|
" \"/3_1.2/0/20\": \"batteryStatus\" - Observe, Telemetry |
||||
|
" \"/5_1.2/0/6\": \"pkgname\" - Attributes |
||||
|
" \"/5_1.2/0/7\": \"pkgversion\" - Attributes |
||||
|
" \"/5_1.2/0/9\": \"firmwareUpdateDeliveryMethod\"\ - Telemetry |
||||
|
" \"/19_1.1/0/2\": \"dataCreationTime\" - Telemetry |
||||
|
* "observeStrategy": 1 |
||||
|
*/ |
||||
|
@Test |
||||
|
public void testInitReadCompositeAsObserveStrategyCompositeAll() throws Exception { |
||||
|
|
||||
|
|
||||
|
// init test
|
||||
|
String RESOURCE_3_9 = "batteryLevel"; |
||||
|
String RESOURCE_3_20 = "batteryStatus"; |
||||
|
String RESOURCE_5_6 = "pkgname"; |
||||
|
String RESOURCE_5_7 = "pkgversion"; |
||||
|
String RESOURCE_5_9 = "firmwareUpdateDeliveryMethod"; |
||||
|
String RESOURCE_19_2 = "dataCreationTime"; |
||||
|
|
||||
|
String idVwr_3_0_20 = idVer_3_0_9 = objectIdVer_3 + "/" + OBJECT_INSTANCE_ID_0 + "/" + 20; |
||||
|
String IdVer5_0_6 = objectInstanceIdVer_5 + "/" + RESOURCE_ID_6; |
||||
|
String IdVer5_0_7 = objectInstanceIdVer_5 + "/" + RESOURCE_ID_7; |
||||
|
String IdVer5_0_9 = objectInstanceIdVer_5 + "/" + RESOURCE_ID_9; |
||||
|
String idVer_19_0_2 = objectIdVer_19 + "/" + OBJECT_INSTANCE_ID_0 + "/" + RESOURCE_ID_2; |
||||
|
countUpdateAttrTelemetryResource(idVer_3_0_9); |
||||
|
countUpdateAttrTelemetryResource(idVwr_3_0_20); |
||||
|
countUpdateAttrTelemetryResource(IdVer5_0_6); |
||||
|
countUpdateAttrTelemetryResource(IdVer5_0_7); |
||||
|
countUpdateAttrTelemetryResource(IdVer5_0_9); |
||||
|
countUpdateAttrTelemetryResource(idVer_19_0_2); |
||||
|
|
||||
|
|
||||
|
AtomicReference<ObjectNode> actualValues = new AtomicReference<>(); |
||||
|
await().atMost(40, SECONDS).until(() -> { |
||||
|
actualValues.set(doGetAsync( |
||||
|
"/api/plugins/telemetry/DEVICE/" + lwM2MTestClient.getDeviceIdStr() + "/values/timeseries?keys=" |
||||
|
+ RESOURCE_3_9 + "," + RESOURCE_3_20 + "," + RESOURCE_5_9 + "," + RESOURCE_19_2, ObjectNode.class)); |
||||
|
return actualValues.get() != null && !actualValues.get().isEmpty() |
||||
|
&& !actualValues.get().get(RESOURCE_3_9).isEmpty() |
||||
|
&& !actualValues.get().get(RESOURCE_3_20).isEmpty() |
||||
|
&& !actualValues.get().get(RESOURCE_5_9).isEmpty() |
||||
|
&& !actualValues.get().get(RESOURCE_19_2).isEmpty(); |
||||
|
}); |
||||
|
|
||||
|
AtomicReference<List<String>> actualKeys =new AtomicReference<>(); |
||||
|
await().atMost(40, SECONDS).until(() -> { |
||||
|
actualKeys.set(doGetAsyncTyped("/api/plugins/telemetry/DEVICE/" + lwM2MTestClient.getDeviceIdStr() + "/keys/attributes/CLIENT_SCOPE", new TypeReference<>() { |
||||
|
})); |
||||
|
return actualKeys.get() != null && !actualKeys.get().isEmpty() && !actualKeys.get().isEmpty() |
||||
|
&& actualKeys.get().contains(RESOURCE_5_6)&& actualKeys.get().contains(RESOURCE_5_7); |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,92 @@ |
|||||
|
/** |
||||
|
* Copyright © 2016-2025 The Thingsboard Authors |
||||
|
* |
||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
|
* you may not use this file except in compliance with the License. |
||||
|
* You may obtain a copy of the License at |
||||
|
* |
||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
* |
||||
|
* Unless required by applicable law or agreed to in writing, software |
||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
|
* See the License for the specific language governing permissions and |
||||
|
* limitations under the License. |
||||
|
*/ |
||||
|
package org.thingsboard.server.transport.lwm2m.rpc.sql; |
||||
|
|
||||
|
import com.fasterxml.jackson.core.type.TypeReference; |
||||
|
import com.fasterxml.jackson.databind.node.ObjectNode; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.junit.Test; |
||||
|
import org.thingsboard.server.transport.lwm2m.rpc.AbstractRpcLwM2MIntegrationTest; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.concurrent.atomic.AtomicReference; |
||||
|
|
||||
|
import static java.util.concurrent.TimeUnit.SECONDS; |
||||
|
import static org.awaitility.Awaitility.await; |
||||
|
import static org.thingsboard.server.transport.lwm2m.Lwm2mTestHelper.OBJECT_INSTANCE_ID_0; |
||||
|
import static org.thingsboard.server.transport.lwm2m.Lwm2mTestHelper.RESOURCE_ID_2; |
||||
|
import static org.thingsboard.server.transport.lwm2m.Lwm2mTestHelper.RESOURCE_ID_6; |
||||
|
import static org.thingsboard.server.transport.lwm2m.Lwm2mTestHelper.RESOURCE_ID_7; |
||||
|
import static org.thingsboard.server.transport.lwm2m.Lwm2mTestHelper.RESOURCE_ID_9; |
||||
|
|
||||
|
@Slf4j |
||||
|
public class RpcLwm2mIntegrationInitReadCompositeByObjectTest extends AbstractRpcLwM2MIntegrationTest { |
||||
|
|
||||
|
/** |
||||
|
" \"/3_1.2/0/9\": \"batteryLevel\", - Telemetry |
||||
|
" \"/3_1.2/0/20\": \"batteryStatus\" - Observe, Telemetry |
||||
|
" \"/5_1.2/0/6\": \"pkgname\" - Attributes |
||||
|
" \"/5_1.2/0/7\": \"pkgversion\" - Attributes |
||||
|
" \"/5_1.2/0/9\": \"firmwareUpdateDeliveryMethod\"\ - Telemetry |
||||
|
" \"/19_1.1/0/2\": \"dataCreationTime\" - Telemetry |
||||
|
* "observeStrategy": 2 |
||||
|
*/ |
||||
|
@Test |
||||
|
public void testInitReadCompositeAsObserveStrategyCompositeByObject() throws Exception { |
||||
|
|
||||
|
|
||||
|
// init test
|
||||
|
String RESOURCE_3_9 = "batteryLevel"; |
||||
|
String RESOURCE_3_20 = "batteryStatus"; |
||||
|
String RESOURCE_5_6 = "pkgname"; |
||||
|
String RESOURCE_5_7 = "pkgversion"; |
||||
|
String RESOURCE_5_9 = "firmwareUpdateDeliveryMethod"; |
||||
|
String RESOURCE_19_2 = "dataCreationTime"; |
||||
|
|
||||
|
String idVwr_3_0_20 = idVer_3_0_9 = objectIdVer_3 + "/" + OBJECT_INSTANCE_ID_0 + "/" + 20; |
||||
|
String IdVer5_0_6 = objectInstanceIdVer_5 + "/" + RESOURCE_ID_6; |
||||
|
String IdVer5_0_7 = objectInstanceIdVer_5 + "/" + RESOURCE_ID_7; |
||||
|
String IdVer5_0_9 = objectInstanceIdVer_5 + "/" + RESOURCE_ID_9; |
||||
|
String idVer_19_0_2 = objectIdVer_19 + "/" + OBJECT_INSTANCE_ID_0 + "/" + RESOURCE_ID_2; |
||||
|
countUpdateAttrTelemetryResource(idVer_3_0_9); |
||||
|
countUpdateAttrTelemetryResource(idVwr_3_0_20); |
||||
|
countUpdateAttrTelemetryResource(IdVer5_0_6); |
||||
|
countUpdateAttrTelemetryResource(IdVer5_0_7); |
||||
|
countUpdateAttrTelemetryResource(IdVer5_0_9); |
||||
|
countUpdateAttrTelemetryResource(idVer_19_0_2); |
||||
|
|
||||
|
|
||||
|
AtomicReference<ObjectNode> actualValues = new AtomicReference<>(); |
||||
|
await().atMost(40, SECONDS).until(() -> { |
||||
|
actualValues.set(doGetAsync( |
||||
|
"/api/plugins/telemetry/DEVICE/" + lwM2MTestClient.getDeviceIdStr() + "/values/timeseries?keys=" |
||||
|
+ RESOURCE_3_9 + "," + RESOURCE_3_20 + "," + RESOURCE_5_9 + "," + RESOURCE_19_2, ObjectNode.class)); |
||||
|
return actualValues.get() != null && !actualValues.get().isEmpty() |
||||
|
&& !actualValues.get().get(RESOURCE_3_9).isEmpty() |
||||
|
&& !actualValues.get().get(RESOURCE_3_20).isEmpty() |
||||
|
&& !actualValues.get().get(RESOURCE_5_9).isEmpty() |
||||
|
&& !actualValues.get().get(RESOURCE_19_2).isEmpty(); |
||||
|
}); |
||||
|
|
||||
|
AtomicReference<List<String>> actualKeys =new AtomicReference<>(); |
||||
|
await().atMost(40, SECONDS).until(() -> { |
||||
|
actualKeys.set(doGetAsyncTyped("/api/plugins/telemetry/DEVICE/" + lwM2MTestClient.getDeviceIdStr() + "/keys/attributes/CLIENT_SCOPE", new TypeReference<>() { |
||||
|
})); |
||||
|
return actualKeys.get() != null && !actualKeys.get().isEmpty() && !actualKeys.get().isEmpty() |
||||
|
&& actualKeys.get().contains(RESOURCE_5_6)&& actualKeys.get().contains(RESOURCE_5_7); |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue