Merge "Add bug fixes and tests for filters"
authorJorge Hernandez <jorge.hernandez-herrero@att.com>
Mon, 8 Apr 2019 16:54:06 +0000 (16:54 +0000)
committerGerrit Code Review <gerrit@onap.org>
Mon, 8 Apr 2019 16:54:06 +0000 (16:54 +0000)
18 files changed:
models-base/src/main/java/org/onap/policy/models/base/PfConceptKey.java
models-base/src/main/java/org/onap/policy/models/base/PfObjectFilter.java
models-base/src/main/java/org/onap/policy/models/base/PfReferenceKey.java
models-base/src/test/java/org/onap/policy/models/base/PfObjectFilterTest.java
models-pdp/pom.xml
models-pdp/src/main/java/org/onap/policy/models/pdp/concepts/Pdp.java
models-pdp/src/main/java/org/onap/policy/models/pdp/concepts/PdpGroupFilter.java
models-pdp/src/main/java/org/onap/policy/models/pdp/concepts/PdpSubGroup.java
models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpGroup.java
models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpSubGroup.java
models-pdp/src/test/java/org/onap/policy/models/pdp/concepts/PdpGroupFilterTest.java [new file with mode: 0644]
models-pdp/src/test/java/org/onap/policy/models/pdp/concepts/TestPdpGroup.java
models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpProviderTest.java
models-pdp/src/test/resources/testdata/PdpGroups0Update.json [new file with mode: 0644]
models-pdp/src/test/resources/testdata/PdpGroupsForFiltering.json [new file with mode: 0644]
models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyFilter.java
models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyTypeFilter.java
models-tosca/src/main/java/org/onap/policy/models/tosca/legacy/mapping/LegacyOperationalPolicyMapper.java

