From bae811c71a0bd4484c6b69ad0db9afdbeca373bd Mon Sep 17 00:00:00 2001 From: FrancescoFioraEst Date: Wed, 22 Nov 2023 15:40:44 +0000 Subject: [PATCH] Allow semantic versioning in all templates in models Issue-ID: POLICY-4885 Change-Id: I036c4ddc41bb817dc28a4b28a842d3139991bd10 Signed-off-by: FrancescoFioraEst --- .../java/org/onap/policy/models/base/PfKey.java | 4 +++- .../org/onap/policy/models/base/PfKeyImplTest.java | 27 ++++++++++++++++++---- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/models-base/src/main/java/org/onap/policy/models/base/PfKey.java b/models-base/src/main/java/org/onap/policy/models/base/PfKey.java index 8ff171ee3..1ce5102b8 100644 --- a/models-base/src/main/java/org/onap/policy/models/base/PfKey.java +++ b/models-base/src/main/java/org/onap/policy/models/base/PfKey.java @@ -39,7 +39,9 @@ public abstract class PfKey extends PfConcept { public static final String NAME_REGEXP = "^[A-Za-z0-9\\-_\\.]+$"; /** Regular expression to specify the structure of key versions. */ - public static final String VERSION_REGEXP = "^(\\d+.){2}\\d+$"; + public static final String VERSION_REGEXP + = "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)" + + "(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"; /** Regular expression to specify the structure of key IDs. */ public static final String KEY_ID_REGEXP = "^[A-Za-z0-9\\-_\\.]+:(\\d+.){2}\\d+$"; 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 2afc94b53..aefd389ac 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-2021 Nordix Foundation. + * Copyright (C) 2019-2021,2023 Nordix Foundation. * Modifications Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -48,6 +48,7 @@ public class PfKeyImplTest { private static final String VERSION123 = "1.2.3"; private static final String VERSION100 = "1.0.0"; private static final String VERSION001 = "0.0.1"; + private static final String NAME = "name"; private static MyKey someKey; private static MyKey someKey0; private static MyKey someKey1; @@ -58,6 +59,11 @@ public class PfKeyImplTest { private static MyKey someKey5; private static MyKey someKey6; + private static final MyKey buildKey1 = new MyKey(NAME, "0.0.3+1"); + private static final MyKey buildKey2 = new MyKey(NAME, "0.1.0-1"); + private static final MyKey buildKey3 = new MyKey(NAME, "3.0.0-SNAPSHOT"); + private static final MyKey buildKey4 = new MyKey(NAME, "1.0.0-rc.1"); + /** * Sets data in Keys for the tests. */ @@ -66,7 +72,7 @@ public class PfKeyImplTest { someKey = new MyKey(); someKey0 = new MyKey(); - someKey1 = new MyKey("name", VERSION001); + someKey1 = new MyKey(NAME, VERSION001); someKey2 = new MyKey(someKey1); someKey3 = new MyKey(someKey1.getId()); @@ -99,7 +105,7 @@ public class PfKeyImplTest { assertTrue(someKey.isNullKey()); assertEquals(new MyKey(PfKey.NULL_KEY_NAME, PfKey.NULL_KEY_VERSION), someKey); - MyKey someKey11 = new MyKey("name", VERSION001); + MyKey someKey11 = new MyKey(NAME, VERSION001); MyKey someKey22 = new MyKey(someKey11); MyKey someKey33 = new MyKey(someKey11.getId()); assertEquals(someKey11, someKey22); @@ -119,20 +125,27 @@ public class PfKeyImplTest { .hasMessageMatching("^otherKey is marked .*on.*ull but is null$"); assertEquals(Compatibility.DIFFERENT, someKey0.getCompatibility(new DummyPfKey())); + assertEquals(Compatibility.DIFFERENT, buildKey1.getCompatibility(new DummyPfKey())); assertEquals(Compatibility.DIFFERENT, someKey0.getCompatibility(someKey1)); assertEquals(Compatibility.IDENTICAL, someKey2.getCompatibility(someKey1)); + assertEquals(Compatibility.IDENTICAL, buildKey1.getCompatibility(new MyKey(buildKey1))); assertEquals(Compatibility.PATCH, someKey3.getCompatibility(someKey1)); + assertEquals(Compatibility.PATCH, buildKey1.getCompatibility(someKey1)); assertEquals(Compatibility.MINOR, someKey4.getCompatibility(someKey1)); + assertEquals(Compatibility.MINOR, buildKey2.getCompatibility(buildKey1)); assertEquals(Compatibility.PATCH, someKey4a.getCompatibility(someKey1)); assertEquals(Compatibility.PATCH, someKey1.getCompatibility(someKey4a)); assertEquals(Compatibility.MAJOR, someKey5.getCompatibility(someKey1)); assertEquals(Compatibility.MAJOR, someKey6.getCompatibility(someKey1)); + assertEquals(Compatibility.MAJOR, buildKey3.getCompatibility(someKey1)); assertTrue(someKey1.isCompatible(someKey2)); assertTrue(someKey1.isCompatible(someKey3)); assertTrue(someKey1.isCompatible(someKey4)); assertFalse(someKey1.isCompatible(someKey0)); assertFalse(someKey1.isCompatible(someKey5)); + assertFalse(someKey1.isCompatible(buildKey3)); + assertFalse(someKey1.isCompatible(buildKey4)); assertFalse(someKey1.isCompatible(new DummyPfKey())); } @@ -145,6 +158,10 @@ public class PfKeyImplTest { assertTrue(someKey4.validate("").isValid()); assertTrue(someKey5.validate("").isValid()); assertTrue(someKey6.validate("").isValid()); + assertTrue(buildKey1.validate("").isValid()); + assertTrue(buildKey2.validate("").isValid()); + assertTrue(buildKey3.validate("").isValid()); + assertTrue(buildKey4.validate("").isValid()); } @Test @@ -183,7 +200,7 @@ public class PfKeyImplTest { assertThatThrownBy(() -> new MyKey(null, null)).hasMessageMatching("name is marked .*on.*ull but is null$"); - assertThatThrownBy(() -> new MyKey("name", null)) + assertThatThrownBy(() -> new MyKey(NAME, null)) .hasMessageMatching("^version is marked .*on.*ull but is null$"); assertThatThrownBy(() -> new MyKey(null, VERSION001)) @@ -197,7 +214,7 @@ public class PfKeyImplTest { MyKey testKey = new MyKey("TheKey", VERSION001); assertEquals("TheKey:0.0.1", testKey.getId()); - Field nameField = testKey.getClass().getDeclaredField("name"); + Field nameField = testKey.getClass().getDeclaredField(NAME); nameField.setAccessible(true); nameField.set(testKey, "Key Name"); ValidationResult validationResult = testKey.validate(""); -- 2.16.6