From 73ba8039930ba56f6a64a7acc4126dc50b77070d Mon Sep 17 00:00:00 2001 From: liamfallon Date: Mon, 30 Jul 2018 10:22:27 +0100 Subject: Improve validation, add hierarchical validation Parameter validaiton updated to generically support nested groups of parameters, and nested maps of parameters. Unit test showing JSON parameter input added. Unit test showing YAML parameter inout added. Test parameter group classes moved into subdirectory This allows parameters to be unmarshaled seamlessly from JSON and YAML files. Change-Id: I768e11f31ee7f62299c4d5d95ab68a005d1aff16 Issue-ID: POLICY-922 Signed-off-by: liamfallon --- .../policy/common/parameters/ExceptionTest.java | 3 +- .../policy/common/parameters/LegalParameters.java | 31 ---- .../common/parameters/TestAbstractParameters.java | 8 +- .../policy/common/parameters/TestJsonInput.java | 62 +++++++ .../common/parameters/TestParameterService.java | 57 ++++--- .../policy/common/parameters/TestValidation.java | 183 +++++++++++++++++++++ .../common/parameters/TestValidationErrors.java | 105 ++++++++++++ .../common/parameters/TestValidationResults.java | 147 +++++++++++++++++ .../policy/common/parameters/TestYamlInput.java | 59 +++++++ .../testclasses/EmptyParameterGroup.java | 42 +++++ .../testclasses/ParameterGroupWithArray.java | 47 ++++++ .../testclasses/ParameterGroupWithCollection.java | 58 +++++++ .../ParameterGroupWithIllegalMapKey.java | 59 +++++++ .../ParameterGroupWithIllegalMapValue.java | 58 +++++++ .../ParameterGroupWithNullCollection.java | 53 ++++++ .../ParameterGroupWithNullMapValue.java | 53 ++++++ ...ParameterGroupWithParameterGroupCollection.java | 58 +++++++ .../parameters/testclasses/TestParametersL00.java | 177 ++++++++++++++++++++ .../parameters/testclasses/TestParametersL10.java | 173 +++++++++++++++++++ .../testclasses/TestParametersLGeneric.java | 135 +++++++++++++++ 20 files changed, 1510 insertions(+), 58 deletions(-) delete mode 100644 common-parameters/src/test/java/org/onap/policy/common/parameters/LegalParameters.java create mode 100644 common-parameters/src/test/java/org/onap/policy/common/parameters/TestJsonInput.java create mode 100644 common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidation.java create mode 100644 common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationErrors.java create mode 100644 common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationResults.java create mode 100644 common-parameters/src/test/java/org/onap/policy/common/parameters/TestYamlInput.java create mode 100644 common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/EmptyParameterGroup.java create mode 100644 common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithArray.java create mode 100644 common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithCollection.java create mode 100644 common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapKey.java create mode 100644 common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapValue.java create mode 100644 common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullCollection.java create mode 100644 common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullMapValue.java create mode 100644 common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithParameterGroupCollection.java create mode 100644 common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL00.java create mode 100644 common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL10.java create mode 100644 common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersLGeneric.java (limited to 'common-parameters/src/test/java/org/onap') diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/ExceptionTest.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/ExceptionTest.java index 510b6e36..b65db953 100644 --- a/common-parameters/src/test/java/org/onap/policy/common/parameters/ExceptionTest.java +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/ExceptionTest.java @@ -1,4 +1,4 @@ -/* +/*- * ============LICENSE_START======================================================= * Copyright (C) 2018 Ericsson. All rights reserved. * ================================================================================ @@ -17,6 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ + package org.onap.policy.common.parameters; import static org.junit.Assert.assertEquals; diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/LegalParameters.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/LegalParameters.java deleted file mode 100644 index fb1bd478..00000000 --- a/common-parameters/src/test/java/org/onap/policy/common/parameters/LegalParameters.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2018 Ericsson. 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.common.parameters; - -import org.onap.policy.common.parameters.AbstractParameters; - -/** - * @author Liam Fallon (liam.fallon@ericsson.com) - */ -public class LegalParameters implements AbstractParameters { - public LegalParameters() { - } -} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestAbstractParameters.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestAbstractParameters.java index f8003cfe..b568d7fb 100644 --- a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestAbstractParameters.java +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestAbstractParameters.java @@ -20,16 +20,16 @@ package org.onap.policy.common.parameters; -import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import org.junit.Test; +import org.onap.policy.common.parameters.testclasses.EmptyParameterGroup; public class TestAbstractParameters { @Test public void testAbstractParameters() { - final LegalParameters parameters = new LegalParameters(); - assertEquals(LegalParameters.class, parameters.getParameterClass()); - assertEquals("org.onap.policy.common.parameters.LegalParameters", parameters.getParameterClassName()); + final EmptyParameterGroup parameters = new EmptyParameterGroup("Empty Group"); + assertTrue(parameters.isValid()); } } diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestJsonInput.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestJsonInput.java new file mode 100644 index 00000000..6d0aae5e --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestJsonInput.java @@ -0,0 +1,62 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.io.FileReader; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +import org.junit.Test; +import org.onap.policy.common.parameters.testclasses.TestParametersL00; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +public class TestJsonInput { + + @Test + public void testJsonInput() throws IOException { + TestParametersL00 testParameterGroup = null; + + // Read the parameters + try { + // Read the parameters from JSON using Gson + final Gson gson = new GsonBuilder().create(); + testParameterGroup = gson.fromJson(new FileReader("src/test/resources/parameters/TestParameters.json"), TestParametersL00.class); + } catch (final Exception e) { + fail("test should not throw an exception here: " + e.getMessage()); + } + + GroupValidationResult validationResult = testParameterGroup.validate(); + assertTrue(validationResult.isValid()); + assertEquals("l00NameFromFile", testParameterGroup.getName()); + + String expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestJsonYamlValidationResult.txt"))) + .replaceAll("\\s+", ""); + assertEquals(expectedResult, validationResult.getResult("", " ", true).replaceAll("\\s+", "")); + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestParameterService.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestParameterService.java index efd3e304..0b7e46ca 100644 --- a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestParameterService.java +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestParameterService.java @@ -27,6 +27,9 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import org.junit.Test; +import org.onap.policy.common.parameters.ParameterRuntimeException; +import org.onap.policy.common.parameters.ParameterService; +import org.onap.policy.common.parameters.testclasses.EmptyParameterGroup; public class TestParameterService { @@ -34,47 +37,57 @@ public class TestParameterService { public void testParameterService() { ParameterService.clear(); - assertFalse(ParameterService.existsParameters(LegalParameters.class)); + assertFalse(ParameterService.contains("EmptyGroup")); try { - ParameterService.getParameters(LegalParameters.class); + ParameterService.get("EmptyGroup"); fail("Test should throw an exception here"); } catch (final Exception e) { - assertEquals( - "Parameters for org.onap.policy.common.parameters.LegalParameters not found in parameter service", - e.getMessage()); + assertEquals("\"EmptyGroup\" not found in parameter service", e.getMessage()); } - ParameterService.registerParameters(new LegalParameters()); - assertTrue(ParameterService.existsParameters(LegalParameters.class)); - assertNotNull(ParameterService.getParameters(LegalParameters.class)); + ParameterService.register(new EmptyParameterGroup("Empty Group")); + assertTrue(ParameterService.contains("Empty Group")); + assertNotNull(ParameterService.get("Empty Group")); + + try { + ParameterService.register(new EmptyParameterGroup("Empty Group")); + fail("this test should throw an exception"); + } + catch (ParameterRuntimeException e) { + assertEquals("\"Empty Group\" already registered in parameter service", e.getMessage()); + } + + ParameterService.deregister("Empty Group"); + assertFalse(ParameterService.contains("Empty Group")); - ParameterService.deregisterParameters(LegalParameters.class); + try { + ParameterService.deregister("Empty Group"); + fail("this test should throw an exception"); + } + catch (ParameterRuntimeException e) { + assertEquals("\"Empty Group\" not registered in parameter service", e.getMessage()); + } - assertFalse(ParameterService.existsParameters(LegalParameters.class)); try { - ParameterService.getParameters(LegalParameters.class); + ParameterService.get("Empty Group"); fail("Test should throw an exception here"); } catch (final Exception e) { - assertEquals( - "Parameters for org.onap.policy.common.parameters.LegalParameters not found in parameter service", - e.getMessage()); + assertEquals("\"Empty Group\" not found in parameter service", e.getMessage()); } - ParameterService.registerParameters(new LegalParameters()); - assertTrue(ParameterService.existsParameters(LegalParameters.class)); - assertNotNull(ParameterService.getParameters(LegalParameters.class)); + ParameterService.register(new EmptyParameterGroup("Empty Group")); + assertTrue(ParameterService.contains("Empty Group")); + assertNotNull(ParameterService.get("Empty Group")); assertEquals(1, ParameterService.getAll().size()); ParameterService.clear(); assertEquals(0, ParameterService.getAll().size()); - assertFalse(ParameterService.existsParameters(LegalParameters.class)); + assertFalse(ParameterService.contains("Empty Group")); try { - ParameterService.getParameters(LegalParameters.class); + ParameterService.get("Empty Group"); fail("Test should throw an exception here"); } catch (final Exception e) { - assertEquals( - "Parameters for org.onap.policy.common.parameters.LegalParameters not found in parameter service", - e.getMessage()); + assertEquals("\"Empty Group\" not found in parameter service", e.getMessage()); } } } diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidation.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidation.java new file mode 100644 index 00000000..2ca24a05 --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidation.java @@ -0,0 +1,183 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +import org.junit.Test; +import org.onap.policy.common.parameters.testclasses.TestParametersL00; + +public class TestValidation { + @Test + public void testValidationOk() throws IOException { + TestParametersL00 l0Parameters = new TestParametersL00("l0Parameters"); + + GroupValidationResult validationResult = l0Parameters.validate(); + assertTrue(validationResult.isValid()); + assertNull(validationResult.getResult()); + assertEquals(l0Parameters, validationResult.getParameterGroup()); + assertEquals(l0Parameters.getName(), validationResult.getName()); + + String expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_0_OK.txt"))) + .replaceAll("\\s+", ""); + assertEquals(expectedResult, validationResult.getResult("", " ", true).replaceAll("\\s+", "")); + } + + @Test + public void testValidationObservation() throws IOException { + TestParametersL00 l0Parameters = new TestParametersL00("l0Parameters"); + + l0Parameters.triggerValidationStatus(ValidationStatus.OBSERVATION, 3); + + String expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_3_Observation.txt"))) + .replaceAll("\\s+", ""); + + GroupValidationResult validationResult = l0Parameters.validate(); + assertTrue(validationResult.isValid()); + assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", "")); + + l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3); + l0Parameters.triggerValidationStatus(ValidationStatus.OBSERVATION, 2); + + expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_2_Observation.txt"))) + .replaceAll("\\s+", ""); + + validationResult = l0Parameters.validate(); + assertTrue(validationResult.isValid()); + assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", "")); + + l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3); + l0Parameters.triggerValidationStatus(ValidationStatus.OBSERVATION, 1); + + expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_1_Observation.txt"))) + .replaceAll("\\s+", ""); + + validationResult = l0Parameters.validate(); + assertTrue(validationResult.isValid()); + assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", "")); + + l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3); + l0Parameters.triggerValidationStatus(ValidationStatus.OBSERVATION, 0); + + validationResult = l0Parameters.validate(); + assertTrue(validationResult.isValid()); + assertEquals(null, validationResult.getResult()); + } + + @Test + public void testValidationWarning() throws IOException { + TestParametersL00 l0Parameters = new TestParametersL00("l0Parameters"); + + l0Parameters.triggerValidationStatus(ValidationStatus.WARNING, 3); + + String expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_3_Warning.txt"))) + .replaceAll("\\s+", ""); + + GroupValidationResult validationResult = l0Parameters.validate(); + assertTrue(validationResult.isValid()); + assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", "")); + + l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3); + l0Parameters.triggerValidationStatus(ValidationStatus.WARNING, 2); + + expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_2_Warning.txt"))) + .replaceAll("\\s+", ""); + + validationResult = l0Parameters.validate(); + assertTrue(validationResult.isValid()); + assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", "")); + + l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3); + l0Parameters.triggerValidationStatus(ValidationStatus.WARNING, 1); + + expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_1_Warning.txt"))) + .replaceAll("\\s+", ""); + + validationResult = l0Parameters.validate(); + assertTrue(validationResult.isValid()); + assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", "")); + + l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3); + l0Parameters.triggerValidationStatus(ValidationStatus.WARNING, 0); + + validationResult = l0Parameters.validate(); + assertTrue(validationResult.isValid()); + assertEquals(null, validationResult.getResult()); + } + + @Test + public void testValidationInvalid() throws IOException { + TestParametersL00 l0Parameters = new TestParametersL00("l0Parameters"); + + l0Parameters.triggerValidationStatus(ValidationStatus.INVALID, 3); + + String expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_3_Invalid.txt"))) + .replaceAll("\\s+", ""); + + GroupValidationResult validationResult = l0Parameters.validate(); + assertFalse(validationResult.isValid()); + assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", "")); + + l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3); + l0Parameters.triggerValidationStatus(ValidationStatus.INVALID, 2); + + expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_2_Invalid.txt"))) + .replaceAll("\\s+", ""); + + validationResult = l0Parameters.validate(); + assertFalse(validationResult.isValid()); + assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", "")); + + l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3); + l0Parameters.triggerValidationStatus(ValidationStatus.INVALID, 1); + + expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_1_Invalid.txt"))) + .replaceAll("\\s+", ""); + + validationResult = l0Parameters.validate(); + assertFalse(validationResult.isValid()); + assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", "")); + + l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3); + l0Parameters.triggerValidationStatus(ValidationStatus.INVALID, 0); + + validationResult = l0Parameters.validate(); + assertTrue(validationResult.isValid()); + assertEquals(null, validationResult.getResult()); + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationErrors.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationErrors.java new file mode 100644 index 00000000..6b781472 --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationErrors.java @@ -0,0 +1,105 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import org.junit.Test; +import org.onap.policy.common.parameters.testclasses.ParameterGroupWithArray; +import org.onap.policy.common.parameters.testclasses.ParameterGroupWithCollection; +import org.onap.policy.common.parameters.testclasses.ParameterGroupWithIllegalMapKey; +import org.onap.policy.common.parameters.testclasses.ParameterGroupWithIllegalMapValue; +import org.onap.policy.common.parameters.testclasses.ParameterGroupWithNullCollection; +import org.onap.policy.common.parameters.testclasses.ParameterGroupWithNullMapValue; +import org.onap.policy.common.parameters.testclasses.ParameterGroupWithParameterGroupCollection; + +public class TestValidationErrors { + @Test + public void testBadArrayValidation() { + ParameterGroupWithArray groupWithArray = new ParameterGroupWithArray("Illegal Array Group"); + assertTrue(groupWithArray.isValid()); + } + + @Test + public void testCollectionValidation() { + ParameterGroupWithCollection legalCollection = new ParameterGroupWithCollection("Legal Collection"); + assertTrue(legalCollection.isValid()); + + ParameterGroupWithParameterGroupCollection illegalCollection = new ParameterGroupWithParameterGroupCollection( + "Illegal Collection"); + try { + illegalCollection.isValid(); + fail("test should throw an exception"); + } catch (ParameterRuntimeException e) { + assertEquals("collection parameter \"parameterGroupArrayList\" is illegal," + + " parameter groups are not allowed as collection members", e.getMessage()); + } + } + + @Test + public void testNullCollection() { + ParameterGroupWithNullCollection nullCollection = new ParameterGroupWithNullCollection("Null Collection"); + + try { + nullCollection.isValid(); + fail("test should throw an exception"); + } catch (ParameterRuntimeException e) { + assertEquals("collection parameter \"nullList\" is null", e.getMessage()); + } + } + + @Test + public void testMapNullValueValidation() { + ParameterGroupWithNullMapValue nullMap = new ParameterGroupWithNullMapValue("Null Map value"); + try { + nullMap.isValid(); + fail("test should throw an exception"); + } catch (ParameterRuntimeException e) { + assertEquals("map parameter \"nullMap\" is null", e.getMessage()); + } + } + + @Test + public void testBadMapKeyValidation() { + ParameterGroupWithIllegalMapKey illegalMap = new ParameterGroupWithIllegalMapKey("Illegal Map"); + try { + illegalMap.isValid(); + fail("test should throw an exception"); + } catch (ParameterRuntimeException e) { + assertEquals("map entry is not a parameter group keyed by a string, key \"1\" " + + "in map \"badMap\" is not a string", e.getMessage()); + } + } + + @Test + public void testBadMapValueValidation() { + ParameterGroupWithIllegalMapValue illegalMap = new ParameterGroupWithIllegalMapValue("Illegal Map"); + try { + illegalMap.isValid(); + fail("test should throw an exception"); + } catch (ParameterRuntimeException e) { + assertEquals("map entry is not a parameter group keyed by a string, value \"1\" in " + + "map \"intMap\" is not a parameter group", e.getMessage()); + } + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationResults.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationResults.java new file mode 100644 index 00000000..8f22765b --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationResults.java @@ -0,0 +1,147 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.util.LinkedHashMap; +import java.util.Map; + +import org.junit.Before; +import org.junit.Test; +import org.onap.policy.common.parameters.testclasses.TestParametersL10; +import org.onap.policy.common.parameters.testclasses.TestParametersLGeneric; + +public class TestValidationResults { + private Map pgMap = new LinkedHashMap<>(); + private ParameterGroup pg = new TestParametersL10("pg"); + + @Before + public void initMap() { + pgMap.put("entry0", new TestParametersLGeneric("entry0")); + } + + @Test + public void testGroupMapValidationResult() throws NoSuchFieldException, SecurityException { + GroupMapValidationResult result = new GroupMapValidationResult(this.getClass().getDeclaredField("pgMap"), + pgMap); + + assertTrue(result.isValid()); + assertEquals("pgMap", result.getName()); + + result.setResult(ValidationStatus.OBSERVATION); + assertTrue(result.isValid()); + assertEquals(ValidationStatus.OBSERVATION, result.getStatus()); + + // Once the status is stepped, it can't be reset back because it is the status of map members + result.setResult(ValidationStatus.CLEAN); + assertTrue(result.isValid()); + assertEquals(ValidationStatus.OBSERVATION, result.getStatus()); + + result.setResult(ValidationStatus.OBSERVATION, "Something was observed"); + assertTrue(result.isValid()); + assertEquals(ValidationStatus.OBSERVATION, result.getStatus()); + assertEquals("parameter group map \"pgMap\" OBSERVATION, Something was observed", result.getResult().trim()); + + result.setResult("entry0", new GroupValidationResult(pgMap.get("entry0"))); + assertTrue(result.isValid()); + assertEquals(ValidationStatus.OBSERVATION, result.getStatus()); + assertEquals("parameter group map \"pgMap\" OBSERVATION, Something was observed", result.getResult().trim()); + + try { + result.setResult("nonExistantEntry", new GroupValidationResult(pgMap.get("entry0"))); + fail("test shold throw an exception here"); + } catch (Exception e) { + assertEquals("no entry with name \"nonExistantEntry\" exists", e.getMessage()); + } + } + + @Test + public void testGroupValidationResult() throws NoSuchFieldException, SecurityException { + GroupValidationResult result = new GroupValidationResult(pg); + + assertTrue(result.isValid()); + assertEquals(pg, result.getParameterGroup()); + assertEquals("pg", result.getName()); + + result.setResult(ValidationStatus.OBSERVATION); + assertTrue(result.isValid()); + assertEquals(ValidationStatus.OBSERVATION, result.getStatus()); + + // Once the status is stepped, it can't be reset back because it is the status of map members + result.setResult(ValidationStatus.CLEAN); + assertTrue(result.isValid()); + assertEquals(ValidationStatus.OBSERVATION, result.getStatus()); + + result.setResult(ValidationStatus.OBSERVATION, "Something was observed"); + assertTrue(result.isValid()); + assertEquals(ValidationStatus.OBSERVATION, result.getStatus()); + assertEquals("parameter group \"pg\" type \"org.onap.policy.common.parameters.testclasses.TestParametersL10\"" + + " OBSERVATION, Something was observed", result.getResult().trim()); + + try { + result.setResult("nonExistantParameter", ValidationStatus.OBSERVATION, "Something was observed"); + fail("test shold throw an exception here"); + } catch (Exception e) { + assertEquals("no regular parameter field exists for parameter: nonExistantParameter", e.getMessage()); + } + + try { + result.setResult("l10LGenericNestedMap", ValidationStatus.OBSERVATION, "Something was observed"); + fail("test shold throw an exception here"); + } catch (Exception e) { + assertEquals("parameter not a regular parameter: l10LGenericNestedMap", e.getMessage()); + } + + try { + result.setResult("nonExistantParameter", new GroupValidationResult(pg)); + fail("test shold throw an exception here"); + } catch (Exception e) { + assertEquals("no nested parameter field exists for parameter: nonExistantParameter", e.getMessage()); + } + + try { + result.setResult("l10IntField", new GroupValidationResult(pg)); + fail("test shold throw an exception here"); + } catch (Exception e) { + assertEquals("parameter is not a nested group parameter: l10IntField", e.getMessage()); + } + + GroupMapValidationResult groupMapResult = new GroupMapValidationResult( + this.getClass().getDeclaredField("pgMap"), pgMap); + + try { + result.setResult("nonExistantParameter", "entry0", groupMapResult); + fail("test shold throw an exception here"); + } catch (Exception e) { + assertEquals("no group map parameter field exists for parameter: nonExistantParameter", e.getMessage()); + } + + try { + result.setResult("l10IntField", "entry0", groupMapResult); + fail("test shold throw an exception here"); + } catch (Exception e) { + assertEquals("parameter is not a nested group map parameter: l10IntField", e.getMessage()); + } + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestYamlInput.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestYamlInput.java new file mode 100644 index 00000000..7d803525 --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestYamlInput.java @@ -0,0 +1,59 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.io.FileReader; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +import org.junit.Test; +import org.onap.policy.common.parameters.testclasses.TestParametersL00; +import org.yaml.snakeyaml.Yaml; + +public class TestYamlInput { + @Test + public void testYamlInput() throws IOException { + TestParametersL00 testParameterGroup = null; + + // Read the parameters + try { + // Read the parameters from JSON using Gson + final Yaml yaml = new Yaml(); + testParameterGroup = yaml.loadAs(new FileReader("src/test/resources/parameters/TestParameters.yaml"), TestParametersL00.class); + } catch (final Exception e) { + fail("test should not throw an exception here: " + e.getMessage()); + } + + GroupValidationResult validationResult = testParameterGroup.validate(); + assertTrue(validationResult.isValid()); + assertEquals("l00NameFromFile", testParameterGroup.getName()); + + String expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestJsonYamlValidationResult.txt"))) + .replaceAll("\\s+", ""); + assertEquals(expectedResult, validationResult.getResult("", " ", true).replaceAll("\\s+", "")); + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/EmptyParameterGroup.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/EmptyParameterGroup.java new file mode 100644 index 00000000..f545ce65 --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/EmptyParameterGroup.java @@ -0,0 +1,42 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters.testclasses; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; + +public class EmptyParameterGroup implements ParameterGroup { + private String name; + + public EmptyParameterGroup(final String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } + + @Override + public GroupValidationResult validate() { + return new GroupValidationResult(this); + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithArray.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithArray.java new file mode 100644 index 00000000..cdab1272 --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithArray.java @@ -0,0 +1,47 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters.testclasses; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; + +public class ParameterGroupWithArray implements ParameterGroup { + private String name; + private int[] intArray = {1, 2, 3}; + + public ParameterGroupWithArray(final String name) { + this.name = name; + } + + public int[] getIntArray() { + return intArray; + } + + @Override + public String getName() { + return name; + } + + @Override + public GroupValidationResult validate() { + return new GroupValidationResult(this); + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithCollection.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithCollection.java new file mode 100644 index 00000000..0f993099 --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithCollection.java @@ -0,0 +1,58 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters.testclasses; + +import java.util.ArrayList; +import java.util.List; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; + +public class ParameterGroupWithCollection implements ParameterGroup { + private String name; + private List intArrayList = new ArrayList<>(); + + /** + * Create a test parameter group. + * @param name the parameter group name + */ + public ParameterGroupWithCollection(final String name) { + this.name = name; + + intArrayList.add(1); + intArrayList.add(2); + intArrayList.add(3); + } + + public List getIntArrayList() { + return intArrayList; + } + + @Override + public String getName() { + return name; + } + + @Override + public GroupValidationResult validate() { + return new GroupValidationResult(this); + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapKey.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapKey.java new file mode 100644 index 00000000..3de3270e --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapKey.java @@ -0,0 +1,59 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters.testclasses; + +import java.util.LinkedHashMap; +import java.util.Map; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; + +public class ParameterGroupWithIllegalMapKey implements ParameterGroup { + private String name; + private Map badMap = new LinkedHashMap<>(); + + /** + * Create a test parameter group. + * @param name the parameter group name + */ + public ParameterGroupWithIllegalMapKey(final String name) { + this.name = name; + + badMap.put(1, new TestParametersLGeneric("One")); + badMap.put(2, new TestParametersLGeneric("Two")); + badMap.put(3, new TestParametersLGeneric("Three")); + } + + public Map getBadMap() { + return badMap; + } + + @Override + public String getName() { + return name; + } + + @Override + public GroupValidationResult validate() { + return new GroupValidationResult(this); + } + +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapValue.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapValue.java new file mode 100644 index 00000000..8eb697a4 --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapValue.java @@ -0,0 +1,58 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters.testclasses; + +import java.util.LinkedHashMap; +import java.util.Map; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; + +public class ParameterGroupWithIllegalMapValue implements ParameterGroup { + private String name; + private Map intMap = new LinkedHashMap<>(); + + /** + * Create a test parameter group. + * @param name the parameter group name + */ + public ParameterGroupWithIllegalMapValue(final String name) { + this.name = name; + + intMap.put("One", 1); + intMap.put("Two", 2); + intMap.put("Three", 3); + } + + public Map getIntMap() { + return intMap; + } + + @Override + public String getName() { + return name; + } + + @Override + public GroupValidationResult validate() { + return new GroupValidationResult(this); + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullCollection.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullCollection.java new file mode 100644 index 00000000..37399da3 --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullCollection.java @@ -0,0 +1,53 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters.testclasses; + +import java.util.List; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; + +public class ParameterGroupWithNullCollection implements ParameterGroup { + private String name; + private List nullList = null; + + /** + * Create a test parameter group. + * @param name the parameter group name + */ + public ParameterGroupWithNullCollection(final String name) { + this.name = name; + } + + public List getNullList() { + return nullList; + } + + @Override + public String getName() { + return name; + } + + @Override + public GroupValidationResult validate() { + return new GroupValidationResult(this); + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullMapValue.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullMapValue.java new file mode 100644 index 00000000..80f55355 --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullMapValue.java @@ -0,0 +1,53 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters.testclasses; + +import java.util.Map; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; + +public class ParameterGroupWithNullMapValue implements ParameterGroup { + private String name; + private Map nullMap = null; + + /** + * Create a test parameter group. + * @param name the parameter group name + */ + public ParameterGroupWithNullMapValue(final String name) { + this.name = name; + } + + public Map getNullMap() { + return nullMap; + } + + @Override + public String getName() { + return name; + } + + @Override + public GroupValidationResult validate() { + return new GroupValidationResult(this); + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithParameterGroupCollection.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithParameterGroupCollection.java new file mode 100644 index 00000000..e7d1de75 --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithParameterGroupCollection.java @@ -0,0 +1,58 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters.testclasses; + +import java.util.ArrayList; +import java.util.List; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; + +public class ParameterGroupWithParameterGroupCollection implements ParameterGroup { + private String name; + private List parameterGroupArrayList = new ArrayList<>(); + + /** + * Create a test parameter group. + * @param name the parameter group name + */ + public ParameterGroupWithParameterGroupCollection(final String name) { + this.name = name; + + parameterGroupArrayList.add(new TestParametersLGeneric("Generic0")); + parameterGroupArrayList.add(new TestParametersLGeneric("Generic1")); + parameterGroupArrayList.add(new TestParametersLGeneric("Generic2")); + } + + public List getIntArrayList() { + return parameterGroupArrayList; + } + + @Override + public String getName() { + return name; + } + + @Override + public GroupValidationResult validate() { + return new GroupValidationResult(this); + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL00.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL00.java new file mode 100644 index 00000000..6b8460cd --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL00.java @@ -0,0 +1,177 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters.testclasses; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Map.Entry; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.ParameterConstants; +import org.onap.policy.common.parameters.ValidationStatus; + +public class TestParametersL00 implements ParameterGroup { + private String name; + private int l00IntField = 0; + private String l00StringField = "Legal " + this.getClass().getCanonicalName(); + private TestParametersL10 l00L10Nested = new TestParametersL10("l00L10Nested"); + private TestParametersLGeneric l00LGenericNested = new TestParametersLGeneric("l00LGenericNested"); + private Map l00LGenericNestedMap = new LinkedHashMap<>(); + + /** + * Default constructor + */ + public TestParametersL00() { + } + + /** + * Create a test parameter group. + * + * @param name the parameter group name + */ + public TestParametersL00(final String name) { + this.name = name; + + TestParametersLGeneric l00LGenericNestedMapVal0 = new TestParametersLGeneric("l00LGenericNestedMapVal0"); + l00LGenericNestedMap.put(l00LGenericNestedMapVal0.getName(), l00LGenericNestedMapVal0); + TestParametersLGeneric l00LGenericNestedMapVal1 = new TestParametersLGeneric("l00LGenericNestedMapVal1"); + l00LGenericNestedMap.put(l00LGenericNestedMapVal1.getName(), l00LGenericNestedMapVal1); + } + + public void setName(String name) { + this.name = name; + } + + public void setL00IntField(int l00IntField) { + this.l00IntField = l00IntField; + } + + public void setL00StringField(String l00StringField) { + this.l00StringField = l00StringField; + } + + public void setL00L10Nested(TestParametersL10 l00l10Nested) { + l00L10Nested = l00l10Nested; + } + + public void setL00LGenericNested(TestParametersLGeneric l00lGenericNested) { + l00LGenericNested = l00lGenericNested; + } + + public void setL00LGenericNestedMap(Map l00lGenericNestedMap) { + l00LGenericNestedMap = l00lGenericNestedMap; + } + + /** + * Trigger a validation message. + * + * @param triggerStatus Validation status to trigger + * @param level Number of levels to recurse before stopping + */ + public void triggerValidationStatus(final ValidationStatus triggerStatus, int level) { + if (level == 0) { + return; + } else { + level--; + } + + switch (triggerStatus) { + case CLEAN: + l00StringField = "Legal " + this.getClass().getCanonicalName(); + l00IntField = 0; + break; + case OBSERVATION: + l00StringField = "aString"; + l00IntField = 2; + break; + case WARNING: + l00StringField = "l00StringField"; + l00IntField = 3; + break; + case INVALID: + l00StringField = ""; + l00IntField = -1; + break; + default: + break; + } + + l00L10Nested.triggerValidationStatus(triggerStatus, level); + l00LGenericNested.triggerValidationStatus(triggerStatus, level); + + for (TestParametersLGeneric nestedParameterGroup : l00LGenericNestedMap.values()) { + nestedParameterGroup.triggerValidationStatus(triggerStatus, level); + } + + } + + @Override + public String getName() { + return name; + } + + @Override + public GroupValidationResult validate() { + GroupValidationResult validationResult = new GroupValidationResult(this); + + if (name == null || name.trim().length() == 0) { + validationResult.setResult("name", ValidationStatus.INVALID, "name must be a non-blank string"); + } + + if (l00StringField == null || l00StringField.trim().length() == 0) { + validationResult.setResult("l00StringField", ValidationStatus.INVALID, + "l00StringField must be a non-blank string"); + } else if (l00StringField.equals("l00StringField")) { + validationResult.setResult("l00StringField", ValidationStatus.WARNING, + "using the field name for the parameter value is dangerous"); + } else if (l00StringField.equals("aString")) { + validationResult.setResult("l00StringField", ValidationStatus.OBSERVATION, + "this value for name is unhelpful"); + } else { + validationResult.setResult("l00StringField", ValidationStatus.CLEAN, + ParameterConstants.PARAMETER_HAS_STATUS_MESSAGE + ValidationStatus.CLEAN.toString()); + } + + if (l00IntField < 0) { + validationResult.setResult("l00IntField", ValidationStatus.INVALID, + "l00IntField must be a positive integer"); + } else if (l00IntField > 2) { + validationResult.setResult("l00IntField", ValidationStatus.WARNING, + "values greater than 2 are not recommended"); + } else if (l00IntField == 2) { + validationResult.setResult("l00IntField", ValidationStatus.OBSERVATION, "this field has been set to 2"); + } else { + validationResult.setResult("l00IntField", ValidationStatus.CLEAN, + ParameterConstants.PARAMETER_HAS_STATUS_MESSAGE + ValidationStatus.CLEAN.toString()); + } + + validationResult.setResult("l00L10Nested", l00L10Nested.validate()); + validationResult.setResult("l00LGenericNested", l00LGenericNested.validate()); + + for (Entry nestedGroupEntry : l00LGenericNestedMap.entrySet()) { + validationResult.setResult("l00LGenericNestedMap", nestedGroupEntry.getKey(), + nestedGroupEntry.getValue().validate()); + } + + return validationResult; + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL10.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL10.java new file mode 100644 index 00000000..94a67ec7 --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL10.java @@ -0,0 +1,173 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters.testclasses; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Map.Entry; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.ParameterConstants; +import org.onap.policy.common.parameters.ValidationStatus; + +public class TestParametersL10 implements ParameterGroup { + private String name; + private int l10IntField = 0; + private String l10StringField = "Legal " + this.getClass().getCanonicalName(); + private TestParametersLGeneric l10LGenericNested0 = new TestParametersLGeneric("l10LGenericNested0"); + private TestParametersLGeneric l10LGenericNested1 = new TestParametersLGeneric("l10LGenericNested1"); + private Map l10LGenericNestedMap = new LinkedHashMap<>(); + + /** + * Default constructor + */ + public TestParametersL10() { + } + + /** + * Create a test parameter group. + * + * @param name the parameter group name + */ + public TestParametersL10(final String name) { + this.name = name; + + TestParametersLGeneric l10LGenericNestedMapVal0 = new TestParametersLGeneric("l10LGenericNestedMapVal0"); + l10LGenericNestedMap.put(l10LGenericNestedMapVal0.getName(), l10LGenericNestedMapVal0); + TestParametersLGeneric l10LGenericNestedMapVal1 = new TestParametersLGeneric("l10LGenericNestedMapVal1"); + l10LGenericNestedMap.put(l10LGenericNestedMapVal1.getName(), l10LGenericNestedMapVal1); + } + + public void setName(String name) { + this.name = name; + } + + public void setL10IntField(int l10IntField) { + this.l10IntField = l10IntField; + } + + public void setL10StringField(String l10StringField) { + this.l10StringField = l10StringField; + } + + public void setL10LGenericNested0(TestParametersLGeneric l10lGenericNested0) { + l10LGenericNested0 = l10lGenericNested0; + } + + public void setL10LGenericNested1(TestParametersLGeneric l10lGenericNested1) { + l10LGenericNested1 = l10lGenericNested1; + } + + public void setL10LGenericNestedMap(Map l10lGenericNestedMap) { + l10LGenericNestedMap = l10lGenericNestedMap; + } + + /** + * Trigger a validation message. + * + * @param level Number of levels to recurse before stopping + */ + public void triggerValidationStatus(final ValidationStatus triggerStatus, int level) { + if (level == 0) { + return; + } + else { + level--; + } + + switch (triggerStatus) { + case CLEAN: + l10StringField = "Legal " + this.getClass().getCanonicalName(); + l10IntField = 0; + break; + case OBSERVATION: + l10StringField = "aString"; + l10IntField = 2; + break; + case WARNING: + l10StringField = "l10StringField"; + l10IntField = 3; + break; + case INVALID: + l10StringField = ""; + l10IntField = -1; + break; + default: + break; + } + + l10LGenericNested0.triggerValidationStatus(triggerStatus, level); + l10LGenericNested1.triggerValidationStatus(triggerStatus, level); + + for (TestParametersLGeneric nestedParameterGroup : l10LGenericNestedMap.values()) { + nestedParameterGroup.triggerValidationStatus(triggerStatus, level); + } + } + + @Override + public String getName() { + return this.name; + } + + @Override + public GroupValidationResult validate() { + GroupValidationResult validationResult = new GroupValidationResult(this); + + if (l10StringField == null || l10StringField.trim().length() == 0) { + validationResult.setResult("l10StringField", ValidationStatus.INVALID, + "l10StringField must be a non-blank string"); + } else if (l10StringField.equals("l10StringField")) { + validationResult.setResult("l10StringField", ValidationStatus.WARNING, + "using the field name for the parameter value is dangerous"); + } else if (l10StringField.equals("aString")) { + validationResult.setResult("l10StringField", ValidationStatus.OBSERVATION, + "this value for name is unhelpful"); + } else { + validationResult.setResult("l10StringField", ValidationStatus.CLEAN, + ParameterConstants.PARAMETER_HAS_STATUS_MESSAGE + ValidationStatus.CLEAN.toString()); + } + + if (l10IntField < 0) { + validationResult.setResult("l10IntField", ValidationStatus.INVALID, + "l10IntField must be a positive integer"); + } else if (l10IntField > 2) { + validationResult.setResult("l10IntField", ValidationStatus.WARNING, + "values greater than 2 are not recommended"); + } else if (l10IntField == 2) { + validationResult.setResult("l10IntField", ValidationStatus.OBSERVATION, "this field has been set to 2"); + } else { + validationResult.setResult("l10IntField", ValidationStatus.CLEAN, + ParameterConstants.PARAMETER_HAS_STATUS_MESSAGE + ValidationStatus.CLEAN.toString()); + } + + + validationResult.setResult("l10LGenericNested0", l10LGenericNested0.validate()); + validationResult.setResult("l10LGenericNested1", l10LGenericNested1.validate()); + + for (Entry nestedGroupEntry : l10LGenericNestedMap.entrySet()) { + validationResult.setResult("l10LGenericNestedMap", nestedGroupEntry.getKey(), + nestedGroupEntry.getValue().validate()); + } + + return validationResult; + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersLGeneric.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersLGeneric.java new file mode 100644 index 00000000..ce368bac --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersLGeneric.java @@ -0,0 +1,135 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters.testclasses; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.ParameterConstants; +import org.onap.policy.common.parameters.ValidationStatus; + +public class TestParametersLGeneric implements ParameterGroup { + private String name; + private int lgenericIntField = 0; + private String lgenericStringField = "Legal " + this.getClass().getCanonicalName(); + + /** + * Default constructor + */ + public TestParametersLGeneric() { + } + + /** + * Create a test parameter group. + * + * @param name the parameter group name + */ + public TestParametersLGeneric(final String name) { + this.name = name; + } + + public void setName(String name) { + this.name = name; + } + + public void setLgenericIntField(int lgenericIntField) { + this.lgenericIntField = lgenericIntField; + } + + public void setLgenericStringField(String lgenericStringField) { + this.lgenericStringField = lgenericStringField; + } + + /** + * Trigger a validation message. + * + * @param level Number of levels to recurse before stopping + */ + public void triggerValidationStatus(final ValidationStatus triggerStatus, int level) { + if (level == 0) { + return; + } + else { + level--; + } + + switch (triggerStatus) { + case CLEAN: + lgenericStringField = "Legal " + this.getClass().getCanonicalName(); + lgenericIntField = 0; + break; + case OBSERVATION: + lgenericStringField = "aString"; + lgenericIntField = 2; + break; + case WARNING: + lgenericStringField = "lgenericStringField"; + lgenericIntField = 3; + break; + case INVALID: + lgenericStringField = ""; + lgenericIntField = -1; + break; + default: + break; + } + + } + + @Override + public String getName() { + return this.name; + } + + @Override + public GroupValidationResult validate() { + GroupValidationResult validationResult = new GroupValidationResult(this); + + if (lgenericStringField == null || lgenericStringField.trim().length() == 0) { + validationResult.setResult("lgenericStringField", ValidationStatus.INVALID, + "lgenericStringField must be a non-blank string"); + } else if (lgenericStringField.equals("lgenericStringField")) { + validationResult.setResult("lgenericStringField", ValidationStatus.WARNING, + "using the field name for the parameter value is dangerous"); + } else if (lgenericStringField.equals("aString")) { + validationResult.setResult("lgenericStringField", ValidationStatus.OBSERVATION, + "this value for name is unhelpful"); + } else { + validationResult.setResult("lgenericStringField", ValidationStatus.CLEAN, + ParameterConstants.PARAMETER_HAS_STATUS_MESSAGE + ValidationStatus.CLEAN.toString()); + } + + if (lgenericIntField < 0) { + validationResult.setResult("lgenericIntField", ValidationStatus.INVALID, + "lgenericIntField must be a positive integer"); + } else if (lgenericIntField > 2) { + validationResult.setResult("lgenericIntField", ValidationStatus.WARNING, + "values greater than 2 are not recommended"); + } else if (lgenericIntField == 2) { + validationResult.setResult("lgenericIntField", ValidationStatus.OBSERVATION, + "this field has been set to 2"); + } else { + validationResult.setResult("lgenericIntField", ValidationStatus.CLEAN, + ParameterConstants.PARAMETER_HAS_STATUS_MESSAGE + ValidationStatus.CLEAN.toString()); + } + + return validationResult; + } +} -- cgit 1.2.3-korg