2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2016-2018 Ericsson. All rights reserved.
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
21 package org.onap.policy.apex.model.policymodel.concepts;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertFalse;
25 import static org.junit.Assert.assertNotEquals;
26 import static org.junit.Assert.assertNotNull;
27 import static org.junit.Assert.assertTrue;
29 import org.junit.Test;
30 import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
31 import org.onap.policy.apex.model.basicmodel.concepts.AxKeyInformation;
32 import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey;
33 import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
34 import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult.ValidationResult;
35 import org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbum;
36 import org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbums;
37 import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchemas;
38 import org.onap.policy.apex.model.eventmodel.concepts.AxEvents;
39 import org.onap.policy.apex.model.eventmodel.concepts.AxField;
40 import org.onap.policy.apex.model.eventmodel.concepts.AxInputField;
41 import org.onap.policy.apex.model.eventmodel.concepts.AxOutputField;
42 import org.onap.policy.apex.model.policymodel.concepts.AxPolicies;
43 import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
44 import org.onap.policy.apex.model.policymodel.concepts.AxStateOutput;
45 import org.onap.policy.apex.model.policymodel.concepts.AxStateTaskOutputType;
46 import org.onap.policy.apex.model.policymodel.concepts.AxStateTaskReference;
47 import org.onap.policy.apex.model.policymodel.concepts.AxTaskSelectionLogic;
48 import org.onap.policy.apex.model.policymodel.concepts.AxTasks;
49 import org.onap.policy.apex.model.policymodel.handling.ApexPolicyModelCreatorTest;
54 * @author Liam Fallon (liam.fallon@ericsson.com)
56 public class PolicyModelTest {
59 public void testPolicyModel() {
60 assertNotNull(new AxPolicyModel());
61 assertNotNull(new AxPolicyModel(new AxArtifactKey()));
62 assertNotNull(new AxPolicyModel(new AxArtifactKey(), new AxContextSchemas(), new AxKeyInformation(),
63 new AxEvents(), new AxContextAlbums(), new AxTasks(), new AxPolicies()));
65 final AxArtifactKey modelKey = new AxArtifactKey("ModelKey", "0.0.1");
66 final AxArtifactKey schemasKey = new AxArtifactKey("SchemasKey", "0.0.1");
67 final AxArtifactKey eventsKey = new AxArtifactKey("EventsKey", "0.0.1");
68 final AxArtifactKey keyInfoKey = new AxArtifactKey("SchemasKey", "0.0.1");
69 final AxArtifactKey albumsKey = new AxArtifactKey("AlbumsKey", "0.0.1");
70 final AxArtifactKey tasksKey = new AxArtifactKey("TasksKey", "0.0.1");
71 final AxArtifactKey policiesKey = new AxArtifactKey("PoliciesKey", "0.0.1");
73 AxPolicyModel model = new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
74 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
75 new AxTasks(tasksKey), new AxPolicies(policiesKey));
79 assertNotNull(model.getContextModel());
80 assertEquals("ModelKey:0.0.1", model.getKeys().get(0).getId());
84 assertEquals("AxPolicyModel:(AxPolicyModel:(key=AxArtifactKey:(n", model.toString().substring(0, 50));
86 final AxPolicyModel clonedModel = new AxPolicyModel(model);
88 assertFalse(model.hashCode() == 0);
90 assertTrue(model.equals(model));
91 assertTrue(model.equals(clonedModel));
92 assertFalse(model.equals("Hello"));
93 assertFalse(model.equals(new AxPolicyModel(new AxArtifactKey())));
94 assertFalse(model.equals(new AxPolicyModel(AxArtifactKey.getNullKey(), new AxContextSchemas(schemasKey),
95 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
96 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
97 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(), new AxKeyInformation(keyInfoKey),
98 new AxEvents(eventsKey), new AxContextAlbums(albumsKey), new AxTasks(tasksKey),
99 new AxPolicies(policiesKey))));
100 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey), new AxKeyInformation(),
101 new AxEvents(eventsKey), new AxContextAlbums(albumsKey), new AxTasks(tasksKey),
102 new AxPolicies(policiesKey))));
103 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
104 new AxKeyInformation(keyInfoKey), new AxEvents(), new AxContextAlbums(albumsKey),
105 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
106 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
107 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(),
108 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
109 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
110 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
111 new AxTasks(), new AxPolicies(policiesKey))));
112 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
113 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
114 new AxTasks(tasksKey), new AxPolicies())));
115 assertTrue(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
116 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
117 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
119 assertEquals(0, model.compareTo(model));
120 assertEquals(0, model.compareTo(clonedModel));
121 assertNotEquals(0, model.compareTo(new AxArtifactKey()));
122 assertNotEquals(0, model.compareTo(new AxPolicyModel(AxArtifactKey.getNullKey(),
123 new AxContextSchemas(schemasKey), new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
124 new AxContextAlbums(albumsKey), new AxTasks(tasksKey), new AxPolicies(policiesKey))));
125 assertNotEquals(0, model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(),
126 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
127 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
129 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
130 new AxKeyInformation(), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
131 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
132 assertNotEquals(0, model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
133 new AxKeyInformation(keyInfoKey), new AxEvents(), new AxContextAlbums(albumsKey),
134 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
136 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
137 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
138 new AxContextAlbums(), new AxTasks(tasksKey), new AxPolicies(policiesKey))));
140 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
141 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
142 new AxContextAlbums(albumsKey), new AxTasks(), new AxPolicies(policiesKey))));
144 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
145 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
146 new AxContextAlbums(albumsKey), new AxTasks(tasksKey), new AxPolicies())));
147 assertEquals(0, model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
148 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
149 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
151 model = new ApexPolicyModelCreatorTest().getModel();
153 AxValidationResult result = new AxValidationResult();
154 result = model.validate(result);
155 assertEquals(ValidationResult.VALID, result.getValidationResult());
157 final AxArtifactKey savedPolicyKey = model.getKey();
158 model.setKey(AxArtifactKey.getNullKey());
159 result = new AxValidationResult();
160 result = model.validate(result);
161 assertEquals(ValidationResult.INVALID, result.getValidationResult());
163 model.setKey(savedPolicyKey);
164 result = new AxValidationResult();
165 result = model.validate(result);
166 assertEquals(ValidationResult.VALID, result.getValidationResult());
168 final AxField badField = new AxField(new AxReferenceKey(model.getEvents().get("inEvent").getKey(), "BadField"),
169 new AxArtifactKey("NonExistantSchema", "0.0.1"));
170 model.getEvents().get("inEvent").getParameterMap().put(badField.getKey().getLocalName(), badField);
171 result = new AxValidationResult();
172 result = model.validate(result);
173 assertEquals(ValidationResult.INVALID, result.getValidationResult());
175 model.getEvents().get("inEvent").getParameterMap().remove(badField.getKey().getLocalName());
176 result = new AxValidationResult();
177 result = model.validate(result);
178 assertEquals(ValidationResult.VALID, result.getValidationResult());
180 final AxContextAlbum badAlbum = new AxContextAlbum(new AxArtifactKey("BadAlbum", "0.0.1"), "SomeScope", true,
181 new AxArtifactKey("NonExistantSchema", "0.0.1"));
182 model.getAlbums().getAlbumsMap().put(badAlbum.getKey(), badAlbum);
183 result = new AxValidationResult();
184 result = model.validate(result);
185 assertEquals(ValidationResult.INVALID, result.getValidationResult());
187 model.getAlbums().getAlbumsMap().remove(badAlbum.getKey());
188 result = new AxValidationResult();
189 result = model.validate(result);
190 assertEquals(ValidationResult.VALID, result.getValidationResult());
192 final AxInputField badInField = new AxInputField(
193 new AxReferenceKey(model.getTasks().get("task").getKey(), "BadInField"),
194 new AxArtifactKey("NonExistantSchema", "0.0.1"));
195 model.getTasks().get("task").getInputFields().put(badInField.getKey().getLocalName(), badInField);
196 result = new AxValidationResult();
197 result = model.validate(result);
198 assertEquals(ValidationResult.INVALID, result.getValidationResult());
200 model.getTasks().get("task").getInputFields().remove(badInField.getKey().getLocalName());
201 result = new AxValidationResult();
202 result = model.validate(result);
203 assertEquals(ValidationResult.VALID, result.getValidationResult());
205 final AxOutputField badOutField = new AxOutputField(
206 new AxReferenceKey(model.getTasks().get("task").getKey(), "BadOutField"),
207 new AxArtifactKey("NonExistantSchema", "0.0.1"));
208 model.getTasks().get("task").getOutputFields().put(badOutField.getKey().getLocalName(), badOutField);
209 result = new AxValidationResult();
210 result = model.validate(result);
211 assertEquals(ValidationResult.INVALID, result.getValidationResult());
213 model.getTasks().get("task").getOutputFields().remove(badOutField.getKey().getLocalName());
214 result = new AxValidationResult();
215 result = model.validate(result);
216 assertEquals(ValidationResult.VALID, result.getValidationResult());
218 model.getTasks().get("task").getContextAlbumReferences()
219 .add(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
220 result = new AxValidationResult();
221 result = model.validate(result);
222 assertEquals(ValidationResult.INVALID, result.getValidationResult());
224 model.getTasks().get("task").getContextAlbumReferences()
225 .remove(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
226 result = new AxValidationResult();
227 result = model.validate(result);
228 assertEquals(ValidationResult.VALID, result.getValidationResult());
230 model.getPolicies().get("policy").getStateMap().get("state").getContextAlbumReferences()
231 .add(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
232 result = new AxValidationResult();
233 result = model.validate(result);
234 assertEquals(ValidationResult.INVALID, result.getValidationResult());
236 model.getPolicies().get("policy").getStateMap().get("state").getContextAlbumReferences()
237 .remove(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
238 result = new AxValidationResult();
239 result = model.validate(result);
240 assertEquals(ValidationResult.VALID, result.getValidationResult());
242 final AxArtifactKey savedTrigger = model.getPolicies().get("policy").getStateMap().get("state").getTrigger();
243 model.getPolicies().get("policy").getStateMap().get("state")
244 .setTrigger(new AxArtifactKey("NonExistantEvent", "0.0.1"));
245 result = new AxValidationResult();
246 result = model.validate(result);
247 assertEquals(ValidationResult.INVALID, result.getValidationResult());
249 model.getPolicies().get("policy").getStateMap().get("state").setTrigger(savedTrigger);
250 result = new AxValidationResult();
251 result = model.validate(result);
252 assertEquals(ValidationResult.VALID, result.getValidationResult());
254 final AxArtifactKey savedDefaultTask = model.getPolicies().get("policy").getStateMap().get("state")
256 model.getPolicies().get("policy").getStateMap().get("state")
257 .setDefaultTask(new AxArtifactKey("NonExistantTask", "0.0.1"));
258 result = new AxValidationResult();
259 result = model.validate(result);
260 assertEquals(ValidationResult.INVALID, result.getValidationResult());
262 model.getPolicies().get("policy").getStateMap().get("state").setDefaultTask(savedDefaultTask);
263 result = new AxValidationResult();
264 result = model.validate(result);
265 assertEquals(ValidationResult.VALID, result.getValidationResult());
267 // It is OK not to have TSL
268 final AxTaskSelectionLogic savedTaskSelectionLogic = model.getPolicies().get("policy").getStateMap()
269 .get("state").getTaskSelectionLogic();
270 model.getPolicies().get("policy").getStateMap().get("state")
271 .setTaskSelectionLogic(new AxTaskSelectionLogic(AxReferenceKey.getNullKey()));
272 result = new AxValidationResult();
273 result = model.validate(result);
274 assertEquals(ValidationResult.VALID, result.getValidationResult());
276 model.getTasks().get("task").getInputFields().put(badInField.getKey().getLocalName(), badInField);
277 result = new AxValidationResult();
278 result = model.validate(result);
279 assertEquals(ValidationResult.INVALID, result.getValidationResult());
281 model.getTasks().get("task").getInputFields().remove(badInField.getKey().getLocalName());
282 result = new AxValidationResult();
283 result = model.validate(result);
284 assertEquals(ValidationResult.VALID, result.getValidationResult());
286 model.getPolicies().get("policy").getStateMap().get("state").setTaskSelectionLogic(savedTaskSelectionLogic);
287 result = new AxValidationResult();
288 result = model.validate(result);
289 assertEquals(ValidationResult.VALID, result.getValidationResult());
291 final AxStateOutput badStateOutput = new AxStateOutput(
292 new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(),
294 new AxArtifactKey("NonExistantEvent", "0.0.1"), AxReferenceKey.getNullKey());
295 model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
296 .put(badStateOutput.getKey().getLocalName(), badStateOutput);
297 result = new AxValidationResult();
298 result = model.validate(result);
299 assertEquals(ValidationResult.INVALID, result.getValidationResult());
301 model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
302 .remove(badStateOutput.getKey().getLocalName());
303 result = new AxValidationResult();
304 result = model.validate(result);
305 assertEquals(ValidationResult.VALID, result.getValidationResult());
307 final AxStateTaskReference badTaskReference = new AxStateTaskReference(
308 new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(),
310 AxStateTaskOutputType.LOGIC, badStateOutput.getKey());
311 model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
312 .put(new AxArtifactKey("NonExistantTask", "0.0.1"), badTaskReference);
313 result = new AxValidationResult();
314 result = model.validate(result);
315 assertEquals(ValidationResult.INVALID, result.getValidationResult());
317 badTaskReference.setStateTaskOutputType(AxStateTaskOutputType.DIRECT);
318 result = new AxValidationResult();
319 result = model.validate(result);
320 assertEquals(ValidationResult.INVALID, result.getValidationResult());
322 model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
323 .remove(new AxArtifactKey("NonExistantTask", "0.0.1"));
324 result = new AxValidationResult();
325 result = model.validate(result);
326 assertEquals(ValidationResult.VALID, result.getValidationResult());
328 final AxStateTaskReference tr = model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
329 .get(new AxArtifactKey("task", "0.0.1"));
331 final String savedStateOutputName = tr.getOutput().getLocalName();
332 tr.getOutput().setLocalName("NonExistantOutput");
333 result = new AxValidationResult();
334 result = model.validate(result);
335 assertEquals(ValidationResult.INVALID, result.getValidationResult());
337 tr.getOutput().setLocalName(savedStateOutputName);
338 result = new AxValidationResult();
339 result = model.validate(result);
340 assertEquals(ValidationResult.VALID, result.getValidationResult());
342 final AxStateOutput so = model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
343 .get(savedStateOutputName);
345 final AxArtifactKey savedOutEvent = so.getOutgingEvent();
346 so.setOutgoingEvent(new AxArtifactKey("NonExistantEvent", "0.0.1"));
347 result = new AxValidationResult();
348 result = model.validate(result);
349 assertEquals(ValidationResult.INVALID, result.getValidationResult());
351 so.setOutgoingEvent(savedOutEvent);
352 result = new AxValidationResult();
353 result = model.validate(result);
354 assertEquals(ValidationResult.VALID, result.getValidationResult());