index ee476e3..5d6ac13 100644 (file)
@@ -51,10 +51,10 @@ public class PfConceptKey extends PfKey {
     private static final String NAME_TOKEN = "name";
     private static final String VERSION_TOKEN = "version";
 
-    @Column(name = NAME_TOKEN, length = 128)
+    @Column(name = NAME_TOKEN, length = 120)
     private String name;
 
-    @Column(name = VERSION_TOKEN, length = 128)
+    @Column(name = VERSION_TOKEN, length = 20)
     private String version;
 
     /**
index 6ede4d9..501d9c3 100644 (file)
@@ -46,11 +46,11 @@ public interface PfObjectFilter<T extends Comparable<T>> {
      * Check if a value matches a regular expression.
      *
      * @param value the incoming value to check
-     * @param regexp the regular expression to check against
+     * @param pattern the pattern to check against
      * @return match or not
      */
-    public default boolean filterOnRegexp(@NonNull final String value, @NonNull final String regexp) {
-        return value.matches(regexp);
+    public default boolean filterString(@NonNull final String value, final String pattern) {
+        return pattern == null || value.equals(pattern);
     }
 
     /**
@@ -74,10 +74,10 @@ public interface PfObjectFilter<T extends Comparable<T>> {
             T lastElement = filteredList.get(j);
 
             /*
-             * The list is sorted so if the last element name is the same as the current
-             * element name, the current element should be removed.
+             * The list is sorted so if the last element name is the same as the current element name, the current
+             * element should be removed.
              */
-            if (!((PfNameVersion)curElement).getName().equals(((PfNameVersion)lastElement).getName())) {
+            if (!((PfNameVersion) curElement).getName().equals(((PfNameVersion) lastElement).getName())) {
                 // have a new name - done comparing with the old "current"
                 ++icur;
             }
index 185ccfa..bda5aed 100644 (file)
@@ -73,16 +73,16 @@ public class PfReferenceKey extends PfKey {
     private static final int PARENT_LOCAL_NAME_FIELD = 2;
     private static final int LOCAL_NAME_FIELD = 3;
 
-    @Column(name = PARENT_KEY_NAME, length = 128)
+    @Column(name = PARENT_KEY_NAME, length = 120)
     private String parentKeyName;
 
-    @Column(name = PARENT_KEY_VERSION, length = 128)
+    @Column(name = PARENT_KEY_VERSION, length = 15)
     private String parentKeyVersion;
 
-    @Column(name = PARENT_LOCAL_NAME, length = 128)
+    @Column(name = PARENT_LOCAL_NAME, length = 120)
     private String parentLocalName;
 
-    @Column(name = LOCAL_NAME, length = 128)
+    @Column(name = LOCAL_NAME, length = 120)
     private String localName;
 
     /**
index c3ccb4a..3d16f8e 100644 (file)
@@ -81,21 +81,21 @@ public class PfObjectFilterTest {
         doList.add(do5);
 
         DummyPfObjectFilter dof = new DummyPfObjectFilter();
-        assertFalse(dof.filterOnRegexp("Hello", "Goodbye"));
-        assertTrue(dof.filterOnRegexp("Hello", "Hello"));
+        assertFalse(dof.filterString("Hello", "Goodbye"));
+        assertTrue(dof.filterString("Hello", "Hello"));
 
         assertThatThrownBy(() -> {
-            dof.filterOnRegexp(null, null);
+            dof.filterString(null, null);
         }).hasMessage("value is marked @NonNull but is null");
 
         assertThatThrownBy(() -> {
-            dof.filterOnRegexp("hello", null);
-        }).hasMessage("regexp is marked @NonNull but is null");
-
-        assertThatThrownBy(() -> {
-            dof.filterOnRegexp(null, "hello");
+            dof.filterString(null, "hello");
         }).hasMessage("value is marked @NonNull but is null");
 
+        assertEquals(false, dof.filterString("Hello", "Goodbye"));
+        assertEquals(true, dof.filterString("Hello", "Hello"));
+        assertEquals(true, dof.filterString("Hello", null));
+
         List<DummyPfObject> latestVersionList = dof.latestVersionFilter(doList);
         assertEquals(3, latestVersionList.size());
         assertEquals("aaaaa", latestVersionList.get(0).getName());
@@ -104,5 +104,10 @@ public class PfObjectFilterTest {
         assertEquals("1.0.0", latestVersionList.get(1).getVersion());
         assertEquals("name1", latestVersionList.get(2).getName());
         assertEquals("0.1.2", latestVersionList.get(2).getVersion());
+
+        latestVersionList.remove(2);
+        latestVersionList.remove(1);
+        List<DummyPfObject> newestVersionList = dof.latestVersionFilter(latestVersionList);
+        assertEquals(latestVersionList, newestVersionList);
     }
 }
index aaf9ee4..029c76b 100644 (file)
             <artifactId>policy-models-tosca</artifactId>
             <version>${project.version}</version>
         </dependency>
-        <dependency>
-            <groupId>com.h2database</groupId>
-            <artifactId>h2</artifactId>
-            <scope>test</scope>
-        </dependency>
         <dependency>
             <groupId>org.mariadb.jdbc</groupId>
             <artifactId>mariadb-java-client</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
index 1eaa415..034374c 100644 (file)
 
 package org.onap.policy.models.pdp.concepts;
 
-import lombok.Getter;
+import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.NonNull;
-import lombok.Setter;
 import lombok.ToString;
 import org.onap.policy.models.pdp.enums.PdpHealthStatus;
 import org.onap.policy.models.pdp.enums.PdpState;
@@ -34,10 +33,9 @@ import org.onap.policy.models.pdp.enums.PdpState;
  *
  * @author Ram Krishna Verma (ram.krishna.verma@est.tech)
  */
-@Getter
-@Setter
 @ToString
 @NoArgsConstructor
+@Data
 public class Pdp {
 
     @NonNull
index 5965b72..3c07a9d 100644 (file)
@@ -46,7 +46,7 @@ public class PdpGroupFilter implements PfObjectFilter<PdpGroup> {
     // Regular expression
     private String name;
 
-    // Regular Expression, set to LATEST_VERRSION to get the latest version
+    // Regular Expression, set to to get the latest version
     private String version;
 
     private PdpState groupState;
@@ -67,9 +67,10 @@ public class PdpGroupFilter implements PfObjectFilter<PdpGroup> {
 
         // @formatter:off
         List<PdpGroup> returnList = originalList.stream()
-                .filter(p -> filterOnRegexp(p.getName(),    name))
-                .filter(p -> version.equals(LATEST_VERSION) || filterOnRegexp(p.getVersion(), version))
-                .filter(p -> ObjectUtils.compare(p.getPdpGroupState(), groupState) == 0)
+                .filter(p -> filterString(p.getName(), name))
+                .filter(p -> (version != null && LATEST_VERSION.equals(version))
+                        || filterString(p.getVersion(), version))
+                .filter(p -> groupState == null || ObjectUtils.compare(p.getPdpGroupState(), groupState) == 0)
                 .filter(p -> filterOnPdpType(p, pdpType))
                 .filter(p -> filterOnPolicyType(p, policyType))
                 .filter(p -> filterOnPolicy(p, policy))
index 4e58436..4054089 100644 (file)
@@ -25,10 +25,8 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
-import lombok.Getter;
+import lombok.Data;
 import lombok.NonNull;
-import lombok.Setter;
-import lombok.ToString;
 
 import org.onap.policy.models.base.PfUtils;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifier;
@@ -39,9 +37,7 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifi
  *
  * @author Ram Krishna Verma (ram.krishna.verma@est.tech)
  */
-@Getter
-@Setter
-@ToString
+@Data
 public class PdpSubGroup {
     private String pdpType;
     private List<ToscaPolicyTypeIdentifier> supportedPolicyTypes;
index 71f27c4..d0fc216 100644 (file)
@@ -29,11 +29,13 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 
+import javax.persistence.CascadeType;
 import javax.persistence.CollectionTable;
 import javax.persistence.Column;
 import javax.persistence.ElementCollection;
 import javax.persistence.EmbeddedId;
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
 import javax.persistence.Inheritance;
 import javax.persistence.InheritanceType;
 import javax.persistence.JoinColumn;
@@ -87,7 +89,7 @@ public class JpaPdpGroup extends PfConcept implements PfAuthorative<PdpGroup> {
     private Map<String, String> properties;
 
     // @formatter:off
-    @OneToMany
+    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
     @CollectionTable(joinColumns = {
             @JoinColumn(name = "pdpGroupParentKeyName",    referencedColumnName = "parentKeyName"),
             @JoinColumn(name = "pdpGroupParentKeyVersion", referencedColumnName = "parentKeyVersion"),
index d51cfc6..20e43f0 100644 (file)
@@ -28,19 +28,23 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
-import javax.persistence.CollectionTable;
+
+import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.ElementCollection;
 import javax.persistence.EmbeddedId;
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
 import javax.persistence.Inheritance;
 import javax.persistence.InheritanceType;
 import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
 import javax.persistence.OneToMany;
 import javax.persistence.Table;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NonNull;
+
 import org.onap.policy.common.utils.validation.Assertions;
 import org.onap.policy.common.utils.validation.ParameterValidationUtils;
 import org.onap.policy.models.base.PfAuthorative;
@@ -89,13 +93,16 @@ public class JpaPdpSubGroup extends PfConcept implements PfAuthorative<PdpSubGro
     @ElementCollection
     private Map<String, String> properties;
 
-    // @formatter:ofF
-    @OneToMany
-    @CollectionTable(
-            joinColumns = { @JoinColumn(name = "pdpSubGroupParentKeyName", referencedColumnName = "parentKeyName"),
-            @JoinColumn(name = "pdpSubGroupParentKeyVersion", referencedColumnName = "parentKeyVersion"),
-            @JoinColumn(name = "pdpSubGroupParentLocalName", referencedColumnName = "parentLocalName"),
-            @JoinColumn(name = "pdpSubGroupLocalName", referencedColumnName = "localName") })
+    // @formatter:off
+    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
+    @JoinTable (
+            joinColumns = {
+                @JoinColumn(name = "pdpParentKeyName",    referencedColumnName = "parentKeyName"),
+                @JoinColumn(name = "pdpParentKeyVersion", referencedColumnName = "parentKeyVersion"),
+                @JoinColumn(name = "pdpParentLocalName",  referencedColumnName = "parentLocalName"),
+                @JoinColumn(name = "pdpLocalName",        referencedColumnName = "localName")
+            }
+        )
     // formatter:on
     private List<JpaPdp> pdpInstances;
 
diff --git a/models-pdp/src/test/java/org/onap/policy/models/pdp/concepts/PdpGroupFilterTest.java b/models-pdp/src/test/java/org/onap/policy/models/pdp/concepts/PdpGroupFilterTest.java
new file mode 100644 (file)
index 0000000..61974dc
--- /dev/null
@@ -0,0 +1,108 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 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.pdp.concepts;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.common.utils.coder.StandardCoder;
+import org.onap.policy.common.utils.resources.ResourceUtils;
+
+/**
+ * Test of the {@link PdpGroupFilter} class.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+public class PdpGroupFilterTest {
+    private List<PdpGroup> pdpGroupList;
+
+    /**
+     * Set up a PDP group list for filtering.
+     *
+     * @throws CoderException on JSON decoding errors
+     */
+    @Before
+    public void setupPdpGroupList() throws CoderException {
+        String originalJson = ResourceUtils.getResourceAsString("testdata/PdpGroupsForFiltering.json");
+        PdpGroups pdpGroups = new StandardCoder().decode(originalJson, PdpGroups.class);
+        pdpGroupList = pdpGroups.getGroups();
+    }
+
+    @Test
+    public void testNullList() {
+        PdpGroupFilter filter = PdpGroupFilter.builder().build();
+
+        assertThatThrownBy(() -> {
+            filter.filter(null);
+        }).hasMessage("originalList is marked @NonNull but is null");
+    }
+
+    @Test
+    public void testFilterNothing() {
+        PdpGroupFilter filter = PdpGroupFilter.builder().build();
+
+        List<PdpGroup> filteredList = filter.filter(pdpGroupList);
+        assertTrue(filteredList.containsAll(pdpGroupList));
+    }
+
+    @Test
+    public void testFilterLatestVersion() {
+        PdpGroupFilter filter = PdpGroupFilter.builder().version(PdpGroupFilter.LATEST_VERSION).build();
+
+        List<PdpGroup> filteredList = filter.filter(pdpGroupList);
+        assertEquals(2, filteredList.size());
+        assertEquals("1.2.4", filteredList.get(0).getVersion());
+        assertEquals("1.2.3", filteredList.get(1).getVersion());
+    }
+
+    @Test
+    public void testFilterNameVersion() {
+        PdpGroupFilter filter = PdpGroupFilter.builder().name("PdpGroup0").build();
+        List<PdpGroup> filteredList = filter.filter(pdpGroupList);
+        assertEquals(3, filteredList.size());
+
+        filter = PdpGroupFilter.builder().name("PdpGroup1").build();
+        filteredList = filter.filter(pdpGroupList);
+        assertEquals(2, filteredList.size());
+
+        filter = PdpGroupFilter.builder().name("PdpGroup2").build();
+        filteredList = filter.filter(pdpGroupList);
+        assertEquals(0, filteredList.size());
+
+        filter = PdpGroupFilter.builder().version("1.2.3").build();
+        filteredList = filter.filter(pdpGroupList);
+        assertEquals(2, filteredList.size());
+
+        filter = PdpGroupFilter.builder().name("PdpGroup0").version("1.2.3").build();
+        filteredList = filter.filter(pdpGroupList);
+        assertEquals(1, filteredList.size());
+
+        filter = PdpGroupFilter.builder().name("PdpGroup1").version("1.2.9").build();
+        filteredList = filter.filter(pdpGroupList);
+        assertEquals(0, filteredList.size());
+    }
+}
index 4de1f2e..4698ece 100644 (file)
@@ -25,7 +25,9 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
 import org.junit.Test;
@@ -83,4 +85,27 @@ public class TestPdpGroup {
         group.setDescription("B");
         assertTrue(hash != group.hashCode());
     }
+
+    @Test
+    public void testCompareTo() {
+        PdpGroup pdpGroup0 = new PdpGroup();
+        pdpGroup0.setName("Name0");
+        pdpGroup0.setVersion("1.2.3");
+
+        PdpGroup pdpGroup1 = new PdpGroup();
+        pdpGroup1.setName("Name0");
+        pdpGroup1.setVersion("1.2.3");
+
+        assertEquals(0, pdpGroup0.compareTo(pdpGroup1));
+
+        PdpGroups pdpGroups = new PdpGroups();
+        pdpGroups.setGroups(new ArrayList<>());
+        pdpGroups.getGroups().add(pdpGroup0);
+        pdpGroups.getGroups().add(pdpGroup1);
+
+        List<Map<String, PdpGroup>> mapList = pdpGroups.toMapList();
+
+        assertEquals(1, mapList.size());
+        assertEquals(1, mapList.get(0).size());
+    }
 }
index 468f3d4..4012eaa 100644 (file)
@@ -24,10 +24,12 @@ package org.onap.policy.models.pdp.persistence.provider;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertTrue;
 
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.util.ArrayList;
+import java.util.List;
 
 import org.junit.After;
 import org.junit.Before;
@@ -38,8 +40,9 @@ import org.onap.policy.models.dao.DaoParameters;
 import org.onap.policy.models.dao.PfDao;
 import org.onap.policy.models.dao.PfDaoFactory;
 import org.onap.policy.models.dao.impl.DefaultPfDao;
+import org.onap.policy.models.pdp.concepts.Pdp;
+import org.onap.policy.models.pdp.concepts.PdpGroup;
 import org.onap.policy.models.pdp.concepts.PdpGroups;
-import org.onap.policy.models.pdp.persistence.concepts.JpaPdpGroup;
 import org.onap.policy.models.pdp.persistence.provider.PdpProvider;
 import org.onap.policy.models.tosca.simple.provider.SimpleToscaProvider;
 
@@ -91,7 +94,7 @@ public class PdpProviderTest {
     }
 
     @Test
-    public void testPoliciesGet() throws Exception {
+    public void testGroupsGet() throws Exception {
         assertThatThrownBy(() -> {
             new PdpProvider().getPdpGroups(null, null, null);
         }).hasMessage("dao is marked @NonNull but is null");
@@ -105,7 +108,6 @@ public class PdpProviderTest {
         }).hasMessage("dao is marked @NonNull but is null");
 
         String originalJson = ResourceUtils.getResourceAsString("testdata/PdpGroups0.json");
-
         PdpGroups pdpGroups0 = standardCoder.decode(originalJson, PdpGroups.class);
 
         PdpGroups createdPdpGroups0 = new PdpGroups();
@@ -122,7 +124,7 @@ public class PdpProviderTest {
     }
 
     @Test
-    public void testPolicyCreate() throws Exception {
+    public void testGroupsCreate() throws Exception {
         assertThatThrownBy(() -> {
             new PdpProvider().createPdpGroups(null, null);
         }).hasMessage("dao is marked @NonNull but is null");
@@ -136,7 +138,6 @@ public class PdpProviderTest {
         }).hasMessage("pdpGroups is marked @NonNull but is null");
 
         String originalJson = ResourceUtils.getResourceAsString("testdata/PdpGroups0.json");
-
         PdpGroups pdpGroups0 = standardCoder.decode(originalJson, PdpGroups.class);
 
         PdpGroups createdPdpGroups0 = new PdpGroups();
@@ -152,7 +153,7 @@ public class PdpProviderTest {
     }
 
     @Test
-    public void testPolicyCreateNoPdp() throws Exception {
+    public void testGroupsCreateNoPdp() throws Exception {
         String originalJson = ResourceUtils.getResourceAsString("testdata/PdpGroupsNoPDPs.json");
 
         PdpGroups pdpGroups0 = standardCoder.decode(originalJson, PdpGroups.class);
@@ -171,82 +172,82 @@ public class PdpProviderTest {
         String gotJson = standardCoder.encode(gotPdpGroups0);
         assertEquals(originalTweakedJson.replaceAll("\\s+", ""), gotJson.replaceAll("\\s+", ""));
     }
-    /*
-     * @Test public void testPolicyUpdate() throws Exception { try { new SimpleToscaProvider().updatePolicies(null,
-     * null); fail("test should throw an exception here"); } catch (Exception exc) {
-     * assertEquals("dao is marked @NonNull but is null", exc.getMessage()); }
-     *
-     * try { new SimpleToscaProvider().updatePolicies(null, new JpaToscaServiceTemplate());
-     * fail("test should throw an exception here"); } catch (Exception exc) {
-     * assertEquals("dao is marked @NonNull but is null", exc.getMessage()); }
-     *
-     * try { new SimpleToscaProvider().updatePolicies(pfDao, null); fail("test should throw an exception here"); } catch
-     * (Exception exc) { assertEquals("serviceTemplate is marked @NonNull but is null", exc.getMessage()); }
-     *
-     * ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
-     * ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
-     * ToscaServiceTemplate.class);
-     *
-     * JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
-     * originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
-     *
-     * assertNotNull(originalServiceTemplate); JpaToscaServiceTemplate updatedServiceTemplate = new
-     * SimpleToscaProvider().updatePolicies(pfDao, originalServiceTemplate);
-     *
-     * assertEquals(originalServiceTemplate, updatedServiceTemplate); }
-     *
-     * @Test public void testPoliciesDelete() throws Exception { try { new SimpleToscaProvider().deletePolicy(null,
-     * null); fail("test should throw an exception here"); } catch (Exception exc) {
-     * assertEquals("dao is marked @NonNull but is null", exc.getMessage()); }
-     *
-     * try { new SimpleToscaProvider().deletePolicy(null, new PfConceptKey());
-     * fail("test should throw an exception here"); } catch (Exception exc) {
-     * assertEquals("dao is marked @NonNull but is null", exc.getMessage()); }
-     *
-     * try { new SimpleToscaProvider().deletePolicy(pfDao, null); fail("test should throw an exception here"); } catch
-     * (Exception exc) { assertEquals("policyKey is marked @NonNull but is null", exc.getMessage()); }
-     *
-     * ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
-     * ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
-     * ToscaServiceTemplate.class);
-     *
-     * JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
-     * originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
-     *
-     * assertNotNull(originalServiceTemplate); JpaToscaServiceTemplate createdServiceTemplate = new
-     * SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
-     *
-     * assertEquals(originalServiceTemplate, createdServiceTemplate);
-     *
-     * PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
-     *
-     * JpaToscaServiceTemplate deletedServiceTemplate = new SimpleToscaProvider().deletePolicy(pfDao, new
-     * PfConceptKey(policyKey));
-     *
-     * assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
-     * deletedServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
-     *
-     * try { new SimpleToscaProvider().getPolicies(pfDao, new PfConceptKey(policyKey));
-     * fail("test should throw an exception here"); } catch (Exception exc) {
-     * assertEquals("policy not found: onap.restart.tca:1.0.0", exc.getMessage()); } }
-     *
-     * @Test public void testAssertPoliciesExist() throws PfModelException { JpaToscaServiceTemplate testServiceTemplate
-     * = new JpaToscaServiceTemplate();
-     *
-     * try { new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate);
-     * fail("test should throw an exception here"); } catch (Exception exc) {
-     * assertEquals("topology template not specified on service template", exc.getMessage()); }
-     *
-     * testServiceTemplate.setTopologyTemplate(new JpaToscaTopologyTemplate()); try { new
-     * SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate); fail("test should throw an exception here"); }
-     * catch (Exception exc) { assertEquals("no policies specified on topology template of service template",
-     * exc.getMessage()); }
-     *
-     * testServiceTemplate.getTopologyTemplate().setPolicies(new JpaToscaPolicies()); try { new
-     * SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate); fail("test should throw an exception here"); }
-     * catch (Exception exc) {
-     * assertEquals("list of policies specified on topology template of service template is empty", exc.getMessage()); }
-     *
-     * }
-     */
+
+    @Test
+    public void testGroupsUpdate() throws Exception {
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpGroups(null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpGroups(null, new ArrayList<>());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpGroups(pfDao, null);
+        }).hasMessage("pdpGroups is marked @NonNull but is null");
+
+        String originalJson = ResourceUtils.getResourceAsString("testdata/PdpGroups0.json");
+        PdpGroups pdpGroups0 = standardCoder.decode(originalJson, PdpGroups.class);
+
+        PdpGroups createdPdpGroups0 = new PdpGroups();
+        createdPdpGroups0.setGroups(new PdpProvider().createPdpGroups(pfDao, pdpGroups0.getGroups()));
+        String createdJson = standardCoder.encode(createdPdpGroups0);
+        assertEquals(originalJson.replaceAll("\\s+", ""), createdJson.replaceAll("\\s+", ""));
+
+        PdpGroups gotPdpGroups0 = new PdpGroups();
+        gotPdpGroups0.setGroups(new PdpProvider().getPdpGroups(pfDao, "PdpGroup0", "1.2.3"));
+
+        String gotJson = standardCoder.encode(gotPdpGroups0);
+        assertEquals(originalJson.replaceAll("\\s+", ""), gotJson.replaceAll("\\s+", ""));
+
+        String updateJson = ResourceUtils.getResourceAsString("testdata/PdpGroups0Update.json");
+        PdpGroups updatePdpGroups0 = standardCoder.decode(updateJson, PdpGroups.class);
+
+        PdpGroups updatedPdpGroups0 = new PdpGroups();
+        updatedPdpGroups0.setGroups(new PdpProvider().updatePdpGroups(pfDao, updatePdpGroups0.getGroups()));
+
+        List<Pdp> beforePdpInstances = updatePdpGroups0.getGroups().get(0).getPdpSubgroups().get(0).getPdpInstances();
+        List<Pdp> afterPdpInstances = updatedPdpGroups0.getGroups().get(0).getPdpSubgroups().get(0).getPdpInstances();
+        assertTrue(beforePdpInstances.containsAll(afterPdpInstances));
+    }
+
+    @Test
+    public void testPoliciesDelete() throws Exception {
+        assertThatThrownBy(() -> {
+            new PdpProvider().deletePdpGroup(null, null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().deletePdpGroup(null, null, "version");
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().deletePdpGroup(null, "name", "version");
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        String originalJson = ResourceUtils.getResourceAsString("testdata/PdpGroups0.json");
+        PdpGroups pdpGroups0 = standardCoder.decode(originalJson, PdpGroups.class);
+
+        PdpGroups createdPdpGroups0 = new PdpGroups();
+        createdPdpGroups0.setGroups(new PdpProvider().createPdpGroups(pfDao, pdpGroups0.getGroups()));
+        String createdJson = standardCoder.encode(createdPdpGroups0);
+        assertEquals(originalJson.replaceAll("\\s+", ""), createdJson.replaceAll("\\s+", ""));
+
+        PdpGroups gotPdpGroups0 = new PdpGroups();
+        gotPdpGroups0.setGroups(new PdpProvider().getPdpGroups(pfDao, "PdpGroup0", "1.2.3"));
+
+        String gotJson = standardCoder.encode(gotPdpGroups0);
+        assertEquals(originalJson.replaceAll("\\s+", ""), gotJson.replaceAll("\\s+", ""));
+
+        PdpGroup deletedPdpGroup = new PdpProvider().deletePdpGroup(pfDao, "PdpGroup0", "1.2.3");
+
+        assertEquals(createdPdpGroups0.getGroups().get(0), deletedPdpGroup);
+
+        assertEquals(0, new PdpProvider().getPdpGroups(pfDao, "PdpGroup0", "1.2.3").size());
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().deletePdpGroup(pfDao, "PdpGroup0", "1.2.3");
+        }).hasMessage("delete of PDP group \"PdpGroup0:1.2.3\" failed, PDP group does not exist");
+    }
 }
diff --git a/models-pdp/src/test/resources/testdata/PdpGroups0Update.json b/models-pdp/src/test/resources/testdata/PdpGroups0Update.json
new file mode 100644 (file)
index 0000000..a54ec53
--- /dev/null
@@ -0,0 +1,83 @@
+{
+    "groups": [
+        {
+            "name": "PdpGroup0",
+            "version": "1.2.3",
+            "description": "group description",
+            "pdpGroupState": "PASSIVE",
+            "properties": {
+                "groupProperty0": "Value of Group Property 0"
+            },
+            "pdpSubgroups": [
+                {
+                    "pdpType": "APEX",
+                    "supportedPolicyTypes": [
+                        {
+                            "name": "policy.type.0",
+                            "version": "1.2.3"
+                        }
+                    ],
+                    "policies": [
+                        {
+                            "name": "Policy0",
+                            "version": "4.5.6"
+                        }
+                    ],
+                    "currentInstanceCount": 123,
+                    "desiredInstanceCount": 456,
+                    "properties": {
+                        "subgroupProperty0": "Value of sub Group Property 0"
+                    },
+                    "pdpInstances": [
+                        {
+                            "instanceId": "apex-0",
+                            "pdpState": "ACTIVE",
+                            "healthy": "NOT_HEALTHY",
+                            "message": "message from PDP"
+                        },
+                        {
+                            "instanceId": "apex-1",
+                            "pdpState": "ACTIVE",
+                            "healthy": "NOT_HEALTHY",
+                            "message": "message from PDP"
+                        },
+                        {
+                            "instanceId": "apex-2",
+                            "pdpState": "ACTIVE",
+                            "healthy": "NOT_HEALTHY",
+                            "message": "message from PDP"
+                        }
+                    ]
+                },
+                {
+                    "pdpType": "Drools",
+                    "supportedPolicyTypes": [
+                        {
+                            "name": "policy.type.1",
+                            "version": "4.5.6"
+                        }
+                    ],
+                    "policies": [
+                        {
+                            "name": "Policy0",
+                            "version": "4.5.6"
+                        }
+                    ],
+                    "currentInstanceCount": 123,
+                    "desiredInstanceCount": 456,
+                    "properties": {
+                        "subgroupProperty0": "Value of sub Group Property 0"
+                    },
+                    "pdpInstances": [
+                        {
+                            "instanceId": "drools-0",
+                            "pdpState": "ACTIVE",
+                            "healthy": "NOT_HEALTHY",
+                            "message": "message from PDP"
+                        }
+                    ]
+                }
+            ]
+        }
+    ]
+}
\ No newline at end of file
diff --git a/models-pdp/src/test/resources/testdata/PdpGroupsForFiltering.json b/models-pdp/src/test/resources/testdata/PdpGroupsForFiltering.json
new file mode 100644 (file)
index 0000000..c62e1ea
--- /dev/null
@@ -0,0 +1,199 @@
+{
+    "groups": [
+        {
+            "name": "PdpGroup0",
+            "version": "1.2.3",
+            "description": "group description",
+            "pdpGroupState": "PASSIVE",
+            "properties": {
+                "groupProperty0": "Value of Group Property 0"
+            },
+            "pdpSubgroups": [
+                {
+                    "pdpType": "APEX",
+                    "supportedPolicyTypes": [
+                        {
+                            "name": "policy.type.0",
+                            "version": "1.2.3"
+                        }
+                    ],
+                    "policies": [
+                        {
+                            "name": "Policy0",
+                            "version": "4.5.6"
+                        }
+                    ],
+                    "currentInstanceCount": 123,
+                    "desiredInstanceCount": 456,
+                    "properties": {
+                        "subgroupProperty0": "Value of sub Group Property 0"
+                    },
+                    "pdpInstances": [
+                        {
+                            "instanceId": "apex-0",
+                            "pdpState": "ACTIVE",
+                            "healthy": "NOT_HEALTHY",
+                            "message": "message from PDP"
+                        }
+                    ]
+                }
+            ]
+        },
+        {
+            "name": "PdpGroup0",
+            "version": "1.2.4",
+            "description": "group description",
+            "pdpGroupState": "PASSIVE",
+            "properties": {
+                "groupProperty0": "Value of Group Property 0"
+            },
+            "pdpSubgroups": [
+                {
+                    "pdpType": "APEX",
+                    "supportedPolicyTypes": [
+                        {
+                            "name": "policy.type.0",
+                            "version": "1.2.3"
+                        }
+                    ],
+                    "policies": [
+                        {
+                            "name": "Policy0",
+                            "version": "4.5.6"
+                        }
+                    ],
+                    "currentInstanceCount": 123,
+                    "desiredInstanceCount": 456,
+                    "properties": {
+                        "subgroupProperty0": "Value of sub Group Property 0"
+                    },
+                    "pdpInstances": [
+                        {
+                            "instanceId": "apex-0",
+                            "pdpState": "ACTIVE",
+                            "healthy": "NOT_HEALTHY",
+                            "message": "message from PDP"
+                        }
+                    ]
+                }
+            ]
+        },
+        {
+            "name": "PdpGroup0",
+            "version": "1.2.1",
+            "description": "group description",
+            "pdpGroupState": "PASSIVE",
+            "properties": {
+                "groupProperty0": "Value of Group Property 0"
+            },
+            "pdpSubgroups": [
+                {
+                    "pdpType": "APEX",
+                    "supportedPolicyTypes": [
+                        {
+                            "name": "policy.type.0",
+                            "version": "1.2.3"
+                        }
+                    ],
+                    "policies": [
+                        {
+                            "name": "Policy0",
+                            "version": "4.5.6"
+                        }
+                    ],
+                    "currentInstanceCount": 123,
+                    "desiredInstanceCount": 456,
+                    "properties": {
+                        "subgroupProperty0": "Value of sub Group Property 0"
+                    },
+                    "pdpInstances": [
+                        {
+                            "instanceId": "apex-0",
+                            "pdpState": "ACTIVE",
+                            "healthy": "NOT_HEALTHY",
+                            "message": "message from PDP"
+                        }
+                    ]
+                }
+            ]
+        },
+        {
+            "name": "PdpGroup1",
+            "version": "1.2.1",
+            "description": "group description",
+            "pdpGroupState": "PASSIVE",
+            "properties": {
+                "groupProperty0": "Value of Group Property 0"
+            },
+            "pdpSubgroups": [
+                {
+                    "pdpType": "APEX",
+                    "supportedPolicyTypes": [
+                        {
+                            "name": "policy.type.0",
+                            "version": "1.2.3"
+                        }
+                    ],
+                    "policies": [
+                        {
+                            "name": "Policy0",
+                            "version": "4.5.6"
+                        }
+                    ],
+                    "currentInstanceCount": 123,
+                    "desiredInstanceCount": 456,
+                    "properties": {
+                        "subgroupProperty0": "Value of sub Group Property 0"
+                    },
+                    "pdpInstances": [
+                        {
+                            "instanceId": "apex-0",
+                            "pdpState": "ACTIVE",
+                            "healthy": "NOT_HEALTHY",
+                            "message": "message from PDP"
+                        }
+                    ]
+                }
+            ]
+        },
+        {
+            "name": "PdpGroup1",
+            "version": "1.2.3",
+            "description": "group description",
+            "pdpGroupState": "PASSIVE",
+            "properties": {
+                "groupProperty0": "Value of Group Property 0"
+            },
+            "pdpSubgroups": [
+                {
+                    "pdpType": "APEX",
+                    "supportedPolicyTypes": [
+                        {
+                            "name": "policy.type.0",
+                            "version": "1.2.3"
+                        }
+                    ],
+                    "policies": [
+                        {
+                            "name": "Policy0",
+                            "version": "4.5.6"
+                        }
+                    ],
+                    "currentInstanceCount": 123,
+                    "desiredInstanceCount": 456,
+                    "properties": {
+                        "subgroupProperty0": "Value of sub Group Property 0"
+                    },
+                    "pdpInstances": [
+                        {
+                            "instanceId": "apex-0",
+                            "pdpState": "ACTIVE",
+                            "healthy": "NOT_HEALTHY",
+                            "message": "message from PDP"
+                        }
+                    ]
+                }
+            ]
+        }
+    ]
+}
\ No newline at end of file
index b4d1b3e..102b1fe 100644 (file)
@@ -57,10 +57,11 @@ public class ToscaPolicyFilter implements PfObjectFilter<ToscaPolicy> {
 
         // @formatter:off
         List<ToscaPolicy> returnList = originalList.stream()
-                .filter(p -> filterOnRegexp(p.getName(),        name))
-                .filter(p -> version.equals(LATEST_VERSION) || filterOnRegexp(p.getVersion(), version))
-                .filter(p -> filterOnRegexp(p.getType(),        type))
-                .filter(p -> filterOnRegexp(p.getTypeVersion(), typeVersion))
+                .filter(p -> filterString(p.getName(),        name))
+                .filter(p -> (version != null && LATEST_VERSION.equals(version))
+                        || filterString(p.getVersion(), version))
+                .filter(p -> filterString(p.getType(),        type))
+                .filter(p -> filterString(p.getTypeVersion(), typeVersion))
                 .collect(Collectors.toList());
         // @formatter:off
 
index 0411795..7d6fbac 100644 (file)
@@ -51,8 +51,9 @@ public class ToscaPolicyTypeFilter implements PfObjectFilter<ToscaPolicyType> {
 
         // @formatter:off
         List<ToscaPolicyType> returnList = originalList.stream()
-                .filter(p -> filterOnRegexp(p.getName(),    name))
-                .filter(p -> version.equals(LATEST_VERSION) || filterOnRegexp(p.getVersion(), version))
+                .filter(p -> filterString(p.getName(), name))
+                .filter(p -> (version != null && LATEST_VERSION.equals(version))
+                        || filterString(p.getVersion(), version))
                 .collect(Collectors.toList());
         // @formatter:off
 
index 4ddcd60..b6c5d3b 100644 (file)
@@ -44,6 +44,10 @@ import org.slf4j.LoggerFactory;
  */
 public class LegacyOperationalPolicyMapper
         implements JpaToscaServiceTemplateMapper<LegacyOperationalPolicy, LegacyOperationalPolicy> {
+
+    // Property name for the operational policy content
+    private static final String CONTENT_PROPERTY = "content";
+
     private static final Logger LOGGER = LoggerFactory.getLogger(LegacyOperationalPolicyMapper.class);
 
     private static final PfConceptKey LEGACY_OPERATIONAL_TYPE =
@@ -64,7 +68,7 @@ public class LegacyOperationalPolicyMapper
 
         final Map<String, String> propertyMap = new HashMap<>();
         toscaPolicy.setProperties(propertyMap);
-        toscaPolicy.getProperties().put("Content", legacyOperationalPolicy.getContent());
+        toscaPolicy.getProperties().put(CONTENT_PROPERTY, legacyOperationalPolicy.getContent());
 
         final JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
         serviceTemplate.setToscaDefinitionsVersion("tosca_simple_yaml_1_0");
@@ -101,7 +105,7 @@ public class LegacyOperationalPolicyMapper
             throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage);
         }
 
-        final String content = toscaPolicy.getProperties().get("Content");
+        final String content = toscaPolicy.getProperties().get(CONTENT_PROPERTY);
         if (toscaPolicy.getProperties() == null) {
             String errorMessage = "property \"Content\" not defined on TOSCA policy";
             LOGGER.warn(errorMessage);