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