Remove GroupValidationResult 80/120980/2
authorJim Hahn <jrh3@att.com>
Tue, 27 Apr 2021 13:52:51 +0000 (09:52 -0400)
committerJim Hahn <jrh3@att.com>
Thu, 29 Apr 2021 15:35:23 +0000 (11:35 -0400)
Removed GroupValidationResult, replacing it with BeanValidationResult.
Modified the ParameterGroup subclasses to use BeanValidator, adding
annotations where needed to trigger the validations that had been
automatically performed by GroupValidationResult.

Issue-ID: POLICY-2059
Change-Id: I774950e98c9421064bacf735e0f5a5ab18540570
Signed-off-by: Jim Hahn <jrh3@att.com>
main/src/main/java/org/onap/policy/api/main/parameters/ApiParameterGroup.java
main/src/main/java/org/onap/policy/api/main/parameters/ApiParameterHandler.java
main/src/test/java/org/onap/policy/api/main/parameters/TestApiParameterGroup.java
main/src/test/java/org/onap/policy/api/main/parameters/TestApiParameterHandler.java
main/src/test/java/org/onap/policy/api/main/startstop/ApiDatabaseInitializerTest.java
main/src/test/resources/expectedValidationResults/InvalidRestServerParameters.txt [deleted file]

index c063d60..c9b96e3 100644 (file)
@@ -1,6 +1,7 @@
 /*-
  * ============LICENSE_START=======================================================
  *  Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved.
+ *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,12 +23,11 @@ package org.onap.policy.api.main.parameters;
 
 import java.util.List;
 import lombok.Getter;
-import lombok.Setter;
 import org.onap.policy.common.endpoints.parameters.RestServerParameters;
-import org.onap.policy.common.parameters.GroupValidationResult;
-import org.onap.policy.common.parameters.ParameterGroup;
-import org.onap.policy.common.parameters.ValidationStatus;
-import org.onap.policy.common.utils.validation.ParameterValidationUtils;
+import org.onap.policy.common.parameters.ParameterGroupImpl;
+import org.onap.policy.common.parameters.annotations.NotBlank;
+import org.onap.policy.common.parameters.annotations.NotNull;
+import org.onap.policy.common.parameters.annotations.Valid;
 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
 
 /**
@@ -35,14 +35,14 @@ import org.onap.policy.models.provider.PolicyModelsProviderParameters;
  *
  */
 @Getter
