summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--controlloop/common/guard/pom.xml18
-rw-r--r--controlloop/common/guard/src/main/java/org/onap/policy/guard/PIPEngineGetHistory.java8
-rw-r--r--controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlHelper.java2
-rw-r--r--controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardYamlToXacml.java2
-rw-r--r--controlloop/common/guard/src/main/java/org/onap/policy/guard/Util.java5
-rw-r--r--controlloop/common/guard/src/test/java/org/onap/policy/guard/CallGuardTaskTest.java61
-rw-r--r--controlloop/common/guard/src/test/java/org/onap/policy/guard/PIPEngineGetHistoryTest.java168
-rw-r--r--controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardTest.java66
-rw-r--r--controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardXacmlHelperTest.java101
-rw-r--r--controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardYamlToXacmlTest.java111
-rw-r--r--controlloop/common/guard/src/test/resources/META-INF/persistence.xml22
-rw-r--r--controlloop/common/simulators/src/main/java/org/onap/policy/simulators/GuardSimulatorJaxRs.java9
13 files changed, 559 insertions, 18 deletions
diff --git a/.gitignore b/.gitignore
index 24ec48485..d2e6a3b87 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,7 @@ target
.metadata/
/bin/
controlloop/templates/template.demo/src/test/resources/xacml/autogenerated_*.xml
+
+# IntelliJ file
+.idea
+**/*.iml
diff --git a/controlloop/common/guard/pom.xml b/controlloop/common/guard/pom.xml
index 467cbc05a..f41328438 100644
--- a/controlloop/common/guard/pom.xml
+++ b/controlloop/common/guard/pom.xml
@@ -54,5 +54,23 @@
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>org.onap.policy.drools-applications</groupId>
+ <artifactId>simulators</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <version>2.13.0</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>h2</artifactId>
+ <version>[1.4.186,)</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
diff --git a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PIPEngineGetHistory.java b/controlloop/common/guard/src/main/java/org/onap/policy/guard/PIPEngineGetHistory.java
index 9b2644b95..6ba1a5a5f 100644
--- a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PIPEngineGetHistory.java
+++ b/controlloop/common/guard/src/main/java/org/onap/policy/guard/PIPEngineGetHistory.java
@@ -338,7 +338,7 @@ public class PIPEngineGetHistory extends StdConfigurableEngine{
}catch(Exception ex){
logger.error("PIP thread got Exception. Can't connect to Operations History DB -- {}", OpsHistPU);
logger.error("getCountFromDB threw: ", ex);
- return 0;
+ return -1;
}
DateUtil dateUtil = new DateUtil(){
@@ -406,9 +406,9 @@ public class PIPEngineGetHistory extends StdConfigurableEngine{
+ " and endtime between '" + new Timestamp(diff) + "' and '" + new Timestamp(now) + "'";
Query nq = em.createNativeQuery(sql);
- nq.setParameter(0, actor);
- nq.setParameter(1, operation);
- nq.setParameter(2, target);
+ nq.setParameter(1, actor);
+ nq.setParameter(2, operation);
+ nq.setParameter(3, target);
int ret = -1;
try{
diff --git a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlHelper.java b/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlHelper.java
index 0703b7611..cbaa8edde 100644
--- a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlHelper.java
+++ b/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlHelper.java
@@ -104,12 +104,12 @@ public class PolicyGuardXacmlHelper {
jsonReq.put("decisionAttributes", attributes);
jsonReq.put("onapName", "PDPD");
- URLEntry urlEntry = restUrls[restUrlIndex];
try {
//
// Call RESTful PDP
//
+ URLEntry urlEntry = restUrls[restUrlIndex];
netLogger.info("[OUT|{}|{}|]{}{}", "GUARD", urlEntry.restURL, System.lineSeparator(), jsonReq.toString());
response = callRESTfulPDP(new ByteArrayInputStream(jsonReq
.toString().getBytes()), urlEntry.restURL,
diff --git a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardYamlToXacml.java b/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardYamlToXacml.java
index 72b723c1f..aef86f320 100644
--- a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardYamlToXacml.java
+++ b/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardYamlToXacml.java
@@ -244,7 +244,7 @@ public class PolicyGuardYamlToXacml {
xacmlFileContent = m.replaceAll("<AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">"
+ target
+ "</AttributeValue>"
- + "\n\t\t\t\t\t\t\\$\\{blackListElement\\}");
+ + "\n\t\t\t\t\t\t\\$\\{blackListElement\\}\n");
}
p = Pattern.compile("\t\t\t\t\t\t\\$\\{blackListElement\\}\n");
diff --git a/controlloop/common/guard/src/main/java/org/onap/policy/guard/Util.java b/controlloop/common/guard/src/main/java/org/onap/policy/guard/Util.java
index ca62f6149..93bdc0c37 100644
--- a/controlloop/common/guard/src/main/java/org/onap/policy/guard/Util.java
+++ b/controlloop/common/guard/src/main/java/org/onap/policy/guard/Util.java
@@ -68,6 +68,11 @@ public final class Util {
public static final String PERMIT = "Permit";
public static final String DENY = "Deny";
+ /*
+ * Junit props
+ */
+ protected static final String PU_KEY = "OperationsHistoryPU";
+ protected static final String JUNITPU = "TestOperationsHistoryPU";
private static final Logger logger = LoggerFactory.getLogger(Util.class);
public static class Pair<A, B> {
diff --git a/controlloop/common/guard/src/test/java/org/onap/policy/guard/CallGuardTaskTest.java b/controlloop/common/guard/src/test/java/org/onap/policy/guard/CallGuardTaskTest.java
new file mode 100644
index 000000000..362931657
--- /dev/null
+++ b/controlloop/common/guard/src/test/java/org/onap/policy/guard/CallGuardTaskTest.java
@@ -0,0 +1,61 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * guard
+ * ================================================================================
+ * 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.policy.guard;
+
+import static org.mockito.ArgumentMatchers.argThat;
+import static org.mockito.ArgumentMatchers.isNotNull;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import org.drools.core.impl.StatefulKnowledgeSessionImpl;
+import org.junit.Test;
+
+public class CallGuardTaskTest{
+
+ static final String REQ_ID = "1-2-3-4-5";
+ static final String REQ_MATCHER = "0+1-0+2-0+3-0+4-0+5";
+
+ @Test
+ /**
+ * Tests that the run method inserts guard response into working memory
+ */
+ public void testRun() {
+ // Create mock working session
+ StatefulKnowledgeSessionImpl mockWorkingSession = mock(StatefulKnowledgeSessionImpl.class);
+ when(mockWorkingSession.insert(isNotNull())).thenReturn(null);
+ // Create CallGuardTask and run
+ CallGuardTask cgt = new CallGuardTask(mockWorkingSession, "cl", "act", "rec", "tar", REQ_ID);
+ cgt.run();
+ verify(mockWorkingSession).insert(argThat(
+ (Object o) -> {
+ if(!(o instanceof PolicyGuardResponse)){
+ return false;
+ }
+ // Check if the inserted response is PolicyGuardResponse, is Indeterminate, and has same reqID
+ PolicyGuardResponse response = (PolicyGuardResponse) o;
+ return Util.INDETERMINATE.equals(response.getResult()) &&
+ // req ID has form 00000001-0002-0003-0004-000000000005
+ response.getRequestID().toString().matches(REQ_MATCHER);
+ }));
+
+ }
+
+}
diff --git a/controlloop/common/guard/src/test/java/org/onap/policy/guard/PIPEngineGetHistoryTest.java b/controlloop/common/guard/src/test/java/org/onap/policy/guard/PIPEngineGetHistoryTest.java
new file mode 100644
index 000000000..566cc7a93
--- /dev/null
+++ b/controlloop/common/guard/src/test/java/org/onap/policy/guard/PIPEngineGetHistoryTest.java
@@ -0,0 +1,168 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * guard
+ * ================================================================================
+ * 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.policy.guard;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Persistence;
+import javax.persistence.Query;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.onap.policy.drools.system.PolicyEngine;
+
+import com.att.research.xacml.std.pip.StdPIPRequest;
+import com.att.research.xacml.std.pip.StdPIPResponse;
+import com.att.research.xacml.std.pip.finders.EngineFinder;
+
+public class PIPEngineGetHistoryTest {
+ static PIPEngineGetHistory pegh;
+ private static final String ISSUER = "issuerIntw:mid:end";
+
+ @BeforeClass
+ public static void testPIPEngineGetHistory(){
+ pegh = null;
+ try{
+ pegh = new PIPEngineGetHistory();
+ } catch(Exception e){
+ fail("PIPEngineGetHistory constructor failed");
+ }
+ }
+
+ @Test
+ public void testAttributesRequired() {
+ assertTrue(pegh.attributesRequired().isEmpty());
+ }
+
+ @Test
+ public void testAttributesProvided() {
+ assertTrue(pegh.attributesProvided().isEmpty());
+ }
+
+ @Test
+ public void testGetAttributes() {
+ StdPIPRequest mockPIPRequest = mock(StdPIPRequest.class);
+ EngineFinder mockPIPFinder = mock(EngineFinder.class);
+
+ // Test issuer null
+ when(mockPIPRequest.getIssuer()).thenReturn(null);
+ try {
+ assertEquals(pegh.getAttributes(mockPIPRequest, mockPIPFinder),
+ StdPIPResponse.PIP_RESPONSE_EMPTY);
+ } catch (Exception e) {
+ fail("getAttributes failed");
+ }
+
+ // Test issuer not equal to our issuer
+ pegh.setIssuer(ISSUER);
+ when(mockPIPRequest.getIssuer()).thenReturn("something else");
+ try {
+ assertEquals(pegh.getAttributes(mockPIPRequest, mockPIPFinder),
+ StdPIPResponse.PIP_RESPONSE_EMPTY);
+ } catch (Exception e) {
+ fail("getAttributes failed");
+ }
+
+ // Test issuer equal to our issuer
+ when(mockPIPRequest.getIssuer()).thenReturn(ISSUER);
+ try {
+ assertNotNull(pegh.getAttributes(mockPIPRequest, mockPIPFinder));
+ } catch (Exception e) {
+ // Normal to catch exception
+ }
+ }
+
+ @Test
+ public void testGetCountFromDB(){
+ // Set PU
+ System.setProperty(Util.PU_KEY, Util.JUNITPU);
+
+ //Enter dummy props to avoid nullPointerException
+ PolicyEngine.manager.setEnvironmentProperty(Util.ONAP_KEY_URL, "a");
+ PolicyEngine.manager.setEnvironmentProperty(Util.ONAP_KEY_USER, "b");
+ PolicyEngine.manager.setEnvironmentProperty(Util.ONAP_KEY_PASS, "c");
+
+ // Connect to in-mem db
+ EntityManager em = null;
+ try{
+ em = Persistence.createEntityManagerFactory(Util.JUNITPU).createEntityManager();
+ } catch(Exception e){
+ fail(e.getLocalizedMessage());
+ }
+
+ String sql = "CREATE TABLE `operationshistory10` (" +
+ "`CLNAME` varchar(255)," +
+ "`requestID` varchar(100)," +
+ "`actor` varchar(50) ," +
+ "`operation` varchar(50)," +
+ "`target` varchar(50)," +
+ "`starttime` timestamp," +
+ "`outcome` varchar(50)," +
+ "`message` varchar(255)," +
+ "`subrequestId` varchar(100)," +
+ "`endtime` timestamp"+
+ ")";
+ // Create necessary table
+ Query nq = em.createNativeQuery(sql);
+ em.getTransaction().begin();
+ nq.executeUpdate();
+ em.getTransaction().commit();
+
+ // Use reflection to run getCountFromDB
+ Method method = null;
+ int count = -1;
+ try {
+ method = PIPEngineGetHistory.class.getDeclaredMethod("getCountFromDB", String.class, String.class, String.class, String.class);
+ method.setAccessible(true);
+ count = (int) method.invoke(null, "actor", "op", "target", "1 MINUTE");
+ } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException e) {
+ fail(e.getLocalizedMessage());
+ }
+ // No entries yet
+ assertEquals(0, count);
+
+ // Add an entry
+ String addEntry = "insert into operationshistory10 (outcome, CLNAME, actor, operation, target, endtime)" +
+ "values('success','testcl', 'actor', 'op', 'target', CURRENT_TIMESTAMP())";
+ Query nq2 = em.createNativeQuery(addEntry);
+ em.getTransaction().begin();
+ nq2.executeUpdate();
+ em.getTransaction().commit();
+ em.close();
+
+ try {
+ count = (int) method.invoke(null, "actor", "op", "target", "1 MINUTE");
+ } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
+ fail(e.getLocalizedMessage());
+ }
+ // Should count 1 entry now
+ assertEquals(1, count);
+ }
+
+}
diff --git a/controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardTest.java b/controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardTest.java
index 7068fed3d..17e115707 100644
--- a/controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardTest.java
+++ b/controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardTest.java
@@ -1,15 +1,15 @@
/*-
* ============LICENSE_START=======================================================
- * unit test
+ * guard
* ================================================================================
* 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.
@@ -17,16 +17,66 @@
* limitations under the License.
* ============LICENSE_END=========================================================
*/
-
package org.onap.policy.guard;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.UUID;
+
import org.junit.Test;
+import org.onap.policy.controlloop.policy.TargetType;
public class PolicyGuardTest {
-
- @Test
- public void test() {
-
+ private class DummyLockCallback implements LockCallback{
+ @Override
+ public boolean isActive() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+ @Override
+ public boolean releaseLock() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+ }
+ private class DummyTargetLock implements TargetLock{
+ @Override
+ public UUID getLockID() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+ @Override
+ public TargetType getTargetType() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+ @Override
+ public String getTargetInstance() {
+ return INSTANCENAME;
+ }
+ @Override
+ public UUID getRequestID() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
+ private static final String INSTANCENAME = "targetInstance";
+
+ @Test
+ public void testAll() {
+ UUID uuid = UUID.randomUUID();
+ TargetType type = TargetType.VM;
+
+
+ // Test isLocked before and after lock added
+ assertFalse(PolicyGuard.isLocked(type, INSTANCENAME, uuid));
+ PolicyGuard.lockTarget(type, INSTANCENAME, uuid , new DummyLockCallback());
+ assertTrue(PolicyGuard.isLocked(type, INSTANCENAME, uuid));
+
+ // Test isLocked after lock removed
+ PolicyGuard.unlockTarget(new DummyTargetLock());
+ assertFalse(PolicyGuard.isLocked(type, INSTANCENAME, uuid));
+ }
}
diff --git a/controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardXacmlHelperTest.java b/controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardXacmlHelperTest.java
new file mode 100644
index 000000000..1d3ab02e4
--- /dev/null
+++ b/controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardXacmlHelperTest.java
@@ -0,0 +1,101 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * guard
+ * ================================================================================
+ * 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.policy.guard;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.onap.policy.drools.http.server.HttpServletServer;
+import org.onap.policy.drools.utils.LoggerUtil;
+
+
+
+public class PolicyGuardXacmlHelperTest {
+
+ @BeforeClass
+ public static void setupSimulator() {
+ LoggerUtil.setLevel("ROOT", "INFO");
+ LoggerUtil.setLevel("org.eclipse.jetty", "WARN");
+ try {
+ org.onap.policy.simulators.Util.buildGuardSim();
+ } catch (Exception e) {
+ fail(e.getMessage());
+ }
+ //
+ // Set guard properties
+ //
+ org.onap.policy.guard.Util.setGuardEnvProps("http://localhost:6669/pdp/api/getDecision",
+ "python",
+ "test",
+ "python",
+ "test",
+ "DEVL");
+ }
+
+ @AfterClass
+ /**
+ * Shuts down simulator and performs 1 more test for the case where the connection fails
+ */
+ public static void tearDownSimulator() {
+ HttpServletServer.factory.destroy();
+
+ // Null/ Bad Connection Case
+ PolicyGuardXacmlRequestAttributes xacmlReq = new PolicyGuardXacmlRequestAttributes(
+ org.onap.policy.simulators.GuardSimulatorJaxRs.DENY_CLNAME, "actor", "recipe", "target", "requestId");
+ String rawDecision = new PolicyGuardXacmlHelper().callPDP(xacmlReq);
+ assertNotNull(rawDecision);
+ assertTrue(0 == Util.INDETERMINATE.compareToIgnoreCase(rawDecision));
+ }
+
+ @Test
+ public void testSimulator() {
+ PolicyGuardXacmlRequestAttributes request = new PolicyGuardXacmlRequestAttributes("clname_id", "actor_id", "operation_id", "target_id", "request_id");
+ String xacmlResponse = new PolicyGuardXacmlHelper().callPDP(request);
+ assertNotNull(xacmlResponse);
+ }
+
+ @Test
+ /**
+ * Tests PolicyGuardXacmlHelper.callPDP method to determine if it returns DENY, PERMIT, or INDETERMINATE
+ * as expected.
+ */
+ public void testCallPDP() {
+ // Deny Case
+ PolicyGuardXacmlRequestAttributes xacmlReq = new PolicyGuardXacmlRequestAttributes(
+ org.onap.policy.simulators.GuardSimulatorJaxRs.DENY_CLNAME, "actor", "recipe", "target", "requestId");
+ String rawDecision = new PolicyGuardXacmlHelper().callPDP(xacmlReq);
+ assertNotNull(rawDecision);
+ assertTrue(0 == Util.DENY.compareToIgnoreCase(rawDecision));
+
+ // Permit Case
+ xacmlReq = new PolicyGuardXacmlRequestAttributes(
+ "clname", "actor", "recipe", "target", "requestId");
+ rawDecision = new PolicyGuardXacmlHelper().callPDP(xacmlReq);
+ assertNotNull(rawDecision);
+ assertTrue(0 == Util.PERMIT.compareToIgnoreCase(rawDecision));
+
+ // Indeterminate case is in tearDown for efficiency
+ }
+
+}
diff --git a/controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardYamlToXacmlTest.java b/controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardYamlToXacmlTest.java
new file mode 100644
index 000000000..1e972c30f
--- /dev/null
+++ b/controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardYamlToXacmlTest.java
@@ -0,0 +1,111 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * guard
+ * ================================================================================
+ * 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.policy.guard;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Test;
+
+public class PolicyGuardYamlToXacmlTest {
+
+ @Test
+ public void testFromYamlToXacml() {
+ //PolicyGuardYamlToXacml.fromYamlToXacml(yamlFile, xacmlTemplate, xacmlPolicyOutput);
+ //fail("Not yet implemented");
+ }
+
+ @Test
+ public void testGenerateXacmlGuard() {
+ String dummyFileContent = "${clname}, ${actor}, ${recipe}, ${targets}, ${limit}, ${twValue}, ${twUnits}, ${guardActiveStart}, ${guardActiveEnd}";
+ List<String> targets = new ArrayList();
+ targets.add("target1");
+ targets.add("target2");
+ Map<String, String> tw = new HashMap();
+ tw.put("value", "10");
+ tw.put("units", "hours");
+ String res = PolicyGuardYamlToXacml.generateXacmlGuard(dummyFileContent,
+ "cl", "actor", "recipe", targets, 5, tw, "start", "end");
+
+ // Assert no mote "${}" are left
+ assertFalse(res.contains("${"));
+ assertFalse(res.contains("}"));
+ // Assert all substitutions are made
+ assertTrue(res.contains("cl"));
+ assertTrue(res.contains("actor"));
+ assertTrue(res.contains("recipe"));
+ assertTrue(res.contains("target1"));
+ assertTrue(res.contains("target2"));
+ assertTrue(res.contains("10"));
+ assertTrue(res.contains("hours"));
+ assertTrue(res.contains("start"));
+ assertTrue(res.contains("end"));
+ }
+
+ @Test
+ public void testIsNullOrEmpty() {
+ assertTrue(PolicyGuardYamlToXacml.isNullOrEmpty(""));
+ assertTrue(PolicyGuardYamlToXacml.isNullOrEmpty(null));
+ assertFalse(PolicyGuardYamlToXacml.isNullOrEmpty("hello"));
+ }
+
+ @Test
+ public void testIsNullOrEmptyList() {
+ List<String> l = new ArrayList();
+ assertTrue(PolicyGuardYamlToXacml.isNullOrEmptyList(null));
+ assertTrue(PolicyGuardYamlToXacml.isNullOrEmptyList(l));
+
+ l.add("hello");
+ assertFalse(PolicyGuardYamlToXacml.isNullOrEmptyList(l));
+ }
+
+ @Test
+ public void testFromYamlToXacmlBlacklist() {
+ //fail("Not yet implemented");
+ }
+
+ @Test
+ public void testGenerateXacmlGuardBlacklist() {
+ String dummyFileContent = "${clname}, ${actor}, ${recipe}, ${blackListElement}, ${guardActiveStart}, ${guardActiveEnd}";
+ List<String> blacklist = new ArrayList();
+ blacklist.add("target1");
+ blacklist.add("target2");
+ String res = PolicyGuardYamlToXacml.generateXacmlGuardBlacklist(dummyFileContent,
+ "cl", "actor", "recipe", blacklist, "start", "end");
+
+ // Assert no mote "${}" are left
+ assertFalse(res.contains("${"));
+ assertFalse(res.contains("}"));
+ // Assert all substitutions are made
+ assertTrue(res.contains("cl"));
+ assertTrue(res.contains("actor"));
+ assertTrue(res.contains("recipe"));
+ assertTrue(res.contains("target1"));
+ assertTrue(res.contains("target2"));
+ assertTrue(res.contains("start"));
+ assertTrue(res.contains("end"));
+ }
+
+}
diff --git a/controlloop/common/guard/src/test/resources/META-INF/persistence.xml b/controlloop/common/guard/src/test/resources/META-INF/persistence.xml
new file mode 100644
index 000000000..f55c2f2d7
--- /dev/null
+++ b/controlloop/common/guard/src/test/resources/META-INF/persistence.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+
+ <!-- In-mem DB for junit -->
+ <persistence-unit name="TestOperationsHistoryPU"
+ transaction-type="RESOURCE_LOCAL">
+ <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+ <class>org.onap.policy.controlloop.eventmanager.OperationsHistoryDbEntry</class>
+ <properties>
+ <property name="eclipselink.ddl-generation" value="create-or-extend-tables" />
+ <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
+ <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test" />
+ <property name="javax.persistence.jdbc.user" value="sa" />
+ <property name="javax.persistence.jdbc.password" value="" />
+ <property name="eclipselink.logging.level" value="CONFIG" />
+ </properties>
+ </persistence-unit>
+
+
+</persistence>
diff --git a/controlloop/common/simulators/src/main/java/org/onap/policy/simulators/GuardSimulatorJaxRs.java b/controlloop/common/simulators/src/main/java/org/onap/policy/simulators/GuardSimulatorJaxRs.java
index 7415130ea..4551cf246 100644
--- a/controlloop/common/simulators/src/main/java/org/onap/policy/simulators/GuardSimulatorJaxRs.java
+++ b/controlloop/common/simulators/src/main/java/org/onap/policy/simulators/GuardSimulatorJaxRs.java
@@ -7,9 +7,9 @@
* 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.
@@ -30,14 +30,15 @@ import org.json.JSONObject;
@Path("/pdp/api")
public class GuardSimulatorJaxRs {
+ public static final String DENY_CLNAME = "denyGuard";
@POST
@Path("/getDecision")
@Consumes(MediaType.APPLICATION_JSON)
@Produces("application/json")
- public String getGuardDecision(String req){
+ public String getGuardDecision(String req){
String clName = new JSONObject(req).getJSONObject("decisionAttributes").getString("clname");
- if ("denyGuard".equals(clName))
+ if (DENY_CLNAME.equals(clName))
{
return "{\"decision\": \"DENY\", \"details\": \"Decision Deny. You asked for it\"}";
}