Showing
8 changed files
with
145 additions
and
48 deletions
@@ -62,19 +62,28 @@ public abstract class AbstractMqttIntegrationTest extends AbstractControllerTest | @@ -62,19 +62,28 @@ public abstract class AbstractMqttIntegrationTest extends AbstractControllerTest | ||
62 | 62 | ||
63 | private static final AtomicInteger atomicInteger = new AtomicInteger(2); | 63 | private static final AtomicInteger atomicInteger = new AtomicInteger(2); |
64 | 64 | ||
65 | - protected static final String DEVICE_TELEMETRY_PROTO_SCHEMA = "syntax =\"proto3\";\n" + | 65 | + public static final String DEVICE_TELEMETRY_PROTO_SCHEMA = "syntax =\"proto3\";\n" + |
66 | "\n" + | 66 | "\n" + |
67 | "package test;\n" + | 67 | "package test;\n" + |
68 | - " \n" + | 68 | + "\n" + |
69 | "message PostTelemetry {\n" + | 69 | "message PostTelemetry {\n" + |
70 | " string key1 = 1;\n" + | 70 | " string key1 = 1;\n" + |
71 | " bool key2 = 2;\n" + | 71 | " bool key2 = 2;\n" + |
72 | " double key3 = 3;\n" + | 72 | " double key3 = 3;\n" + |
73 | " int32 key4 = 4;\n" + | 73 | " int32 key4 = 4;\n" + |
74 | - " string key5 = 5;\n" + | 74 | + " JsonObject key5 = 5;\n" + |
75 | + "\n" + | ||
76 | + " message JsonObject {\n" + | ||
77 | + " int32 someNumber = 6;\n" + | ||
78 | + " repeated int32 someArray = 7;\n" + | ||
79 | + " NestedJsonObject someNestedObject = 8;\n" + | ||
80 | + " message NestedJsonObject {\n" + | ||
81 | + " string key = 9;\n" + | ||
82 | + " }\n" + | ||
83 | + " }\n" + | ||
75 | "}"; | 84 | "}"; |
76 | 85 | ||
77 | - protected static final String DEVICE_ATTRIBUTES_PROTO_SCHEMA = "syntax =\"proto3\";\n" + | 86 | + public static final String DEVICE_ATTRIBUTES_PROTO_SCHEMA = "syntax =\"proto3\";\n" + |
78 | "\n" + | 87 | "\n" + |
79 | "package test;\n" + | 88 | "package test;\n" + |
80 | "\n" + | 89 | "\n" + |
@@ -83,7 +92,16 @@ public abstract class AbstractMqttIntegrationTest extends AbstractControllerTest | @@ -83,7 +92,16 @@ public abstract class AbstractMqttIntegrationTest extends AbstractControllerTest | ||
83 | " bool key2 = 2;\n" + | 92 | " bool key2 = 2;\n" + |
84 | " double key3 = 3;\n" + | 93 | " double key3 = 3;\n" + |
85 | " int32 key4 = 4;\n" + | 94 | " int32 key4 = 4;\n" + |
86 | - " string key5 = 5;\n" + | 95 | + " JsonObject key5 = 5;\n" + |
96 | + "\n" + | ||
97 | + " message JsonObject {\n" + | ||
98 | + " int32 someNumber = 6;\n" + | ||
99 | + " repeated int32 someArray = 7;\n" + | ||
100 | + " NestedJsonObject someNestedObject = 8;\n" + | ||
101 | + " message NestedJsonObject {\n" + | ||
102 | + " string key = 9;\n" + | ||
103 | + " }\n" + | ||
104 | + " }\n" + | ||
87 | "}"; | 105 | "}"; |
88 | 106 | ||
89 | protected Tenant savedTenant; | 107 | protected Tenant savedTenant; |
@@ -26,13 +26,13 @@ import java.util.Arrays; | @@ -26,13 +26,13 @@ import java.util.Arrays; | ||
26 | 26 | ||
27 | @RunWith(ClasspathSuite.class) | 27 | @RunWith(ClasspathSuite.class) |
28 | @ClasspathSuite.ClassnameFilters({ | 28 | @ClasspathSuite.ClassnameFilters({ |
29 | -// "org.thingsboard.server.mqtt.rpc.sql.*Test", | ||
30 | -// "org.thingsboard.server.mqtt.telemetry.timeseries.sql.*Test", | ||
31 | -// "org.thingsboard.server.mqtt.telemetry.attributes.sql.*Test", | ||
32 | -// "org.thingsboard.server.mqtt.attributes.updates.sql.*Test", | 29 | + "org.thingsboard.server.mqtt.rpc.sql.*Test", |
30 | + "org.thingsboard.server.mqtt.telemetry.timeseries.sql.*Test", | ||
31 | + "org.thingsboard.server.mqtt.telemetry.attributes.sql.*Test", | ||
32 | + "org.thingsboard.server.mqtt.attributes.updates.sql.*Test", | ||
33 | "org.thingsboard.server.mqtt.attributes.request.sql.*Test", | 33 | "org.thingsboard.server.mqtt.attributes.request.sql.*Test", |
34 | -// "org.thingsboard.server.mqtt.claim.sql.*Test", | ||
35 | -// "org.thingsboard.server.mqtt.provision.sql.*Test" | 34 | + "org.thingsboard.server.mqtt.claim.sql.*Test", |
35 | + "org.thingsboard.server.mqtt.provision.sql.*Test" | ||
36 | }) | 36 | }) |
37 | public class MqttSqlTestSuite { | 37 | public class MqttSqlTestSuite { |
38 | 38 |
@@ -122,7 +122,7 @@ public abstract class AbstractMqttAttributesRequestIntegrationTest extends Abstr | @@ -122,7 +122,7 @@ public abstract class AbstractMqttAttributesRequestIntegrationTest extends Abstr | ||
122 | client.publish(MqttTopics.DEVICE_ATTRIBUTES_REQUEST_TOPIC_PREFIX + "1", mqttMessage); | 122 | client.publish(MqttTopics.DEVICE_ATTRIBUTES_REQUEST_TOPIC_PREFIX + "1", mqttMessage); |
123 | latch.await(3, TimeUnit.SECONDS); | 123 | latch.await(3, TimeUnit.SECONDS); |
124 | assertEquals(MqttQoS.AT_MOST_ONCE.value(), callback.getQoS()); | 124 | assertEquals(MqttQoS.AT_MOST_ONCE.value(), callback.getQoS()); |
125 | - String expectedRequestPayload = "{\"client\":{\"attribute5\":{\"someNumber\":42,\"someArray\":[1,2,3],\"someNestedObject\":{\"key\":\"value\"}},\"attribute4\":73,\"attribute1\":\"value1\",\"attribute3\":42.0,\"attribute2\":true},\"shared\":{\"attribute5\":{\"someNumber\":42,\"someArray\":[1,2,3],\"someNestedObject\":{\"key\":\"value\"}},\"attribute4\":73,\"attribute1\":\"value1\",\"attribute3\":42.0,\"attribute2\":true}}"; | 125 | + 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\"}}}}"; |
126 | assertEquals(JacksonUtil.toJsonNode(expectedRequestPayload), JacksonUtil.toJsonNode(new String(callback.getPayloadBytes(), StandardCharsets.UTF_8))); | 126 | assertEquals(JacksonUtil.toJsonNode(expectedRequestPayload), JacksonUtil.toJsonNode(new String(callback.getPayloadBytes(), StandardCharsets.UTF_8))); |
127 | } | 127 | } |
128 | 128 |
@@ -62,7 +62,16 @@ public abstract class AbstractMqttAttributesRequestProtoIntegrationTest extends | @@ -62,7 +62,16 @@ public abstract class AbstractMqttAttributesRequestProtoIntegrationTest extends | ||
62 | " bool attribute2 = 2;\n" + | 62 | " bool attribute2 = 2;\n" + |
63 | " double attribute3 = 3;\n" + | 63 | " double attribute3 = 3;\n" + |
64 | " int32 attribute4 = 4;\n" + | 64 | " int32 attribute4 = 4;\n" + |
65 | - " string attribute5 = 5;\n" + | 65 | + " JsonObject attribute5 = 5;\n" + |
66 | + "\n" + | ||
67 | + " message JsonObject {\n" + | ||
68 | + " int32 someNumber = 6;\n" + | ||
69 | + " repeated int32 someArray = 7;\n" + | ||
70 | + " NestedJsonObject someNestedObject = 8;\n" + | ||
71 | + " message NestedJsonObject {\n" + | ||
72 | + " string key = 9;\n" + | ||
73 | + " }\n" + | ||
74 | + " }\n" + | ||
66 | "}"; | 75 | "}"; |
67 | 76 | ||
68 | @After | 77 | @After |
@@ -93,6 +102,23 @@ public abstract class AbstractMqttAttributesRequestProtoIntegrationTest extends | @@ -93,6 +102,23 @@ public abstract class AbstractMqttAttributesRequestProtoIntegrationTest extends | ||
93 | ProtoTransportPayloadConfiguration protoTransportPayloadConfiguration = (ProtoTransportPayloadConfiguration) transportPayloadTypeConfiguration; | 102 | ProtoTransportPayloadConfiguration protoTransportPayloadConfiguration = (ProtoTransportPayloadConfiguration) transportPayloadTypeConfiguration; |
94 | ProtoFileElement transportProtoSchema = protoTransportPayloadConfiguration.getTransportProtoSchema(ATTRIBUTES_SCHEMA_STR); | 103 | ProtoFileElement transportProtoSchema = protoTransportPayloadConfiguration.getTransportProtoSchema(ATTRIBUTES_SCHEMA_STR); |
95 | DynamicSchema attributesSchema = protoTransportPayloadConfiguration.getDynamicSchema(transportProtoSchema, ProtoTransportPayloadConfiguration.ATTRIBUTES_PROTO_SCHEMA); | 104 | DynamicSchema attributesSchema = protoTransportPayloadConfiguration.getDynamicSchema(transportProtoSchema, ProtoTransportPayloadConfiguration.ATTRIBUTES_PROTO_SCHEMA); |
105 | + | ||
106 | + DynamicMessage.Builder nestedJsonObjectBuilder = attributesSchema.newMessageBuilder("PostAttributes.JsonObject.NestedJsonObject"); | ||
107 | + Descriptors.Descriptor nestedJsonObjectBuilderDescriptor = nestedJsonObjectBuilder.getDescriptorForType(); | ||
108 | + assertNotNull(nestedJsonObjectBuilderDescriptor); | ||
109 | + DynamicMessage nestedJsonObject = nestedJsonObjectBuilder.setField(nestedJsonObjectBuilderDescriptor.findFieldByName("key"), "value").build(); | ||
110 | + | ||
111 | + DynamicMessage.Builder jsonObjectBuilder = attributesSchema.newMessageBuilder("PostAttributes.JsonObject"); | ||
112 | + Descriptors.Descriptor jsonObjectBuilderDescriptor = jsonObjectBuilder.getDescriptorForType(); | ||
113 | + assertNotNull(jsonObjectBuilderDescriptor); | ||
114 | + DynamicMessage jsonObject = jsonObjectBuilder | ||
115 | + .setField(jsonObjectBuilderDescriptor.findFieldByName("someNumber"), 42) | ||
116 | + .addRepeatedField(jsonObjectBuilderDescriptor.findFieldByName("someArray"), 1) | ||
117 | + .addRepeatedField(jsonObjectBuilderDescriptor.findFieldByName("someArray"), 2) | ||
118 | + .addRepeatedField(jsonObjectBuilderDescriptor.findFieldByName("someArray"), 3) | ||
119 | + .setField(jsonObjectBuilderDescriptor.findFieldByName("someNestedObject"), nestedJsonObject) | ||
120 | + .build(); | ||
121 | + | ||
96 | DynamicMessage.Builder postAttributesBuilder = attributesSchema.newMessageBuilder("PostAttributes"); | 122 | DynamicMessage.Builder postAttributesBuilder = attributesSchema.newMessageBuilder("PostAttributes"); |
97 | Descriptors.Descriptor postAttributesMsgDescriptor = postAttributesBuilder.getDescriptorForType(); | 123 | Descriptors.Descriptor postAttributesMsgDescriptor = postAttributesBuilder.getDescriptorForType(); |
98 | assertNotNull(postAttributesMsgDescriptor); | 124 | assertNotNull(postAttributesMsgDescriptor); |
@@ -101,7 +127,7 @@ public abstract class AbstractMqttAttributesRequestProtoIntegrationTest extends | @@ -101,7 +127,7 @@ public abstract class AbstractMqttAttributesRequestProtoIntegrationTest extends | ||
101 | .setField(postAttributesMsgDescriptor.findFieldByName("attribute2"), true) | 127 | .setField(postAttributesMsgDescriptor.findFieldByName("attribute2"), true) |
102 | .setField(postAttributesMsgDescriptor.findFieldByName("attribute3"), 42.0) | 128 | .setField(postAttributesMsgDescriptor.findFieldByName("attribute3"), 42.0) |
103 | .setField(postAttributesMsgDescriptor.findFieldByName("attribute4"), 73) | 129 | .setField(postAttributesMsgDescriptor.findFieldByName("attribute4"), 73) |
104 | - .setField(postAttributesMsgDescriptor.findFieldByName("attribute5"), "{\"someNumber\":42,\"someArray\":[1,2,3],\"someNestedObject\":{\"key\":\"value\"}}") | 130 | + .setField(postAttributesMsgDescriptor.findFieldByName("attribute5"), jsonObject) |
105 | .build(); | 131 | .build(); |
106 | byte[] payload = postAttributesMsg.toByteArray(); | 132 | byte[] payload = postAttributesMsg.toByteArray(); |
107 | client.publish(MqttTopics.DEVICE_ATTRIBUTES_TOPIC, new MqttMessage(payload)); | 133 | client.publish(MqttTopics.DEVICE_ATTRIBUTES_TOPIC, new MqttMessage(payload)); |
@@ -163,16 +163,10 @@ public abstract class AbstractMqttAttributesIntegrationTest extends AbstractMqtt | @@ -163,16 +163,10 @@ public abstract class AbstractMqttAttributesIntegrationTest extends AbstractMqtt | ||
163 | break; | 163 | break; |
164 | case "key5": | 164 | case "key5": |
165 | assertNotNull(value); | 165 | assertNotNull(value); |
166 | - LinkedHashMap valueMap; | ||
167 | - if (value instanceof String) { | ||
168 | - valueMap = mapper.readValue((String) value, LinkedHashMap.class); | ||
169 | - } else { | ||
170 | - valueMap = (LinkedHashMap) value; | ||
171 | - } | ||
172 | - assertEquals(3, valueMap.size()); | ||
173 | - assertEquals(42, valueMap.get("someNumber")); | ||
174 | - assertEquals(Arrays.asList(1, 2, 3), valueMap.get("someArray")); | ||
175 | - LinkedHashMap<String, String> someNestedObject = (LinkedHashMap) valueMap.get("someNestedObject"); | 166 | + assertEquals(3, ((LinkedHashMap) value).size()); |
167 | + assertEquals(42, ((LinkedHashMap) value).get("someNumber")); | ||
168 | + assertEquals(Arrays.asList(1, 2, 3), ((LinkedHashMap) value).get("someArray")); | ||
169 | + LinkedHashMap<String, String> someNestedObject = (LinkedHashMap) ((LinkedHashMap) value).get("someNestedObject"); | ||
176 | assertEquals("value", someNestedObject.get("key")); | 170 | assertEquals("value", someNestedObject.get("key")); |
177 | break; | 171 | break; |
178 | } | 172 | } |
@@ -58,6 +58,23 @@ public abstract class AbstractMqttAttributesProtoIntegrationTest extends Abstrac | @@ -58,6 +58,23 @@ public abstract class AbstractMqttAttributesProtoIntegrationTest extends Abstrac | ||
58 | ProtoTransportPayloadConfiguration protoTransportPayloadConfiguration = (ProtoTransportPayloadConfiguration) transportPayloadTypeConfiguration; | 58 | ProtoTransportPayloadConfiguration protoTransportPayloadConfiguration = (ProtoTransportPayloadConfiguration) transportPayloadTypeConfiguration; |
59 | ProtoFileElement transportProtoSchemaFile = protoTransportPayloadConfiguration.getTransportProtoSchema(DEVICE_ATTRIBUTES_PROTO_SCHEMA); | 59 | ProtoFileElement transportProtoSchemaFile = protoTransportPayloadConfiguration.getTransportProtoSchema(DEVICE_ATTRIBUTES_PROTO_SCHEMA); |
60 | DynamicSchema attributesSchema = protoTransportPayloadConfiguration.getDynamicSchema(transportProtoSchemaFile, ProtoTransportPayloadConfiguration.ATTRIBUTES_PROTO_SCHEMA); | 60 | DynamicSchema attributesSchema = protoTransportPayloadConfiguration.getDynamicSchema(transportProtoSchemaFile, ProtoTransportPayloadConfiguration.ATTRIBUTES_PROTO_SCHEMA); |
61 | + | ||
62 | + DynamicMessage.Builder nestedJsonObjectBuilder = attributesSchema.newMessageBuilder("PostAttributes.JsonObject.NestedJsonObject"); | ||
63 | + Descriptors.Descriptor nestedJsonObjectBuilderDescriptor = nestedJsonObjectBuilder.getDescriptorForType(); | ||
64 | + assertNotNull(nestedJsonObjectBuilderDescriptor); | ||
65 | + DynamicMessage nestedJsonObject = nestedJsonObjectBuilder.setField(nestedJsonObjectBuilderDescriptor.findFieldByName("key"), "value").build(); | ||
66 | + | ||
67 | + DynamicMessage.Builder jsonObjectBuilder = attributesSchema.newMessageBuilder("PostAttributes.JsonObject"); | ||
68 | + Descriptors.Descriptor jsonObjectBuilderDescriptor = jsonObjectBuilder.getDescriptorForType(); | ||
69 | + assertNotNull(jsonObjectBuilderDescriptor); | ||
70 | + DynamicMessage jsonObject = jsonObjectBuilder | ||
71 | + .setField(jsonObjectBuilderDescriptor.findFieldByName("someNumber"), 42) | ||
72 | + .addRepeatedField(jsonObjectBuilderDescriptor.findFieldByName("someArray"), 1) | ||
73 | + .addRepeatedField(jsonObjectBuilderDescriptor.findFieldByName("someArray"), 2) | ||
74 | + .addRepeatedField(jsonObjectBuilderDescriptor.findFieldByName("someArray"), 3) | ||
75 | + .setField(jsonObjectBuilderDescriptor.findFieldByName("someNestedObject"), nestedJsonObject) | ||
76 | + .build(); | ||
77 | + | ||
61 | DynamicMessage.Builder postAttributesBuilder = attributesSchema.newMessageBuilder("PostAttributes"); | 78 | DynamicMessage.Builder postAttributesBuilder = attributesSchema.newMessageBuilder("PostAttributes"); |
62 | Descriptors.Descriptor postAttributesMsgDescriptor = postAttributesBuilder.getDescriptorForType(); | 79 | Descriptors.Descriptor postAttributesMsgDescriptor = postAttributesBuilder.getDescriptorForType(); |
63 | assertNotNull(postAttributesMsgDescriptor); | 80 | assertNotNull(postAttributesMsgDescriptor); |
@@ -66,7 +83,7 @@ public abstract class AbstractMqttAttributesProtoIntegrationTest extends Abstrac | @@ -66,7 +83,7 @@ public abstract class AbstractMqttAttributesProtoIntegrationTest extends Abstrac | ||
66 | .setField(postAttributesMsgDescriptor.findFieldByName("key2"), true) | 83 | .setField(postAttributesMsgDescriptor.findFieldByName("key2"), true) |
67 | .setField(postAttributesMsgDescriptor.findFieldByName("key3"), 3.0) | 84 | .setField(postAttributesMsgDescriptor.findFieldByName("key3"), 3.0) |
68 | .setField(postAttributesMsgDescriptor.findFieldByName("key4"), 4) | 85 | .setField(postAttributesMsgDescriptor.findFieldByName("key4"), 4) |
69 | - .setField(postAttributesMsgDescriptor.findFieldByName("key5"), "{\"someNumber\":42,\"someArray\":[1,2,3],\"someNestedObject\":{\"key\":\"value\"}}") | 86 | + .setField(postAttributesMsgDescriptor.findFieldByName("key5"), jsonObject) |
70 | .build(); | 87 | .build(); |
71 | processAttributesTest(POST_DATA_ATTRIBUTES_TOPIC, expectedKeys, postAttributesMsg.toByteArray()); | 88 | processAttributesTest(POST_DATA_ATTRIBUTES_TOPIC, expectedKeys, postAttributesMsg.toByteArray()); |
72 | } | 89 | } |
@@ -62,6 +62,23 @@ public abstract class AbstractMqttTimeseriesProtoIntegrationTest extends Abstrac | @@ -62,6 +62,23 @@ public abstract class AbstractMqttTimeseriesProtoIntegrationTest extends Abstrac | ||
62 | ProtoTransportPayloadConfiguration protoTransportPayloadConfiguration = (ProtoTransportPayloadConfiguration) transportPayloadTypeConfiguration; | 62 | ProtoTransportPayloadConfiguration protoTransportPayloadConfiguration = (ProtoTransportPayloadConfiguration) transportPayloadTypeConfiguration; |
63 | ProtoFileElement transportProtoSchema = protoTransportPayloadConfiguration.getTransportProtoSchema(DEVICE_TELEMETRY_PROTO_SCHEMA); | 63 | ProtoFileElement transportProtoSchema = protoTransportPayloadConfiguration.getTransportProtoSchema(DEVICE_TELEMETRY_PROTO_SCHEMA); |
64 | DynamicSchema telemetrySchema = protoTransportPayloadConfiguration.getDynamicSchema(transportProtoSchema, "telemetrySchema"); | 64 | DynamicSchema telemetrySchema = protoTransportPayloadConfiguration.getDynamicSchema(transportProtoSchema, "telemetrySchema"); |
65 | + | ||
66 | + DynamicMessage.Builder nestedJsonObjectBuilder = telemetrySchema.newMessageBuilder("PostTelemetry.JsonObject.NestedJsonObject"); | ||
67 | + Descriptors.Descriptor nestedJsonObjectBuilderDescriptor = nestedJsonObjectBuilder.getDescriptorForType(); | ||
68 | + assertNotNull(nestedJsonObjectBuilderDescriptor); | ||
69 | + DynamicMessage nestedJsonObject = nestedJsonObjectBuilder.setField(nestedJsonObjectBuilderDescriptor.findFieldByName("key"), "value").build(); | ||
70 | + | ||
71 | + DynamicMessage.Builder jsonObjectBuilder = telemetrySchema.newMessageBuilder("PostTelemetry.JsonObject"); | ||
72 | + Descriptors.Descriptor jsonObjectBuilderDescriptor = jsonObjectBuilder.getDescriptorForType(); | ||
73 | + assertNotNull(jsonObjectBuilderDescriptor); | ||
74 | + DynamicMessage jsonObject = jsonObjectBuilder | ||
75 | + .setField(jsonObjectBuilderDescriptor.findFieldByName("someNumber"), 42) | ||
76 | + .addRepeatedField(jsonObjectBuilderDescriptor.findFieldByName("someArray"), 1) | ||
77 | + .addRepeatedField(jsonObjectBuilderDescriptor.findFieldByName("someArray"), 2) | ||
78 | + .addRepeatedField(jsonObjectBuilderDescriptor.findFieldByName("someArray"), 3) | ||
79 | + .setField(jsonObjectBuilderDescriptor.findFieldByName("someNestedObject"), nestedJsonObject) | ||
80 | + .build(); | ||
81 | + | ||
65 | DynamicMessage.Builder postTelemetryBuilder = telemetrySchema.newMessageBuilder("PostTelemetry"); | 82 | DynamicMessage.Builder postTelemetryBuilder = telemetrySchema.newMessageBuilder("PostTelemetry"); |
66 | Descriptors.Descriptor postTelemetryMsgDescriptor = postTelemetryBuilder.getDescriptorForType(); | 83 | Descriptors.Descriptor postTelemetryMsgDescriptor = postTelemetryBuilder.getDescriptorForType(); |
67 | assertNotNull(postTelemetryMsgDescriptor); | 84 | assertNotNull(postTelemetryMsgDescriptor); |
@@ -70,7 +87,7 @@ public abstract class AbstractMqttTimeseriesProtoIntegrationTest extends Abstrac | @@ -70,7 +87,7 @@ public abstract class AbstractMqttTimeseriesProtoIntegrationTest extends Abstrac | ||
70 | .setField(postTelemetryMsgDescriptor.findFieldByName("key2"), true) | 87 | .setField(postTelemetryMsgDescriptor.findFieldByName("key2"), true) |
71 | .setField(postTelemetryMsgDescriptor.findFieldByName("key3"), 3.0) | 88 | .setField(postTelemetryMsgDescriptor.findFieldByName("key3"), 3.0) |
72 | .setField(postTelemetryMsgDescriptor.findFieldByName("key4"), 4) | 89 | .setField(postTelemetryMsgDescriptor.findFieldByName("key4"), 4) |
73 | - .setField(postTelemetryMsgDescriptor.findFieldByName("key5"), "{\"someNumber\":42,\"someArray\":[1,2,3],\"someNestedObject\":{\"key\":\"value\"}}") | 90 | + .setField(postTelemetryMsgDescriptor.findFieldByName("key5"), jsonObject) |
74 | .build(); | 91 | .build(); |
75 | processTelemetryTest(POST_DATA_TELEMETRY_TOPIC, expectedKeys, postTelemetryMsg.toByteArray(), false); | 92 | processTelemetryTest(POST_DATA_TELEMETRY_TOPIC, expectedKeys, postTelemetryMsg.toByteArray(), false); |
76 | } | 93 | } |
@@ -80,19 +97,27 @@ public abstract class AbstractMqttTimeseriesProtoIntegrationTest extends Abstrac | @@ -80,19 +97,27 @@ public abstract class AbstractMqttTimeseriesProtoIntegrationTest extends Abstrac | ||
80 | String schemaStr = "syntax =\"proto3\";\n" + | 97 | String schemaStr = "syntax =\"proto3\";\n" + |
81 | "\n" + | 98 | "\n" + |
82 | "package test;\n" + | 99 | "package test;\n" + |
83 | - " \n" + | ||
84 | - "message PostTelemetry {\n" + | ||
85 | - "\n" + | ||
86 | - " message Values {\n" + | ||
87 | - " string key1 = 1;\n" + | ||
88 | - " bool key2 = 2;\n" + | ||
89 | - " double key3 = 3;\n" + | ||
90 | - " int32 key4 = 4;\n" + | ||
91 | - " string key5 = 5;\n" + | ||
92 | - " }\n" + | ||
93 | "\n" + | 100 | "\n" + |
101 | + "message PostTelemetry {\n" + | ||
94 | " int64 ts = 1;\n" + | 102 | " int64 ts = 1;\n" + |
95 | " Values values = 2;\n" + | 103 | " Values values = 2;\n" + |
104 | + " \n" + | ||
105 | + " message Values {\n" + | ||
106 | + " string key1 = 3;\n" + | ||
107 | + " bool key2 = 4;\n" + | ||
108 | + " double key3 = 5;\n" + | ||
109 | + " int32 key4 = 6;\n" + | ||
110 | + " JsonObject key5 = 7;\n" + | ||
111 | + " }\n" + | ||
112 | + " \n" + | ||
113 | + " message JsonObject {\n" + | ||
114 | + " int32 someNumber = 8;\n" + | ||
115 | + " repeated int32 someArray = 9;\n" + | ||
116 | + " NestedJsonObject someNestedObject = 10;\n" + | ||
117 | + " message NestedJsonObject {\n" + | ||
118 | + " string key = 11;\n" + | ||
119 | + " }\n" + | ||
120 | + " }\n" + | ||
96 | "}"; | 121 | "}"; |
97 | super.processBeforeTest("Test Post Telemetry device proto payload", "Test Post Telemetry gateway proto payload", TransportPayloadType.PROTOBUF, POST_DATA_TELEMETRY_TOPIC, null, schemaStr, null, DeviceProfileProvisionType.DISABLED, null, null); | 122 | super.processBeforeTest("Test Post Telemetry device proto payload", "Test Post Telemetry gateway proto payload", TransportPayloadType.PROTOBUF, POST_DATA_TELEMETRY_TOPIC, null, schemaStr, null, DeviceProfileProvisionType.DISABLED, null, null); |
98 | List<String> expectedKeys = Arrays.asList("key1", "key2", "key3", "key4", "key5"); | 123 | List<String> expectedKeys = Arrays.asList("key1", "key2", "key3", "key4", "key5"); |
@@ -105,6 +130,23 @@ public abstract class AbstractMqttTimeseriesProtoIntegrationTest extends Abstrac | @@ -105,6 +130,23 @@ public abstract class AbstractMqttTimeseriesProtoIntegrationTest extends Abstrac | ||
105 | ProtoFileElement transportProtoSchema = protoTransportPayloadConfiguration.getTransportProtoSchema(schemaStr); | 130 | ProtoFileElement transportProtoSchema = protoTransportPayloadConfiguration.getTransportProtoSchema(schemaStr); |
106 | DynamicSchema telemetrySchema = protoTransportPayloadConfiguration.getDynamicSchema(transportProtoSchema, "telemetrySchema"); | 131 | DynamicSchema telemetrySchema = protoTransportPayloadConfiguration.getDynamicSchema(transportProtoSchema, "telemetrySchema"); |
107 | 132 | ||
133 | + DynamicMessage.Builder nestedJsonObjectBuilder = telemetrySchema.newMessageBuilder("PostTelemetry.JsonObject.NestedJsonObject"); | ||
134 | + Descriptors.Descriptor nestedJsonObjectBuilderDescriptor = nestedJsonObjectBuilder.getDescriptorForType(); | ||
135 | + assertNotNull(nestedJsonObjectBuilderDescriptor); | ||
136 | + DynamicMessage nestedJsonObject = nestedJsonObjectBuilder.setField(nestedJsonObjectBuilderDescriptor.findFieldByName("key"), "value").build(); | ||
137 | + | ||
138 | + DynamicMessage.Builder jsonObjectBuilder = telemetrySchema.newMessageBuilder("PostTelemetry.JsonObject"); | ||
139 | + Descriptors.Descriptor jsonObjectBuilderDescriptor = jsonObjectBuilder.getDescriptorForType(); | ||
140 | + assertNotNull(jsonObjectBuilderDescriptor); | ||
141 | + DynamicMessage jsonObject = jsonObjectBuilder | ||
142 | + .setField(jsonObjectBuilderDescriptor.findFieldByName("someNumber"), 42) | ||
143 | + .addRepeatedField(jsonObjectBuilderDescriptor.findFieldByName("someArray"), 1) | ||
144 | + .addRepeatedField(jsonObjectBuilderDescriptor.findFieldByName("someArray"), 2) | ||
145 | + .addRepeatedField(jsonObjectBuilderDescriptor.findFieldByName("someArray"), 3) | ||
146 | + .setField(jsonObjectBuilderDescriptor.findFieldByName("someNestedObject"), nestedJsonObject) | ||
147 | + .build(); | ||
148 | + | ||
149 | + | ||
108 | DynamicMessage.Builder valuesBuilder = telemetrySchema.newMessageBuilder("PostTelemetry.Values"); | 150 | DynamicMessage.Builder valuesBuilder = telemetrySchema.newMessageBuilder("PostTelemetry.Values"); |
109 | Descriptors.Descriptor valuesDescriptor = valuesBuilder.getDescriptorForType(); | 151 | Descriptors.Descriptor valuesDescriptor = valuesBuilder.getDescriptorForType(); |
110 | assertNotNull(valuesDescriptor); | 152 | assertNotNull(valuesDescriptor); |
@@ -114,7 +156,7 @@ public abstract class AbstractMqttTimeseriesProtoIntegrationTest extends Abstrac | @@ -114,7 +156,7 @@ public abstract class AbstractMqttTimeseriesProtoIntegrationTest extends Abstrac | ||
114 | .setField(valuesDescriptor.findFieldByName("key2"), true) | 156 | .setField(valuesDescriptor.findFieldByName("key2"), true) |
115 | .setField(valuesDescriptor.findFieldByName("key3"), 3.0) | 157 | .setField(valuesDescriptor.findFieldByName("key3"), 3.0) |
116 | .setField(valuesDescriptor.findFieldByName("key4"), 4) | 158 | .setField(valuesDescriptor.findFieldByName("key4"), 4) |
117 | - .setField(valuesDescriptor.findFieldByName("key5"), "{\"someNumber\":42,\"someArray\":[1,2,3],\"someNestedObject\":{\"key\":\"value\"}}") | 159 | + .setField(valuesDescriptor.findFieldByName("key5"), jsonObject) |
118 | .build(); | 160 | .build(); |
119 | 161 | ||
120 | DynamicMessage.Builder postTelemetryBuilder = telemetrySchema.newMessageBuilder("PostTelemetry"); | 162 | DynamicMessage.Builder postTelemetryBuilder = telemetrySchema.newMessageBuilder("PostTelemetry"); |
@@ -128,19 +128,8 @@ public class ProtoTransportPayloadConfiguration implements TransportPayloadTypeC | @@ -128,19 +128,8 @@ public class ProtoTransportPayloadConfiguration implements TransportPayloadTypeC | ||
128 | List<MessageDefinition> messageDefinitions = new ArrayList<>(); | 128 | List<MessageDefinition> messageDefinitions = new ArrayList<>(); |
129 | messageElementsList.forEach(messageElement -> { | 129 | messageElementsList.forEach(messageElement -> { |
130 | MessageDefinition.Builder messageDefinitionBuilder = MessageDefinition.newBuilder(messageElement.getName()); | 130 | MessageDefinition.Builder messageDefinitionBuilder = MessageDefinition.newBuilder(messageElement.getName()); |
131 | - List<FieldElement> messageElementFields = messageElement.getFields(); | ||
132 | - List<OneOfElement> oneOfs = messageElement.getOneOfs(); | ||
133 | 131 | ||
134 | List<TypeElement> nestedTypes = messageElement.getNestedTypes(); | 132 | List<TypeElement> nestedTypes = messageElement.getNestedTypes(); |
135 | - if (!messageElementFields.isEmpty()) { | ||
136 | - addMessageFieldsToTheMessageDefinition(messageElementFields, messageDefinitionBuilder); | ||
137 | - } | ||
138 | - if (!oneOfs.isEmpty()) { | ||
139 | - for (OneOfElement oneOfelement : oneOfs) { | ||
140 | - MessageDefinition.OneofBuilder oneofBuilder = messageDefinitionBuilder.addOneof(oneOfelement.getName()); | ||
141 | - addMessageFieldsToTheOneOfDefinition(oneOfelement.getFields(), oneofBuilder); | ||
142 | - } | ||
143 | - } | ||
144 | if (!nestedTypes.isEmpty()) { | 133 | if (!nestedTypes.isEmpty()) { |
145 | List<EnumElement> nestedEnumTypes = getEnumElements(nestedTypes); | 134 | List<EnumElement> nestedEnumTypes = getEnumElements(nestedTypes); |
146 | if (!nestedEnumTypes.isEmpty()) { | 135 | if (!nestedEnumTypes.isEmpty()) { |
@@ -153,6 +142,17 @@ public class ProtoTransportPayloadConfiguration implements TransportPayloadTypeC | @@ -153,6 +142,17 @@ public class ProtoTransportPayloadConfiguration implements TransportPayloadTypeC | ||
153 | List<MessageDefinition> nestedMessageDefinitions = getMessageDefinitions(nestedMessageTypes); | 142 | List<MessageDefinition> nestedMessageDefinitions = getMessageDefinitions(nestedMessageTypes); |
154 | nestedMessageDefinitions.forEach(messageDefinitionBuilder::addMessageDefinition); | 143 | nestedMessageDefinitions.forEach(messageDefinitionBuilder::addMessageDefinition); |
155 | } | 144 | } |
145 | + List<FieldElement> messageElementFields = messageElement.getFields(); | ||
146 | + List<OneOfElement> oneOfs = messageElement.getOneOfs(); | ||
147 | + if (!oneOfs.isEmpty()) { | ||
148 | + for (OneOfElement oneOfelement : oneOfs) { | ||
149 | + MessageDefinition.OneofBuilder oneofBuilder = messageDefinitionBuilder.addOneof(oneOfelement.getName()); | ||
150 | + addMessageFieldsToTheOneOfDefinition(oneOfelement.getFields(), oneofBuilder); | ||
151 | + } | ||
152 | + } | ||
153 | + if (!messageElementFields.isEmpty()) { | ||
154 | + addMessageFieldsToTheMessageDefinition(messageElementFields, messageDefinitionBuilder); | ||
155 | + } | ||
156 | messageDefinitions.add(messageDefinitionBuilder.build()); | 156 | messageDefinitions.add(messageDefinitionBuilder.build()); |
157 | }); | 157 | }); |
158 | return messageDefinitions; | 158 | return messageDefinitions; |