2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2016-2018 Ericsson. All rights reserved.
4 * Modifications Copyright (C) 2019 Nordix Foundation.
5 * ================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
22 package org.onap.policy.apex.model.policymodel.concepts;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertFalse;
26 import static org.junit.Assert.assertNotEquals;
27 import static org.junit.Assert.assertNotNull;
28 import static org.junit.Assert.assertTrue;
30 import org.junit.Test;
31 import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
32 import org.onap.policy.apex.model.basicmodel.concepts.AxKeyInformation;
33 import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey;
34 import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
35 import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult.ValidationResult;
36 import org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbum;
37 import org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbums;
38 import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchemas;
39 import org.onap.policy.apex.model.eventmodel.concepts.AxEvents;
40 import org.onap.policy.apex.model.eventmodel.concepts.AxField;
41 import org.onap.policy.apex.model.eventmodel.concepts.AxInputField;
42 import org.onap.policy.apex.model.eventmodel.concepts.AxOutputField;
43 import org.onap.policy.apex.model.policymodel.concepts.AxPolicies;
44 import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
45 import org.onap.policy.apex.model.policymodel.concepts.AxStateOutput;
46 import org.onap.policy.apex.model.policymodel.concepts.AxStateTaskOutputType;
47 import org.onap.policy.apex.model.policymodel.concepts.AxStateTaskReference;
48 import org.onap.policy.apex.model.policymodel.concepts.AxTaskSelectionLogic;
49 import org.onap.policy.apex.model.policymodel.concepts.AxTasks;
50 import org.onap.policy.apex.model.policymodel.handling.SupportApexPolicyModelCreator;
55 * @author Liam Fallon (liam.fallon@ericsson.com)
57 public class PolicyModelTest {
60 public void testPolicyModel() {
61 assertNotNull(new AxPolicyModel());
62 assertNotNull(new AxPolicyModel(new AxArtifactKey()));
63 assertNotNull(new AxPolicyModel(new AxArtifactKey(), new AxContextSchemas(), new AxKeyInformation(),
64 new AxEvents(), new AxContextAlbums(), new AxTasks(), new AxPolicies()));
66 final AxArtifactKey modelKey = new AxArtifactKey("ModelKey", "0.0.1");
67 final AxArtifactKey schemasKey = new AxArtifactKey("SchemasKey", "0.0.1");
68 final AxArtifactKey eventsKey = new AxArtifactKey("EventsKey", "0.0.1");
69 final AxArtifactKey keyInfoKey = new AxArtifactKey("SchemasKey", "0.0.1");
70 final AxArtifactKey albumsKey = new AxArtifactKey("AlbumsKey", "0.0.1");
71 final AxArtifactKey tasksKey = new AxArtifactKey("TasksKey", "0.0.1");
72 final AxArtifactKey policiesKey = new AxArtifactKey("PoliciesKey", "0.0.1");
74 AxPolicyModel model = new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
75 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
76 new AxTasks(tasksKey), new AxPolicies(policiesKey));
80 assertNotNull(model.getContextModel());
81 assertEquals("ModelKey:0.0.1", model.getKeys().get(0).getId());
85 assertEquals("AxPolicyModel:(AxPolicyModel:(key=AxArtifactKey:(n", model.toString().substring(0, 50));
87 final AxPolicyModel clonedModel = new AxPolicyModel(model);
89 assertFalse(model.hashCode() == 0);
91 assertTrue(model.equals(model));
92 assertTrue(model.equals(clonedModel));
93 assertFalse(model.equals((Object)"Hello"));
94 assertFalse(model.equals(new AxPolicyModel(new AxArtifactKey())));
95 assertFalse(model.equals(new AxPolicyModel(AxArtifactKey.getNullKey(), new AxContextSchemas(schemasKey),
96 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
97 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
98 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(), new AxKeyInformation(keyInfoKey),
99 new AxEvents(eventsKey), new AxContextAlbums(albumsKey), new AxTasks(tasksKey),
100 new AxPolicies(policiesKey))));
101 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey), new AxKeyInformation(),
102 new AxEvents(eventsKey), 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(), new AxContextAlbums(albumsKey),
106 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
107 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
108 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(),
109 new AxTasks(tasksKey), 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(), new AxPolicies(policiesKey))));
113 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
114 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
115 new AxTasks(tasksKey), new AxPolicies())));
116 assertTrue(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
117 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
118 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
120 assertEquals(0, model.compareTo(model));
121 assertEquals(0, model.compareTo(clonedModel));
122 assertNotEquals(0, model.compareTo(new AxArtifactKey()));
123 assertNotEquals(0, model.compareTo(new AxPolicyModel(AxArtifactKey.getNullKey(),
124 new AxContextSchemas(schemasKey), new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
125 new AxContextAlbums(albumsKey), new AxTasks(tasksKey), new AxPolicies(policiesKey))));
126 assertNotEquals(0, model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(),
127 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
128 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
130 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
131 new AxKeyInformation(), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
132 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
133 assertNotEquals(0, 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),
139 new AxContextAlbums(), new AxTasks(tasksKey), new AxPolicies(policiesKey))));
141 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
142 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
143 new AxContextAlbums(albumsKey), new AxTasks(), new AxPolicies(policiesKey))));
145 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
146 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
147 new AxContextAlbums(albumsKey), new AxTasks(tasksKey), new AxPolicies())));
148 assertEquals(0, model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
149 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
150 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
152 model = new SupportApexPolicyModelCreator().getModel();
154 AxValidationResult result = new AxValidationResult();
155 result = model.validate(result);
156 assertEquals(ValidationResult.VALID, result.getValidationResult());
158 final AxArtifactKey savedPolicyKey = model.getKey();
159 model.setKey(AxArtifactKey.getNullKey());
160 result = new AxValidationResult();
161 result = model.validate(result);
162 assertEquals(ValidationResult.INVALID, result.getValidationResult());
164 model.setKey(savedPolicyKey);
165 result = new AxValidationResult();
166 result = model.validate(result);
167 assertEquals(ValidationResult.VALID, result.getValidationResult());
169 final AxField badField = new AxField(new AxReferenceKey(model.getEvents().get("inEvent").getKey(), "BadField"),
170 new AxArtifactKey("NonExistantSchema", "0.0.1"));
171 model.getEvents().get("inEvent").getParameterMap().put(badField.getKey().getLocalName(), badField);
172 result = new AxValidationResult();
173 result = model.validate(result);
174 assertEquals(ValidationResult.INVALID, result.getValidationResult());
176 model.getEvents().get("inEvent").getParameterMap().remove(badField.getKey().getLocalName());
177 result = new AxValidationResult();
178 result = model.validate(result);
179 assertEquals(ValidationResult.VALID, result.getValidationResult());
181 final AxContextAlbum badAlbum = new AxContextAlbum(new AxArtifactKey("BadAlbum", "0.0.1"), "SomeScope", true,
182 new AxArtifactKey("NonExistantSchema", "0.0.1"));
183 model.getAlbums().getAlbumsMap().put(badAlbum.getKey(), badAlbum);
184 result = new AxValidationResult();
185 result = model.validate(result);
186 assertEquals(ValidationResult.INVALID, result.getValidationResult());
188 model.getAlbums().getAlbumsMap().remove(badAlbum.getKey());
189 result = new AxValidationResult();
190 result = model.validate(result);
191 assertEquals(ValidationResult.VALID, result.getValidationResult());
193 final AxInputField badInField = new AxInputField(
194 new AxReferenceKey(model.getTasks().get("task").getKey(), "BadInField"),
195 new AxArtifactKey("NonExistantSchema", "0.0.1"));
196 model.getTasks().get("task").getInputFields().put(badInField.getKey().getLocalName(), badInField);
197 result = new AxValidationResult();
198 result = model.validate(result);
199 assertEquals(ValidationResult.INVALID, result.getValidationResult());
201 model.getTasks().get("task").getInputFields().remove(badInField.getKey().getLocalName());
202 result = new AxValidationResult();
203 result = model.validate(result);
204 assertEquals(ValidationResult.VALID, result.getValidationResult());
206 final AxOutputField badOutField = new AxOutputField(
207 new AxReferenceKey(model.getTasks().get("task").getKey(), "BadOutField"),
208 new AxArtifactKey("NonExistantSchema", "0.0.1"));
209 model.getTasks().get("task").getOutputFields().put(badOutField.getKey().getLocalName(), badOutField);
210 result = new AxValidationResult();
211 result = model.validate(result);
212 assertEquals(ValidationResult.INVALID, result.getValidationResult());
214 model.getTasks().get("task").getOutputFields().remove(badOutField.getKey().getLocalName());
215 result = new AxValidationResult();
216 result = model.validate(result);
217 assertEquals(ValidationResult.VALID, result.getValidationResult());
219 model.getTasks().get("task").getContextAlbumReferences()
220 .add(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
221 result = new AxValidationResult();
222 result = model.validate(result);
223 assertEquals(ValidationResult.INVALID, result.getValidationResult());
225 model.getTasks().get("task").getContextAlbumReferences()
226 .remove(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
227 result = new AxValidationResult();
228 result = model.validate(result);
229 assertEquals(ValidationResult.VALID, result.getValidationResult());
231 model.getPolicies().get("policy").getStateMap().get("state").getContextAlbumReferences()
232 .add(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
233 result = new AxValidationResult();
234 result = model.validate(result);
235 assertEquals(ValidationResult.INVALID, result.getValidationResult());
237 model.getPolicies().get("policy").getStateMap().get("state").getContextAlbumReferences()
238 .remove(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
239 result = new AxValidationResult();
240 result = model.validate(result);
241 assertEquals(ValidationResult.VALID, result.getValidationResult());
243 final AxArtifactKey savedTrigger = model.getPolicies().get("policy").getStateMap().get("state").getTrigger();
244 model.getPolicies().get("policy").getStateMap().get("state")
245 .setTrigger(new AxArtifactKey("NonExistantEvent", "0.0.1"));
246 result = new AxValidationResult();
247 result = model.validate(result);
248 assertEquals(ValidationResult.INVALID, result.getValidationResult());
250 model.getPolicies().get("policy").getStateMap().get("state").setTrigger(savedTrigger);
251 result = new AxValidationResult();
252 result = model.validate(result);
253 assertEquals(ValidationResult.VALID, result.getValidationResult());
255 final AxArtifactKey savedDefaultTask = model.getPolicies().get("policy").getStateMap().get("state")
257 model.getPolicies().get("policy").getStateMap().get("state")
258 .setDefaultTask(new AxArtifactKey("NonExistantTask", "0.0.1"));
259 result = new AxValidationResult();
260 result = model.validate(result);
261 assertEquals(ValidationResult.INVALID, result.getValidationResult());
263 model.getPolicies().get("policy").getStateMap().get("state").setDefaultTask(savedDefaultTask);
264 result = new AxValidationResult();
265 result = model.validate(result);
266 assertEquals(ValidationResult.VALID, result.getValidationResult());
268 // It is OK not to have TSL
269 final AxTaskSelectionLogic savedTaskSelectionLogic = model.getPolicies().get("policy").getStateMap()
270 .get("state").getTaskSelectionLogic();
271 model.getPolicies().get("policy").getStateMap().get("state")
272 .setTaskSelectionLogic(new AxTaskSelectionLogic(AxReferenceKey.getNullKey()));
273 result = new AxValidationResult();
274 result = model.validate(result);
275 assertEquals(ValidationResult.VALID, result.getValidationResult());
277 model.getTasks().get("task").getInputFields().put(badInField.getKey().getLocalName(), badInField);
278 result = new AxValidationResult();
279 result = model.validate(result);
280 assertEquals(ValidationResult.INVALID, result.getValidationResult());
282 model.getTasks().get("task").getInputFields().remove(badInField.getKey().getLocalName());
283 result = new AxValidationResult();
284 result = model.validate(result);
285 assertEquals(ValidationResult.VALID, result.getValidationResult());
287 model.getPolicies().get("policy").getStateMap().get("state").setTaskSelectionLogic(savedTaskSelectionLogic);
288 result = new AxValidationResult();
289 result = model.validate(result);
290 assertEquals(ValidationResult.VALID, result.getValidationResult());
292 final AxStateOutput badStateOutput = new AxStateOutput(
293 new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(),
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 badTaskReference = 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"), badTaskReference);
314 result = new AxValidationResult();
315 result = model.validate(result);
316 assertEquals(ValidationResult.INVALID, result.getValidationResult());
318 badTaskReference.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 savedStateOutputName = 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(savedStateOutputName);
339 result = new AxValidationResult();
340 result = model.validate(result);
341 assertEquals(ValidationResult.VALID, result.getValidationResult());
343 final AxStateOutput so = model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
344 .get(savedStateOutputName);
346 final AxArtifactKey savedOutEvent = 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(savedOutEvent);
353 result = new AxValidationResult();
354 result = model.validate(result);
355 assertEquals(ValidationResult.VALID, result.getValidationResult());