Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Add validation for id property in uattributes
  • Loading branch information
neelam-kushwah committed Apr 16, 2024
commit 15931f7af61fcd3e2190baf65532408faf8b2717
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public static UAttributesValidator getValidator(UAttributes attribute) {
public ValidationResult validate(UAttributes attributes) {
final String errorMessage = Stream.of(validateType(attributes),
validateTtl(attributes), validateSink(attributes), validatePriority(attributes),
validatePermissionLevel(attributes), validateReqId(attributes))
validatePermissionLevel(attributes), validateReqId(attributes), validateId(attributes))
.filter(ValidationResult::isFailure).map(ValidationResult::getMessage).collect(Collectors.joining(","));
return errorMessage.isBlank() ? ValidationResult.success() : ValidationResult.failure(errorMessage);
}
Expand Down Expand Up @@ -182,6 +182,25 @@ public ValidationResult validatePriority(UAttributes attributes) {
}


/**
* Validate the Id for the default case. If the UAttributes object does not contain an Id,
* the ValidationResult is failed.
*
* @param attributes Attributes object containing the id to validate.
* @return Returns a {@link ValidationResult} that is success or failed with a failure message.
*/
public ValidationResult validateId(UAttributes attributes) {
if (!attributes.hasId()) {
return ValidationResult.failure("Missing id");
}
if (!UuidUtils.isUuid(attributes.getId())) {
return ValidationResult.failure("Attributes must contain valid uProtocol UUID in id property");
} else {
return ValidationResult.success();
}
}


