diff options
8 files changed, 477 insertions, 22 deletions
diff --git a/BRMSGateway/pom.xml b/BRMSGateway/pom.xml index b398f373d..6bd955741 100644 --- a/BRMSGateway/pom.xml +++ b/BRMSGateway/pom.xml @@ -41,6 +41,12 @@ </exclusions> </dependency> <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.11</version> + <scope>test</scope> + </dependency> + <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-model</artifactId> <version>2.2.1</version> diff --git a/BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSPush.java b/BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSPush.java index b09a3d8c8..c923c3c34 100644 --- a/BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSPush.java +++ b/BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSPush.java @@ -137,6 +137,9 @@ public class BRMSPush { private boolean syncFlag = false; public BRMSPush(String propertiesFile, BackUpHandler handler) throws PolicyException { + if(propertiesFile==null || handler==null){ + throw new PolicyException("Error no propertiesFile or handler"); + } Properties config = new Properties(); Path file = Paths.get(propertiesFile); if (Files.notExists(file)) { @@ -185,7 +188,9 @@ public class BRMSPush { } catch (Exception e) { LOGGER.error("Error starting BackUpMonitor: " + e); } - config.setProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, "META-INF/persistenceBRMS.xml"); + if(!config.containsKey(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML)){ + config.setProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, "META-INF/persistenceBRMS.xml"); + } EntityManagerFactory emf = Persistence.createEntityManagerFactory("BRMSGW", config); em = emf.createEntityManager(); defaultName = config.getProperty("defaultName"); @@ -1014,6 +1019,10 @@ public class BRMSPush { private void readGroups(Properties config) throws PolicyException { String[] groupNames = null; + if (!config.containsKey("groupNames") || config.getProperty("groupNames")==null){ + throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE + + "groupNames property is missing or empty from the property file "); + } if (config.getProperty("groupNames").contains(",")) { groupNames = config.getProperty("groupNames").replaceAll(" ", "").split(","); } else { diff --git a/BRMSGateway/src/test/java/org/onap/brmsgw/test/BRMSPushTest.java b/BRMSGateway/src/test/java/org/onap/brmsgw/test/BRMSPushTest.java new file mode 100644 index 000000000..aa2574401 --- /dev/null +++ b/BRMSGateway/src/test/java/org/onap/brmsgw/test/BRMSPushTest.java @@ -0,0 +1,234 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP Policy Engine + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.brmsgw.test; + +import static org.junit.Assert.assertNotNull; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.LinkedList; +import java.util.List; +import java.util.Properties; + +import org.junit.Test; +import org.onap.policy.api.PolicyException; +import org.onap.policy.brmsInterface.BRMSHandler; + +public class BRMSPushTest { + + private final String VALIDFILE = "src/test/resources/config.properties"; + private final String INVALIDFILE = "src/test/resources/failure.properties"; + + @Test (expected = PolicyException.class) + public void bRMSHandlerFailTest() throws PolicyException { + new BRMSHandler(null); + } + + @Test (expected = PolicyException.class) + public void bRMSHandlerFailTest1() throws PolicyException { + new BRMSHandler("src/test/resources/filenotexists.txt"); + } + + @Test (expected = PolicyException.class) + public void bRMSHandlerFailTest2() throws PolicyException { + PropertyChange prop = new PropertyChange(); + prop.key = "defaultName"; + prop.remove = true; + List<PropertyChange> props = new LinkedList<>(); + props.add(prop); + setFailureProperties(props); + new BRMSHandler(INVALIDFILE); + } + + @Test (expected = PolicyException.class) + public void bRMSHandlerFailTest3() throws PolicyException { + PropertyChange prop = new PropertyChange(); + prop.key = "repositoryID"; + prop.remove = true; + List<PropertyChange> props = new LinkedList<>(); + props.add(prop); + prop = new PropertyChange(); + prop.key = "RESOURCE_NAME"; + prop.remove = true; + props.add(prop); + setFailureProperties(props); + new BRMSHandler(INVALIDFILE); + } + + @Test (expected = PolicyException.class) + public void bRMSHandlerFailTest4() throws PolicyException { + PropertyChange prop = new PropertyChange(); + prop.key = "repositoryURL"; + prop.remove = true; + List<PropertyChange> props = new LinkedList<>(); + props.add(prop); + setFailureProperties(props); + new BRMSHandler(INVALIDFILE); + } + + @Test (expected = PolicyException.class) + public void bRMSHandlerFailTest5() throws PolicyException { + PropertyChange prop = new PropertyChange(); + prop.key = "repositoryName"; + prop.remove = true; + List<PropertyChange> props = new LinkedList<>(); + props.add(prop); + setFailureProperties(props); + new BRMSHandler(INVALIDFILE); + } + + @Test (expected = PolicyException.class) + public void bRMSHandlerFailTest6() throws PolicyException { + PropertyChange prop = new PropertyChange(); + prop.key = "repositoryURL"; + prop.value = "http://nexus:8081/nexus/content/repositories/releases, http://nexus:8081/nexus/content/repositories/releases"; + prop.remove = false; + List<PropertyChange> props = new LinkedList<>(); + props.add(prop); + prop = new PropertyChange(); + prop.key = "repositoryUsername"; + prop.remove = true; + props.add(prop); + setFailureProperties(props); + new BRMSHandler(INVALIDFILE); + } + + @Test (expected = PolicyException.class) + public void bRMSHandlerFailTest7() throws PolicyException { + PropertyChange prop = new PropertyChange(); + prop.key = "repositoryPassword"; + prop.remove = true; + List<PropertyChange> props = new LinkedList<>(); + props.add(prop); + setFailureProperties(props); + new BRMSHandler(INVALIDFILE); + } + + @Test (expected = PolicyException.class) + public void bRMSHandlerFailTest8() throws PolicyException { + PropertyChange prop = new PropertyChange(); + prop.key = "policyKeyID"; + prop.remove = true; + List<PropertyChange> props = new LinkedList<>(); + props.add(prop); + setFailureProperties(props); + new BRMSHandler(INVALIDFILE); + } + + @Test (expected = PolicyException.class) + public void bRMSHandlerFailTest9() throws PolicyException { + PropertyChange prop = new PropertyChange(); + prop.key = "sync"; + prop.value = "true"; + prop.remove = false; + List<PropertyChange> props = new LinkedList<>(); + props.add(prop); + prop = new PropertyChange(); + prop.key = "brms.dependency.version"; + prop.remove = true; + props.add(prop); + prop = new PropertyChange(); + prop.key = "groupNames"; + prop.remove = true; + props.add(prop); + setFailureProperties(props); + new BRMSHandler(INVALIDFILE); + } + + @Test (expected = PolicyException.class) + public void bRMSHandlerFailTest10() throws PolicyException { + PropertyChange prop = new PropertyChange(); + prop.key = "groupNames"; + prop.value = ""; + prop.remove = false; + List<PropertyChange> props = new LinkedList<>(); + props.add(prop); + setFailureProperties(props); + new BRMSHandler(INVALIDFILE); + } + + @Test (expected = PolicyException.class) + public void bRMSHandlerFailTest11() throws PolicyException { + PropertyChange prop = new PropertyChange(); + prop.key = "default.groupID"; + prop.remove = true; + List<PropertyChange> props = new LinkedList<>(); + props.add(prop); + setFailureProperties(props); + new BRMSHandler(INVALIDFILE); + } + + @Test (expected = PolicyException.class) + public void bRMSHandlerFailTest12() throws PolicyException { + PropertyChange prop = new PropertyChange(); + prop.key = "default.artifactID"; + prop.remove = true; + List<PropertyChange> props = new LinkedList<>(); + props.add(prop); + setFailureProperties(props); + new BRMSHandler(INVALIDFILE); + } + + @Test (expected = PolicyException.class) + public void bRMSHandlerFailTest13() throws PolicyException { + PropertyChange prop = new PropertyChange(); + prop.key = "NOTIFICATION_TYPE"; + prop.value = "dmaap"; + prop.remove = false; + List<PropertyChange> props = new LinkedList<>(); + props.add(prop); + prop = new PropertyChange(); + prop.key = "NOTIFICATION_SERVERS"; + prop.remove = true; + props.add(prop); + setFailureProperties(props); + new BRMSHandler(INVALIDFILE); + } + + @Test + public void BRMSHandlerTest() throws PolicyException { + assertNotNull(new BRMSHandler(VALIDFILE)); + } + + private void setFailureProperties(List<PropertyChange> properties) throws PolicyException { + Properties validProp = new Properties(); + try { + validProp.load(new FileInputStream(VALIDFILE)); + for (PropertyChange prop: properties) { + if(prop.remove) { + validProp.remove(prop.key); + }else { + validProp.setProperty(prop.key, prop.value); + } + } + validProp.store(new FileOutputStream(INVALIDFILE), null); + } catch (IOException e) { + throw new PolicyException(e); + } + } + + class PropertyChange { + public String key = null; + public String value = null; + public Boolean remove = false; + } +} diff --git a/BRMSGateway/src/test/resources/META-INF/drop.ddl b/BRMSGateway/src/test/resources/META-INF/drop.ddl new file mode 100644 index 000000000..a46848df2 --- /dev/null +++ b/BRMSGateway/src/test/resources/META-INF/drop.ddl @@ -0,0 +1,2 @@ +DROP TABLE IF EXISTS brmsgroup_info +DROP TABLE IF EXISTS brmsgroup_policy
\ No newline at end of file diff --git a/BRMSGateway/src/test/resources/META-INF/persistenceBRMStest.xml b/BRMSGateway/src/test/resources/META-INF/persistenceBRMStest.xml new file mode 100644 index 000000000..f757aca86 --- /dev/null +++ b/BRMSGateway/src/test/resources/META-INF/persistenceBRMStest.xml @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ============LICENSE_START======================================================= + PolicyEngineUtils + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + 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. + ============LICENSE_END========================================================= + --> + +<persistence version="2.1" + xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> + <persistence-unit name="BRMSGW" transaction-type="RESOURCE_LOCAL"> + <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> + <class>org.onap.policy.brmsInterface.jpa.BRMSGroupInfo</class> + <class>org.onap.policy.brmsInterface.jpa.BRMSPolicyInfo</class> + <property name="javax.persistence.schema-generation.scripts.action" + value="drop-and-create" /> + <property name="javax.persistence.schema-generation.scripts.create-target" + value="./src/test/resources/META-INF/generatedCreate.ddl" /> + <property name="javax.persistence.schema-generation.scripts.drop-target" + value="./src/test/resources/META-INF/generatedDrop.ddl" /> + <property name="javax.persistence.schema-generation.database.action" + value="drop-and-create" /> + <property name="javax.persistence.schema-generation.create-source" + value="metadata-then-script" /> + <property name="javax.persistence.schema-generation.drop-source" + value="script" /> + <property name="javax.persistence.schema-generation.drop-script-source" + value="META-INF/drop.ddl" /> + </persistence-unit> +</persistence>
\ No newline at end of file diff --git a/BRMSGateway/src/test/resources/config.properties b/BRMSGateway/src/test/resources/config.properties new file mode 100644 index 000000000..4f9e01305 --- /dev/null +++ b/BRMSGateway/src/test/resources/config.properties @@ -0,0 +1,86 @@ +### +# ============LICENSE_START======================================================= +# ONAP Policy Engine +# ================================================================================ +# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# 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. +# ============LICENSE_END========================================================= +### + +PDP_URL2 = https://localhost:8082/pdp/ , testpdp, alpha456 +PAP_URL = http://localhost:8070/pap/ , testpap, alpha123 + +#Notification Properties... type can be either websocket, ueb, or dmaap +NOTIFICATION_TYPE=websocket +NOTIFICATION_SERVERS= +NOTIFICATION_TOPIC=PDPD-CONFIGURATION +NOTIFICATION_DELAY= +UEB_API_KEY= +UEB_API_SECRET= +CLIENT_ID= +CLIENT_KEY= + +# BRMS Properties. +## defaultName is the default group name to which the rule gets pushed if no artifactID is specified. +defaultName = default +## repositoryID +repositoryID = releases +## reposiroryName +repositoryName = Releases +## repositoryURL +repositoryURL = http://nexus:8081/nexus/content/repositories/releases +## repositoryUsername & Password +repositoryUsername=admin +repositoryPassword=admin123 +## policyKeyID the value of Policy Key whose value will be the group Name. +policyKeyID = controller + +## GroupNames can be comma separated values. +groupNames = default, vFW , vDNS +default.groupID = org.onap.policy-engine +default.artifactID = drlPDPGroup +vFW.groupID= org.onap.policy-engine.drools.vFW +vFW.artifactID= policy-vFW-rules +vDNS.groupID= org.onap.policy-engine.drools.vDNS +vDNS.artifactID= policy-vDNS-rules + +#Integrity Monitor values +#database driver for Integrity Monitor +javax.persistence.jdbc.driver=org.h2.Driver +#database URL for Integrity Monitor +javax.persistence.jdbc.url=jdbc:h2:file:./sql/xacmlTest +#database username for Integrity Monitor +javax.persistence.jdbc.user=sa +#database password for Integrity Monitor +javax.persistence.jdbc.password= +#persistence xml +eclipselink.persistencexml=META-INF/persistenceBRMStest.xml +#resource name +RESOURCE_NAME=site_1.brmsgw_1 +#***Properties for IntegrityMonitor integration defined in IntegrityMonitorProperties.java*** +site_name=site_1 +node_type=brms_gateway +fp_monitor_interval=30 +failed_counter_threshold=3 +test_trans_interval=20 +write_fpc_interval=5 +max_fpc_update_interval=60 +test_via_jmx=false +ping_interval=30000 +# +# +# +brms.dependency.version=1.1.0-SNAPSHOT + +ENVIRONMENT = DEVL diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/std/NotificationStore.java b/PolicyEngineUtils/src/main/java/org/onap/policy/std/NotificationStore.java index 8a401c4cc..259a70d37 100644 --- a/PolicyEngineUtils/src/main/java/org/onap/policy/std/NotificationStore.java +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/std/NotificationStore.java @@ -181,6 +181,7 @@ public class NotificationStore { sUPolicy.setMatches(uPolicy.getMatches()); sUPolicy.setPolicyName(uPolicy.getPolicyName()); sUPolicy.setVersionNo(uPolicy.getVersionNo()); + sUPolicy.setUpdateType(uPolicy.getUpdateType()); updatedPolicies.add(sUPolicy); } @@ -211,6 +212,7 @@ public class NotificationStore { sUPolicy.setMatches(newUpdatedPolicy.getMatches()); sUPolicy.setPolicyName(newUpdatedPolicy.getPolicyName()); sUPolicy.setVersionNo(newUpdatedPolicy.getVersionNo()); + sUPolicy.setUpdateType(newUpdatedPolicy.getUpdateType()); updatedPolicies.add(sUPolicy); } } diff --git a/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/NotificationStoreTest.java b/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/NotificationStoreTest.java index 8ec646a0f..7bae4239d 100644 --- a/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/NotificationStoreTest.java +++ b/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/NotificationStoreTest.java @@ -21,8 +21,8 @@ package org.onap.policy.utils.test; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -35,53 +35,124 @@ import org.onap.policy.std.NotificationStore; import org.onap.policy.std.StdLoadedPolicy; import org.onap.policy.std.StdPDPNotification; import org.onap.policy.std.StdRemovedPolicy; +import org.onap.policy.utils.PolicyUtils; public class NotificationStoreTest { @Test - public void notificationTest(){ + public void notificationTest() throws IOException{ + // Notification Delta test first. + NotificationStore.recordNotification(new StdPDPNotification()); + assertEquals("{\"removedPolicies\":null,\"loadedPolicies\":null,\"notificationType\":null}", PolicyUtils.objectToJsonString(NotificationStore.getDeltaNotification(new StdPDPNotification()))); + // Initialize test StdPDPNotification notification = new StdPDPNotification(); - notification.setNotificationType(NotificationType.UPDATE); + notification.setNotificationType(NotificationType.BOTH); List<StdLoadedPolicy> loadedPolicies = new ArrayList<>(); StdLoadedPolicy loadedPolicy = new StdLoadedPolicy(); loadedPolicy.setPolicyName("com.testing"); - loadedPolicy.setUpdateType(UpdateType.NEW); - loadedPolicy.setVersionNo("1"); + loadedPolicy.setUpdateType(UpdateType.UPDATE); + loadedPolicy.setVersionNo("2"); Map<String, String> matches = new HashMap<>(); matches.put("test", "test"); loadedPolicy.setMatches(matches); loadedPolicies.add(loadedPolicy); notification.setLoadedPolicies(loadedPolicies); + List<StdRemovedPolicy> removedPolicies = new ArrayList<>(); + StdRemovedPolicy removedPolicy = new StdRemovedPolicy(); + removedPolicy.setPolicyName("com.testing"); + removedPolicy.setVersionNo("1"); + removedPolicies.add(removedPolicy); + notification.setRemovedPolicies(removedPolicies); NotificationStore.recordNotification(notification); - assertEquals(notification, NotificationStore.getNotificationRecord()); + assertEquals("{\"removedPolicies\":[{\"policyName\":\"com.testing\",\"versionNo\":\"1\"}],\"loadedPolicies\":[{\"policyName\":\"com.testing\",\"versionNo\":\"2\",\"matches\":{\"test\":\"test\"},\"updateType\":\"UPDATE\"}],\"notificationType\":\"BOTH\"}", PolicyUtils.objectToJsonString(NotificationStore.getNotificationRecord())); // Add new Notifications. notification = new StdPDPNotification(); notification.setNotificationType(NotificationType.BOTH); loadedPolicies = new ArrayList<>(); loadedPolicy = new StdLoadedPolicy(); - loadedPolicy.setPolicyName("com.testing"); - loadedPolicy.setUpdateType(UpdateType.UPDATE); - loadedPolicy.setVersionNo("2"); + loadedPolicy.setPolicyName("com.test.3.xml"); + loadedPolicy.setUpdateType(UpdateType.NEW); + loadedPolicy.setVersionNo("3"); matches = new HashMap<>(); matches.put("test", "test"); loadedPolicy.setMatches(matches); loadedPolicies.add(loadedPolicy); notification.setLoadedPolicies(loadedPolicies); - List<StdRemovedPolicy> removedPolicies = new ArrayList<>(); - StdRemovedPolicy removedPolicy = new StdRemovedPolicy(); - removedPolicy.setPolicyName("com.testing"); - removedPolicy.setVersionNo("1"); + removedPolicies = new ArrayList<>(); + removedPolicy = new StdRemovedPolicy(); + removedPolicy.setPolicyName("com.testing.2.xml"); + removedPolicy.setVersionNo("2"); + removedPolicies.add(removedPolicy); notification.setRemovedPolicies(removedPolicies); NotificationStore.recordNotification(notification); - assertNotNull(NotificationStore.getNotificationRecord()); - // Add new Notifications. + StdPDPNotification check = NotificationStore.getDeltaNotification(PolicyUtils.jsonStringToObject("{\"removedPolicies\":[{\"policyName\":\"com.testing\",\"versionNo\":\"1\"},{\"policyName\":\"com.testing\",\"versionNo\":\"2\"}],\"loadedPolicies\":[{\"policyName\":\"com.test\",\"versionNo\":\"3\",\"matches\":{\"test\":\"test\"},\"updateType\":\"NEW\"}],\"notificationType\":\"BOTH\"}", StdPDPNotification.class)); + assertEquals("{\"removedPolicies\":[],\"loadedPolicies\":[],\"notificationType\":null}", PolicyUtils.objectToJsonString(check)); + // Remove Notifications. + notification = new StdPDPNotification(); + notification.setNotificationType(NotificationType.REMOVE); + removedPolicies = new ArrayList<>(); + removedPolicy = new StdRemovedPolicy(); + removedPolicy.setPolicyName("com.test.3.xml"); + removedPolicy.setVersionNo("3"); + removedPolicies.add(removedPolicy); + notification.setRemovedPolicies(removedPolicies); + NotificationStore.recordNotification(notification); + check = NotificationStore.getDeltaNotification(PolicyUtils.jsonStringToObject("{\"removedPolicies\":[{\"policyName\":\"com.test\",\"versionNo\":\"3\"},{\"policyName\":\"com.testing\",\"versionNo\":\"1\"},{\"policyName\":\"com.testing\",\"versionNo\":\"2\"}],\"loadedPolicies\":[],\"notificationType\":\"REMOVE\"}", StdPDPNotification.class)); + assertEquals("{\"removedPolicies\":[],\"loadedPolicies\":[],\"notificationType\":null}", PolicyUtils.objectToJsonString(check)); + // Remove on remove duplicate Notifications. + notification = new StdPDPNotification(); + notification.setNotificationType(NotificationType.REMOVE); + removedPolicies = new ArrayList<>(); + removedPolicy = new StdRemovedPolicy(); + removedPolicy.setPolicyName("com.test.3.xml"); + removedPolicy.setVersionNo("3"); + removedPolicies.add(removedPolicy); + notification.setRemovedPolicies(removedPolicies); + NotificationStore.recordNotification(notification); + check = NotificationStore.getDeltaNotification(PolicyUtils.jsonStringToObject("{\"removedPolicies\":[{\"policyName\":\"com.test\",\"versionNo\":\"3\"},{\"policyName\":\"com.testing\",\"versionNo\":\"1\"},{\"policyName\":\"com.testing\",\"versionNo\":\"2\"}],\"loadedPolicies\":[],\"notificationType\":\"REMOVE\"}", StdPDPNotification.class)); + assertEquals("{\"removedPolicies\":[],\"loadedPolicies\":[],\"notificationType\":null}", PolicyUtils.objectToJsonString(check)); + // Update Notification + notification = new StdPDPNotification(); + notification.setNotificationType(NotificationType.UPDATE); + loadedPolicies = new ArrayList<>(); + loadedPolicy = new StdLoadedPolicy(); + loadedPolicy.setPolicyName("com.test.3.xml"); + loadedPolicy.setUpdateType(UpdateType.NEW); + loadedPolicy.setVersionNo("3"); + matches = new HashMap<>(); + matches.put("test", "test"); + loadedPolicy.setMatches(matches); + loadedPolicies.add(loadedPolicy); + notification.setLoadedPolicies(loadedPolicies); + NotificationStore.recordNotification(notification); + check = NotificationStore.getDeltaNotification(PolicyUtils.jsonStringToObject("{\"removedPolicies\":[{\"policyName\":\"com.testing\",\"versionNo\":\"1\"},{\"policyName\":\"com.testing\",\"versionNo\":\"2\"}],\"loadedPolicies\":[{\"policyName\":\"com.test\",\"versionNo\":\"3\",\"matches\":{\"test\":\"test\"},\"updateType\":\"NEW\"}],\"notificationType\":\"BOTH\"}", StdPDPNotification.class)); + assertEquals("{\"removedPolicies\":[],\"loadedPolicies\":[],\"notificationType\":null}", PolicyUtils.objectToJsonString(check)); + // Update on update duplicate Notification + notification = new StdPDPNotification(); + notification.setNotificationType(NotificationType.UPDATE); + loadedPolicies = new ArrayList<>(); + loadedPolicy = new StdLoadedPolicy(); + loadedPolicy.setPolicyName("com.test.3.xml"); + loadedPolicy.setUpdateType(UpdateType.NEW); + loadedPolicy.setVersionNo("3"); + matches = new HashMap<>(); + matches.put("test", "test"); + loadedPolicy.setMatches(matches); + loadedPolicies.add(loadedPolicy); + notification.setLoadedPolicies(loadedPolicies); + NotificationStore.recordNotification(notification); + check = NotificationStore.getDeltaNotification(PolicyUtils.jsonStringToObject("{\"removedPolicies\":[{\"policyName\":\"com.testing\",\"versionNo\":\"1\"},{\"policyName\":\"com.testing\",\"versionNo\":\"2\"}],\"loadedPolicies\":[{\"policyName\":\"com.test\",\"versionNo\":\"3\",\"matches\":{\"test\":\"test\"},\"updateType\":\"NEW\"}],\"notificationType\":\"BOTH\"}", StdPDPNotification.class)); + assertEquals("{\"removedPolicies\":[],\"loadedPolicies\":[],\"notificationType\":null}", PolicyUtils.objectToJsonString(check)); + // + // Notification Delta Tests + // notification = new StdPDPNotification(); notification.setNotificationType(NotificationType.BOTH); loadedPolicies = new ArrayList<>(); loadedPolicy = new StdLoadedPolicy(); - loadedPolicy.setPolicyName("com.test.xml"); + loadedPolicy.setPolicyName("com.testing"); loadedPolicy.setUpdateType(UpdateType.NEW); - loadedPolicy.setVersionNo("2"); + loadedPolicy.setVersionNo("3"); matches = new HashMap<>(); matches.put("test", "test"); loadedPolicy.setMatches(matches); @@ -89,11 +160,12 @@ public class NotificationStoreTest { notification.setLoadedPolicies(loadedPolicies); removedPolicies = new ArrayList<>(); removedPolicy = new StdRemovedPolicy(); - removedPolicy.setPolicyName("com.testing.xml"); - removedPolicy.setVersionNo("2"); + removedPolicy.setPolicyName("com.test.3.xml"); + removedPolicy.setVersionNo("3"); + removedPolicies.add(removedPolicy); notification.setRemovedPolicies(removedPolicies); - NotificationStore.recordNotification(notification); - assertNotNull(NotificationStore.getNotificationRecord()); + check = NotificationStore.getDeltaNotification(notification); + assertEquals("{\"removedPolicies\":[{\"policyName\":\"com.test\",\"versionNo\":\"3\"}],\"loadedPolicies\":[{\"policyName\":\"com.testing\",\"versionNo\":\"3\",\"matches\":{\"test\":\"test\"},\"updateType\":\"NEW\"}],\"notificationType\":\"BOTH\"}", PolicyUtils.objectToJsonString(check)); } } |