Browse Source

added tests for proto entities

pull/9851/head
YevhenBondarenko 3 years ago
parent
commit
71bd6f2bd2
  1. 6
      common/proto/pom.xml
  2. 20
      common/proto/src/main/java/org/thingsboard/server/common/util/ProtoUtils.java
  3. 31
      common/proto/src/main/proto/queue.proto
  4. 82
      common/proto/src/test/java/org/thingsboard/server/common/util/ProtoUtilsTest.java
  5. 7
      pom.xml

6
common/proto/pom.xml

@ -76,6 +76,12 @@
<artifactId>awaitility</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jeasy</groupId>
<artifactId>easy-random-core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>

20
common/proto/src/main/java/org/thingsboard/server/common/util/ProtoUtils.java

@ -38,6 +38,7 @@ import org.thingsboard.server.common.data.device.data.PowerSavingConfiguration;
import org.thingsboard.server.common.data.id.ApiUsageStateId;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.DashboardId;
import org.thingsboard.server.common.data.id.DeviceCredentialsId;
import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.data.id.DeviceProfileId;
import org.thingsboard.server.common.data.id.EdgeId;
@ -624,7 +625,7 @@ public class ProtoUtils {
}
if (isNotNull(deviceProfile.getDefaultRuleChainId())) {
builder.setDefaultRuleChainIdMSB(getMsb(deviceProfile.getDefaultRuleChainId()))
.setDefaultRuleChainIdLSB(getMsb(deviceProfile.getDefaultRuleChainId()));
.setDefaultRuleChainIdLSB(getLsb(deviceProfile.getDefaultRuleChainId()));
}
if (isNotNull(deviceProfile.getDefaultDashboardId())) {
builder.setDefaultDashboardIdMSB(getMsb(deviceProfile.getDefaultDashboardId()))
@ -744,7 +745,7 @@ public class ProtoUtils {
Tenant tenant = new Tenant(getEntityId(proto.getTenantIdMSB(), proto.getTenantIdLSB(), TenantId::new));
tenant.setCreatedTime(proto.getCreatedTime());
tenant.setTenantProfileId(getEntityId(proto.getTenantProfileIdMSB(), proto.getTenantProfileIdLSB(), TenantProfileId::new));
tenant.setTitle(tenant.getTitle());
tenant.setTitle(proto.getTitle());
if (proto.hasRegion()) {
tenant.setRegion(proto.getRegion());
@ -822,8 +823,12 @@ public class ProtoUtils {
.setTitle(resource.getTitle())
.setResourceType(resource.getResourceType().name())
.setResourceKey(resource.getResourceKey())
.setIsPublic(resource.isPublic())
.setSearchText(resource.getSearchText())
.setFileName(resource.getFileName());
if (isNotNull(resource.getPublicResourceKey())) {
builder.setPublicResourceKey(resource.getPublicResourceKey());
}
if (isNotNull(resource.getEtag())) {
builder.setEtag(resource.getEtag());
}
@ -850,8 +855,12 @@ public class ProtoUtils {
resource.setTitle(proto.getTitle());
resource.setResourceType(ResourceType.valueOf(proto.getResourceType()));
resource.setResourceKey(proto.getResourceKey());
resource.setPublic(proto.getIsPublic());
resource.setSearchText(proto.getSearchText());
resource.setFileName(proto.getFileName());
if (proto.hasPublicResourceKey()) {
resource.setPublicResourceKey(proto.getPublicResourceKey());
}
if (proto.hasEtag()) {
resource.setEtag(proto.getEtag());
}
@ -963,6 +972,9 @@ public class ProtoUtils {
public static TransportProtos.DeviceCredentialsProto toProto(DeviceCredentials deviceCredentials) {
TransportProtos.DeviceCredentialsProto.Builder builder = TransportProtos.DeviceCredentialsProto.newBuilder()
.setCredentialsIdMSB(deviceCredentials.getId().getId().getMostSignificantBits())
.setCredentialsIdLSB(deviceCredentials.getId().getId().getLeastSignificantBits())
.setCreatedTime(deviceCredentials.getCreatedTime())
.setDeviceIdMSB(getMsb(deviceCredentials.getDeviceId()))
.setDeviceIdLSB(getLsb(deviceCredentials.getDeviceId()))
.setCredentialsId(deviceCredentials.getCredentialsId())
@ -975,7 +987,9 @@ public class ProtoUtils {
}
public static DeviceCredentials fromProto(TransportProtos.DeviceCredentialsProto proto) {
DeviceCredentials deviceCredentials = new DeviceCredentials();
DeviceCredentials deviceCredentials =
new DeviceCredentials(new DeviceCredentialsId(new UUID(proto.getCredentialsIdMSB(), proto.getCredentialsIdLSB())));
deviceCredentials.setCreatedTime(proto.getCreatedTime());
deviceCredentials.setDeviceId(getEntityId(proto.getDeviceIdMSB(), proto.getDeviceIdLSB(), DeviceId::new));
deviceCredentials.setCredentialsId(proto.getCredentialsId());
deviceCredentials.setCredentialsType(DeviceCredentialsType.valueOf(proto.getCredentialsType().name()));

31
common/proto/src/main/proto/queue.proto

@ -275,14 +275,16 @@ message TbResourceProto {
string title = 6;
string resourceType = 7;
string resourceKey = 8;
string searchText = 9;
optional string etag = 10;
string fileName = 11;
optional string resourceDescriptor = 12;
optional int64 externalIdMSB = 13;
optional int64 externalIdLSB = 14;
optional bytes data = 15;
optional bytes preview = 16;
bool isPublic = 9;
optional string publicResourceKey = 10;
string searchText = 11;
optional string etag = 12;
string fileName = 13;
optional string resourceDescriptor = 14;
optional int64 externalIdMSB = 15;
optional int64 externalIdLSB = 16;
optional bytes data = 17;
optional bytes preview = 18;
}
message ApiUsageStateProto {
@ -637,11 +639,14 @@ message ClaimDeviceMsg {
}
message DeviceCredentialsProto {
int64 deviceIdMSB = 1;
int64 deviceIdLSB = 2;
CredentialsType credentialsType = 3;
string credentialsId = 4;
optional string credentialsValue = 5;
int64 credentialsIdMSB = 1;
int64 credentialsIdLSB = 2;
int64 createdTime = 3;
int64 deviceIdMSB = 4;
int64 deviceIdLSB = 5;
CredentialsType credentialsType = 6;
string credentialsId = 7;
optional string credentialsValue = 8;
}
message CredentialsDataProto {

82
common/proto/src/test/java/org/thingsboard/server/common/util/ProtoUtilsTest.java

@ -15,9 +15,25 @@
*/
package org.thingsboard.server.common.util;
import com.fasterxml.jackson.databind.JsonNode;
import org.jeasy.random.EasyRandom;
import org.jeasy.random.EasyRandomParameters;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.server.common.data.ApiUsageState;
import org.thingsboard.server.common.data.Device;
import org.thingsboard.server.common.data.DeviceProfile;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.TbResource;
import org.thingsboard.server.common.data.Tenant;
import org.thingsboard.server.common.data.TenantProfile;
import org.thingsboard.server.common.data.device.data.DefaultDeviceConfiguration;
import org.thingsboard.server.common.data.device.data.DefaultDeviceTransportConfiguration;
import org.thingsboard.server.common.data.device.data.DeviceConfiguration;
import org.thingsboard.server.common.data.device.data.DeviceTransportConfiguration;
import org.thingsboard.server.common.data.device.profile.DeviceProfileData;
import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.data.id.EdgeId;
import org.thingsboard.server.common.data.id.EntityId;
@ -34,6 +50,9 @@ import org.thingsboard.server.common.data.rpc.RpcError;
import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody;
import org.thingsboard.server.common.data.security.DeviceCredentials;
import org.thingsboard.server.common.data.security.DeviceCredentialsType;
import org.thingsboard.server.common.data.sync.vc.RepositorySettings;
import org.thingsboard.server.common.data.tenant.profile.DefaultTenantProfileConfiguration;
import org.thingsboard.server.common.data.tenant.profile.TenantProfileConfiguration;
import org.thingsboard.server.common.msg.edge.EdgeEventUpdateMsg;
import org.thingsboard.server.common.msg.edge.FromEdgeSyncResponse;
import org.thingsboard.server.common.msg.edge.ToEdgeSyncRequest;
@ -62,6 +81,19 @@ class ProtoUtilsTest {
DeviceId deviceId = new DeviceId(UUID.fromString("ceebb9e5-4239-437c-a507-dc5f71f1232d"));
EdgeId edgeId = new EdgeId(UUID.fromString("364be452-2183-459b-af93-1ddb325feac1"));
UUID id = UUID.fromString("31a07d85-6ed5-46f8-83c0-6715cb0a8782");
static EasyRandom easyRandom;
@BeforeAll
static void init() {
EasyRandomParameters parameters = new EasyRandomParameters()
.randomize(DeviceConfiguration.class, DefaultDeviceConfiguration::new)
.randomize(DeviceTransportConfiguration.class, DefaultDeviceTransportConfiguration::new)
.randomize(JsonNode.class, JacksonUtil::newObjectNode)
.randomize(DeviceProfileData.class, DeviceProfileData::new)
.randomize(TenantProfileConfiguration.class, DefaultTenantProfileConfiguration::new)
.randomize(EntityId.class, () -> new DeviceId(UUID.randomUUID()));
easyRandom = new EasyRandom(parameters);
}
@Test
void protoComponentLifecycleSerialization() {
@ -179,4 +211,54 @@ class ProtoUtilsTest {
Assertions.assertNotNull(serializedMsg);
assertThat(ProtoUtils.fromProto(serializedMsg)).as("deserialized").isEqualTo(msg);
}
private static final String description = "Failed to deserialize %s, because found some new fields which absent in %sProto!!!";
@Test
void protoSerializationDeserializationEntities() {
Device expectedDevice = easyRandom.nextObject(Device.class);
TransportProtos.DeviceProto deviceProto = ProtoUtils.toProto(expectedDevice);
Device actualDevice = ProtoUtils.fromProto(deviceProto);
assertEqualDeserializedEntity(expectedDevice, actualDevice, "Device");
DeviceCredentials expectedCredentials = easyRandom.nextObject(DeviceCredentials.class);
TransportProtos.DeviceCredentialsProto credentialsProto = ProtoUtils.toProto(expectedCredentials);
DeviceCredentials actualCredentials = ProtoUtils.fromProto(credentialsProto);
assertEqualDeserializedEntity(expectedCredentials, actualCredentials, "DeviceCredentials");
DeviceProfile expectedDeviceProfile = easyRandom.nextObject(DeviceProfile.class);
TransportProtos.DeviceProfileProto deviceProfileProto = ProtoUtils.toProto(expectedDeviceProfile);
DeviceProfile actualDeviceProfile = ProtoUtils.fromProto(deviceProfileProto);
assertEqualDeserializedEntity(expectedDeviceProfile, actualDeviceProfile, "DeviceProfile");
Tenant expectedTenant = easyRandom.nextObject(Tenant.class);
TransportProtos.TenantProto tenantProto = ProtoUtils.toProto(expectedTenant);
Tenant actualTenant = ProtoUtils.fromProto(tenantProto);
assertEqualDeserializedEntity(expectedTenant, actualTenant, "Tenant");
TenantProfile expectedTenantProfile = easyRandom.nextObject(TenantProfile.class);
TransportProtos.TenantProfileProto tenantProfileProto = ProtoUtils.toProto(expectedTenantProfile);
TenantProfile actualTenantProfile = ProtoUtils.fromProto(tenantProfileProto);
assertEqualDeserializedEntity(expectedTenantProfile, actualTenantProfile, "TenantProfile");
TbResource expectedResource = easyRandom.nextObject(TbResource.class);
TransportProtos.TbResourceProto resourceProto = ProtoUtils.toProto(expectedResource);
TbResource actualResource = ProtoUtils.fromProto(resourceProto);
assertEqualDeserializedEntity(expectedResource, actualResource, "TbResource");
ApiUsageState expectedState = easyRandom.nextObject(ApiUsageState.class);
TransportProtos.ApiUsageStateProto stateProto = ProtoUtils.toProto(expectedState);
ApiUsageState actualState = ProtoUtils.fromProto(stateProto);
assertEqualDeserializedEntity(expectedState, actualState, "ApiUsageState");
RepositorySettings expectedSettings = easyRandom.nextObject(RepositorySettings.class);
TransportProtos.RepositorySettingsProto settingsProto = ProtoUtils.toProto(expectedSettings);
RepositorySettings actualSettings = ProtoUtils.fromProto(settingsProto);
assertEqualDeserializedEntity(expectedSettings, actualSettings, "RepositorySettings");
}
private void assertEqualDeserializedEntity(Object expected, Object actual, String entityName) {
assertThat(actual).as(String.format(description, entityName, entityName)).isEqualTo(expected);
}
}

7
pom.xml

@ -139,6 +139,7 @@
<mock-server.version>5.15.0</mock-server.version>
<spring-test-dbunit.version>1.3.0</spring-test-dbunit.version> <!-- 2016 -->
<takari-cpsuite.version>1.2.7</takari-cpsuite.version> <!-- 2015 -->
<jeasy.version>5.0.0</jeasy.version>
<!-- BLACKBOX TEST SCOPE -->
<testng.version>7.6.1</testng.version>
<assertj.version>3.23.1</assertj.version>
@ -2036,6 +2037,12 @@
<version>${mock-server.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jeasy</groupId>
<artifactId>easy-random-core</artifactId>
<version>${jeasy.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.opensmpp</groupId>
<artifactId>opensmpp-core</artifactId>

Loading…
Cancel
Save