diff --git a/label-application-rule-config-service-api/src/main/proto/org/hypertrace/label/application/rule/config/service/v1/label_application_rule.proto b/label-application-rule-config-service-api/src/main/proto/org/hypertrace/label/application/rule/config/service/v1/label_application_rule.proto index cf7e935f..53f55ce6 100644 --- a/label-application-rule-config-service-api/src/main/proto/org/hypertrace/label/application/rule/config/service/v1/label_application_rule.proto +++ b/label-application-rule-config-service-api/src/main/proto/org/hypertrace/label/application/rule/config/service/v1/label_application_rule.proto @@ -36,15 +36,28 @@ message LabelApplicationRuleData { message LeafCondition { // only equals and regex are supported for key condition - StringCondition key_condition = 1; + StringKeyCondition key_condition = 1; oneof condition { - StringCondition string_condition = 2; + StringValueCondition string_condition = 2; UnaryCondition unary_condition = 3; JsonCondition json_condition = 4; } } - message StringCondition { + message StringKeyCondition { + Operator operator = 1; + oneof kind { + string value = 2; + } + + enum Operator { + OPERATOR_UNSPECIFIED = 0; + OPERATOR_EQUALS = 1; // operator to check if the key exists, and value is equal to the provided value + OPERATOR_MATCHES_REGEX = 2; // operator to check if the key exists, and value matches the provided regex value + } + } + + message StringValueCondition { Operator operator = 1; oneof kind { string value = 2; @@ -79,7 +92,7 @@ message LabelApplicationRuleData { message JsonCondition { string json_path = 1; // path to json structure oneof value_condition { - StringCondition string_condition = 2; + StringValueCondition string_condition = 2; UnaryCondition unary_condition = 3; } } diff --git a/label-application-rule-config-service-impl/src/main/java/org/hypertrace/label/application/rule/config/service/LabelApplicationRuleValidatorImpl.java b/label-application-rule-config-service-impl/src/main/java/org/hypertrace/label/application/rule/config/service/LabelApplicationRuleValidatorImpl.java index f9934b84..fc5e7fe8 100644 --- a/label-application-rule-config-service-impl/src/main/java/org/hypertrace/label/application/rule/config/service/LabelApplicationRuleValidatorImpl.java +++ b/label-application-rule-config-service-impl/src/main/java/org/hypertrace/label/application/rule/config/service/LabelApplicationRuleValidatorImpl.java @@ -19,10 +19,15 @@ import org.hypertrace.label.application.rule.config.service.v1.GetLabelApplicationRulesRequest; import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData; import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.Action; +import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.Action.DynamicLabel; +import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.Action.DynamicLabel.TokenExtractionRule; +import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.Action.StaticLabels; import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.CompositeCondition; +import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.Condition; import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.JsonCondition; import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.LeafCondition; -import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.StringCondition; +import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.StringKeyCondition; +import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.StringValueCondition; import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.UnaryCondition; import org.hypertrace.label.application.rule.config.service.v1.UpdateLabelApplicationRuleRequest; @@ -60,12 +65,12 @@ public void validateOrThrow( private void validateLabelApplicationRuleData(LabelApplicationRuleData labelApplicationRuleData) { validateNonDefaultPresenceOrThrow( - labelApplicationRuleData, labelApplicationRuleData.NAME_FIELD_NUMBER); + labelApplicationRuleData, LabelApplicationRuleData.NAME_FIELD_NUMBER); validateCondition(labelApplicationRuleData.getMatchingCondition()); validateAction(labelApplicationRuleData.getLabelAction()); } - private void validateCondition(LabelApplicationRuleData.Condition condition) { + private void validateCondition(Condition condition) { switch (condition.getConditionCase()) { case LEAF_CONDITION: validateLeafCondition(condition.getLeafCondition()); @@ -84,7 +89,7 @@ private void validateLeafCondition(LeafCondition leafCondition) { validateKeyStringCondition(leafCondition.getKeyCondition()); switch (leafCondition.getConditionCase()) { case STRING_CONDITION: - validateStringCondition(leafCondition.getStringCondition()); + validateStringValueCondition(leafCondition.getStringCondition()); break; case UNARY_CONDITION: validateUnaryCondition(leafCondition.getUnaryCondition()); @@ -101,15 +106,15 @@ private void validateLeafCondition(LeafCondition leafCondition) { } private void validateCompositeCondition(CompositeCondition compositeCondition) { - validateNonDefaultPresenceOrThrow(compositeCondition, compositeCondition.OPERATOR_FIELD_NUMBER); + validateNonDefaultPresenceOrThrow(compositeCondition, CompositeCondition.OPERATOR_FIELD_NUMBER); compositeCondition.getChildrenList().forEach(this::validateCondition); } private void validateJsonCondition(JsonCondition jsonCondition) { - validateNonDefaultPresenceOrThrow(jsonCondition, jsonCondition.JSON_PATH_FIELD_NUMBER); + validateNonDefaultPresenceOrThrow(jsonCondition, JsonCondition.JSON_PATH_FIELD_NUMBER); switch (jsonCondition.getValueConditionCase()) { case STRING_CONDITION: - validateStringCondition(jsonCondition.getStringCondition()); + validateStringValueCondition(jsonCondition.getStringCondition()); break; case UNARY_CONDITION: validateUnaryCondition(jsonCondition.getUnaryCondition()); @@ -122,8 +127,8 @@ private void validateJsonCondition(JsonCondition jsonCondition) { } } - private void validateKeyStringCondition(StringCondition stringCondition) { - validateNonDefaultPresenceOrThrow(stringCondition, StringCondition.VALUE_FIELD_NUMBER); + private void validateKeyStringCondition(StringKeyCondition stringCondition) { + validateNonDefaultPresenceOrThrow(stringCondition, StringKeyCondition.VALUE_FIELD_NUMBER); switch (stringCondition.getOperator()) { case OPERATOR_EQUALS: break; @@ -147,12 +152,12 @@ keyPattern, printMessage(stringCondition))) } } - private void validateStringCondition(StringCondition stringCondition) { - validateNonDefaultPresenceOrThrow(stringCondition, StringCondition.OPERATOR_FIELD_NUMBER); + private void validateStringValueCondition(StringValueCondition stringCondition) { + validateNonDefaultPresenceOrThrow(stringCondition, StringValueCondition.OPERATOR_FIELD_NUMBER); switch (stringCondition.getOperator()) { case OPERATOR_MATCHES_REGEX: case OPERATOR_NOT_MATCHES_REGEX: - validateNonDefaultPresenceOrThrow(stringCondition, StringCondition.VALUE_FIELD_NUMBER); + validateNonDefaultPresenceOrThrow(stringCondition, StringValueCondition.VALUE_FIELD_NUMBER); final String pattern = stringCondition.getValue(); final Status regexValidationStatus = RegexValidator.validate(pattern); if (!regexValidationStatus.isOk()) { @@ -192,13 +197,13 @@ private void validateStringCondition(StringCondition stringCondition) { } private void validateUnaryCondition(UnaryCondition unaryCondition) { - validateNonDefaultPresenceOrThrow(unaryCondition, unaryCondition.OPERATOR_FIELD_NUMBER); + validateNonDefaultPresenceOrThrow(unaryCondition, UnaryCondition.OPERATOR_FIELD_NUMBER); } private void validateAction(Action action) { - validateNonDefaultPresenceOrThrow(action, action.ENTITY_TYPES_FIELD_NUMBER); + validateNonDefaultPresenceOrThrow(action, Action.ENTITY_TYPES_FIELD_NUMBER); validateEntityTypes(action.getEntityTypesList()); - validateNonDefaultPresenceOrThrow(action, action.OPERATION_FIELD_NUMBER); + validateNonDefaultPresenceOrThrow(action, Action.OPERATION_FIELD_NUMBER); switch (action.getValueCase()) { case STATIC_LABELS: validateStaticLabels(action.getStaticLabels()); @@ -207,7 +212,7 @@ private void validateAction(Action action) { validateDynamicLabel(action.getDynamicLabelExpression()); break; case DYNAMIC_LABEL_KEY: - validateNonDefaultPresenceOrThrow(action, action.DYNAMIC_LABEL_KEY_FIELD_NUMBER); + validateNonDefaultPresenceOrThrow(action, Action.DYNAMIC_LABEL_KEY_FIELD_NUMBER); break; default: throwInvalidArgumentException( @@ -221,8 +226,8 @@ void validateEntityTypes(List entityTypes) { } } - void validateStaticLabels(Action.StaticLabels staticLabels) { - validateNonDefaultPresenceOrThrow(staticLabels, staticLabels.IDS_FIELD_NUMBER); + void validateStaticLabels(StaticLabels staticLabels) { + validateNonDefaultPresenceOrThrow(staticLabels, StaticLabels.IDS_FIELD_NUMBER); List staticLabelIds = staticLabels.getIdsList(); if (Set.copyOf(staticLabelIds).size() != staticLabelIds.size()) { throwInvalidArgumentException( @@ -230,13 +235,13 @@ void validateStaticLabels(Action.StaticLabels staticLabels) { } } - private void validateDynamicLabel(Action.DynamicLabel dynamicLabel) { - validateNonDefaultPresenceOrThrow(dynamicLabel, dynamicLabel.LABEL_EXPRESSION_FIELD_NUMBER); + private void validateDynamicLabel(DynamicLabel dynamicLabel) { + validateNonDefaultPresenceOrThrow(dynamicLabel, DynamicLabel.LABEL_EXPRESSION_FIELD_NUMBER); validateLabelExpression(dynamicLabel); dynamicLabel.getTokenExtractionRulesList().forEach(this::validateTokenExtractionRule); } - public void validateLabelExpression(Action.DynamicLabel dynamicLabel) { + public void validateLabelExpression(DynamicLabel dynamicLabel) { String labelExpression = dynamicLabel.getLabelExpression(); List validKeys = new ArrayList<>(); dynamicLabel @@ -261,9 +266,8 @@ public void validateLabelExpression(Action.DynamicLabel dynamicLabel) { } } - private void validateTokenExtractionRule( - Action.DynamicLabel.TokenExtractionRule tokenExtractionRule) { - validateNonDefaultPresenceOrThrow(tokenExtractionRule, tokenExtractionRule.KEY_FIELD_NUMBER); + private void validateTokenExtractionRule(TokenExtractionRule tokenExtractionRule) { + validateNonDefaultPresenceOrThrow(tokenExtractionRule, TokenExtractionRule.KEY_FIELD_NUMBER); } private void throwInvalidArgumentException(String description) { diff --git a/label-application-rule-config-service-impl/src/test/java/org/hypertrace/label/application/rule/config/service/LabelApplicationRuleConfigServiceImplTest.java b/label-application-rule-config-service-impl/src/test/java/org/hypertrace/label/application/rule/config/service/LabelApplicationRuleConfigServiceImplTest.java index d3e8dac7..df970101 100644 --- a/label-application-rule-config-service-impl/src/test/java/org/hypertrace/label/application/rule/config/service/LabelApplicationRuleConfigServiceImplTest.java +++ b/label-application-rule-config-service-impl/src/test/java/org/hypertrace/label/application/rule/config/service/LabelApplicationRuleConfigServiceImplTest.java @@ -13,7 +13,6 @@ import io.grpc.Status; import io.grpc.StatusRuntimeException; import java.util.Arrays; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -35,7 +34,8 @@ import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.Condition; import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.JsonCondition; import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.LeafCondition; -import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.StringCondition; +import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.StringKeyCondition; +import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.StringValueCondition; import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.UnaryCondition; import org.hypertrace.label.application.rule.config.service.v1.UpdateLabelApplicationRuleRequest; import org.hypertrace.label.application.rule.config.service.v1.UpdateLabelApplicationRuleResponse; @@ -73,7 +73,7 @@ void afterEach() { @Test void createLabelApplicationRule() { - LabelApplicationRule simpleRule = createSimpleRule("auth", "valid"); + LabelApplicationRule simpleRule = createSimpleRule(); LabelApplicationRule compositeRule = createCompositeRule(); List createdRules = List.of(simpleRule, compositeRule); List createdData = @@ -107,7 +107,7 @@ void createLabelApplicationRuleWithDynamicLabelApplicationRulesLimitReached() { @Test void getLabelApplicationRules() { - LabelApplicationRule simpleRule = createSimpleRule("auth", "valid"); + LabelApplicationRule simpleRule = createSimpleRule(); LabelApplicationRule compositeRule = createCompositeRule(); Set expectedRules = Set.of(simpleRule, compositeRule); GetLabelApplicationRulesResponse response = @@ -120,7 +120,7 @@ void getLabelApplicationRules() { @Test void updateLabelApplicationRule() { - LabelApplicationRule simpleRule = createSimpleRule("auth", "valid"); + LabelApplicationRule simpleRule = createSimpleRule(); LabelApplicationRuleData expectedData = buildSimpleRuleData("auth", "not-valid"); String updateRuleId = simpleRule.getId(); UpdateLabelApplicationRuleRequest request = @@ -135,22 +135,20 @@ void updateLabelApplicationRule() { @Test void updateLabelApplicationRuleError() { - LabelApplicationRule simpleRule = createSimpleRule("auth", "valid"); LabelApplicationRuleData expectedData = buildSimpleRuleData("auth", "not-valid"); UpdateLabelApplicationRuleRequest request = UpdateLabelApplicationRuleRequest.newBuilder().setId("1").setData(expectedData).build(); Throwable exception = assertThrows( StatusRuntimeException.class, - () -> { - labelApplicationRuleConfigServiceBlockingStub.updateLabelApplicationRule(request); - }); + () -> + labelApplicationRuleConfigServiceBlockingStub.updateLabelApplicationRule(request)); assertEquals(Status.NOT_FOUND, Status.fromThrowable(exception)); } @Test void deleteApplicationRule() { - LabelApplicationRule simpleRule = createSimpleRule("auth", "valid"); + LabelApplicationRule simpleRule = createSimpleRule(); LabelApplicationRule compositeRule = createCompositeRule(); List rules = List.of(simpleRule, compositeRule); rules.forEach( @@ -173,39 +171,38 @@ void deleteApplicationRuleError() { Throwable exception = assertThrows( StatusRuntimeException.class, - () -> { - labelApplicationRuleConfigServiceBlockingStub.deleteLabelApplicationRule(request); - }); + () -> + labelApplicationRuleConfigServiceBlockingStub.deleteLabelApplicationRule(request)); assertEquals(Status.NOT_FOUND, Status.fromThrowable(exception)); } private LabelApplicationRuleData buildCompositeRuleData() { // This condition implies foo(key) exists AND foo(key) = bar(value) AND // req.http.headers.auth(key) = valid(value) - StringCondition fooKeyCondition = - StringCondition.newBuilder() - .setOperator(StringCondition.Operator.OPERATOR_EQUALS) + StringKeyCondition fooKeyCondition = + StringKeyCondition.newBuilder() + .setOperator(StringKeyCondition.Operator.OPERATOR_EQUALS) .setValue("foo") .build(); UnaryCondition fooUnaryValueCondition = UnaryCondition.newBuilder().setOperator(UnaryCondition.Operator.OPERATOR_EXISTS).build(); - StringCondition fooStringValueCondition = - StringCondition.newBuilder() - .setOperator(StringCondition.Operator.OPERATOR_EQUALS) + StringValueCondition fooStringValueCondition = + StringValueCondition.newBuilder() + .setOperator(StringValueCondition.Operator.OPERATOR_EQUALS) .setValue("bar") .build(); - StringCondition authKeyCondition = - StringCondition.newBuilder() - .setOperator(StringCondition.Operator.OPERATOR_EQUALS) + StringKeyCondition authKeyCondition = + StringKeyCondition.newBuilder() + .setOperator(StringKeyCondition.Operator.OPERATOR_EQUALS) .setValue("auth") .build(); JsonCondition authJsonValueCondition = JsonCondition.newBuilder() .setJsonPath("req.http.headers") .setStringCondition( - StringCondition.newBuilder() - .setOperator(StringCondition.Operator.OPERATOR_EQUALS) + StringValueCondition.newBuilder() + .setOperator(StringValueCondition.Operator.OPERATOR_EQUALS) .setValue("valid") .build()) .build(); @@ -250,14 +247,14 @@ private LabelApplicationRuleData buildCompositeRuleData() { } private LabelApplicationRuleData buildSimpleRuleData(String key, String value) { - StringCondition fooKeyCondition = - StringCondition.newBuilder() - .setOperator(StringCondition.Operator.OPERATOR_EQUALS) + StringKeyCondition fooKeyCondition = + StringKeyCondition.newBuilder() + .setOperator(StringKeyCondition.Operator.OPERATOR_EQUALS) .setValue(key) .build(); - StringCondition fooValueCondition = - StringCondition.newBuilder() - .setOperator(StringCondition.Operator.OPERATOR_EQUALS) + StringValueCondition fooValueCondition = + StringValueCondition.newBuilder() + .setOperator(StringValueCondition.Operator.OPERATOR_EQUALS) .setValue(value) .build(); LeafCondition leafCondition = @@ -274,8 +271,8 @@ private LabelApplicationRuleData buildSimpleRuleData(String key, String value) { .build(); } - private LabelApplicationRule createSimpleRule(String key, String value) { - LabelApplicationRuleData simpleRuleData = buildSimpleRuleData(key, value); + private LabelApplicationRule createSimpleRule() { + LabelApplicationRuleData simpleRuleData = buildSimpleRuleData("auth", "valid"); CreateLabelApplicationRuleRequest simpleRuleRequest = CreateLabelApplicationRuleRequest.newBuilder().setData(simpleRuleData).build(); CreateLabelApplicationRuleResponse simpleRuleResponse = @@ -284,8 +281,6 @@ private LabelApplicationRule createSimpleRule(String key, String value) { } private LabelApplicationRule createCompositeRule() { - Map createdRulesById = new HashMap<>(); - LabelApplicationRuleData compositeRuleData = buildCompositeRuleData(); CreateLabelApplicationRuleRequest compositeRuleRequest = CreateLabelApplicationRuleRequest.newBuilder().setData(compositeRuleData).build(); diff --git a/label-application-rule-config-service-impl/src/test/java/org/hypertrace/label/application/rule/config/service/LabelApplicationRuleValidatorTest.java b/label-application-rule-config-service-impl/src/test/java/org/hypertrace/label/application/rule/config/service/LabelApplicationRuleValidatorTest.java index 2cc613ea..f5fe4c42 100644 --- a/label-application-rule-config-service-impl/src/test/java/org/hypertrace/label/application/rule/config/service/LabelApplicationRuleValidatorTest.java +++ b/label-application-rule-config-service-impl/src/test/java/org/hypertrace/label/application/rule/config/service/LabelApplicationRuleValidatorTest.java @@ -6,7 +6,7 @@ import io.grpc.StatusRuntimeException; import java.util.Arrays; import java.util.List; -import java.util.Optional; +import java.util.Objects; import org.hypertrace.core.grpcutils.context.RequestContext; import org.hypertrace.label.application.rule.config.service.v1.CreateLabelApplicationRuleRequest; import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData; @@ -15,24 +15,25 @@ import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.Condition; import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.JsonCondition; import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.LeafCondition; -import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.StringCondition; +import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.StringKeyCondition; +import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.StringValueCondition; import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.UnaryCondition; import org.junit.jupiter.api.Test; public class LabelApplicationRuleValidatorTest { private static final RequestContext REQUEST_CONTEXT = RequestContext.forTenantId("tenant-1"); private final LabelApplicationRuleValidator labelApplicationRuleValidator; - private final StringCondition errorKeyCondition; - private final StringCondition correctKeyCondition; - private final StringCondition correctKeyConditionMatchesRegex; - private final StringCondition correctAuthKeyCondition; - private final StringCondition correctStringValueCondition; - private final StringCondition correctRegexStringValueCondition; - private final StringCondition correctRegexNotMatchingCondition; - private final StringCondition incorrectRegexStringValueCondition; - private final StringCondition incorrectRegexNotMatchingCondition; - private final StringCondition correctStringValueConditionWithMatchesIPs; - private final StringCondition incorrectStringValueConditionWithMatchesIPs; + private final StringKeyCondition errorKeyCondition; + private final StringKeyCondition correctKeyCondition; + private final StringKeyCondition correctKeyConditionMatchesRegex; + private final StringKeyCondition correctAuthKeyCondition; + private final StringValueCondition correctStringValueCondition; + private final StringValueCondition correctRegexStringValueCondition; + private final StringValueCondition correctRegexNotMatchingCondition; + private final StringValueCondition incorrectRegexStringValueCondition; + private final StringValueCondition incorrectRegexNotMatchingCondition; + private final StringValueCondition correctStringValueConditionWithMatchesIPs; + private final StringValueCondition incorrectStringValueConditionWithMatchesIPs; private final UnaryCondition errorUnaryValueCondition; private final UnaryCondition correctUnaryValueCondition; private final JsonCondition correctJsonValueCondition; @@ -40,19 +41,19 @@ public class LabelApplicationRuleValidatorTest { public LabelApplicationRuleValidatorTest() { labelApplicationRuleValidator = new LabelApplicationRuleValidatorImpl(); errorKeyCondition = - StringCondition.newBuilder() - .setOperator(StringCondition.Operator.OPERATOR_UNSPECIFIED) + StringKeyCondition.newBuilder() + .setOperator(StringKeyCondition.Operator.OPERATOR_UNSPECIFIED) .setValue("foo") .build(); // The below condition informs that key=foo correctKeyCondition = - StringCondition.newBuilder() - .setOperator(StringCondition.Operator.OPERATOR_EQUALS) + StringKeyCondition.newBuilder() + .setOperator(StringKeyCondition.Operator.OPERATOR_EQUALS) .setValue("foo") .build(); correctKeyConditionMatchesRegex = - StringCondition.newBuilder() - .setOperator(StringCondition.Operator.OPERATOR_MATCHES_REGEX) + StringKeyCondition.newBuilder() + .setOperator(StringKeyCondition.Operator.OPERATOR_MATCHES_REGEX) .setValue("foo.*") .build(); errorUnaryValueCondition = @@ -62,55 +63,55 @@ public LabelApplicationRuleValidatorTest() { correctUnaryValueCondition = UnaryCondition.newBuilder().setOperator(UnaryCondition.Operator.OPERATOR_EXISTS).build(); correctStringValueCondition = - StringCondition.newBuilder() - .setOperator(StringCondition.Operator.OPERATOR_EQUALS) + StringValueCondition.newBuilder() + .setOperator(StringValueCondition.Operator.OPERATOR_EQUALS) .setValue("bar") .build(); correctRegexStringValueCondition = - StringCondition.newBuilder() - .setOperator(StringCondition.Operator.OPERATOR_MATCHES_REGEX) + StringValueCondition.newBuilder() + .setOperator(StringValueCondition.Operator.OPERATOR_MATCHES_REGEX) .setValue(".*bar.*") .build(); correctRegexNotMatchingCondition = - StringCondition.newBuilder() - .setOperator(StringCondition.Operator.OPERATOR_NOT_MATCHES_REGEX) + StringValueCondition.newBuilder() + .setOperator(StringValueCondition.Operator.OPERATOR_NOT_MATCHES_REGEX) .setValue(".*bar.*") .build(); incorrectRegexStringValueCondition = - StringCondition.newBuilder() - .setOperator(StringCondition.Operator.OPERATOR_MATCHES_REGEX) + StringValueCondition.newBuilder() + .setOperator(StringValueCondition.Operator.OPERATOR_MATCHES_REGEX) .setValue("((?!bar)") .build(); incorrectRegexNotMatchingCondition = - StringCondition.newBuilder() - .setOperator(StringCondition.Operator.OPERATOR_NOT_MATCHES_REGEX) + StringValueCondition.newBuilder() + .setOperator(StringValueCondition.Operator.OPERATOR_NOT_MATCHES_REGEX) .setValue("((?!bar)") .build(); correctStringValueConditionWithMatchesIPs = - StringCondition.newBuilder() - .setOperator(StringCondition.Operator.OPERATOR_MATCHES_IPS) + StringValueCondition.newBuilder() + .setOperator(StringValueCondition.Operator.OPERATOR_MATCHES_IPS) .setValues( - StringCondition.StringList.newBuilder() + StringValueCondition.StringList.newBuilder() .addAllValues(List.of("1.2.3.4", "4.5.6.7/8"))) .build(); incorrectStringValueConditionWithMatchesIPs = - StringCondition.newBuilder() - .setOperator(StringCondition.Operator.OPERATOR_MATCHES_IPS) + StringValueCondition.newBuilder() + .setOperator(StringValueCondition.Operator.OPERATOR_MATCHES_IPS) .setValues( - StringCondition.StringList.newBuilder() + StringValueCondition.StringList.newBuilder() .addAllValues(List.of("1.2.3.4/5", "1.2 3.4"))) .build(); correctAuthKeyCondition = - StringCondition.newBuilder() - .setOperator(StringCondition.Operator.OPERATOR_EQUALS) + StringKeyCondition.newBuilder() + .setOperator(StringKeyCondition.Operator.OPERATOR_EQUALS) .setValue("auth") .build(); correctJsonValueCondition = JsonCondition.newBuilder() .setJsonPath("req.http.headers") .setStringCondition( - StringCondition.newBuilder() - .setOperator(StringCondition.Operator.OPERATOR_EQUALS) + StringValueCondition.newBuilder() + .setOperator(StringValueCondition.Operator.OPERATOR_EQUALS) .setValue("valid") .build()) .build(); @@ -126,14 +127,10 @@ void validateOrThrowCreateRuleKeyError() { Condition matchingCondition = Condition.newBuilder().setLeafCondition(errorLeafCondition).build(); CreateLabelApplicationRuleRequest request = - buildCreateCreateLabelApplicationRuleRequest( - "Wrong Key Rule", matchingCondition, Optional.empty()); - Throwable exception = - assertThrows( - StatusRuntimeException.class, - () -> { - labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, request); - }); + buildCreateCreateLabelApplicationRuleRequest("Wrong Key Rule", matchingCondition, null); + assertThrows( + StatusRuntimeException.class, + () -> labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, request)); } @Test @@ -146,14 +143,11 @@ void validateOrThrowCreateRuleValueError() { Condition matchingCondition = Condition.newBuilder().setLeafCondition(errorLeafCondition).build(); CreateLabelApplicationRuleRequest request = - buildCreateCreateLabelApplicationRuleRequest( - "Wrong Value Rule", matchingCondition, Optional.empty()); + buildCreateCreateLabelApplicationRuleRequest("Wrong Value Rule", matchingCondition, null); Throwable exception = assertThrows( StatusRuntimeException.class, - () -> { - labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, request); - }); + () -> labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, request)); System.out.println(exception.getMessage()); } @@ -168,12 +162,9 @@ void validateOrThrowCreateRuleActionError() { Condition.newBuilder().setLeafCondition(errorLeafCondition).build(); CreateLabelApplicationRuleRequest noActionRequest = buildCreateLabelApplicationRuleRequestNoAction("No Action Rule", matchingCondition); - Throwable exception = - assertThrows( - StatusRuntimeException.class, - () -> { - labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, noActionRequest); - }); + assertThrows( + StatusRuntimeException.class, + () -> labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, noActionRequest)); } @Test @@ -187,8 +178,7 @@ void validateOrThrowCreateRuleLeafCondition() { Condition matchingCondition = Condition.newBuilder().setLeafCondition(errorLeafCondition).build(); CreateLabelApplicationRuleRequest request = - buildCreateCreateLabelApplicationRuleRequest( - "Correct Leaf Rule", matchingCondition, Optional.empty()); + buildCreateCreateLabelApplicationRuleRequest("Correct Leaf Rule", matchingCondition, null); labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, request); } @@ -203,8 +193,7 @@ void validateOrThrowCreateRuleLeafConditionWithMatchesIPs() { Condition matchingCondition = Condition.newBuilder().setLeafCondition(errorLeafCondition).build(); CreateLabelApplicationRuleRequest request = - buildCreateCreateLabelApplicationRuleRequest( - "Correct Leaf Rule", matchingCondition, Optional.empty()); + buildCreateCreateLabelApplicationRuleRequest("Correct Leaf Rule", matchingCondition, null); labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, request); } @@ -219,14 +208,11 @@ void validateOrThrowCreateRuleInvalidLeafConditionWithMatchesIPs() { Condition matchingCondition = Condition.newBuilder().setLeafCondition(errorLeafCondition).build(); CreateLabelApplicationRuleRequest request = - buildCreateCreateLabelApplicationRuleRequest( - "Correct Leaf Rule", matchingCondition, Optional.empty()); + buildCreateCreateLabelApplicationRuleRequest("Correct Leaf Rule", matchingCondition, null); assertThrows( StatusRuntimeException.class, - () -> { - labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, request); - }); + () -> labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, request)); } @Test @@ -265,7 +251,7 @@ void validateOrThrowCreateRuleCompositeCondition() { Condition.newBuilder().setCompositeCondition(compositeCondition1).build(); CreateLabelApplicationRuleRequest request = buildCreateCreateLabelApplicationRuleRequest( - "Correct Composite Rule", matchingCondition, Optional.empty()); + "Correct Composite Rule", matchingCondition, null); labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, request); } @@ -280,20 +266,15 @@ void validateLabelExpression() { Condition.newBuilder().setLeafCondition(errorLeafCondition).build(); CreateLabelApplicationRuleRequest request1 = buildCreateCreateLabelApplicationRuleRequest( - "Label Expression Rule", matchingCondition, Optional.of("${status}_{wrong-key}")); - Throwable exception = - assertThrows( - StatusRuntimeException.class, - () -> { - labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, request1); - }); + "Label Expression Rule", matchingCondition, "${status}_{wrong-key}"); + assertThrows( + StatusRuntimeException.class, + () -> labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, request1)); CreateLabelApplicationRuleRequest request2 = buildCreateCreateLabelApplicationRuleRequest( - "Label Expression Rule", matchingCondition, Optional.of("${status}_{method}")); + "Label Expression Rule", matchingCondition, "${status}_{method}"); assertDoesNotThrow( - () -> { - labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, request2); - }); + () -> labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, request2)); } @Test @@ -332,7 +313,7 @@ void validateDisabledRule() { Condition.newBuilder().setCompositeCondition(compositeCondition1).build(); CreateLabelApplicationRuleRequest request = buildCreateCreateLabelApplicationRuleRequest( - "Correct Composite Rule", false, matchingCondition, Optional.empty()); + "Correct Composite Rule", false, matchingCondition, null); assertDoesNotThrow( () -> labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, request)); } @@ -348,8 +329,7 @@ void validateOrThrowCreateRuleLeafConditionWithMatchRegex() { Condition matchingCondition = Condition.newBuilder().setLeafCondition(correctLeafCondition).build(); CreateLabelApplicationRuleRequest request = - buildCreateCreateLabelApplicationRuleRequest( - "Correct Leaf Rule", matchingCondition, Optional.empty()); + buildCreateCreateLabelApplicationRuleRequest("Correct Leaf Rule", matchingCondition, null); labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, request); } @@ -364,8 +344,7 @@ void validateOrThrowCreateRuleLeafConditionWithNotMatchRegex() { Condition matchingCondition = Condition.newBuilder().setLeafCondition(correctLeafCondition).build(); CreateLabelApplicationRuleRequest request = - buildCreateCreateLabelApplicationRuleRequest( - "Correct Leaf Rule", matchingCondition, Optional.empty()); + buildCreateCreateLabelApplicationRuleRequest("Correct Leaf Rule", matchingCondition, null); labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, request); } @@ -381,13 +360,11 @@ void validateOrThrowCreateRuleInvalidLeafConditionWithMatchRegex() { Condition.newBuilder().setLeafCondition(invalidLeafCondition).build(); CreateLabelApplicationRuleRequest request = buildCreateCreateLabelApplicationRuleRequest( - "Incorrect Leaf Rule", matchingCondition, Optional.empty()); + "Incorrect Leaf Rule", matchingCondition, null); assertThrows( StatusRuntimeException.class, - () -> { - labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, request); - }); + () -> labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, request)); } @Test @@ -402,30 +379,28 @@ void validateOrThrowCreateRuleInvalidLeafConditionWithNotMatchRegex() { Condition.newBuilder().setLeafCondition(invalidLeafCondition).build(); CreateLabelApplicationRuleRequest request = buildCreateCreateLabelApplicationRuleRequest( - "Incorrect Leaf Rule", matchingCondition, Optional.empty()); + "Incorrect Leaf Rule", matchingCondition, null); assertThrows( StatusRuntimeException.class, - () -> { - labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, request); - }); + () -> labelApplicationRuleValidator.validateOrThrow(REQUEST_CONTEXT, request)); } private CreateLabelApplicationRuleRequest buildCreateCreateLabelApplicationRuleRequest( - String name, Condition matchingCondition, Optional labelExpression) { + String name, Condition matchingCondition, String labelExpression) { return buildCreateCreateLabelApplicationRuleRequest( name, true, matchingCondition, labelExpression); } private CreateLabelApplicationRuleRequest buildCreateCreateLabelApplicationRuleRequest( - String name, boolean enabled, Condition matchingCondition, Optional labelExpression) { + String name, boolean enabled, Condition matchingCondition, String labelExpression) { LabelApplicationRuleData data; - if (labelExpression.isPresent()) { + if (Objects.nonNull(labelExpression)) { data = LabelApplicationRuleData.newBuilder() .setName(name) .setMatchingCondition(matchingCondition) - .setLabelAction(buildDynamicLabelAction(labelExpression.get())) + .setLabelAction(buildDynamicLabelAction(labelExpression)) .setEnabled(enabled) .build(); } else { @@ -466,21 +441,19 @@ private Action buildDynamicLabelAction(String labelExpression) { .setDynamicLabelExpression( LabelApplicationRuleData.Action.DynamicLabel.newBuilder() .setLabelExpression(labelExpression) - .addTokenExtractionRules( - buildTokenExtractionRule("req.http", "status", Optional.empty())) - .addTokenExtractionRules( - buildTokenExtractionRule("req.http", "some key", Optional.of("method"))) + .addTokenExtractionRules(buildTokenExtractionRule("req.http", "status", null)) + .addTokenExtractionRules(buildTokenExtractionRule("req.http", "some key", "method")) .build()) .build(); } private Action.DynamicLabel.TokenExtractionRule buildTokenExtractionRule( - String jsonPath, String key, Optional alias) { - if (alias.isPresent()) { + String jsonPath, String key, String alias) { + if (Objects.nonNull(alias)) { return Action.DynamicLabel.TokenExtractionRule.newBuilder() .setJsonPath(jsonPath) .setKey(key) - .setAlias(alias.get()) + .setAlias(alias) .build(); } else { return Action.DynamicLabel.TokenExtractionRule.newBuilder()