added trim to json parsing, updated test

This commit is contained in:
dashevchenko 2025-07-30 18:38:00 +03:00
parent 7be97f379c
commit 6ae8cdf623
2 changed files with 11 additions and 13 deletions

View File

@ -38,6 +38,7 @@ import org.springframework.test.context.ContextConfiguration;
import org.testcontainers.shaded.org.awaitility.Awaitility; import org.testcontainers.shaded.org.awaitility.Awaitility;
import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.common.util.ThingsBoardExecutors; import org.thingsboard.common.util.ThingsBoardExecutors;
import org.thingsboard.server.common.data.AttributeScope;
import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.Customer;
import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.Device;
import org.thingsboard.server.common.data.DeviceInfo; import org.thingsboard.server.common.data.DeviceInfo;
@ -59,6 +60,7 @@ import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.DeviceCredentialsId; import org.thingsboard.server.common.data.id.DeviceCredentialsId;
import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.kv.AttributeKvEntry;
import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.common.data.relation.EntityRelation; import org.thingsboard.server.common.data.relation.EntityRelation;
@ -82,10 +84,10 @@ import org.thingsboard.server.utils.CsvUtils;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@ -1595,11 +1597,11 @@ public class DeviceControllerTest extends AbstractControllerTest {
public void testBulkImportDeviceWithJsonAttr() throws Exception { public void testBulkImportDeviceWithJsonAttr() throws Exception {
String deviceName = "some_device"; String deviceName = "some_device";
String deviceType = "some_type"; String deviceType = "some_type";
JsonNode deviceAttr = JacksonUtil.toJsonNode("{\"threshold\": 45}"); String deviceAttr = "{\"threshold\":45}";
List<List<String>> content = new LinkedList<>(); List<List<String>> content = new LinkedList<>();
content.add(Arrays.asList("NAME", "TYPE", "ATTR")); content.add(Arrays.asList("NAME", "TYPE", "ATTR"));
content.add(Arrays.asList(deviceName, deviceType, deviceAttr.toString())); content.add(Arrays.asList(deviceName, deviceType, deviceAttr));
byte[] bytes = CsvUtils.generateCsv(content); byte[] bytes = CsvUtils.generateCsv(content);
BulkImportRequest request = new BulkImportRequest(); BulkImportRequest request = new BulkImportRequest();
@ -1636,14 +1638,9 @@ public class DeviceControllerTest extends AbstractControllerTest {
Assert.assertEquals(deviceName, savedDevice.getName()); Assert.assertEquals(deviceName, savedDevice.getName());
Assert.assertEquals(deviceType, savedDevice.getType()); Assert.assertEquals(deviceType, savedDevice.getType());
//check server attribute value Optional<AttributeKvEntry> retrieved = attributesService.find(tenantId, savedDevice.getId(), AttributeScope.SERVER_SCOPE, "attr").get();
await().atMost(TIMEOUT, TimeUnit.SECONDS).untilAsserted(() -> { assertThat(retrieved.get().getJsonValue().get()).isEqualTo(deviceAttr);
Map<String, Object> actualAttribute = doGetAsyncTyped("/api/plugins/telemetry/DEVICE/" + savedDevice.getId() + assertThat(retrieved.get().getStrValue()).isNotPresent();
"/values/attributes/SERVER_SCOPE", new TypeReference<List<Map<String, Object>>>() {}).stream()
.filter(att -> att.get("key").equals("attr")).findFirst().get();
LinkedHashMap<String, Object> expected = JacksonUtil.convertValue(deviceAttr, new TypeReference<>() {});
Assert.assertEquals(expected, actualAttribute.get("value"));
});
} }
@Test @Test

View File

@ -77,8 +77,9 @@ public class TypeCastUtil {
} }
private static boolean looksLikeJson(String value) { private static boolean looksLikeJson(String value) {
return (value.startsWith("{") && value.endsWith("}")) || String trimmed = value.trim();
(value.startsWith("[") && value.endsWith("]")); return (trimmed.startsWith("{") && trimmed.endsWith("}")) ||
(trimmed.startsWith("[") && trimmed.endsWith("]"));
} }
} }