/**
* Validate the {@link UMessageType} attribute, it is required.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,8 @@
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.assertNotNull;


class UAttributesValidatorTest {
Expand Down Expand Up @@ -143,7 +142,7 @@ public void test_validate_uAttributes_for_publish_message_payload_invalid_permis
assertEquals("Invalid Permission Level", status.getMessage());
}


@Test
@DisplayName("Validate a UAttributes for payload that is meant to be published with invalid request id")
public void test_validate_uAttributes_for_publish_message_payload_invalid_request_id() {
Expand Down Expand Up @@ -235,7 +234,7 @@ public void test_validate_uAttributes_for_rpc_request_message_payload_invalid_pe
assertEquals("Invalid Permission Level", status.getMessage());
}


@Test
@DisplayName("Validate a UAttributes for payload that is meant to be an RPC request with invalid request id")
public void test_validate_uAttributes_for_rpc_request_message_payload_invalid_request_id() {
Expand Down Expand Up @@ -712,6 +711,112 @@ public void test_notification_validation_with_a_valid_notification_UAttributes()
assertEquals("", status.getMessage());
}

@Test
public void testPublishValidationWithoutId() {
UAttributesBuilder builder = UAttributesBuilder.publish(buildSource(), UPriority.UPRIORITY_CS1);
assertNotNull(builder);
UAttributes attributes = builder.build();
attributes = attributes.toBuilder().clearId().build();
UAttributesValidator validator = UAttributesValidator.Validators.PUBLISH.validator();
ValidationResult status = validator.validate(attributes);
assertTrue(status.isFailure());
assertEquals("Missing id", status.getMessage());
}

@Test
public void testNotificationValidationWithoutId() {
UUri sink = buildSink();
UAttributesBuilder builder = UAttributesBuilder.notification(buildSource(), sink, UPriority.UPRIORITY_CS1);
assertNotNull(builder);
UAttributes attributes = builder.build();
attributes = attributes.toBuilder().clearId().build();
UAttributesValidator validator = UAttributesValidator.Validators.NOTIFICATION.validator();
ValidationResult status = validator.validate(attributes);
assertTrue(status.isFailure());
assertEquals("Missing id", status.getMessage());
}

@Test
public void testRequestValidationWithoutId() {
UUri sink = buildSink();
Integer ttl = 1000;
UAttributesBuilder builder = UAttributesBuilder.request(buildSource(), sink, UPriority.UPRIORITY_CS4, ttl);
assertNotNull(builder);
UAttributes attributes = builder.build();
attributes = attributes.toBuilder().clearId().build();
UAttributesValidator validator = UAttributesValidator.Validators.REQUEST.validator();
ValidationResult status = validator.validate(attributes);
assertTrue(status.isFailure());
assertEquals("Missing id", status.getMessage());
}

@Test
public void testResponseValidationWithoutId() {
UUri sink = buildSink();
UUID reqId = UuidFactory.Factories.UPROTOCOL.factory().create();
UAttributesBuilder builder = UAttributesBuilder.response(buildSource(), sink, UPriority.UPRIORITY_CS6, reqId);
assertNotNull(builder);
UAttributes attributes = builder.build();
attributes = attributes.toBuilder().clearId().build();
UAttributesValidator validator = UAttributesValidator.Validators.RESPONSE.validator();
ValidationResult status = validator.validate(attributes);
assertTrue(status.isFailure());
assertEquals("Missing id", status.getMessage());
}

@Test
public void testPublishValidationWithInvalidId() {
UAttributesBuilder builder = UAttributesBuilder.publish(buildSource(), UPriority.UPRIORITY_CS1);
assertNotNull(builder);
UAttributes attributes = builder.build();
attributes = attributes.toBuilder().setId(getUUID()).build();
UAttributesValidator validator = UAttributesValidator.Validators.PUBLISH.validator();
ValidationResult status = validator.validate(attributes);
assertTrue(status.isFailure());
assertEquals("Attributes must contain valid uProtocol UUID in id property", status.getMessage());
}

@Test
public void testNotificationValidationWithInvalidId() {
UUri sink = buildSink();
UAttributesBuilder builder = UAttributesBuilder.notification(buildSource(), sink, UPriority.UPRIORITY_CS1);
assertNotNull(builder);
UAttributes attributes = builder.build();
attributes = attributes.toBuilder().setId(getUUID()).build();
UAttributesValidator validator = UAttributesValidator.Validators.NOTIFICATION.validator();
ValidationResult status = validator.validate(attributes);
assertTrue(status.isFailure());
assertEquals("Attributes must contain valid uProtocol UUID in id property", status.getMessage());
}

@Test
public void testRequestValidationWithInvalidId() {
UUri sink = buildSink();
Integer ttl = 1000;
UAttributesBuilder builder = UAttributesBuilder.request(buildSource(), sink, UPriority.UPRIORITY_CS4, ttl);
assertNotNull(builder);
UAttributes attributes = builder.build();
attributes = attributes.toBuilder().setId(getUUID()).build();
UAttributesValidator validator = UAttributesValidator.Validators.REQUEST.validator();
ValidationResult status = validator.validate(attributes);
assertTrue(status.isFailure());
assertEquals("Attributes must contain valid uProtocol UUID in id property", status.getMessage());
}

@Test
public void testResponseValidationWithInvalidId() {
UUri sink = buildSink();
UUID reqId = UuidFactory.Factories.UPROTOCOL.factory().create();
UAttributesBuilder builder = UAttributesBuilder.response(buildSource(), sink, UPriority.UPRIORITY_CS6, reqId);
assertNotNull(builder);
UAttributes attributes = builder.build();
attributes = attributes.toBuilder().setId(getUUID()).build();
UAttributesValidator validator = UAttributesValidator.Validators.RESPONSE.validator();
ValidationResult status = validator.validate(attributes);
assertTrue(status.isFailure());
assertEquals("Attributes must contain valid uProtocol UUID in id property", 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))
Expand All @@ -724,4 +829,10 @@ private UUri buildSource() {
.setResource(UResourceBuilder.forRpcResponse()).build();
}

private UUID getUUID() {
java.util.UUID uuid_java = java.util.UUID.randomUUID();
return UUID.newBuilder().setMsb(uuid_java.getMostSignificantBits()).setLsb(uuid_java.getLeastSignificantBits())
.build();
}

}