1616import com .hivemq .client .mqtt .MqttGlobalPublishFilter ;
1717import com .hivemq .client .mqtt .mqtt5 .Mqtt5BlockingClient ;
1818import com .hivemq .client .mqtt .mqtt5 .Mqtt5Client ;
19+ import com .hivemq .client .mqtt .mqtt5 .datatypes .Mqtt5UserProperties ;
20+ import com .hivemq .client .mqtt .mqtt5 .datatypes .Mqtt5UserProperty ;
1921import com .hivemq .client .mqtt .mqtt5 .message .publish .Mqtt5Publish ;
22+ import org .eclipse .uprotocol .communication .UPayload ;
2023import org .eclipse .uprotocol .transport .UListener ;
2124import org .eclipse .uprotocol .transport .UTransport ;
25+ import org .eclipse .uprotocol .transport .builder .UMessageBuilder ;
26+ import org .eclipse .uprotocol .uri .serializer .UriSerializer ;
2227import org .eclipse .uprotocol .v1 .*;
2328import org .junit .jupiter .api .BeforeEach ;
2429import org .junit .jupiter .api .Disabled ;
3742import java .util .concurrent .TimeUnit ;
3843
3944import 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 ;
4047import static org .mockito .ArgumentMatchers .any ;
4148import static org .mockito .Mockito .mock ;
4249import static org .mockito .Mockito .verify ;
@@ -78,43 +85,27 @@ void setUp() {
7885
7986 @ Test
8087 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 ));
9794
9895 UStatus response = serviceUnderTest .send (message ).toCompletableFuture ().join ();
9996 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 ();
10199 assertThat (new String (receive .getPayloadAsBytes ())).isEqualTo ("Hello World" );
102100 }
103101
104102 @ Test
105103 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+
118109 UStatus response = serviceUnderTest .send (message ).toCompletableFuture ().join ();
119110 assertThat (response .getCode ()).isEqualTo (UCode .OK );
120111 Mqtt5Publish receive = handleToReceiveMqttMessages .receive (1 , TimeUnit .SECONDS ).get ();
@@ -124,15 +115,11 @@ void givenValidClientAndSmallestMessage_whenInvokeSend_shouldSendCorrectMessageT
124115 @ Test
125116 @ Disabled ("Broadcast topic is not defined" )
126117 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+
136123 UStatus response = serviceUnderTest .send (message ).toCompletableFuture ().join ();
137124 assertThat (response .getCode ()).isEqualTo (UCode .OK );
138125 Mqtt5Publish receive = handleToReceiveMqttMessages .receive (1 , TimeUnit .SECONDS ).get ();
@@ -145,15 +132,21 @@ void givenBlancoListener_whenAddingListenerAndReceivingMessages_shouldCallListen
145132
146133 UStatus status = serviceUnderTest .registerListener (null , listener ).toCompletableFuture ().join ();
147134
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 ();
149142
150143 assertThat (status .getCode ()).isEqualTo (UCode .OK );
151144
152145 ArgumentCaptor <UMessage > captor = ArgumentCaptor .captor ();
153146 verify (listener , Mockito .timeout (1000 ).times (1 )).onReceive (captor .capture ());
154147 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 " );
157150 assertThat (captor .getValue ().getPayload ()).isNotNull ();
158151 assertThat (captor .getValue ().getPayload ().toString (Charset .defaultCharset ())).isEqualTo ("Hello World" );
159152 }
@@ -332,14 +325,14 @@ void given2Listeners_whenUnregisterOneListener_shouldInvokeOtherListenersOnMessa
332325 }
333326
334327 @ Test
335- void givenListener_whenReceivingUMessageWithAllFields_shouldRouteAllFieldsToListener () {
328+ void givenListener_whenCloudSendsMessageToRadioAndRadioListens_shouldRouteMessageToRadio () {
336329 //given a radio and a cloudService
337330 UListener radioListener = mock (UListener .class );
338331 UUri radioUuid = UUri .newBuilder ()
339332 .setAuthorityName ("radio" )
340333 .setUeId (0xffff )
341334 .setUeVersionMajor (0xff )
342- .setResourceId (0xffff )
335+ .setResourceId (0 )
343336 .build ();
344337 UTransport mqttClientOfRadio = TransportFactory .createInstance (radioUuid , mqttClientForTests );
345338
@@ -351,30 +344,19 @@ void givenListener_whenReceivingUMessageWithAllFields_shouldRouteAllFieldsToList
351344 .build ();
352345 UTransport mqttClientOfCloud = TransportFactory .createInstance (cloudService , mqttClientForTests );
353346
354- mqttClientOfRadio .registerListener (
355- cloudService ,
356- radioUuid ,
357- radioListener );
347+ mqttClientOfRadio .registerListener (cloudService , radioUuid , radioListener );
358348
359349 //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 );
378360
379361 //should be received by radio
380362 ArgumentCaptor <UMessage > captor = ArgumentCaptor .captor ();
@@ -383,15 +365,13 @@ void givenListener_whenReceivingUMessageWithAllFields_shouldRouteAllFieldsToList
383365 UMessage receivedMessage = captor .getValue ();
384366
385367 assertThat (receivedMessage .getPayload ().toString (Charset .defaultCharset ())).isEqualTo ("Hello World" );
386- assertThat (receivedMessage .getAttributes ().getId ().getMsb ()).isEqualTo (123L );
387368 assertThat (receivedMessage .getAttributes ().getType ()).isEqualTo (UMessageType .UMESSAGE_TYPE_NOTIFICATION );
388369 assertThat (receivedMessage .getAttributes ().getSource ().getAuthorityName ()).isEqualTo ("cloud" );
389370 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 );
391372 assertThat (receivedMessage .getAttributes ().getTtl ()).isEqualTo (1000 );
392373 assertThat (receivedMessage .getAttributes ().getPermissionLevel ()).isEqualTo (4211 );
393374 assertThat (receivedMessage .getAttributes ().getCommstatus ()).isEqualTo (UCode .OK );
394- assertThat (receivedMessage .getAttributes ().getReqid ()).isEqualTo (UUID .newBuilder ().setMsb (456L ).build ());
395375 assertThat (receivedMessage .getAttributes ().getToken ()).isEqualTo ("SomeToken" );
396376 assertThat (receivedMessage .getAttributes ().getTraceparent ()).isEqualTo ("someTraceParent" );
397377 assertThat (receivedMessage .getAttributes ().getPayloadFormat ()).isEqualTo (UPayloadFormat .UPAYLOAD_FORMAT_TEXT );
0 commit comments