2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017, 2019 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Modifications Copyright (C) 2019 Samsung
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
23 package org.onap.policy.xacml.test.util;
25 import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
26 import static org.junit.Assert.assertEquals;
27 import static org.junit.Assert.assertNotNull;
28 import static org.junit.Assert.assertNull;
29 import static org.junit.Assert.assertTrue;
30 import static org.junit.Assert.fail;
31 import com.att.research.xacml.api.Advice;
32 import com.att.research.xacml.api.Attribute;
33 import com.att.research.xacml.api.Obligation;
34 import com.att.research.xacml.util.XACMLPolicyScanner.Callback;
35 import com.att.research.xacml.util.XACMLPolicyScanner.CallbackResult;
37 import java.io.IOException;
38 import java.nio.file.Path;
39 import java.nio.file.Paths;
40 import java.util.List;
41 import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionType;
42 import oasis.names.tc.xacml._3_0.core.schema.wd_17.ConditionType;
43 import oasis.names.tc.xacml._3_0.core.schema.wd_17.IdReferenceType;
44 import oasis.names.tc.xacml._3_0.core.schema.wd_17.ObligationExpressionType;
45 import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicySetType;
46 import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType;
47 import oasis.names.tc.xacml._3_0.core.schema.wd_17.RuleType;
48 import oasis.names.tc.xacml._3_0.core.schema.wd_17.VariableDefinitionType;
49 import org.apache.commons.logging.Log;
50 import org.apache.commons.logging.LogFactory;
51 import org.junit.Before;
52 import org.junit.Test;
53 import org.onap.policy.xacml.util.XACMLPolicyScanner;
55 public class XACMLPolicyScannerTest {
57 private static final Log logger = LogFactory.getLog(XACMLPolicyScannerTest.class);
58 private static Path configPolicyPathValue;
59 private static Path actionPolicyPathValue;
67 ClassLoader classLoader = getClass().getClassLoader();
69 templateFile = new File(classLoader.getResource("Config_SampleTest1206.1.xml").getFile());
70 configPolicyPathValue = templateFile.toPath();
71 templateFile = new File(classLoader.getResource("Action_TestActionPolicy.1.xml").getFile());
72 actionPolicyPathValue = templateFile.toPath();
73 } catch (Exception e1) {
74 logger.error("Exception Occured" + e1);
79 public void xacmlPolicyScannerTest() throws IOException {
80 Callback callback = null;
82 XACMLPolicyScanner actionScanner = new XACMLPolicyScanner(actionPolicyPathValue, callback);
83 assertNotNull(actionScanner.getPolicyObject());
84 Object actionObject = actionScanner.scan();
85 assertNotNull(actionObject);
87 XACMLPolicyScanner scanner = new XACMLPolicyScanner(configPolicyPathValue, callback);
88 assertTrue(scanner.getPolicyObject() != null);
89 Object object = scanner.scan();
90 assertTrue(object != null);
91 String id = XACMLPolicyScanner.getID(scanner.getPolicyObject());
92 assertTrue(id.equals("urn:com:xacml:policy:id:0b67998b-57e2-4e25-9ea9-f9154bf18df1"));
93 String version = XACMLPolicyScanner.getVersion(scanner.getPolicyObject());
94 assertTrue(version.equals("1"));
95 String versionFromPath = XACMLPolicyScanner.getVersion(configPolicyPathValue);
96 assertTrue(versionFromPath.equals("1"));
97 List<String> returnValue = XACMLPolicyScanner.getCreatedByModifiedBy(configPolicyPathValue);
98 assertTrue(returnValue.get(0).equals("test"));
99 String createdBy = XACMLPolicyScanner.getCreatedBy(configPolicyPathValue);
100 assertTrue(createdBy.equals("test"));
101 String modifiedBy = XACMLPolicyScanner.getModifiedBy(configPolicyPathValue);
102 assertTrue(modifiedBy.equals("test"));
103 } catch (Exception e) {
105 logger.error("Exception Occured" + e);
110 public void badPolicies() throws IOException {
111 Path unknown = Paths.get("foobar.xml");
112 XACMLPolicyScanner scanner = new XACMLPolicyScanner(unknown, null);
113 assertNull(scanner.getPolicyObject());
114 assertNull(scanner.scan());
116 assertThatExceptionOfType(IOException.class).isThrownBy(() -> {
117 XACMLPolicyScanner.getVersion(unknown);
120 Path logback = Paths.get("logback-test.xml");
121 scanner = new XACMLPolicyScanner(logback, null);
125 public void testRest() {
126 PolicySetType policySet = new PolicySetType();
127 policySet.setPolicySetId("id1");
128 policySet.setVersion("v1");
129 XACMLPolicyScanner scanner = new XACMLPolicyScanner(policySet);
130 assertNotNull(scanner);
131 assertEquals(policySet, scanner.getPolicyObject());
132 assertEquals(policySet.getPolicySetId(), XACMLPolicyScanner.getID(policySet));
133 assertEquals(policySet.getVersion(), XACMLPolicyScanner.getVersion(policySet));
135 scanner.setCallback(new TestCallback(CallbackResult.CONTINUE));
136 assertEquals(policySet, scanner.scan());
137 assertEquals(policySet, scanner.scan(new TestCallback(CallbackResult.CONTINUE)));
138 assertEquals(policySet, scanner.scan(new TestCallback(CallbackResult.STOP)));
140 PolicyType policy = new PolicyType();
141 policy.setPolicyId("id2");
142 policy.setVersion("v2");
143 scanner = new XACMLPolicyScanner(policy);
144 assertNotNull(scanner);
145 assertEquals(policy, scanner.getPolicyObject());
146 assertEquals(policy.getPolicyId(), XACMLPolicyScanner.getID(policy));
147 assertEquals(policy.getVersion(), XACMLPolicyScanner.getVersion(policy));
148 policy.setVersion(null);
149 assertNull(XACMLPolicyScanner.getVersion(policy));
151 assertNull(XACMLPolicyScanner.getID(new String()));
152 assertNull(XACMLPolicyScanner.getVersion(new String()));
157 public void testPolicySet() {
158 PolicySetType policySet = new PolicySetType();
159 policySet.setPolicySetId("id1");
160 policySet.setVersion("v1");
164 class TestCallback implements Callback {
166 CallbackResult begin = CallbackResult.CONTINUE;
168 TestCallback(CallbackResult onBegin) {
173 public CallbackResult onBeginScan(Object root) {
178 public void onFinishScan(Object root) {
182 public CallbackResult onPreVisitPolicySet(PolicySetType parent, PolicySetType policySet) {
183 return CallbackResult.CONTINUE;
187 public CallbackResult onPostVisitPolicySet(PolicySetType parent, PolicySetType policySet) {
188 return CallbackResult.CONTINUE;
192 public CallbackResult onPreVisitPolicy(PolicySetType parent, PolicyType policy) {
193 return CallbackResult.CONTINUE;
197 public CallbackResult onPostVisitPolicy(PolicySetType parent, PolicyType policy) {
198 return CallbackResult.CONTINUE;
202 public CallbackResult onPreVisitRule(PolicyType parent, RuleType rule) {
203 return CallbackResult.CONTINUE;
207 public CallbackResult onPostVisitRule(PolicyType parent, RuleType rule) {
208 return CallbackResult.CONTINUE;
212 public CallbackResult onAttribute(Object parent, Object container, Attribute attribute) {
213 return CallbackResult.CONTINUE;
217 public CallbackResult onObligation(Object parent, ObligationExpressionType expression, Obligation obligation) {
218 return CallbackResult.CONTINUE;
222 public CallbackResult onAdvice(Object parent, AdviceExpressionType expression, Advice advice) {
223 return CallbackResult.CONTINUE;
227 public CallbackResult onVariable(PolicyType policy, VariableDefinitionType variable) {
228 return CallbackResult.CONTINUE;
232 public CallbackResult onCondition(RuleType rule, ConditionType condition) {
233 return CallbackResult.CONTINUE;
237 public CallbackResult onPolicySetIdReference(IdReferenceType reference, PolicySetType parent) {
238 return CallbackResult.CONTINUE;
242 public CallbackResult onPolicyIdReference(IdReferenceType reference, PolicySetType parent) {
243 return CallbackResult.CONTINUE;