16
16
import com .hivemq .client .mqtt .MqttGlobalPublishFilter ;
17
17
import com .hivemq .client .mqtt .mqtt5 .Mqtt5BlockingClient ;
18
18
import com .hivemq .client .mqtt .mqtt5 .Mqtt5Client ;
19
+ import com .hivemq .client .mqtt .mqtt5 .datatypes .Mqtt5UserProperties ;
20
+ import com .hivemq .client .mqtt .mqtt5 .datatypes .Mqtt5UserProperty ;
19
21
import com .hivemq .client .mqtt .mqtt5 .message .publish .Mqtt5Publish ;
22
+ import org .eclipse .uprotocol .communication .UPayload ;
20
23
import org .eclipse .uprotocol .transport .UListener ;
21
24
import org .eclipse .uprotocol .transport .UTransport ;
25
+ import org .eclipse .uprotocol .transport .builder .UMessageBuilder ;
26
+ import org .eclipse .uprotocol .uri .serializer .UriSerializer ;
22
27
import org .eclipse .uprotocol .v1 .*;
23
28
import org .junit .jupiter .api .BeforeEach ;
24
29
import org .junit .jupiter .api .Disabled ;
37
42
import java .util .concurrent .TimeUnit ;
38
43
39
44
import static org .assertj .core .api .Assertions .assertThat ;
45
+ import static org .eclipse .uprotocol .mqtt .HiveMqMQTT5Client .USER_PROPERTIES_KEY_FOR_SINK_NAME ;
46
+ import static org .eclipse .uprotocol .mqtt .HiveMqMQTT5Client .USER_PROPERTIES_KEY_FOR_SOURCE_NAME ;
40
47
import static org .mockito .ArgumentMatchers .any ;
41
48
import static org .mockito .Mockito .mock ;
42
49
import static org .mockito .Mockito .verify ;
@@ -78,43 +85,27 @@ void setUp() {
78
85
79
86
@ Test
80
87
void givenValidClientAndMessage_whenInvokeSend_shouldSendCorrectMessageToMqtt () throws InterruptedException {
81
- UMessage message = UMessage .newBuilder ()
82
- .setPayload (ByteString .copyFrom ("Hello World" , Charset .defaultCharset ()))
83
- .setAttributes (UAttributes .newBuilder ()
84
- .setId (UUID .newBuilder ().build ())
85
- .setTtl (1000 )
86
- .setReqid (UUID .newBuilder ().build ())
87
- .setToken ("SomeToken" )
88
- .setTraceparent ("someTraceParent" )
89
- .setSource (UUri .newBuilder ()
90
- .setAuthorityName ("testSource.someUri.network" )
91
- .build ())
92
- .setSink (UUri .newBuilder ()
93
- .setAuthorityName ("testDestination.someUri.network" )
94
- .build ())
95
- .build ())
96
- .build ();
88
+ UMessage message = UMessageBuilder .request (
89
+ UUri .newBuilder ().setAuthorityName ("testSource.someUri.network" ).setUeId (2 ).setUeVersionMajor (1 ).setResourceId (0 ).build (),
90
+ UUri .newBuilder ().setAuthorityName ("testDestination.someUri.network" ).setUeId (2 ).setUeVersionMajor (1 ).setResourceId (1 ).build (), 500 )
91
+ .withToken ("SomeToken" )
92
+ .withTraceparent ("someTraceParent" )
93
+ .build (new UPayload (ByteString .copyFrom ("Hello World" , Charset .defaultCharset ()), UPayloadFormat .UPAYLOAD_FORMAT_TEXT ));
97
94
98
95
UStatus response = serviceUnderTest .send (message ).toCompletableFuture ().join ();
99
96
assertThat (response .getCode ()).isEqualTo (UCode .OK );
100
- Mqtt5Publish receive = handleToReceiveMqttMessages .receive (1 , TimeUnit .SECONDS ).get ();
97
+
98
+ Mqtt5Publish receive = handleToReceiveMqttMessages .receive (1 , TimeUnit .SECONDS ).orElseThrow ();
101
99
assertThat (new String (receive .getPayloadAsBytes ())).isEqualTo ("Hello World" );
102
100
}
103
101
104
102
@ Test
105
103
void givenValidClientAndSmallestMessage_whenInvokeSend_shouldSendCorrectMessageToMqtt () throws InterruptedException {
106
- UMessage message = UMessage .newBuilder ()
107
- .setPayload (ByteString .copyFrom ("Hello World" , Charset .defaultCharset ()))
108
- .setAttributes (UAttributes .newBuilder ()
109
- .setId (UUID .newBuilder ().build ())
110
- .setSource (UUri .newBuilder ()
111
- .setAuthorityName ("testSource.someUri.network" )
112
- .build ())
113
- .setSink (UUri .newBuilder ()
114
- .setAuthorityName ("testDestination.someUri.network" )
115
- .build ())
116
- .build ())
117
- .build ();
104
+ UMessage message = UMessageBuilder .request (
105
+ UUri .newBuilder ().setAuthorityName ("testSource.someUri.network" ).setUeId (2 ).setUeVersionMajor (1 ).setResourceId (0 ).build (),
106
+ UUri .newBuilder ().setAuthorityName ("testDestination.someUri.network" ).setUeId (2 ).setUeVersionMajor (1 ).setResourceId (1 ).build (), 500 )
107
+ .build (new UPayload (ByteString .copyFrom ("Hello World" , Charset .defaultCharset ()), UPayloadFormat .UPAYLOAD_FORMAT_TEXT ));
108
+
118
109
UStatus response = serviceUnderTest .send (message ).toCompletableFuture ().join ();
119
110
assertThat (response .getCode ()).isEqualTo (UCode .OK );
120
111
Mqtt5Publish receive = handleToReceiveMqttMessages .receive (1 , TimeUnit .SECONDS ).get ();
@@ -124,15 +115,11 @@ void givenValidClientAndSmallestMessage_whenInvokeSend_shouldSendCorrectMessageT
124
115
@ Test
125
116
@ Disabled ("Broadcast topic is not defined" )
126
117
void givenValidClientAndBroadcastMessage_whenInvokeSend_shouldSendCorrectMessageToMqtt () throws InterruptedException {
127
- UMessage message = UMessage .newBuilder ()
128
- .setPayload (ByteString .copyFrom ("Hello World" , Charset .defaultCharset ()))
129
- .setAttributes (UAttributes .newBuilder ()
130
- .setId (UUID .newBuilder ().build ())
131
- .setSource (UUri .newBuilder ()
132
- .setAuthorityName ("testSource.someUri.network" )
133
- .build ())
134
- .build ())
135
- .build ();
118
+ UMessage message = UMessageBuilder .publish (
119
+ UUri .newBuilder ().setAuthorityName ("testSource.someUri.network" ).setUeId (2 ).setUeVersionMajor (1 ).setResourceId (0 ).build ())
120
+ .build (new UPayload (ByteString .copyFrom ("Hello World" , Charset .defaultCharset ()), UPayloadFormat .UPAYLOAD_FORMAT_TEXT ));
121
+
122
+
136
123
UStatus response = serviceUnderTest .send (message ).toCompletableFuture ().join ();
137
124
assertThat (response .getCode ()).isEqualTo (UCode .OK );
138
125
Mqtt5Publish receive = handleToReceiveMqttMessages .receive (1 , TimeUnit .SECONDS ).get ();
@@ -145,15 +132,21 @@ void givenBlancoListener_whenAddingListenerAndReceivingMessages_shouldCallListen
145
132
146
133
UStatus status = serviceUnderTest .registerListener (null , listener ).toCompletableFuture ().join ();
147
134
148
- mqttClientForTests .publishWith ().topic ("a/some-source/c/d/e/some-sink/a/b/c" ).payload ("Hello World" .getBytes (Charset .defaultCharset ())).send ();
135
+ mqttClientForTests .publishWith ().topic ("a/some-source/c/d/e/some-sink/a/b/c" )
136
+ .userProperties (Mqtt5UserProperties .of (
137
+ Mqtt5UserProperty .of (USER_PROPERTIES_KEY_FOR_SOURCE_NAME , UriSerializer .serialize (UUri .newBuilder ().setAuthorityName ("testSource.someUri.network" ).setUeId (2 ).setUeVersionMajor (1 ).setResourceId (0 ).build ())),
138
+ Mqtt5UserProperty .of (USER_PROPERTIES_KEY_FOR_SINK_NAME , UriSerializer .serialize (UUri .newBuilder ().setAuthorityName ("testDestination.someUri.network" ).setUeId (2 ).setUeVersionMajor (1 ).setResourceId (1 ).build ()))
139
+ ))
140
+ .payload ("Hello World" .getBytes (Charset .defaultCharset ()))
141
+ .send ();
149
142
150
143
assertThat (status .getCode ()).isEqualTo (UCode .OK );
151
144
152
145
ArgumentCaptor <UMessage > captor = ArgumentCaptor .captor ();
153
146
verify (listener , Mockito .timeout (1000 ).times (1 )).onReceive (captor .capture ());
154
147
assertThat (captor .getValue ()).isNotNull ();
155
- assertThat (captor .getValue ().getAttributes ().getSink ().getAuthorityName ()).isEqualTo ("some-sink " );
156
- assertThat (captor .getValue ().getAttributes ().getSource ().getAuthorityName ()).isEqualTo ("some-source " );
148
+ assertThat (captor .getValue ().getAttributes ().getSink ().getAuthorityName ()).isEqualTo ("testDestination.someUri.network " );
149
+ assertThat (captor .getValue ().getAttributes ().getSource ().getAuthorityName ()).isEqualTo ("testSource.someUri.network " );
157
150
assertThat (captor .getValue ().getPayload ()).isNotNull ();
158
151
assertThat (captor .getValue ().getPayload ().toString (Charset .defaultCharset ())).isEqualTo ("Hello World" );
159
152
}
@@ -332,14 +325,14 @@ void given2Listeners_whenUnregisterOneListener_shouldInvokeOtherListenersOnMessa
332
325
}
333
326
334
327
@ Test
335
- void givenListener_whenReceivingUMessageWithAllFields_shouldRouteAllFieldsToListener () {
328
+ void givenListener_whenCloudSendsMessageToRadioAndRadioListens_shouldRouteMessageToRadio () {
336
329
//given a radio and a cloudService
337
330
UListener radioListener = mock (UListener .class );
338
331
UUri radioUuid = UUri .newBuilder ()
339
332
.setAuthorityName ("radio" )
340
333
.setUeId (0xffff )
341
334
.setUeVersionMajor (0xff )
342
- .setResourceId (0xffff )
335
+ .setResourceId (0 )
343
336
.build ();
344
337
UTransport mqttClientOfRadio = TransportFactory .createInstance (radioUuid , mqttClientForTests );
345
338
@@ -351,30 +344,19 @@ void givenListener_whenReceivingUMessageWithAllFields_shouldRouteAllFieldsToList
351
344
.build ();
352
345
UTransport mqttClientOfCloud = TransportFactory .createInstance (cloudService , mqttClientForTests );
353
346
354
- mqttClientOfRadio .registerListener (
355
- cloudService ,
356
- radioUuid ,
357
- radioListener );
347
+ mqttClientOfRadio .registerListener (cloudService , radioUuid , radioListener );
358
348
359
349
//when cloud service sends a message
360
- mqttClientOfCloud .send (
361
- UMessage .newBuilder ()
362
- .setPayload (ByteString .copyFrom ("Hello World" , Charset .defaultCharset ()))
363
- .setAttributes (UAttributes .newBuilder ()
364
- .setId (UUID .newBuilder ().setMsb (123L ).build ())
365
- .setType (UMessageType .UMESSAGE_TYPE_NOTIFICATION )
366
- .setSource (cloudService )
367
- .setSink (radioUuid )
368
- .setPriority (UPriority .UPRIORITY_CS0 )
369
- .setTtl (1000 )
370
- .setPermissionLevel (4211 )
371
- .setCommstatus (UCode .OK )
372
- .setReqid (UUID .newBuilder ().setMsb (456L ).build ())
373
- .setToken ("SomeToken" )
374
- .setTraceparent ("someTraceParent" )
375
- .setPayloadFormat (UPayloadFormat .UPAYLOAD_FORMAT_TEXT )
376
- .build ())
377
- .build ());
350
+
351
+ UMessage message = UMessageBuilder .notification (cloudService , radioUuid )
352
+ .withPriority (UPriority .UPRIORITY_CS2 )
353
+ .withTtl (1000 )
354
+ .withPermissionLevel (4211 )
355
+ .withToken ("SomeToken" )
356
+ .withTraceparent ("someTraceParent" )
357
+ .build (new UPayload (ByteString .copyFrom ("Hello World" , Charset .defaultCharset ()), UPayloadFormat .UPAYLOAD_FORMAT_TEXT ));
358
+
359
+ mqttClientOfCloud .send (message );
378
360
379
361
//should be received by radio
380
362
ArgumentCaptor <UMessage > captor = ArgumentCaptor .captor ();
@@ -383,15 +365,13 @@ void givenListener_whenReceivingUMessageWithAllFields_shouldRouteAllFieldsToList
383
365
UMessage receivedMessage = captor .getValue ();
384
366
385
367
assertThat (receivedMessage .getPayload ().toString (Charset .defaultCharset ())).isEqualTo ("Hello World" );
386
- assertThat (receivedMessage .getAttributes ().getId ().getMsb ()).isEqualTo (123L );
387
368
assertThat (receivedMessage .getAttributes ().getType ()).isEqualTo (UMessageType .UMESSAGE_TYPE_NOTIFICATION );
388
369
assertThat (receivedMessage .getAttributes ().getSource ().getAuthorityName ()).isEqualTo ("cloud" );
389
370
assertThat (receivedMessage .getAttributes ().getSink ().getAuthorityName ()).isEqualTo ("radio" );
390
- assertThat (receivedMessage .getAttributes ().getPriority ()).isEqualTo (UPriority .UPRIORITY_CS0 );
371
+ assertThat (receivedMessage .getAttributes ().getPriority ()).isEqualTo (UPriority .UPRIORITY_CS2 );
391
372
assertThat (receivedMessage .getAttributes ().getTtl ()).isEqualTo (1000 );
392
373
assertThat (receivedMessage .getAttributes ().getPermissionLevel ()).isEqualTo (4211 );
393
374
assertThat (receivedMessage .getAttributes ().getCommstatus ()).isEqualTo (UCode .OK );
394
- assertThat (receivedMessage .getAttributes ().getReqid ()).isEqualTo (UUID .newBuilder ().setMsb (456L ).build ());
395
375
assertThat (receivedMessage .getAttributes ().getToken ()).isEqualTo ("SomeToken" );
396
376
assertThat (receivedMessage .getAttributes ().getTraceparent ()).isEqualTo ("someTraceParent" );
397
377
assertThat (receivedMessage .getAttributes ().getPayloadFormat ()).isEqualTo (UPayloadFormat .UPAYLOAD_FORMAT_TEXT );
0 commit comments