From: liamfallon Date: Fri, 13 Mar 2020 12:34:58 +0000 (+0000) Subject: Consistent returns on Service Template gets X-Git-Tag: 2.2.1~15^2 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=96e93d0c2642717ed5b37dcc2721ee2755141e76;p=policy%2Fmodels.git Consistent returns on Service Template gets This review enables specification of versions of entities on incoming service templates using a ':' delimiter. So this will load version 1.00, version 2.0.0, and version 3.0.0: org.onap.entitiy:1.0.0: version: 1.0.0 org.onap.entity:2.0.0: version: 2.0.0 org.onap.entity version: 3.0.0 So this will load version 1.00, version 2.0.0, and version 4.0.0: org.onap.entitiy:1.0.0: version: 1.0.0 org.onap.entity:2.0.0: version: 2.0.0 org.onap.entity: version: 3.0.0 org.onap.entity: version: 4.0.0 This will load org.onap.entity:1.0.0 name: org.onap.entity version: 1.0.0 This will throw an exception org.onap.entity:1.0.0 name: org.onap.some.other.entity version: 1.0.0 This will throw an exception org.onap.entity:1.0.0: name: org.onap.entity version: 2.0.0 Issue-ID: POLICY-2377 Change-Id: I34bccf065b4ee4d2fe71b052bf009d4a40e2cba8 Signed-off-by: liamfallon --- diff --git a/models-base/src/main/java/org/onap/policy/models/base/PfConceptContainer.java b/models-base/src/main/java/org/onap/policy/models/base/PfConceptContainer.java index 949cb96dc..1c1e4613e 100644 --- a/models-base/src/main/java/org/onap/policy/models/base/PfConceptContainer.java +++ b/models-base/src/main/java/org/onap/policy/models/base/PfConceptContainer.java @@ -30,6 +30,7 @@ import java.util.Map.Entry; import java.util.NavigableMap; import java.util.Set; import java.util.TreeMap; +import java.util.function.Function; import javax.persistence.CascadeType; import javax.persistence.EmbeddedId; @@ -45,6 +46,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; +import org.apache.commons.lang3.StringUtils; import org.onap.policy.models.base.PfValidationResult.ValidationResult; // @formatter:off @@ -67,7 +69,7 @@ import org.onap.policy.models.base.PfValidationResult.ValidationResult; @EqualsAndHashCode(callSuper = false) public class PfConceptContainer extends PfConcept - implements PfConceptGetter, PfAuthorative>> { + implements PfConceptGetter, PfAuthorative>> { private static final long serialVersionUID = -324211738823208318L; @EmbeddedId @@ -178,31 +180,32 @@ public class PfConceptContainer ex for (Map incomingConceptMap : authorativeList) { // Add the map entries one by one for (Entry incomingConceptEntry : incomingConceptMap.entrySet()) { - C jpaConcept = getConceptNewInstance(); + PfConceptKey conceptKey = new PfConceptKey(); + if (incomingConceptEntry.getKey().matches(PfKey.KEY_ID_REGEXP)) { + conceptKey = new PfConceptKey(incomingConceptEntry.getKey()); + } else { + conceptKey.setName(incomingConceptEntry.getKey()); + if (incomingConceptEntry.getValue().getVersion() != null) { + conceptKey.setVersion(incomingConceptEntry.getValue().getVersion()); + } else { + conceptKey.setVersion(PfKey.NULL_KEY_VERSION); + } + } + + incomingConceptEntry.getValue().setName(findConceptField(conceptKey, conceptKey.getName(), + incomingConceptEntry.getValue(), PfNameVersion::getName)); + incomingConceptEntry.getValue().setVersion(findConceptField(conceptKey, conceptKey.getVersion(), + incomingConceptEntry.getValue(), PfNameVersion::getVersion)); + + C jpaConcept = getConceptNewInstance(); // This cast allows us to call the fromAuthorative method @SuppressWarnings("unchecked") PfAuthorative authoritiveImpl = (PfAuthorative) jpaConcept; - if (incomingConceptEntry.getValue().getName() == null) { - incomingConceptEntry.getValue().setName(incomingConceptEntry.getKey()); - } - // Set the key name and the rest of the values on the concept authoritiveImpl.fromAuthorative(incomingConceptEntry.getValue()); - // This cast gets the key of the concept - PfConceptKey conceptKey = (PfConceptKey) jpaConcept.getKey(); - - // Set the concept key of the concept - conceptKey.setName(incomingConceptEntry.getValue().getName()); - - if (incomingConceptEntry.getValue().getVersion() != null) { - conceptKey.setVersion(incomingConceptEntry.getValue().getVersion()); - } else { - conceptKey.setVersion(PfKey.NULL_KEY_VERSION); - } - // After all that, save the map entry conceptMap.put(conceptKey, jpaConcept); } @@ -210,7 +213,7 @@ public class PfConceptContainer ex if (conceptMap.isEmpty()) { throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, - "An incoming list of concepts must have at least one entry"); + "An incoming list of concepts must have at least one entry"); } } @@ -229,7 +232,7 @@ public class PfConceptContainer ex if (key.equals(PfConceptKey.getNullKey())) { result.addValidationMessage( - new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key")); + new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key")); } result = key.validate(result); @@ -253,14 +256,14 @@ public class PfConceptContainer ex for (final Entry conceptEntry : conceptMap.entrySet()) { if (conceptEntry.getKey().equals(PfConceptKey.getNullKey())) { result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "key on concept entry " + conceptEntry.getKey() + " may not be the null key")); + "key on concept entry " + conceptEntry.getKey() + " may not be the null key")); } else if (conceptEntry.getValue() == null) { result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "value on concept entry " + conceptEntry.getKey() + " may not be null")); + "value on concept entry " + conceptEntry.getKey() + " may not be null")); } else if (!conceptEntry.getKey().equals(conceptEntry.getValue().getKey())) { result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "key on concept entry key " + conceptEntry.getKey() + " does not equal concept value key " - + conceptEntry.getValue().getKey())); + "key on concept entry key " + conceptEntry.getKey() + " does not equal concept value key " + + conceptEntry.getValue().getKey())); result = conceptEntry.getValue().validate(result); } else { result = conceptEntry.getValue().validate(result); @@ -308,7 +311,7 @@ public class PfConceptContainer ex @Override public C get(final String conceptKeyName, final String conceptKeyVersion) { return new PfConceptGetterImpl<>((NavigableMap) conceptMap).get(conceptKeyName, - conceptKeyVersion); + conceptKeyVersion); } @Override @@ -319,7 +322,7 @@ public class PfConceptContainer ex @Override public Set getAll(final String conceptKeyName, final String conceptKeyVersion) { return new PfConceptGetterImpl<>((NavigableMap) conceptMap).getAll(conceptKeyName, - conceptKeyVersion); + conceptKeyVersion); } /** @@ -331,11 +334,24 @@ public class PfConceptContainer ex private C getConceptNewInstance() { try { String conceptClassName = - ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0].getTypeName(); + ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0].getTypeName(); return (C) Class.forName(conceptClassName).getDeclaredConstructor().newInstance(); } catch (Exception ex) { throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, - "failed to instantiate instance of container concept class", ex); + "failed to instantiate instance of container concept class", ex); + } + } + + private String findConceptField(final PfConceptKey conceptKey, final String keyFieldValue, + final PfNameVersion concept, final Function fieldGetterFunction) { + + String conceptField = fieldGetterFunction.apply(concept); + + if (StringUtils.isBlank(conceptField) || keyFieldValue.equals(conceptField)) { + return keyFieldValue; + } else { + throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, "Key " + conceptKey.getId() + " field " + + keyFieldValue + " does not match the value " + conceptField + " in the concept field"); } } } diff --git a/models-base/src/main/java/org/onap/policy/models/base/PfKeyImpl.java b/models-base/src/main/java/org/onap/policy/models/base/PfKeyImpl.java index 461fd2495..61028f927 100644 --- a/models-base/src/main/java/org/onap/policy/models/base/PfKeyImpl.java +++ b/models-base/src/main/java/org/onap/policy/models/base/PfKeyImpl.java @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2020 Nordix Foundation. * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -23,9 +23,11 @@ package org.onap.policy.models.base; import java.util.ArrayList; import java.util.List; + import lombok.Getter; import lombok.NonNull; import lombok.ToString; + import org.onap.policy.common.utils.validation.Assertions; import org.onap.policy.models.base.PfValidationResult.ValidationResult; @@ -115,6 +117,15 @@ public abstract class PfKeyImpl extends PfKey { return (PfKey.NULL_KEY_NAME.equals(getName()) && PfKey.NULL_KEY_VERSION.equals(getVersion())); } + /** + * Determines if the name is "null". + * + * @return {@code true} if the name is null, {@code false} otherwise + */ + public boolean isNullName() { + return PfKey.NULL_KEY_NAME.equals(getName()); + } + /** * Determines if the version is "null". * @@ -147,7 +158,7 @@ public abstract class PfKeyImpl extends PfKey { } if (thisVersionArray.length >= 2 && otherVersionArray.length >= 2 - && !thisVersionArray[1].equals(otherVersionArray[1])) { + && !thisVersionArray[1].equals(otherVersionArray[1])) { return Compatibility.MINOR; } @@ -189,12 +200,12 @@ public abstract class PfKeyImpl extends PfKey { } if (thisVersionArray.length >= 2 && otherVersionArray.length >= 2 - && !thisVersionArray[1].equals(otherVersionArray[1])) { + && !thisVersionArray[1].equals(otherVersionArray[1])) { return Integer.valueOf(thisVersionArray[1]) > Integer.valueOf(otherVersionArray[1]); } if (thisVersionArray.length >= 3 && otherVersionArray.length >= 3 - && !thisVersionArray[2].equals(otherVersionArray[2])) { + && !thisVersionArray[2].equals(otherVersionArray[2])) { return Integer.valueOf(thisVersionArray[2]) > Integer.valueOf(otherVersionArray[2]); } @@ -215,8 +226,7 @@ public abstract class PfKeyImpl extends PfKey { if (versionArray.length >= 2) { return Integer.parseInt(versionArray[1]); - } - else { + } else { return 0; } } @@ -227,26 +237,25 @@ public abstract class PfKeyImpl extends PfKey { if (versionArray.length >= 3) { return Integer.parseInt(versionArray[2]); - } - else { + } else { return 0; } } @Override public PfValidationResult validate(final PfValidationResult result) { - final String nameValidationErrorMessage = Assertions.getStringParameterValidationMessage(NAME_TOKEN, getName(), - getNameRegEx()); + final String nameValidationErrorMessage = + Assertions.getStringParameterValidationMessage(NAME_TOKEN, getName(), getNameRegEx()); if (nameValidationErrorMessage != null) { result.addValidationMessage(new PfValidationMessage(this, this.getClass(), ValidationResult.INVALID, - "name invalid-" + nameValidationErrorMessage)); + "name invalid-" + nameValidationErrorMessage)); } - final String versionValidationErrorMessage = Assertions.getStringParameterValidationMessage(VERSION_TOKEN, - getVersion(), getVersionRegEx()); + final String versionValidationErrorMessage = + Assertions.getStringParameterValidationMessage(VERSION_TOKEN, getVersion(), getVersionRegEx()); if (versionValidationErrorMessage != null) { result.addValidationMessage(new PfValidationMessage(this, this.getClass(), ValidationResult.INVALID, - "version invalid-" + versionValidationErrorMessage)); + "version invalid-" + versionValidationErrorMessage)); } return result; diff --git a/models-base/src/test/java/org/onap/policy/models/base/ModelServiceTest.java b/models-base/src/test/java/org/onap/policy/models/base/ModelServiceTest.java index 1b7a996ed..60ae85dd8 100644 --- a/models-base/src/test/java/org/onap/policy/models/base/ModelServiceTest.java +++ b/models-base/src/test/java/org/onap/policy/models/base/ModelServiceTest.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2020 Nordix Foundation. * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -31,7 +31,7 @@ import org.onap.policy.models.base.testconcepts.DummyPfModel; public class ModelServiceTest { - private static final String MODEL_KEY_IS_NULL = "modelKey is marked @NonNull but is null"; + private static final String MODEL_KEY_IS_NULL = "modelKey is marked .*on.*ull but is null$"; private static final String MODEL_NAME = "ModelName"; @Test @@ -40,7 +40,7 @@ public class ModelServiceTest { assertFalse(PfModelService.existsModel("NonExistantName")); assertThatThrownBy(() -> PfModelService.getModel("NonExistantName")) - .hasMessage("Model for name NonExistantName not found in model service"); + .hasMessage("Model for name NonExistantName not found in model service"); PfModelService.registerModel(MODEL_NAME, new DummyPfModel()); assertTrue(PfModelService.existsModel(MODEL_NAME)); @@ -50,7 +50,7 @@ public class ModelServiceTest { assertFalse(PfModelService.existsModel(MODEL_NAME)); assertThatThrownBy(() -> PfModelService.getModel(MODEL_NAME)) - .hasMessage("Model for name ModelName not found in model service"); + .hasMessage("Model for name ModelName not found in model service"); PfModelService.registerModel(MODEL_NAME, new DummyPfModel()); assertTrue(PfModelService.existsModel(MODEL_NAME)); @@ -59,20 +59,18 @@ public class ModelServiceTest { PfModelService.clear(); assertFalse(PfModelService.existsModel(MODEL_NAME)); assertThatThrownBy(() -> PfModelService.getModel(MODEL_NAME)) - .hasMessage("Model for name ModelName not found in model service"); + .hasMessage("Model for name ModelName not found in model service"); - assertThatThrownBy(() -> PfModelService.registerModel(null, null)) - .hasMessage(MODEL_KEY_IS_NULL); + assertThatThrownBy(() -> PfModelService.registerModel(null, null)).hasMessageMatching(MODEL_KEY_IS_NULL); assertThatThrownBy(() -> PfModelService.registerModel("nullModelName", null)) - .hasMessage("model is marked @NonNull but is null"); + .hasMessageMatching("^model is marked .*on.*ull but is null$"); assertThatThrownBy(() -> PfModelService.registerModel(null, new DummyPfModel())) - .hasMessage(MODEL_KEY_IS_NULL); + .hasMessageMatching(MODEL_KEY_IS_NULL); - assertThatThrownBy(() -> PfModelService.deregisterModel(null)) - .hasMessage(MODEL_KEY_IS_NULL); + assertThatThrownBy(() -> PfModelService.deregisterModel(null)).hasMessageMatching(MODEL_KEY_IS_NULL); - assertThatThrownBy(() -> PfModelService.getModel(null)).hasMessage(MODEL_KEY_IS_NULL); + assertThatThrownBy(() -> PfModelService.getModel(null)).hasMessageMatching(MODEL_KEY_IS_NULL); } } diff --git a/models-base/src/test/java/org/onap/policy/models/base/PfConceptContainerTest.java b/models-base/src/test/java/org/onap/policy/models/base/PfConceptContainerTest.java index b760e17c0..8234741f6 100644 --- a/models-base/src/test/java/org/onap/policy/models/base/PfConceptContainerTest.java +++ b/models-base/src/test/java/org/onap/policy/models/base/PfConceptContainerTest.java @@ -48,12 +48,14 @@ import org.onap.policy.models.base.testconcepts.DummyPfConceptSub; */ public class PfConceptContainerTest { - private static final String NAME2 = "name2"; - private static final String NAME1 = "name1"; private static final String NAME0 = "name0"; - private static final String KEY_IS_NULL = "key is marked @NonNull but is null"; + private static final String NAME1 = "name1"; + private static final String NAME2 = "name2"; + private static final String NAME3 = "name3"; + private static final String ID3 = "name3:0.0.1"; + private static final String VERSION0_0_1 = "0.0.1"; + private static final String KEY_IS_NULL = "^key is marked .*on.*ull but is null$"; private static final String DUMMY_VALUE = "Dummy"; - private static final String VERSION0 = "0.0.1"; @SuppressWarnings({"unchecked", "rawtypes"}) @Test @@ -70,15 +72,16 @@ public class PfConceptContainerTest { container = new DummyPfConceptContainer(new PfConceptKey(), new TreeMap()); assertNotNull(container); - assertThatThrownBy(() -> new PfConceptContainer((PfConceptKey) null, null)).hasMessage(KEY_IS_NULL); + assertThatThrownBy(() -> new PfConceptContainer((PfConceptKey) null, null)).hasMessageMatching(KEY_IS_NULL); - assertThatThrownBy(() -> new DummyPfConceptContainer((PfConceptKey) null, null)).hasMessage(KEY_IS_NULL); + assertThatThrownBy(() -> new DummyPfConceptContainer((PfConceptKey) null, null)) + .hasMessageMatching(KEY_IS_NULL); assertThatThrownBy(() -> new DummyPfConceptContainer(new PfConceptKey(), null)) - .hasMessage("conceptMap is marked @NonNull but is null"); + .hasMessageMatching("^conceptMap is marked .*on.*ull but is null$"); assertThatThrownBy(() -> new DummyPfConceptContainer(null, new TreeMap())) - .hasMessage(KEY_IS_NULL); + .hasMessageMatching(KEY_IS_NULL); container.getKey().setName(DUMMY_VALUE); DummyPfConceptContainer clonedContainer = new DummyPfConceptContainer(container); @@ -86,12 +89,12 @@ public class PfConceptContainerTest { assertEquals(DUMMY_VALUE, clonedContainer.getKey().getName()); assertThatThrownBy(() -> new DummyPfConceptContainer((DummyPfConceptContainer) null)) - .hasMessage("copyConcept is marked @NonNull but is null"); + .hasMessageMatching("^copyConcept is marked .*on.*ull but is null$"); List keyList = container.getKeys(); assertEquals(1, keyList.size()); - PfConceptKey conceptKey = new PfConceptKey("Key", VERSION0); + PfConceptKey conceptKey = new PfConceptKey("Key", VERSION0_0_1); Map conceptMap = new TreeMap<>(); conceptMap.put(conceptKey, new DummyPfConcept(conceptKey)); @@ -115,7 +118,7 @@ public class PfConceptContainerTest { assertEquals(0, container.compareTo(clonedContainer)); assertThatThrownBy(() -> new DummyPfConceptContainer((DummyPfConceptContainer) null)) - .isInstanceOf(NullPointerException.class); + .isInstanceOf(NullPointerException.class); assertFalse(container.compareTo(null) == 0); assertEquals(0, container.compareTo(container)); @@ -127,16 +130,17 @@ public class PfConceptContainerTest { testContainer.getKey().setVersion(container.getKey().getVersion()); assertEquals(0, container.compareTo(testContainer)); - PfConceptKey testConceptKey = new PfConceptKey("TestKey", VERSION0); + PfConceptKey testConceptKey = new PfConceptKey("TestKey", VERSION0_0_1); testContainer.getConceptMap().put(testConceptKey, new DummyPfConcept(testConceptKey)); assertFalse(container.compareTo(testContainer) == 0); final DummyPfConceptContainer container3 = container; - assertThatThrownBy(() -> container3.validate(null)).hasMessage("resultIn is marked @NonNull but is null"); + assertThatThrownBy(() -> container3.validate(null)) + .hasMessageMatching("^resultIn is marked .*on.*ull but is null$"); DummyPfConceptContainer validateContainer = new DummyPfConceptContainer(); assertFalse(validateContainer.validate(new PfValidationResult()).isOk()); - validateContainer.setKey(new PfConceptKey("VCKey", VERSION0)); + validateContainer.setKey(new PfConceptKey("VCKey", VERSION0_0_1)); assertTrue(validateContainer.validate(new PfValidationResult()).isOk()); validateContainer.getConceptMap().put(testConceptKey, new DummyPfConcept(testConceptKey)); @@ -174,32 +178,51 @@ public class PfConceptContainerTest { public void testAuthorative() { Map dacMap = new LinkedHashMap<>(); dacMap.put(NAME0, new DummyAuthorativeConcept(NAME0, "1.2.3", "Hello")); - dacMap.put(NAME1, new DummyAuthorativeConcept(PfKey.NULL_KEY_NAME, PfKey.NULL_KEY_VERSION, "Hi")); + dacMap.put(NAME1, new DummyAuthorativeConcept("IncorrectName", PfKey.NULL_KEY_VERSION, "Hi")); dacMap.put(NAME2, new DummyAuthorativeConcept(NAME2, "1.2.3", "Howdy")); + dacMap.put(ID3, new DummyAuthorativeConcept(NAME3, "9.9.9", "Ciao")); + dacMap.put("name4:1.2.3", new DummyAuthorativeConcept(null, null, "Slan")); + dacMap.put("name5", new DummyAuthorativeConcept(null, null, "Bye")); List> authorativeList = new ArrayList<>(); authorativeList.add(dacMap); DummyPfConceptContainer container = new DummyPfConceptContainer(); + + assertThatThrownBy(() -> container.fromAuthorative(authorativeList)) + .hasMessage("Key name1:0.0.0 field name1 does not match the value IncorrectName in the concept field"); + + dacMap.put(NAME1, new DummyAuthorativeConcept(NAME1, PfKey.NULL_KEY_VERSION, "Hi")); + + assertThatThrownBy(() -> container.fromAuthorative(authorativeList)) + .hasMessage("Key name3:0.0.1 field 0.0.1 does not match the value 9.9.9 in the concept field"); + + dacMap.put(ID3, new DummyAuthorativeConcept(NAME3, "0.0.1", "Ciao")); + container.fromAuthorative(authorativeList); assertEquals("Hello", container.getConceptMap().get(new PfConceptKey("name0:1.2.3")).getDescription()); - assertEquals("Hi", container.getConceptMap().get(new PfConceptKey("NULL:0.0.0")).getDescription()); + assertEquals("Hi", container.getConceptMap().get(new PfConceptKey("name1:0.0.0")).getDescription()); assertEquals("Howdy", container.getConceptMap().get(new PfConceptKey("name2:1.2.3")).getDescription()); + assertEquals("Ciao", container.getConceptMap().get(new PfConceptKey("name3:0.0.1")).getDescription()); + assertEquals("name4", container.getConceptMap().get(new PfConceptKey("name4:1.2.3")).getName()); + assertEquals("1.2.3", container.getConceptMap().get(new PfConceptKey("name4:1.2.3")).getVersion()); + assertEquals("0.0.0", container.getConceptMap().get(new PfConceptKey("name5:0.0.0")).getVersion()); List> outMapList = container.toAuthorative(); - assertEquals(dacMap.get(NAME1), outMapList.get(0).get("NULL")); - assertEquals(dacMap.get(NAME0).getDescription(), outMapList.get(1).get(NAME0).getDescription()); + assertEquals(dacMap.get(NAME0), outMapList.get(0).get(NAME0)); + assertEquals(dacMap.get(NAME1).getDescription(), outMapList.get(1).get(NAME1).getDescription()); assertEquals(dacMap.get(NAME2), outMapList.get(2).get(NAME2)); + assertEquals(dacMap.get(NAME3), outMapList.get(2).get(NAME3)); DummyBadPfConceptContainer badContainer = new DummyBadPfConceptContainer(); assertThatThrownBy(() -> badContainer.fromAuthorative(authorativeList)) - .hasMessage("failed to instantiate instance of container concept class"); + .hasMessage("failed to instantiate instance of container concept class"); authorativeList.clear(); assertThatThrownBy(() -> container.fromAuthorative(authorativeList)) - .hasMessage("An incoming list of concepts must have at least one entry"); + .hasMessage("An incoming list of concepts must have at least one entry"); } @Test(expected = NullPointerException.class) diff --git a/models-base/src/test/java/org/onap/policy/models/base/PfConceptKeyTest.java b/models-base/src/test/java/org/onap/policy/models/base/PfConceptKeyTest.java index a29858393..62d8d2bb3 100644 --- a/models-base/src/test/java/org/onap/policy/models/base/PfConceptKeyTest.java +++ b/models-base/src/test/java/org/onap/policy/models/base/PfConceptKeyTest.java @@ -1,5 +1,6 @@ /*- * ============LICENSE_START======================================================= + * Copyright (C) 2019-2020 Nordix Foundation. * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -32,7 +33,7 @@ import org.onap.policy.models.base.testconcepts.DummyPfConcept; public class PfConceptKeyTest { private static final String VERSION001 = "0.0.1"; - private static final String ID_IS_NULL = "id is marked @NonNull but is null"; + private static final String ID_IS_NULL = "id is marked .*on.*ull but is null$"; @Test public void testConceptKey() { @@ -47,6 +48,7 @@ public class PfConceptKeyTest { assertEquals(someKey1, someKey2); assertEquals(someKey1, someKey3); assertFalse(someKey1.isNullVersion()); + assertFalse(someKey1.isNullName()); assertEquals("PfConceptKey(name=my-name, version=0.0.1)", someKey1.toString()); assertEquals("my-name", someKey1.getName()); @@ -55,7 +57,6 @@ public class PfConceptKeyTest { assertEquals(someKey2, someKey1.getKey()); assertEquals(1, someKey1.getKeys().size()); - PfConcept pfc = new DummyPfConcept(); assertEquals(PfConceptKey.getNullKey().getId(), pfc.getId()); @@ -63,16 +64,16 @@ public class PfConceptKeyTest { assertTrue(PfConceptKey.getNullKey().isNullKey()); - assertThatThrownBy(() -> PfConceptKey.getNullKey().matchesId(null)).hasMessage(ID_IS_NULL); + assertThatThrownBy(() -> PfConceptKey.getNullKey().matchesId(null)).hasMessageMatching(ID_IS_NULL); assertThatThrownBy(() -> someKey0.setName(null)).isInstanceOf(NullPointerException.class) - .hasMessage("name is marked @NonNull but is null"); + .hasMessageMatching("^name is marked .*on.*ull but is null$"); assertThatThrownBy(() -> someKey0.setVersion(null)).isInstanceOf(NullPointerException.class) - .hasMessage("version is marked @NonNull but is null"); + .hasMessageMatching("^version is marked .*on.*ull but is null$"); assertThatIllegalArgumentException().isThrownBy(() -> new PfConceptKey("my-name.*", VERSION001)).withMessage( - "parameter 'name': value 'my-name.*', does not match regular expression '^[A-Za-z0-9\\-_\\.]+$'" - .replace('\'', '"')); + "parameter 'name': value 'my-name.*', does not match regular expression '^[A-Za-z0-9\\-_\\.]+$'" + .replace('\'', '"')); } } diff --git a/models-base/src/test/java/org/onap/policy/models/base/PfKeyImplTest.java b/models-base/src/test/java/org/onap/policy/models/base/PfKeyImplTest.java index f467ec35a..4210bc607 100644 --- a/models-base/src/test/java/org/onap/policy/models/base/PfKeyImplTest.java +++ b/models-base/src/test/java/org/onap/policy/models/base/PfKeyImplTest.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2020 Nordix Foundation. * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -29,18 +29,20 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.lang.reflect.Field; + import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; + import org.junit.Test; import org.onap.policy.models.base.PfKey.Compatibility; import org.onap.policy.models.base.testconcepts.DummyPfKey; public class PfKeyImplTest { - private static final String OTHER_IS_NULL = "otherKey is marked @NonNull but is null"; - private static final String ID_IS_NULL = "id is marked @NonNull but is null"; + private static final String OTHER_IS_NULL = "^otherKey is marked .*on.*ull but is null$"; + private static final String ID_IS_NULL = "^id is marked .*on.*ull but is null$"; private static final String VERSION123 = "1.2.3"; private static final String VERSION100 = "1.0.0"; private static final String VERSION001 = "0.0.1"; @@ -48,11 +50,11 @@ public class PfKeyImplTest { @Test public void testConceptKey() { assertThatIllegalArgumentException().isThrownBy(() -> new MyKey("some bad key id")) - .withMessage("parameter \"id\": value \"some bad key id\", " - + "does not match regular expression \"" + PfKey.KEY_ID_REGEXP + "\""); + .withMessage("parameter \"id\": value \"some bad key id\", " + "does not match regular expression \"" + + PfKey.KEY_ID_REGEXP + "\""); assertThatThrownBy(() -> new MyKey((MyKey) null)) - .hasMessage("copyConcept is marked @NonNull but is null"); + .hasMessageMatching("^copyConcept is marked .*on.*ull but is null$"); MyKey someKey0 = new MyKey(); assertTrue(someKey0.isNullKey()); @@ -89,7 +91,7 @@ public class PfKeyImplTest { assertEquals("name:0.1.2", someKey4.getId()); assertThatThrownBy(() -> someKey0.getCompatibility(null)).isInstanceOf(NullPointerException.class) - .hasMessage("otherKey is marked @NonNull but is null"); + .hasMessageMatching("^otherKey is marked .*on.*ull but is null$"); assertEquals(Compatibility.DIFFERENT, someKey0.getCompatibility(new DummyPfKey())); assertEquals(Compatibility.DIFFERENT, someKey0.getCompatibility(someKey1)); @@ -109,19 +111,19 @@ public class PfKeyImplTest { assertFalse(someKey1.isCompatible(new DummyPfKey())); assertEquals(PfValidationResult.ValidationResult.VALID, - someKey0.validate(new PfValidationResult()).getValidationResult()); + someKey0.validate(new PfValidationResult()).getValidationResult()); assertEquals(PfValidationResult.ValidationResult.VALID, - someKey1.validate(new PfValidationResult()).getValidationResult()); + someKey1.validate(new PfValidationResult()).getValidationResult()); assertEquals(PfValidationResult.ValidationResult.VALID, - someKey2.validate(new PfValidationResult()).getValidationResult()); + someKey2.validate(new PfValidationResult()).getValidationResult()); assertEquals(PfValidationResult.ValidationResult.VALID, - someKey3.validate(new PfValidationResult()).getValidationResult()); + someKey3.validate(new PfValidationResult()).getValidationResult()); assertEquals(PfValidationResult.ValidationResult.VALID, - someKey4.validate(new PfValidationResult()).getValidationResult()); + someKey4.validate(new PfValidationResult()).getValidationResult()); assertEquals(PfValidationResult.ValidationResult.VALID, - someKey5.validate(new PfValidationResult()).getValidationResult()); + someKey5.validate(new PfValidationResult()).getValidationResult()); assertEquals(PfValidationResult.ValidationResult.VALID, - someKey6.validate(new PfValidationResult()).getValidationResult()); + someKey6.validate(new PfValidationResult()).getValidationResult()); someKey0.clean(); assertNotNull(someKey0.toString()); @@ -132,7 +134,7 @@ public class PfKeyImplTest { assertEquals(-12, someKey7.compareTo(someKey0)); assertThatThrownBy(() -> someKey0.compareTo(null)).isInstanceOf(NullPointerException.class) - .hasMessage("otherObj is marked @NonNull but is null"); + .hasMessageMatching("^otherObj is marked .*on.*ull but is null$"); assertEquals(0, someKey0.compareTo(someKey0)); assertEquals(-36, someKey0.compareTo(new DummyPfKey())); @@ -148,18 +150,20 @@ public class PfKeyImplTest { @Test public void testNullArguments() { - assertThatThrownBy(() -> new MyKey((String) null)).hasMessage(ID_IS_NULL); + assertThatThrownBy(() -> new MyKey((String) null)).hasMessageMatching(ID_IS_NULL); assertThatThrownBy(() -> new MyKey((MyKey) null)) - .hasMessage("copyConcept is marked @NonNull but is null"); + .hasMessageMatching("^copyConcept is marked .*on.*ull but is null$"); - assertThatThrownBy(() -> new MyKey(null, null)).hasMessage("name is marked @NonNull but is null"); + assertThatThrownBy(() -> new MyKey(null, null)).hasMessageMatching("name is marked .*on.*ull but is null$"); - assertThatThrownBy(() -> new MyKey("name", null)).hasMessage("version is marked @NonNull but is null"); + assertThatThrownBy(() -> new MyKey("name", null)) + .hasMessageMatching("^version is marked .*on.*ull but is null$"); - assertThatThrownBy(() -> new MyKey(null, VERSION001)).hasMessage("name is marked @NonNull but is null"); + assertThatThrownBy(() -> new MyKey(null, VERSION001)) + .hasMessageMatching("^name is marked .*on.*ull but is null$"); - assertThatThrownBy(() -> new MyKey("AKey", VERSION001).isCompatible(null)).hasMessage(OTHER_IS_NULL); + assertThatThrownBy(() -> new MyKey("AKey", VERSION001).isCompatible(null)).hasMessageMatching(OTHER_IS_NULL); } @Test @@ -174,10 +178,8 @@ public class PfKeyImplTest { testKey.validate(validationResult); nameField.set(testKey, "TheKey"); nameField.setAccessible(false); - assertEquals( - "name invalid-parameter name with value Key Name " - + "does not match regular expression " + PfKey.NAME_REGEXP, - validationResult.getMessageList().get(0).getMessage()); + assertEquals("name invalid-parameter name with value Key Name " + "does not match regular expression " + + PfKey.NAME_REGEXP, validationResult.getMessageList().get(0).getMessage()); Field versionField = testKey.getClass().getDeclaredField("version"); versionField.setAccessible(true); @@ -186,21 +188,18 @@ public class PfKeyImplTest { testKey.validate(validationResult2); versionField.set(testKey, VERSION001); versionField.setAccessible(false); - assertEquals( - "version invalid-parameter version with value Key Version " - + "does not match regular expression " + PfKey.VERSION_REGEXP, - validationResult2.getMessageList().get(0).getMessage()); + assertEquals("version invalid-parameter version with value Key Version " + "does not match regular expression " + + PfKey.VERSION_REGEXP, validationResult2.getMessageList().get(0).getMessage()); } @Test public void testkeynewerThan() { MyKey key1 = new MyKey("Key1", VERSION123); - assertThatThrownBy(() -> key1.isNewerThan(null)).hasMessage(OTHER_IS_NULL); + assertThatThrownBy(() -> key1.isNewerThan(null)).hasMessageMatching(OTHER_IS_NULL); - assertThatThrownBy(() -> key1.isNewerThan(new PfReferenceKey())) - .hasMessage("org.onap.policy.models.base.PfReferenceKey is not " - + "an instance of " + PfKeyImpl.class.getName()); + assertThatThrownBy(() -> key1.isNewerThan(new PfReferenceKey())).hasMessage( + "org.onap.policy.models.base.PfReferenceKey is not " + "an instance of " + PfKeyImpl.class.getName()); assertFalse(key1.isNewerThan(key1)); @@ -241,10 +240,10 @@ public class PfKeyImplTest { PfReferenceKey refKey = new PfReferenceKey(); - assertThatThrownBy(() -> refKey.isNewerThan(null)).hasMessage(OTHER_IS_NULL); + assertThatThrownBy(() -> refKey.isNewerThan(null)).hasMessageMatching(OTHER_IS_NULL); assertThatThrownBy(() -> refKey.isNewerThan(new MyKey())) - .hasMessage(MyKey.class.getName() + " is not an instance of " + PfReferenceKey.class.getName()); + .hasMessage(MyKey.class.getName() + " is not an instance of " + PfReferenceKey.class.getName()); assertFalse(refKey.isNewerThan(refKey)); } diff --git a/models-base/src/test/java/org/onap/policy/models/base/PfKeyUseTest.java b/models-base/src/test/java/org/onap/policy/models/base/PfKeyUseTest.java index 3e5d738bd..46a00664f 100644 --- a/models-base/src/test/java/org/onap/policy/models/base/PfKeyUseTest.java +++ b/models-base/src/test/java/org/onap/policy/models/base/PfKeyUseTest.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2020 Nordix Foundation. * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -34,7 +34,7 @@ import org.onap.policy.models.base.testconcepts.DummyPfConceptKeySub; public class PfKeyUseTest { - private static final String OTHER_KEY_IS_NULL = "otherKey is marked @NonNull but is null"; + private static final String OTHER_KEY_IS_NULL = "^otherKey is marked .*on.*ull but is null$"; @Test public void testKeyUse() { @@ -43,7 +43,7 @@ public class PfKeyUseTest { assertNotNull(new PfKeyUse(new PfReferenceKey())); assertThatThrownBy(() -> new PfKeyUse((PfKeyUse) null)) - .hasMessage("copyConcept is marked @NonNull but is null"); + .hasMessageMatching("^copyConcept is marked .*on.*ull but is null$"); PfConceptKey key = new PfConceptKey("Key", "0.0.1"); PfKeyUse keyUse = new PfKeyUse(); @@ -55,7 +55,7 @@ public class PfKeyUseTest { assertEquals(Compatibility.IDENTICAL, keyUse.getCompatibility(key)); - assertThatThrownBy(() -> key.getCompatibility(null)).hasMessage(OTHER_KEY_IS_NULL); + assertThatThrownBy(() -> key.getCompatibility(null)).hasMessageMatching(OTHER_KEY_IS_NULL); assertTrue(keyUse.isCompatible(key)); @@ -87,20 +87,20 @@ public class PfKeyUseTest { PfValidationResult resultNull = new PfValidationResult(); assertEquals(false, keyUseNull.validate(resultNull).isValid()); - assertThatThrownBy(() -> keyUse.setKey(null)).hasMessage("key is marked @NonNull but is null"); + assertThatThrownBy(() -> keyUse.setKey(null)).hasMessageMatching("^key is marked .*on.*ull but is null$"); - assertThatThrownBy(() -> keyUse.getCompatibility(null)).hasMessage(OTHER_KEY_IS_NULL); + assertThatThrownBy(() -> keyUse.getCompatibility(null)).hasMessageMatching(OTHER_KEY_IS_NULL); - assertThatThrownBy(() -> keyUse.isCompatible(null)).hasMessage(OTHER_KEY_IS_NULL); + assertThatThrownBy(() -> keyUse.isCompatible(null)).hasMessageMatching(OTHER_KEY_IS_NULL); - assertThatThrownBy(() -> keyUse.validate(null)).hasMessage("result is marked @NonNull but is null"); + assertThatThrownBy(() -> keyUse.validate(null)).hasMessageMatching("^result is marked .*on.*ull but is null$"); PfKeyUse testKeyUse = new PfKeyUse(new DummyPfConceptKeySub(new PfConceptKey())); assertEquals(testKeyUse, new PfKeyUse(testKeyUse)); assertThatThrownBy(() -> new PfKeyUse((PfKeyUse) null)).isInstanceOf(NullPointerException.class); - assertThatThrownBy(() -> keyUse.isNewerThan(null)).hasMessage(OTHER_KEY_IS_NULL); + assertThatThrownBy(() -> keyUse.isNewerThan(null)).hasMessageMatching(OTHER_KEY_IS_NULL); assertEquals(false, testKeyUse.isNewerThan(keyUse)); assertEquals(false, testKeyUse.isNewerThan(testKeyUse)); diff --git a/models-base/src/test/java/org/onap/policy/models/base/PfModelTest.java b/models-base/src/test/java/org/onap/policy/models/base/PfModelTest.java index 9b1a778ac..c124393fe 100644 --- a/models-base/src/test/java/org/onap/policy/models/base/PfModelTest.java +++ b/models-base/src/test/java/org/onap/policy/models/base/PfModelTest.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2020 Nordix Foundation. * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -46,10 +46,10 @@ public class PfModelTest { assertNotNull(new DummyPfModel(new DummyPfModel())); assertThatThrownBy(() -> new DummyPfModel((PfConceptKey) null)) - .hasMessage("key is marked @NonNull but is null"); + .hasMessageMatching("^key is marked .*on.*ull but is null$"); assertThatThrownBy(() -> new DummyPfModel((DummyPfModel) null)) - .hasMessage("copyConcept is marked @NonNull but is null"); + .hasMessageMatching("^copyConcept is marked .*on.*ull but is null$"); DummyPfModel dpm = new DummyPfModel(new PfConceptKey("modelKey", VERSION001)); DummyPfModel dpmClone = new DummyPfModel(dpm); @@ -74,7 +74,7 @@ public class PfModelTest { DummyPfModel dpm = new DummyPfModel(dpmKey); assertTrue(dpm.validate(new PfValidationResult()).isValid()); - assertThatThrownBy(() -> dpm.validate(null)).hasMessage("resultIn is marked @NonNull but is null"); + assertThatThrownBy(() -> dpm.validate(null)).hasMessageMatching("^resultIn is marked .*on.*ull but is null$"); dpm.setKey(PfConceptKey.getNullKey()); assertFalse(dpm.validate(new PfValidationResult()).isValid()); diff --git a/models-base/src/test/java/org/onap/policy/models/base/PfReferenceKeyTest.java b/models-base/src/test/java/org/onap/policy/models/base/PfReferenceKeyTest.java index b12ce4de0..ba36b9e8f 100644 --- a/models-base/src/test/java/org/onap/policy/models/base/PfReferenceKeyTest.java +++ b/models-base/src/test/java/org/onap/policy/models/base/PfReferenceKeyTest.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2020 Nordix Foundation. * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -29,6 +29,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.lang.reflect.Field; + import org.junit.Test; public class PfReferenceKeyTest { @@ -54,7 +55,7 @@ public class PfReferenceKeyTest { assertEquals("NULL:0.0.0:NULL:NULL", PfReferenceKey.getNullKey().getId()); assertThatThrownBy(() -> new PfReferenceKey(new PfConceptKey(), null)) - .hasMessage("parameter \"localName\" is null"); + .hasMessage("parameter \"localName\" is null"); PfReferenceKey testReferenceKey = new PfReferenceKey(); testReferenceKey.setParentConceptKey(new PfConceptKey("PN", VERSION001)); @@ -83,7 +84,7 @@ public class PfReferenceKeyTest { assertEquals("NLN", testReferenceKey.getLocalName()); assertThatThrownBy(() -> testReferenceKey.isCompatible(null)) - .hasMessage("otherKey is marked @NonNull but is null"); + .hasMessageMatching("^otherKey is marked .*on.*ull but is null$"); assertFalse(testReferenceKey.isCompatible(PfConceptKey.getNullKey())); assertFalse(testReferenceKey.isCompatible(PfReferenceKey.getNullKey())); @@ -101,7 +102,7 @@ public class PfReferenceKeyTest { PfReferenceKey clonedReferenceKey = new PfReferenceKey(testReferenceKey); assertEquals("PfReferenceKey(parentKeyName=NPKN, parentKeyVersion=0.0.1, parentLocalName=NPKLN, localName=NLN)", - clonedReferenceKey.toString()); + clonedReferenceKey.toString()); assertFalse(testReferenceKey.hashCode() == 0); @@ -144,9 +145,9 @@ public class PfReferenceKeyTest { parentNameField.set(testReferenceKey, "ParentName"); parentNameField.setAccessible(false); assertEquals( - "parentKeyName invalid-parameter parentKeyName with value Parent Name " - + "does not match regular expression " + PfKey.NAME_REGEXP, - validationResult.getMessageList().get(0).getMessage()); + "parentKeyName invalid-parameter parentKeyName with value Parent Name " + + "does not match regular expression " + PfKey.NAME_REGEXP, + validationResult.getMessageList().get(0).getMessage()); Field parentVersionField = testReferenceKey.getClass().getDeclaredField("parentKeyVersion"); parentVersionField.setAccessible(true); @@ -156,9 +157,9 @@ public class PfReferenceKeyTest { parentVersionField.set(testReferenceKey, VERSION001); parentVersionField.setAccessible(false); assertEquals( - "parentKeyVersion invalid-parameter parentKeyVersion with value Parent Version " - + "does not match regular expression " + PfKey.VERSION_REGEXP, - validationResult2.getMessageList().get(0).getMessage()); + "parentKeyVersion invalid-parameter parentKeyVersion with value Parent Version " + + "does not match regular expression " + PfKey.VERSION_REGEXP, + validationResult2.getMessageList().get(0).getMessage()); Field parentLocalNameField = testReferenceKey.getClass().getDeclaredField("parentLocalName"); parentLocalNameField.setAccessible(true); @@ -168,9 +169,9 @@ public class PfReferenceKeyTest { parentLocalNameField.set(testReferenceKey, PARENT_LOCAL_NAME); parentLocalNameField.setAccessible(false); assertEquals( - "parentLocalName invalid-parameter parentLocalName with value " - + "Parent Local Name does not match regular expression [A-Za-z0-9\\-_\\.]+|^$", - validationResult3.getMessageList().get(0).getMessage()); + "parentLocalName invalid-parameter parentLocalName with value " + + "Parent Local Name does not match regular expression [A-Za-z0-9\\-_\\.]+|^$", + validationResult3.getMessageList().get(0).getMessage()); Field localNameField = testReferenceKey.getClass().getDeclaredField("localName"); localNameField.setAccessible(true); @@ -180,8 +181,8 @@ public class PfReferenceKeyTest { localNameField.set(testReferenceKey, LOCAL_NAME); localNameField.setAccessible(false); assertEquals( - "localName invalid-parameter localName with value Local Name " - + "does not match regular expression [A-Za-z0-9\\-_\\.]+|^$", - validationResult4.getMessageList().get(0).getMessage()); + "localName invalid-parameter localName with value Local Name " + + "does not match regular expression [A-Za-z0-9\\-_\\.]+|^$", + validationResult4.getMessageList().get(0).getMessage()); } } diff --git a/models-base/src/test/java/org/onap/policy/models/base/PfSearchableKeyTest.java b/models-base/src/test/java/org/onap/policy/models/base/PfSearchableKeyTest.java index 942f47c1d..e3a0e3338 100644 --- a/models-base/src/test/java/org/onap/policy/models/base/PfSearchableKeyTest.java +++ b/models-base/src/test/java/org/onap/policy/models/base/PfSearchableKeyTest.java @@ -1,5 +1,6 @@ /*- * ============LICENSE_START======================================================= + * Copyright (C) 2019-2020 Nordix Foundation. * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -31,7 +32,7 @@ import org.onap.policy.models.base.testconcepts.DummyPfConcept; public class PfSearchableKeyTest { private static final String VERSION001 = "0.0.1"; - private static final String ID_IS_NULL = "id is marked @NonNull but is null"; + private static final String ID_IS_NULL = "^id is marked .*on.*ull but is null$"; @Test public void testSearchableKey() { @@ -54,7 +55,6 @@ public class PfSearchableKeyTest { assertEquals(someKey2, someKey1.getKey()); assertEquals(1, someKey1.getKeys().size()); - PfConcept pfc = new DummyPfConcept(); assertEquals(PfSearchableKey.getNullKey().getId(), pfc.getId()); @@ -62,13 +62,13 @@ public class PfSearchableKeyTest { assertTrue(PfSearchableKey.getNullKey().isNullKey()); - assertThatThrownBy(() -> PfSearchableKey.getNullKey().matchesId(null)).hasMessage(ID_IS_NULL); + assertThatThrownBy(() -> PfSearchableKey.getNullKey().matchesId(null)).hasMessageMatching(ID_IS_NULL); assertThatThrownBy(() -> someKey0.setName(null)).isInstanceOf(NullPointerException.class) - .hasMessage("name is marked @NonNull but is null"); + .hasMessageMatching("^name is marked .*on.*ull but is null$"); assertThatThrownBy(() -> someKey0.setVersion(null)).isInstanceOf(NullPointerException.class) - .hasMessage("version is marked @NonNull but is null"); + .hasMessageMatching("^version is marked .*on.*ull but is null$"); PfSearchableKey someKey4 = new PfSearchableKey("my-name.*", VERSION001); assertEquals("my-name.*", someKey4.getName()); diff --git a/models-base/src/test/java/org/onap/policy/models/base/PfTimestampKeyTest.java b/models-base/src/test/java/org/onap/policy/models/base/PfTimestampKeyTest.java index 28b9fd922..1495fca7d 100644 --- a/models-base/src/test/java/org/onap/policy/models/base/PfTimestampKeyTest.java +++ b/models-base/src/test/java/org/onap/policy/models/base/PfTimestampKeyTest.java @@ -1,8 +1,6 @@ /*- * ============LICENSE_START======================================================= - * ONAP Policy Model - * ================================================================================ - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2020 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,14 +26,15 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.Date; + import org.junit.Test; public class PfTimestampKeyTest { private static final String VERSION001 = "0.0.1"; - private static final String CONCEPT_IS_NULL = "copyConcept is marked @NonNull but is null"; - private static final String NAME_IS_NULL = "name is marked @NonNull but is null"; - private static final String VERSION_IS_NULL = "version is marked @NonNull but is null"; - private static final String TIMESTAMP_IS_NULL = "timeStamp is marked @NonNull but is null"; + private static final String CONCEPT_IS_NULL = "^copyConcept is marked .*on.*ull but is null$"; + private static final String NAME_IS_NULL = "^name is marked .*on.*ull but is null$"; + private static final String VERSION_IS_NULL = "^version is marked .*on.*ull but is null$"; + private static final String TIMESTAMP_IS_NULL = "^timeStamp is marked .*on.*ull but is null$"; private static final long timeStamp = 1574832537641L; @Test @@ -60,24 +59,24 @@ public class PfTimestampKeyTest { assertEquals(1, someKey1.getKeys().size()); assertThatThrownBy(() -> new PfTimestampKey((PfTimestampKey) null)).isInstanceOf(NullPointerException.class) - .hasMessage(CONCEPT_IS_NULL); + .hasMessageMatching(CONCEPT_IS_NULL); assertThatThrownBy(() -> new PfTimestampKey(null, null, null)).isInstanceOf(NullPointerException.class) - .hasMessage(NAME_IS_NULL); + .hasMessageMatching(NAME_IS_NULL); assertThatThrownBy(() -> new PfTimestampKey("my-name", null, null)).isInstanceOf(NullPointerException.class) - .hasMessage(VERSION_IS_NULL); + .hasMessageMatching(VERSION_IS_NULL); assertThatThrownBy(() -> new PfTimestampKey("my-name", VERSION001, null)) - .isInstanceOf(NullPointerException.class).hasMessage(TIMESTAMP_IS_NULL); + .isInstanceOf(NullPointerException.class).hasMessageMatching(TIMESTAMP_IS_NULL); assertThatThrownBy(() -> someKey0.setName(null)).isInstanceOf(NullPointerException.class) - .hasMessage(NAME_IS_NULL); + .hasMessageMatching(NAME_IS_NULL); assertThatThrownBy(() -> someKey0.setVersion(null)).isInstanceOf(NullPointerException.class) - .hasMessage(VERSION_IS_NULL); + .hasMessageMatching(VERSION_IS_NULL); assertThatThrownBy(() -> someKey0.setTimeStamp(null)).isInstanceOf(NullPointerException.class) - .hasMessage(TIMESTAMP_IS_NULL); + .hasMessageMatching(TIMESTAMP_IS_NULL); assertFalse(someKey1.isNewerThan(someKey2)); assertThatThrownBy(() -> someKey1.isNewerThan((PfKey) null)).isInstanceOf(NullPointerException.class) - .hasMessage("otherKey is marked @NonNull but is null"); + .hasMessageMatching("^otherKey is marked .*on.*ull but is null$"); someKey2.setTimeStamp(new Date(timeStamp + 1)); assertTrue(someKey2.isNewerThan(someKey1)); someKey3.setName("my-name3"); @@ -86,7 +85,7 @@ public class PfTimestampKeyTest { assertEquals(-1, someKey1.compareTo(someKey2)); assertEquals(-1, someKey1.compareTo(someKey3)); assertThatThrownBy(() -> someKey1.compareTo((PfConcept) null)).isInstanceOf(NullPointerException.class) - .hasMessage("otherObj is marked @NonNull but is null"); + .hasMessageMatching("^otherObj is marked .*on.*ull but is null$"); PfTimestampKey someKey4 = new PfTimestampKey("NULL", "0.0.0", new Date(timeStamp)); assertFalse(someKey4.isNullKey()); diff --git a/models-provider/src/test/java/org/onap/policy/models/provider/revisionhierarchy/HierarchyFetchTest.java b/models-provider/src/test/java/org/onap/policy/models/provider/revisionhierarchy/HierarchyFetchTest.java new file mode 100644 index 000000000..35ec95b45 --- /dev/null +++ b/models-provider/src/test/java/org/onap/policy/models/provider/revisionhierarchy/HierarchyFetchTest.java @@ -0,0 +1,67 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2020 Nordix Foundation. + * ================================================================================ + * 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.models.provider.revisionhierarchy; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import java.util.Base64; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.onap.policy.common.utils.coder.YamlJsonTranslator; +import org.onap.policy.common.utils.resources.TextFileUtils; +import org.onap.policy.models.base.PfModelRuntimeException; +import org.onap.policy.models.provider.PolicyModelsProvider; +import org.onap.policy.models.provider.PolicyModelsProviderFactory; +import org.onap.policy.models.provider.PolicyModelsProviderParameters; +import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; + +public class HierarchyFetchTest { + + private static PolicyModelsProviderParameters parameters; + + @BeforeClass + public static void beforeSetupParameters() { + parameters = new PolicyModelsProviderParameters(); + parameters.setDatabaseDriver("org.h2.Driver"); + parameters.setDatabaseUrl("jdbc:h2:mem:testdb"); + parameters.setDatabaseUser("policy"); + parameters.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes())); + parameters.setPersistenceUnit("ToscaConceptTest"); + } + + @Test + public void testInitAndClose() throws Exception { + PolicyModelsProvider databaseProvider = + new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters); + + ToscaServiceTemplate serviceTemplate = new YamlJsonTranslator().fromYaml( + TextFileUtils + .getTextFileAsString("src/test/resources/servicetemplates/MultipleRevisionServiceTemplate.yaml"), + ToscaServiceTemplate.class); + + assertThatThrownBy(() -> { + databaseProvider.createPolicies(serviceTemplate); + }).isInstanceOf(PfModelRuntimeException.class); + + databaseProvider.close(); + } +} diff --git a/models-provider/src/test/resources/servicetemplates/MultipleRevisionServiceTemplate.yaml b/models-provider/src/test/resources/servicetemplates/MultipleRevisionServiceTemplate.yaml new file mode 100644 index 000000000..5f250e022 --- /dev/null +++ b/models-provider/src/test/resources/servicetemplates/MultipleRevisionServiceTemplate.yaml @@ -0,0 +1,421 @@ +tosca_definitions_version: tosca_simple_yaml_1_1_0 +policy_types: + onap.policies.PolicyTypeLevel0:1.0.0: + derived_from: tosca.policies.Root + version: 1.0.0 + description: Level 0 policy type + properties: + policyLevel0Property0: + type: policy.data.DataType0 + policyLevel0Property1: + type: list + entry_schema: + type: policy.data.DataType1 + onap.policies.PolicyTypeLevel0:2.0.0: + derived_from: tosca.policies.Root + version: 2.0.0 + description: Level 0 policy type + properties: + policyLevel0Property0: + type: policy.data.DataType0 + policyLevel0Property1: + type: list + entry_schema: + type: policy.data.DataType1 + policyLevel0V2Property2: + type: policy.data.DataType5 + onap.policies.PolicyTypeLevel0: + derived_from: tosca.policies.Root + version: 3.0.0 + description: Level 0 policy type + properties: + policyLevel0Property0: + type: policy.data.DataType0 + policyLevel0Property1: + type: list + entry_schema: + type: policy.data.DataType1 + policyLevel0V2Property2: + type: policy.data.DataType5 + policyLevel0V3Property3: + type: policy.data.DataType6 + onap.policies.PolicyTypeLevel0.1:1.0.0: + derived_from: onap.policies.PolicyTypeLevel0 + version: 1.0.0 + description: Level 0.1 policy type + properties: + policyLevel0.1Property0: + type: policy.data.DataType5 + policyLevel0.1Property1: + type: policy.data.DataType6 + onap.policies.PolicyTypeLevel0.1:2.0.0: + derived_from: onap.policies.PolicyTypeLevel0 + version: 2.0.0 + description: Level 0.1 policy type + properties: + policyLevel0.1Property0: + type: policy.data.DataType5 + policyLevel0.1Property1: + type: policy.data.DataType6 + policyLevel0.1V2Property2: + type: policy.data.DataType5 + onap.policies.PolicyTypeLevel0.1: + derived_from: onap.policies.PolicyTypeLevel0 + version: 3.0.0 + description: Level 0.1 policy type + properties: + policyLevel0.1Property0: + type: policy.data.DataType5 + policyLevel0.1Property1: + type: policy.data.DataType6 + policyLevel0.1V2Property2: + type: policy.data.DataType5 + policyLevel0.1V3Property3: + type: policy.data.DataType6 + onap.policies.PolicyTypeLevel0.1.2:1.0.0: + derived_from: onap.policies.PolicyTypeLevel0.1 + version: 1.0.0 + description: Level 0.1.2 policy type + properties: + policyLevel0.1.2Property0: + type: policy.data.DataType5 + policyLevel0.1.2Property1: + type: policy.data.DataType6 + onap.policies.PolicyTypeLevel0.1.2:2.0.0: + derived_from: onap.policies.PolicyTypeLevel0.1 + version: 2.0.0 + description: Level 0.1.2 policy type + properties: + policyLevel0.1.2Property0: + type: policy.data.DataType5 + policyLevel0.1.2Property1: + type: policy.data.DataType6 + policyLevel0.1.2V2Property2: + type: policy.data.DataType5 + onap.policies.PolicyTypeLevel0.1.2: + derived_from: onap.policies.PolicyTypeLevel0.1 + version: 3.0.0 + description: Level 0.1.2 policy type + properties: + policyLevel0.1.2Property0: + type: policy.data.DataType5 + policyLevel0.1.2Property1: + type: policy.data.DataType6 + policyLevel0.1.2V2Property2: + type: policy.data.DataType5 + policyLevel0.1.2V3Property3: + type: policy.data.DataType6 + onap.policies.PolicyTypeLevel0.1.2.3:1.0.0: + derived_from: onap.policies.PolicyTypeLevel0.1.2 + version: 1.0.0 + description: Level 0.1.2.3 policy type + properties: + policyLevel0.1.2.3Property0: + type: policy.data.DataType5 + policyLevel0.1.2.3Property1: + type: policy.data.DataType6 + onap.policies.PolicyTypeLevel0.1.2.3:2.0.0: + derived_from: onap.policies.PolicyTypeLevel0.1.2 + version: 2.0.0 + description: Level 0.1.2.3 policy type + properties: + policyLevel0.1.2.3Property0: + type: policy.data.DataType5 + policyLevel0.1.2.3Property1: + type: policy.data.DataType6 + policyLevel0.1.2.3V2Property2: + type: policy.data.DataType5 + onap.policies.PolicyTypeLevel0.1.2.3: + derived_from: onap.policies.PolicyTypeLevel0.1.2 + version: 3.0.0 + description: Level 0.1.2.3 policy type + properties: + policyLevel0.1.2.3Property0: + type: policy.data.DataType5 + policyLevel0.1.2.3Property1: + type: policy.data.DataType6 + policyLevel0.1.2.3V2Property2: + type: policy.data.DataType5 + policyLevel0.1.2.3V3Property3: + type: policy.data.DataType6 +data_types: + policy.data.DataType0: + derived_from: tosca.datatypes.Root + version: 1.0.0 + properties: + dataType0Property0: + type: policy.data.DataType2 + required: false + dataType0Property1: + type: list + required: true + entry_schema: + type: policy.data.DataType3 + policy.data.DataType1: + derived_from: tosca.datatypes.Root + version: 1.0.0 + properties: + dataType1Property0: + type: policy.data.DataType4 + required: false + dataType1Property1: + type: list + required: true + entry_schema: + type: policy.data.DataType5 + policy.data.DataType2: + derived_from: tosca.datatypes.Root + version: 1.0.0 + properties: + dataType2Property0: + type: string + required: false + dataType2Property1: + type: list + required: true + entry_schema: + type: integer + policy.data.DataType3: + derived_from: tosca.datatypes.Root + version: 1.0.0 + properties: + dataType3Property0: + type: string + required: false + policy.data.DataType4: + derived_from: tosca.datatypes.Root + version: 1.0.0 + properties: + dataType4Property0: + type: string + required: false + dataType4Property1: + type: list + required: true + entry_schema: + type: integer + policy.data.DataType5:1.0.0: + derived_from: tosca.datatypes.Root + version: 1.0.0 + properties: + dataType5Property0: + type: string + required: false + policy.data.DataType5:2.0.0: + derived_from: tosca.datatypes.Root + version: 2.0.0 + properties: + dataType5Property0: + type: string + required: false + dataType5V2Property1: + type: string + required: false + policy.data.DataType5: + derived_from: tosca.datatypes.Root + version: 3.0.0 + properties: + dataType5Property0: + type: string + required: false + dataType5V2Property1: + type: string + required: false + dataType5V2Property2: + type: integer + required: false + policy.data.DataType6:1.0.0: + derived_from: tosca.datatypes.Root + version: 1.0.0 + properties: + dataType6Property0: + type: integer + required: false + policy.data.DataType6: + derived_from: tosca.datatypes.Root + version: 2.0.0 + properties: + dataType6Property0: + type: integer + required: false + dataType6V2Property1: + type: integer + required: false +topology_template: + policies: + - onap.policies.PolicyLevel0: + type: onap.policies.PolicyTypeLevel0 + version: 1.0.0 + type_version: 1.0.0 + description: Level 0 policy + properties: + policyLevel0Property0: + dataType0Property0: + dataType2Property0: dataType2Property0 value + dataType2Property1: + - 123 + - 456 + - 789 + dataType0Property1: + - dataType3Property0: dataType3Property0 value 0 + - dataType3Property0: dataType3Property0 value 1 + - dataType3Property0: dataType3Property0 value 2 + - dataType3Property0: dataType3Property0 value 3 + policyLevel0Property1: + - dataType1Property0: + dataType4Property0: dataType4Property0 value + dataType4Property1: + - 123 + - 456 + - 789 + dataType1Property1: + - dataType5Property0: dataType5Property0 value 0 + - dataType5Property0: dataType5Property0 value 1 + - dataType5Property0: dataType5Property0 value 2 + - dataType5Property0: dataType5Property0 value 3 + - dataType1Property0: + dataType4Property0: dataType4Property0 value + dataType4Property1: + - 123 + - 456 + - 789 + dataType1Property1: + - dataType5Property0: dataType5Property0 value 0 + - dataType5Property0: dataType5Property0 value 1 + - dataType5Property0: dataType5Property0 value 2 + - dataType5Property0: dataType5Property0 value 3 + - onap.policies.PolicyLevel0.1: + type: onap.policies.PolicyTypeLevel0 + version: 1.0.0 + type_version: 1.0.0 + description: Level 0 policy + properties: + policyLevel0Property0: + dataType0Property0: + dataType2Property0: dataType2Property0 value + dataType2Property1: + - 123 + - 456 + - 789 + dataType0Property1: + - dataType3Property0: dataType3Property0 value 0 + - dataType3Property0: dataType3Property0 value 1 + - dataType3Property0: dataType3Property0 value 2 + - dataType3Property0: dataType3Property0 value 3 + policyLevel0Property1: + - dataType1Property0: + dataType4Property0: dataType4Property0 value + dataType4Property1: + - 123 + - 456 + - 789 + dataType1Property1: + - dataType5Property0: dataType5Property0 value 0 + - dataType5Property0: dataType5Property0 value 1 + - dataType5Property0: dataType5Property0 value 2 + - dataType5Property0: dataType5Property0 value 3 + - dataType1Property0: + dataType4Property0: dataType4Property0 value + dataType4Property1: + - 123 + - 456 + - 789 + dataType1Property1: + - dataType5Property0: dataType5Property0 value 0 + - dataType5Property0: dataType5Property0 value 1 + - dataType5Property0: dataType5Property0 value 2 + - dataType5Property0: dataType5Property0 value 3 + policyLevel0.1Property0: policyLevel0.1Property0 value + policyLevel0.1Property1: 123 + - onap.policies.PolicyLevel0.1.2: + type: onap.policies.PolicyTypeLevel0 + version: 1.0.0 + type_version: 1.0.0 + description: Level 0 policy + properties: + policyLevel0Property0: + dataType0Property0: + dataType2Property0: dataType2Property0 value + dataType2Property1: + - 123 + - 456 + - 789 + dataType0Property1: + - dataType3Property0: dataType3Property0 value 0 + - dataType3Property0: dataType3Property0 value 1 + - dataType3Property0: dataType3Property0 value 2 + - dataType3Property0: dataType3Property0 value 3 + policyLevel0Property1: + - dataType1Property0: + dataType4Property0: dataType4Property0 value + dataType4Property1: + - 123 + - 456 + - 789 + dataType1Property1: + - dataType5Property0: dataType5Property0 value 0 + - dataType5Property0: dataType5Property0 value 1 + - dataType5Property0: dataType5Property0 value 2 + - dataType5Property0: dataType5Property0 value 3 + - dataType1Property0: + dataType4Property0: dataType4Property0 value + dataType4Property1: + - 123 + - 456 + - 789 + dataType1Property1: + - dataType5Property0: dataType5Property0 value 0 + - dataType5Property0: dataType5Property0 value 1 + - dataType5Property0: dataType5Property0 value 2 + - dataType5Property0: dataType5Property0 value 3 + policyLevel0.1Property0: policyLevel0.1Property0 value + policyLevel0.1Property1: 123 + policyLevel0.1.2Property0: policyLevel0.1.2Property0 value + policyLevel0.1.2Property1: 456 + - onap.policies.PolicyLevel0.1.2.3: + type: onap.policies.PolicyTypeLevel0 + version: 1.0.0 + type_version: 1.0.0 + description: Level 0 policy + properties: + policyLevel0Property0: + dataType0Property0: + dataType2Property0: dataType2Property0 value + dataType2Property1: + - 123 + - 456 + - 789 + dataType0Property1: + - dataType3Property0: dataType3Property0 value 0 + - dataType3Property0: dataType3Property0 value 1 + - dataType3Property0: dataType3Property0 value 2 + - dataType3Property0: dataType3Property0 value 3 + policyLevel0Property1: + - dataType1Property0: + dataType4Property0: dataType4Property0 value + dataType4Property1: + - 123 + - 456 + - 789 + dataType1Property1: + - dataType5Property0: dataType5Property0 value 0 + - dataType5Property0: dataType5Property0 value 1 + - dataType5Property0: dataType5Property0 value 2 + - dataType5Property0: dataType5Property0 value 3 + - dataType1Property0: + dataType4Property0: dataType4Property0 value + dataType4Property1: + - 123 + - 456 + - 789 + dataType1Property1: + - dataType5Property0: dataType5Property0 value 0 + - dataType5Property0: dataType5Property0 value 1 + - dataType5Property0: dataType5Property0 value 2 + - dataType5Property0: dataType5Property0 value 3 + policyLevel0.1Property0: policyLevel0.1Property0 value + policyLevel0.1Property1: 123 + policyLevel0.1.2Property0: policyLevel0.1.2Property0 value + policyLevel0.1.2Property1: 456 + policyLevel0.1.2.3Property0: policyLevel0.1.2.3Property0 value + policyLevel0.1.2.3Property1: 456