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.TestApexPolicyModelCreator;
52 * @author Liam Fallon (liam.fallon@ericsson.com)
54 public class TestPolicyModel {
57 public void testPolicyModel() {
58 assertNotNull(new AxPolicyModel());
59 assertNotNull(new AxPolicyModel(new AxArtifactKey()));
60 assertNotNull(new AxPolicyModel(new AxArtifactKey(), new AxContextSchemas(), new AxKeyInformation(),
61 new AxEvents(), new AxContextAlbums(), new AxTasks(), new AxPolicies()));
63 final AxArtifactKey modelKey = new AxArtifactKey("ModelKey", "0.0.1");
64 final AxArtifactKey schemasKey = new AxArtifactKey("SchemasKey", "0.0.1");
65 final AxArtifactKey eventsKey = new AxArtifactKey("EventsKey", "0.0.1");
66 final AxArtifactKey keyInfoKey = new AxArtifactKey("SchemasKey", "0.0.1");
67 final AxArtifactKey albumsKey = new AxArtifactKey("AlbumsKey", "0.0.1");
68 final AxArtifactKey tasksKey = new AxArtifactKey("TasksKey", "0.0.1");
69 final AxArtifactKey policiesKey = new AxArtifactKey("PoliciesKey", "0.0.1");
71 AxPolicyModel model = new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
72 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
73 new AxTasks(tasksKey), new AxPolicies(policiesKey));
77 assertNotNull(model.getContextModel());
78 assertEquals("ModelKey:0.0.1", model.getKeys().get(0).getID());
82 assertEquals("AxPolicyModel:(AxPolicyModel:(key=AxArtifactKey:(n", model.toString().substring(0, 50));
84 final AxPolicyModel clonedModel = new AxPolicyModel(model);
86 assertFalse(model.hashCode() == 0);
88 assertTrue(model.equals(model));
89 assertTrue(model.equals(clonedModel));
90 assertFalse(model.equals("Hello"));
91 assertFalse(model.equals(new AxPolicyModel(new AxArtifactKey())));
92 assertFalse(model.equals(new AxPolicyModel(AxArtifactKey.getNullKey(), new AxContextSchemas(schemasKey),
93 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
94 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
95 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(), new AxKeyInformation(keyInfoKey),
96 new AxEvents(eventsKey), new AxContextAlbums(albumsKey), new AxTasks(tasksKey),
97 new AxPolicies(policiesKey))));
98 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey), new AxKeyInformation(),
99 new AxEvents(eventsKey), new AxContextAlbums(albumsKey), new AxTasks(tasksKey),
100 new AxPolicies(policiesKey))));
101 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
102 new AxKeyInformation(keyInfoKey), new AxEvents(), new AxContextAlbums(albumsKey), new AxTasks(tasksKey),
103 new AxPolicies(policiesKey))));
104 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
105 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(), new AxTasks(tasksKey),
106 new AxPolicies(policiesKey))));
107 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
108 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
109 new AxTasks(), new AxPolicies(policiesKey))));
110 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
111 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
112 new AxTasks(tasksKey), new AxPolicies())));
113 assertTrue(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
114 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
115 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
117 assertEquals(0, model.compareTo(model));
118 assertEquals(0, model.compareTo(clonedModel));
119 assertNotEquals(0, model.compareTo(new AxArtifactKey()));
121 model.compareTo(new AxPolicyModel(AxArtifactKey.getNullKey(), new AxContextSchemas(schemasKey),
122 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
123 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
125 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(), new AxKeyInformation(keyInfoKey),
126 new AxEvents(eventsKey), new AxContextAlbums(albumsKey), new AxTasks(tasksKey),
127 new AxPolicies(policiesKey))));
129 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey), new AxKeyInformation(),
130 new AxEvents(eventsKey), new AxContextAlbums(albumsKey), new AxTasks(tasksKey),
131 new AxPolicies(policiesKey))));
133 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
134 new AxKeyInformation(keyInfoKey), new AxEvents(), new AxContextAlbums(albumsKey),
135 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
137 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
138 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(),
139 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
141 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
142 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
143 new AxTasks(), new AxPolicies(policiesKey))));
145 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
146 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
147 new AxTasks(tasksKey), new AxPolicies())));
149 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
150 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
151 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
153 model = new TestApexPolicyModelCreator().getModel();
155 AxValidationResult result = new AxValidationResult();
156 result = model.validate(result);
157 assertEquals(ValidationResult.VALID, result.getValidationResult());
159 final AxArtifactKey savedPolicyKey = model.getKey();
160 model.setKey(AxArtifactKey.getNullKey());
161 result = new AxValidationResult();
162 result = model.validate(result);
163 assertEquals(ValidationResult.INVALID, result.getValidationResult());
165 model.setKey(savedPolicyKey);
166 result = new AxValidationResult();
167 result = model.validate(result);
168 assertEquals(ValidationResult.VALID, result.getValidationResult());
170 final AxField badField = new AxField(new AxReferenceKey(model.getEvents().get("inEvent").getKey(), "BadField"),
171 new AxArtifactKey("NonExistantSchema", "0.0.1"));
172 model.getEvents().get("inEvent").getParameterMap().put(badField.getKey().getLocalName(), badField);
173 result = new AxValidationResult();
174 result = model.validate(result);
175 assertEquals(ValidationResult.INVALID, result.getValidationResult());
177 model.getEvents().get("inEvent").getParameterMap().remove(badField.getKey().getLocalName());
178 result = new AxValidationResult();
179 result = model.validate(result);
180 assertEquals(ValidationResult.VALID, result.getValidationResult());
182 final AxContextAlbum badAlbum = new AxContextAlbum(new AxArtifactKey("BadAlbum", "0.0.1"), "SomeScope", true,
183 new AxArtifactKey("NonExistantSchema", "0.0.1"));
184 model.getAlbums().getAlbumsMap().put(badAlbum.getKey(), badAlbum);
185 result = new AxValidationResult();
186 result = model.validate(result);
187 assertEquals(ValidationResult.INVALID, result.getValidationResult());
189 model.getAlbums().getAlbumsMap().remove(badAlbum.getKey());
190 result = new AxValidationResult();
191 result = model.validate(result);
192 assertEquals(ValidationResult.VALID, result.getValidationResult());
194 final AxInputField badInField =
195 new AxInputField(new AxReferenceKey(model.getTasks().get("task").getKey(), "BadInField"),
196 new AxArtifactKey("NonExistantSchema", "0.0.1"));
197 model.getTasks().get("task").getInputFields().put(badInField.getKey().getLocalName(), badInField);
198 result = new AxValidationResult();
199 result = model.validate(result);
200 assertEquals(ValidationResult.INVALID, result.getValidationResult());
202 model.getTasks().get("task").getInputFields().remove(badInField.getKey().getLocalName());
203 result = new AxValidationResult();
204 result = model.validate(result);
205 assertEquals(ValidationResult.VALID, result.getValidationResult());
207 final AxOutputField badOutField =
208 new AxOutputField(new AxReferenceKey(model.getTasks().get("task").getKey(), "BadOutField"),
209 new AxArtifactKey("NonExistantSchema", "0.0.1"));
210 model.getTasks().get("task").getOutputFields().put(badOutField.getKey().getLocalName(), badOutField);
211 result = new AxValidationResult();
212 result = model.validate(result);
213 assertEquals(ValidationResult.INVALID, result.getValidationResult());
215 model.getTasks().get("task").getOutputFields().remove(badOutField.getKey().getLocalName());
216 result = new AxValidationResult();
217 result = model.validate(result);
218 assertEquals(ValidationResult.VALID, result.getValidationResult());
220 model.getTasks().get("task").getContextAlbumReferences()
221 .add(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
222 result = new AxValidationResult();
223 result = model.validate(result);
224 assertEquals(ValidationResult.INVALID, result.getValidationResult());
226 model.getTasks().get("task").getContextAlbumReferences()
227 .remove(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
228 result = new AxValidationResult();
229 result = model.validate(result);
230 assertEquals(ValidationResult.VALID, result.getValidationResult());
232 model.getPolicies().get("policy").getStateMap().get("state").getContextAlbumReferences()
233 .add(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
234 result = new AxValidationResult();
235 result = model.validate(result);
236 assertEquals(ValidationResult.INVALID, result.getValidationResult());
238 model.getPolicies().get("policy").getStateMap().get("state").getContextAlbumReferences()
239 .remove(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
240 result = new AxValidationResult();
241 result = model.validate(result);
242 assertEquals(ValidationResult.VALID, result.getValidationResult());
244 final AxArtifactKey savedTrigger = model.getPolicies().get("policy").getStateMap().get("state").getTrigger();
245 model.getPolicies().get("policy").getStateMap().get("state")
246 .setTrigger(new AxArtifactKey("NonExistantEvent", "0.0.1"));
247 result = new AxValidationResult();
248 result = model.validate(result);
249 assertEquals(ValidationResult.INVALID, result.getValidationResult());
251 model.getPolicies().get("policy").getStateMap().get("state").setTrigger(savedTrigger);
252 result = new AxValidationResult();
253 result = model.validate(result);
254 assertEquals(ValidationResult.VALID, result.getValidationResult());
256 final AxArtifactKey savedDefaultTask =
257 model.getPolicies().get("policy").getStateMap().get("state").getDefaultTask();
258 model.getPolicies().get("policy").getStateMap().get("state")
259 .setDefaultTask(new AxArtifactKey("NonExistantTask", "0.0.1"));
260 result = new AxValidationResult();
261 result = model.validate(result);
262 assertEquals(ValidationResult.INVALID, result.getValidationResult());
264 model.getPolicies().get("policy").getStateMap().get("state").setDefaultTask(savedDefaultTask);
265 result = new AxValidationResult();
266 result = model.validate(result);
267 assertEquals(ValidationResult.VALID, result.getValidationResult());
269 // It is OK not to have TSL
270 final AxTaskSelectionLogic savedTSL =
271 model.getPolicies().get("policy").getStateMap().get("state").getTaskSelectionLogic();
272 model.getPolicies().get("policy").getStateMap().get("state")
273 .setTaskSelectionLogic(new AxTaskSelectionLogic(AxReferenceKey.getNullKey()));
274 result = new AxValidationResult();
275 result = model.validate(result);
276 assertEquals(ValidationResult.VALID, result.getValidationResult());
278 model.getTasks().get("task").getInputFields().put(badInField.getKey().getLocalName(), badInField);
279 result = new AxValidationResult();
280 result = model.validate(result);
281 assertEquals(ValidationResult.INVALID, result.getValidationResult());
283 model.getTasks().get("task").getInputFields().remove(badInField.getKey().getLocalName());
284 result = new AxValidationResult();
285 result = model.validate(result);
286 assertEquals(ValidationResult.VALID, result.getValidationResult());
288 model.getPolicies().get("policy").getStateMap().get("state").setTaskSelectionLogic(savedTSL);
289 result = new AxValidationResult();
290 result = model.validate(result);
291 assertEquals(ValidationResult.VALID, result.getValidationResult());
293 final AxStateOutput badStateOutput = new AxStateOutput(
294 new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(), "BadSO"),
295 new AxArtifactKey("NonExistantEvent", "0.0.1"), AxReferenceKey.getNullKey());
296 model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
297 .put(badStateOutput.getKey().getLocalName(), badStateOutput);
298 result = new AxValidationResult();
299 result = model.validate(result);
300 assertEquals(ValidationResult.INVALID, result.getValidationResult());
302 model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
303 .remove(badStateOutput.getKey().getLocalName());
304 result = new AxValidationResult();
305 result = model.validate(result);
306 assertEquals(ValidationResult.VALID, result.getValidationResult());
308 final AxStateTaskReference badTR = new AxStateTaskReference(
309 new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(),
311 AxStateTaskOutputType.LOGIC, badStateOutput.getKey());
312 model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
313 .put(new AxArtifactKey("NonExistantTask", "0.0.1"), badTR);
314 result = new AxValidationResult();
315 result = model.validate(result);
316 assertEquals(ValidationResult.INVALID, result.getValidationResult());
318 badTR.setStateTaskOutputType(AxStateTaskOutputType.DIRECT);
319 result = new AxValidationResult();
320 result = model.validate(result);
321 assertEquals(ValidationResult.INVALID, result.getValidationResult());
323 model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
324 .remove(new AxArtifactKey("NonExistantTask", "0.0.1"));
325 result = new AxValidationResult();
326 result = model.validate(result);
327 assertEquals(ValidationResult.VALID, result.getValidationResult());
329 final AxStateTaskReference tr = model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
330 .get(new AxArtifactKey("task", "0.0.1"));
332 final String savedSOName = tr.getOutput().getLocalName();
333 tr.getOutput().setLocalName("NonExistantOutput");
334 result = new AxValidationResult();
335 result = model.validate(result);
336 assertEquals(ValidationResult.INVALID, result.getValidationResult());
338 tr.getOutput().setLocalName(savedSOName);
339 result = new AxValidationResult();
340 result = model.validate(result);
341 assertEquals(ValidationResult.VALID, result.getValidationResult());
343 final AxStateOutput so =
344 model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs().get(savedSOName);
346 final AxArtifactKey savedOE = so.getOutgingEvent();
347 so.setOutgoingEvent(new AxArtifactKey("NonExistantEvent", "0.0.1"));
348 result = new AxValidationResult();
349 result = model.validate(result);
350 assertEquals(ValidationResult.INVALID, result.getValidationResult());
352 so.setOutgoingEvent(savedOE);
353 result = new AxValidationResult();
354 result = model.validate(result);
355 assertEquals(ValidationResult.VALID, result.getValidationResult());