Skip to content

Commit 6ea8d7d

Browse files
czfdcnstevenhartley
authored andcommitted
Check UAuthority and UResource names are not blank
It is not sufficient to check UUri::hasAuthority() or UResource::hasInstance() or UResource::hasMessage() as they might be set to blank strings that are invalid. The following change also checks if the string is blank or not. #107
1 parent 3ff8ea6 commit 6ea8d7d

File tree

2 files changed

+37
-7
lines changed

2 files changed

+37
-7
lines changed

src/main/java/org/eclipse/uprotocol/uri/serializer/LongUriSerializer.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626

2727

2828
import java.util.Objects;
29-
import java.util.Optional;
3029
import org.eclipse.uprotocol.uri.validator.UriValidator;
3130
import org.eclipse.uprotocol.v1.UAuthority;
3231
import org.eclipse.uprotocol.v1.UEntity;
@@ -60,7 +59,7 @@ public String serialize(UUri Uri) {
6059

6160
StringBuilder sb = new StringBuilder();
6261

63-
if (Uri.hasAuthority()) {
62+
if (Uri.hasAuthority() && !Uri.getAuthority().getName().isBlank()) {
6463
sb.append("//");
6564
sb.append(Uri.getAuthority().getName());
6665
}
@@ -82,10 +81,10 @@ private static String buildResourcePartOfUri(UUri uri) {
8281
StringBuilder sb = new StringBuilder("/");
8382
sb.append(uResource.getName());
8483

85-
if (uResource.hasInstance()) {
84+
if (uResource.hasInstance() && !uResource.getInstance().isBlank()) {
8685
sb.append(".").append(uResource.getInstance());
8786
}
88-
if (uResource.hasMessage()) {
87+
if (uResource.hasMessage() && !uResource.getMessage().isBlank()) {
8988
sb.append("#").append(uResource.getMessage());
9089
}
9190

src/test/java/org/eclipse/uprotocol/uri/serializer/LongUriSerializerTest.java

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -606,12 +606,12 @@ public void test_build_protocol_uri_from__uri_when__uri_isEmpty() {
606606
}
607607

608608
@Test
609-
@DisplayName("Test Create a uProtocol URI from an URI object with an empty USE")
609+
@DisplayName("Test Create an invalid uProtocol URI from an URI object with an empty USE")
610610
public void test_build_protocol_uri_from__uri_when__uri_has_empty_use() {
611611
UEntity use = UEntity.newBuilder().build();
612-
UUri uuri = UUri.newBuilder().setAuthority(UAuthority.newBuilder().build()).setEntity(use).setResource(UResource.newBuilder().setName("door").build()).build();
612+
UUri uuri = UUri.newBuilder().setResource(UResource.newBuilder().setName("door").build()).build();
613613
String uProtocolUri = LongUriSerializer.instance().serialize(uuri);
614-
assertEquals("/////door", uProtocolUri);
614+
assertEquals("///door", uProtocolUri);
615615
}
616616

617617
@Test
@@ -853,6 +853,37 @@ public void test_parse_remote_protocol_uri_with_custom_scheme() {
853853
assertEquals(uri2, LongUriSerializer.instance().serialize(uuri));
854854
}
855855

856+
@Test
857+
@DisplayName("Test Create a URI that has an empty UResource instance but the rest of the UUri is present")
858+
public void test_build_protocol_uri_from__uri_when__uri_has_remote_authority_service_and_version_with_resource_with_empty_instance() {
859+
final UAuthority uAuthority = UAuthority.newBuilder().setName("vcu.my_car_vin").build();
860+
final UEntity use = UEntity.newBuilder().setName("body.access").setVersionMajor(1).build();
861+
final UResource uResource = UResource.newBuilder().setName("door").setInstance("").setMessage("Door").build();
862+
final UUri uri = UUri.newBuilder().setAuthority(uAuthority).setEntity(use).setResource(uResource).build();
863+
String uProtocolUri = LongUriSerializer.instance().serialize(uri);
864+
assertEquals("//vcu.my_car_vin/body.access/1/door#Door", uProtocolUri);
865+
}
856866

867+
@Test
868+
@DisplayName("Test Create a URI that has an empty UResource message but the rest of the UUri is present")
869+
public void test_build_protocol_uri_from__uri_when__uri_has_remote_authority_service_and_version_with_resource_with_empty_message() {
870+
final UAuthority uAuthority = UAuthority.newBuilder().setName("vcu.my_car_vin").build();
871+
final UEntity use = UEntity.newBuilder().setName("body.access").setVersionMajor(1).build();
872+
final UResource uResource = UResource.newBuilder().setName("door").setInstance("front_left").setMessage("").build();
873+
final UUri uri = UUri.newBuilder().setAuthority(uAuthority).setEntity(use).setResource(uResource).build();
874+
String uProtocolUri = LongUriSerializer.instance().serialize(uri);
875+
assertEquals("//vcu.my_car_vin/body.access/1/door.front_left", uProtocolUri);
876+
}
877+
878+
@Test
879+
@DisplayName("Test Create a URI that has an empty UAuthority but the rest of the UUri is present")
880+
public void test_build_protocol_uri_from__uri_when__uri_has_empty_authority_service_and_version_with_resource() {
881+
final UAuthority uAuthority = UAuthority.newBuilder().setName("").build();
882+
final UEntity use = UEntity.newBuilder().setName("body.access").setVersionMajor(1).build();
883+
final UResource uResource = UResource.newBuilder().setName("door").setInstance("front_left").setMessage("Door").build();
884+
final UUri uri = UUri.newBuilder().setAuthority(uAuthority).setEntity(use).setResource(uResource).build();
885+
String uProtocolUri = LongUriSerializer.instance().serialize(uri);
886+
assertEquals("/body.access/1/door.front_left#Door", uProtocolUri);
887+
}
857888

858889
}

0 commit comments

Comments
 (0)