Skip to content

Commit

Permalink
Fix: UAttributesValidator now correctly handles the sink attribute fo…
Browse files Browse the repository at this point in the history
…r RPC messages (#66)

This commit addresses Issue #64 , where the UAttributesValidator was found to incorrectly handle the sink attribute for RPC request and response messages.
  • Loading branch information
neelam-kushwah authored Jan 8, 2024
1 parent d0f026e commit 264f042
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,7 @@

import org.eclipse.uprotocol.uri.validator.UriValidator;
import org.eclipse.uprotocol.uuid.factory.UuidUtils;
import org.eclipse.uprotocol.v1.UAttributes;
import org.eclipse.uprotocol.v1.UMessageType;
import org.eclipse.uprotocol.v1.UUID;
import org.eclipse.uprotocol.v1.UStatus;
import org.eclipse.uprotocol.v1.UCode;
import org.eclipse.uprotocol.v1.*;
import org.eclipse.uprotocol.validation.ValidationResult;

import java.util.Objects;
Expand Down Expand Up @@ -274,7 +270,7 @@ public ValidationResult validateSink(UAttributes attributes) {
if (!attributes.hasSink()) {
return ValidationResult.failure("Missing Sink");
}
return UriValidator.validateRpcResponse(attributes.getSink());
return UriValidator.validateRpcMethod(attributes.getSink());

}

Expand Down Expand Up @@ -332,13 +328,11 @@ public ValidationResult validateType(UAttributes attributes) {
@Override
public ValidationResult validateSink(UAttributes attributes) {
Objects.requireNonNull(attributes, "UAttributes cannot be null.");

ValidationResult result = UriValidator.validateRpcMethod(attributes.getSink());
if (result.isSuccess()) {
return result;
} else {
if (!attributes.hasSink()|| attributes.getSink() == UUri.getDefaultInstance()) {
return ValidationResult.failure("Missing Sink");
}
ValidationResult result = UriValidator.validateRpcResponse(attributes.getSink());
return result;

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -650,10 +650,59 @@ public void test_validating_request_containing_token() {
assertEquals(ValidationResult.success(), status);
}

@Test
@DisplayName("test_valid_request_methoduri_in_sink")
public void test_valid_request_methoduri_in_sink(){
final UUri sink= LongUriSerializer.instance().deserialize("/test.service/1/rpc.method");
final UAttributes attributes =
UAttributesBuilder.request(UPriority.UPRIORITY_CS0,sink,3000).build();
final UAttributesValidator validator = UAttributesValidator.getValidator(attributes);
assertEquals("UAttributesValidator.Request", validator.toString());
final ValidationResult status = validator.validate(attributes);
assertEquals(ValidationResult.success(), status);
}

@Test
@DisplayName("test_invalid_request_methoduri_in_sink")
public void test_invalid_request_methoduri_in_sink(){
final UUri sink= LongUriSerializer.instance().deserialize("/test.client/1/test.response");
final UAttributes attributes =
UAttributesBuilder.request(UPriority.UPRIORITY_CS0,sink,3000).build();
final UAttributesValidator validator = UAttributesValidator.getValidator(attributes);
assertEquals("UAttributesValidator.Request", validator.toString());
final ValidationResult status = validator.validate(attributes);
assertEquals("Invalid RPC method uri. Uri should be the method to be called, or method from response.", status.getMessage());
}

@Test
@DisplayName("test_valid_response_uri_in_sink")
public void test_valid_response_uri_in_sink(){
final UUri sink= LongUriSerializer.instance().deserialize("/test.client/1/rpc.response");
final UAttributes attributes =
UAttributesBuilder.response(UPriority.UPRIORITY_CS0,sink,UuidFactory.Factories.UPROTOCOL.factory().create()).build();
final UAttributesValidator validator = UAttributesValidator.getValidator(attributes);
assertEquals("UAttributesValidator.Response", validator.toString());
final ValidationResult status = validator.validate(attributes);
assertEquals(ValidationResult.success(), status);
}

@Test
@DisplayName("test_invalid_response_uri_in_sink")
public void test_invalid_response_uri_in_sink(){
final UUri sink= LongUriSerializer.instance().deserialize("/test.client/1/rpc.method");
final UAttributes attributes =
UAttributesBuilder.response(UPriority.UPRIORITY_CS0,sink,UuidFactory.Factories.UPROTOCOL.factory().create()).build();
final UAttributesValidator validator = UAttributesValidator.getValidator(attributes);
assertEquals("UAttributesValidator.Response", validator.toString());
final ValidationResult status = validator.validate(attributes);
assertEquals("Invalid RPC response type.", status.getMessage());
}

private UUri buildSink() {
return UUri.newBuilder().setAuthority(UAuthority.newBuilder().setName("vcu.someVin.veh.ultifi.gm.com"))
.setEntity(UEntity.newBuilder().setName("petapp.ultifi.gm.com").setVersionMajor(1))
.setResource(UResourceBuilder.forRpcResponse()).build();
}


}

0 comments on commit 264f042

Please sign in to comment.