-public class ApiParameterGroup implements ParameterGroup {
+public class ApiParameterGroup extends ParameterGroupImpl {
 
-    @Setter
-    private String name;
+    @NotNull @Valid
     private final RestServerParameters restServerParameters;
+    @NotNull @Valid
     private final PolicyModelsProviderParameters databaseProviderParameters;
-    private final List<String> preloadPolicyTypes;
-    private final List<String> preloadPolicies;
+    private final List<@NotNull @NotBlank String> preloadPolicyTypes;
+    private final List<@NotNull @NotBlank String> preloadPolicies;
 
     /**
      * Create the api parameter group.
@@ -56,36 +56,10 @@ public class ApiParameterGroup implements ParameterGroup {
     public ApiParameterGroup(final String name, final RestServerParameters restServerParameters,
             final PolicyModelsProviderParameters databaseProviderParameters, final List<String> preloadPolicyTypes,
             final List<String> preloadPolicies) {
-        this.name = name;
+        super(name);
         this.restServerParameters = restServerParameters;
         this.databaseProviderParameters = databaseProviderParameters;
         this.preloadPolicyTypes = preloadPolicyTypes;
         this.preloadPolicies = preloadPolicies;
     }
-
-    /**
-     * Validate the parameter group.
-     *
-     * @return the result of the validation
-     */
-    @Override
-    public GroupValidationResult validate() {
-        final GroupValidationResult validationResult = new GroupValidationResult(this);
-        if (!ParameterValidationUtils.validateStringParameter(name)) {
-            validationResult.setResult("name", ValidationStatus.INVALID, "must be a non-blank string");
-        }
-        if (restServerParameters == null) {
-            validationResult.setResult("restServerParameters", ValidationStatus.INVALID,
-                    "must have restServerParameters to configure api rest server");
-        } else {
-            validationResult.setResult("restServerParameters", restServerParameters.validate());
-        }
-        if (databaseProviderParameters == null) {
-            validationResult.setResult("databaseProviderParameters", ValidationStatus.INVALID,
-                    "must have databaseProviderParameters to configure api rest server");
-        } else {
-            validationResult.setResult("databaseProviderParameters", databaseProviderParameters.validate());
-        }
-        return validationResult;
-    }
 }
index b660b88..813dd75 100644 (file)
@@ -1,9 +1,9 @@
 /*-
  * ============LICENSE_START=======================================================
- * ONAP Policy API 
- * ================================================================================ 
+ * ONAP Policy API
+ * ================================================================================
  * Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved.
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,7 +28,7 @@ import com.google.gson.GsonBuilder;
 import java.io.FileReader;
 import org.onap.policy.api.main.exception.PolicyApiException;
 import org.onap.policy.api.main.startstop.ApiCommandLineArguments;
-import org.onap.policy.common.parameters.GroupValidationResult;
+import org.onap.policy.common.parameters.ValidationResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -38,7 +38,7 @@ import org.slf4j.LoggerFactory;
 public class ApiParameterHandler {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ApiParameterHandler.class);
-    
+
     /**
      * Read the parameters from the parameter file.
      *
@@ -70,7 +70,7 @@ public class ApiParameterHandler {
         }
 
         // validate the parameters
-        final GroupValidationResult validationResult = apiParameterGroup.validate();
+        final ValidationResult validationResult = apiParameterGroup.validate();
         if (!validationResult.isValid()) {
             String returnMessage =
                     "validation error(s) on parameters from \"" + arguments.getConfigurationFilePath() + "\"\n";
index 7456226..2898248 100644 (file)
@@ -3,7 +3,7 @@
  * ONAP Policy API
  * ================================================================================
  * Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved.
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +23,7 @@
 
 package org.onap.policy.api.main.parameters;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -30,7 +31,7 @@ import static org.junit.Assert.assertTrue;
 import java.util.Collections;
 import org.junit.Test;
 import org.onap.policy.common.endpoints.parameters.RestServerParameters;
-import org.onap.policy.common.parameters.GroupValidationResult;
+import org.onap.policy.common.parameters.ValidationResult;
 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
 
 /**
@@ -48,7 +49,7 @@ public class TestApiParameterGroup {
                 commonTestData.getDatabaseProviderParameters(false);
         final ApiParameterGroup apiParameters = new ApiParameterGroup(CommonTestData.API_GROUP_NAME,
                 restServerParameters, databaseProviderParameters, Collections.emptyList(), Collections.emptyList());
-        final GroupValidationResult validationResult = apiParameters.validate();
+        final ValidationResult validationResult = apiParameters.validate();
         assertTrue(validationResult.isValid());
         assertEquals(restServerParameters.getHost(), apiParameters.getRestServerParameters().getHost());
         assertEquals(restServerParameters.getPort(), apiParameters.getRestServerParameters().getPort());
@@ -69,12 +70,10 @@ public class TestApiParameterGroup {
                 commonTestData.getDatabaseProviderParameters(false);
         final ApiParameterGroup apiParameters = new ApiParameterGroup(null, restServerParameters,
                 databaseProviderParameters, Collections.emptyList(), Collections.emptyList());
-        final GroupValidationResult validationResult = apiParameters.validate();
+        final ValidationResult validationResult = apiParameters.validate();
         assertFalse(validationResult.isValid());
         assertEquals(null, apiParameters.getName());
-        assertTrue(validationResult.getResult()
-                        .contains("field \"name\" type \"java.lang.String\" value \"null\" INVALID, "
-                                        + "must be a non-blank string"));
+        assertThat(validationResult.getResult()).contains("\"name\" value \"null\" INVALID, is null");
     }
 
     @Test
@@ -84,11 +83,10 @@ public class TestApiParameterGroup {
                 commonTestData.getDatabaseProviderParameters(false);
         final ApiParameterGroup apiParameters = new ApiParameterGroup("", restServerParameters,
                 databaseProviderParameters, Collections.emptyList(), Collections.emptyList());
-        final GroupValidationResult validationResult = apiParameters.validate();
+        final ValidationResult validationResult = apiParameters.validate();
         assertFalse(validationResult.isValid());
         assertEquals("", apiParameters.getName());
-        assertTrue(validationResult.getResult().contains("field \"name\" type \"java.lang.String\" value \"\" INVALID, "
-                        + "must be a non-blank string"));
+        assertThat(validationResult.getResult()).contains("\"name\" value \"\" INVALID, is blank");
     }
 
     @Test
@@ -98,11 +96,10 @@ public class TestApiParameterGroup {
                 commonTestData.getDatabaseProviderParameters(false);
         final ApiParameterGroup apiParameters = new ApiParameterGroup(CommonTestData.API_GROUP_NAME,
                 restServerParameters, databaseProviderParameters, Collections.emptyList(), Collections.emptyList());
-        final GroupValidationResult validationResult = apiParameters.validate();
+        final ValidationResult validationResult = apiParameters.validate();
         assertFalse(validationResult.isValid());
-        assertTrue(validationResult.getResult()
-                        .contains("\"org.onap.policy.common.endpoints.parameters.RestServerParameters\" INVALID, "
-                                        + "parameter group has status INVALID"));
+        assertThat(validationResult.getResult())
+                        .contains("\"RestServerParameters\" INVALID, item has status INVALID");
     }
 
     @Test
@@ -112,10 +109,10 @@ public class TestApiParameterGroup {
                 commonTestData.getDatabaseProviderParameters(false);
         final ApiParameterGroup apiParameters = new ApiParameterGroup(CommonTestData.API_GROUP_NAME,
                 restServerParameters, databaseProviderParameters, Collections.emptyList(), Collections.emptyList());
-        final GroupValidationResult validationResult = apiParameters.validate();
+        final ValidationResult validationResult = apiParameters.validate();
         assertFalse(validationResult.isValid());
-        assertTrue(validationResult.getResult()
-                        .contains("must have restServerParameters to configure api rest server"));
+        assertThat(validationResult.getResult())
+                        .contains("item \"restServerParameters\" value \"null\" INVALID, is null");
     }
 
 
@@ -126,11 +123,10 @@ public class TestApiParameterGroup {
                 commonTestData.getDatabaseProviderParameters(true);
         final ApiParameterGroup apiParameters = new ApiParameterGroup(CommonTestData.API_GROUP_NAME,
                 restServerParameters, databaseProviderParameters, Collections.emptyList(), Collections.emptyList());
-        final GroupValidationResult validationResult = apiParameters.validate();
+        final ValidationResult validationResult = apiParameters.validate();
         assertFalse(validationResult.isValid());
-        assertTrue(validationResult.getResult()
-                        .contains("\"org.onap.policy.models.provider.PolicyModelsProviderParameters\" INVALID, "
-                                        + "parameter group has status INVALID"));
+        assertThat(validationResult.getResult())
+                        .contains("\"PolicyModelsProviderParameters\" INVALID, item has status INVALID");
     }
 
     @Test
@@ -139,10 +135,10 @@ public class TestApiParameterGroup {
         final PolicyModelsProviderParameters databaseProviderParameters = null;
         final ApiParameterGroup apiParameters = new ApiParameterGroup(CommonTestData.API_GROUP_NAME,
                 restServerParameters, databaseProviderParameters, Collections.emptyList(), Collections.emptyList());
-        final GroupValidationResult validationResult = apiParameters.validate();
+        final ValidationResult validationResult = apiParameters.validate();
         assertFalse(validationResult.isValid());
-        assertTrue(validationResult.getResult()
-                        .contains("must have databaseProviderParameters to configure api rest server"));
+        assertThat(validationResult.getResult())
+            .contains("item \"databaseProviderParameters\" value \"null\" INVALID, is null");
     }
 
     @Test
index 5e1b7eb..5443e8c 100644 (file)
@@ -1,7 +1,7 @@
 /*-
  * ============LICENSE_START=======================================================
  *  Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved.
- *  Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ *  Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights reserved.
  *  Modifications Copyright (C) 2021 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
 
 package org.onap.policy.api.main.parameters;
 
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
 import org.junit.Test;
 import org.onap.policy.api.main.exception.PolicyApiException;
 import org.onap.policy.api.main.startstop.ApiCommandLineArguments;
@@ -105,16 +103,8 @@ public class TestApiParameterHandler {
         final ApiCommandLineArguments noArguments = new ApiCommandLineArguments();
         noArguments.parse(noArgumentString);
 
-        try {
-            new ApiParameterHandler().getParameters(noArguments);
-            fail("test should throw an exception here");
-        } catch (final Exception e) {
-            String expMsg = "validation error(s) on parameters from \"parameters/NoParameters.json\"\nparameter group "
-                    + "\"null\" type \"org.onap.policy.api.main.parameters.ApiParameterGroup\" INVALID, parameter "
-                    + "group has status INVALID\n"
-                    + "  field \"name\" type \"java.lang.String\" value \"null\" INVALID, must be a non-blank string\n";
-            assertEquals(expMsg, e.getMessage());
-        }
+        assertThatThrownBy(() -> new ApiParameterHandler().getParameters(noArguments))
+            .hasMessageContaining("\"name\"", "is null");
     }
 
     @Test
@@ -137,36 +127,13 @@ public class TestApiParameterHandler {
     }
 
     @Test
-    public void testApiParameterGroup_InvalidName() throws PolicyApiException, CommandLineException {
+    public void testApiParameterGroup_Invalid() throws PolicyApiException, CommandLineException {
         final String[] apiConfigParameters = {"-c", "parameters/ApiConfigParameters_InvalidName.json"};
         final ApiCommandLineArguments arguments = new ApiCommandLineArguments();
         arguments.parse(apiConfigParameters);
 
-        try {
-            new ApiParameterHandler().getParameters(arguments);
-            fail("test should throw an exception here");
-        } catch (final Exception e) {
-            assertTrue(e.getMessage().contains(
-                    "field \"name\" type \"java.lang.String\" value \" \" INVALID, must be a non-blank string"));
-        }
-    }
-
-    @Test
-    public void testApiParameterGroup_InvalidRestServerParameters()
-            throws PolicyApiException, IOException, CommandLineException {
-        final String[] apiConfigParameters = {"-c", "parameters/ApiConfigParameters_InvalidRestServerParameters.json"};
-        final ApiCommandLineArguments arguments = new ApiCommandLineArguments();
-        arguments.parse(apiConfigParameters);
-
-        try {
-            new ApiParameterHandler().getParameters(arguments);
-            fail("test should throw an exception here");
-        } catch (final Exception e) {
-            final String expectedResult = new String(Files.readAllBytes(
-                    Paths.get("src/test/resources/expectedValidationResults/InvalidRestServerParameters.txt")))
-                            .replaceAll("\\s+", "");
-            assertEquals(expectedResult, e.getMessage().replaceAll("\\s+", ""));
-        }
+        assertThatThrownBy(() -> new ApiParameterHandler().getParameters(arguments)).hasMessageContaining("\"name\"",
+                        "is null");
     }
 
     @Test
index cfc2a30..f7e43b8 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP
  * ================================================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -30,7 +30,7 @@ import org.junit.Test;
 import org.onap.policy.api.main.exception.PolicyApiException;
 import org.onap.policy.api.main.parameters.ApiParameterGroup;
 import org.onap.policy.api.main.parameters.CommonTestData;
-import org.onap.policy.common.parameters.GroupValidationResult;
+import org.onap.policy.common.parameters.ValidationResult;
 import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.models.provider.PolicyModelsProvider;
 import org.onap.policy.models.provider.PolicyModelsProviderFactory;
@@ -49,7 +49,7 @@ public class ApiDatabaseInitializerTest {
         COMMON_TEST_DATA.makeParameters(PARAM_FILE, "src/test/resources/parameters/ApiConfigParametersXXX.json", 6969);
 
         params = new StandardCoder().decode(new File(PARAM_FILE), ApiParameterGroup.class);
-        GroupValidationResult result = params.validate();
+        ValidationResult result = params.validate();
         if (!result.isValid()) {
             fail(result.getResult());
         }
diff --git a/main/src/test/resources/expectedValidationResults/InvalidRestServerParameters.txt b/main/src/test/resources/expectedValidationResults/InvalidRestServerParameters.txt
deleted file mode 100644 (file)
index eca803e..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-validation error(s) on parameters from "parameters/ApiConfigParameters_InvalidRestServerParameters.json"
-parameter group "ApiGroup" type "org.onap.policy.api.main.parameters.ApiParameterGroup" INVALID, parameter group has status INVALID
-  parameter group "RestServerParameters" type "org.onap.policy.common.endpoints.parameters.RestServerParameters" INVALID, parameter group has status INVALID
-    field "host" type "java.lang.String" value "" INVALID, must be a non-blank string
-    field "port" type "int" value "-1" INVALID, must be >= 1
-    field "userName" type "java.lang.String" value "" INVALID, must be a non-blank string
-    field "password" type "java.lang.String" value "" INVALID, must be a non-blank string
\ No newline at end of file