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.handling.SupportApexPolicyModelCreator;
48 * @author Liam Fallon (liam.fallon@ericsson.com)
50 public class PolicyModelTest {
53 public void testPolicyModel() {
54 assertNotNull(new AxPolicyModel());
55 assertNotNull(new AxPolicyModel(new AxArtifactKey()));
56 assertNotNull(new AxPolicyModel(new AxArtifactKey(), new AxContextSchemas(), new AxKeyInformation(),
57 new AxEvents(), new AxContextAlbums(), new AxTasks(), new AxPolicies()));
59 final AxArtifactKey modelKey = new AxArtifactKey("ModelKey", "0.0.1");
60 final AxArtifactKey schemasKey = new AxArtifactKey("SchemasKey", "0.0.1");
61 final AxArtifactKey eventsKey = new AxArtifactKey("EventsKey", "0.0.1");
62 final AxArtifactKey keyInfoKey = new AxArtifactKey("SchemasKey", "0.0.1");
63 final AxArtifactKey albumsKey = new AxArtifactKey("AlbumsKey", "0.0.1");
64 final AxArtifactKey tasksKey = new AxArtifactKey("TasksKey", "0.0.1");
65 final AxArtifactKey policiesKey = new AxArtifactKey("PoliciesKey", "0.0.1");
67 AxPolicyModel model = new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
68 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
69 new AxTasks(tasksKey), new AxPolicies(policiesKey));
73 assertNotNull(model.getContextModel());
74 assertEquals("ModelKey:0.0.1", model.getKeys().get(0).getId());
78 assertEquals("AxPolicyModel:(AxPolicyModel:(key=AxArtifactKey:(n", model.toString().substring(0, 50));
80 final AxPolicyModel clonedModel = new AxPolicyModel(model);
82 assertFalse(model.hashCode() == 0);
84 assertTrue(model.equals(model));
85 assertTrue(model.equals(clonedModel));
86 assertFalse(model.equals((Object) "Hello"));
87 assertFalse(model.equals(new AxPolicyModel(new AxArtifactKey())));
88 assertFalse(model.equals(new AxPolicyModel(AxArtifactKey.getNullKey(), new AxContextSchemas(schemasKey),
89 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
90 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
91 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(), new AxKeyInformation(keyInfoKey),
92 new AxEvents(eventsKey), new AxContextAlbums(albumsKey), new AxTasks(tasksKey),
93 new AxPolicies(policiesKey))));
94 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey), new AxKeyInformation(),
95 new AxEvents(eventsKey), new AxContextAlbums(albumsKey), new AxTasks(tasksKey),
96 new AxPolicies(policiesKey))));
97 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
98 new AxKeyInformation(keyInfoKey), new AxEvents(), new AxContextAlbums(albumsKey),
99 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
100 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
101 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(),
102 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
103 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
104 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
105 new AxTasks(), new AxPolicies(policiesKey))));
106 assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
107 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
108 new AxTasks(tasksKey), new AxPolicies())));
109 assertTrue(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
110 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
111 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
113 assertEquals(0, model.compareTo(model));
114 assertEquals(0, model.compareTo(clonedModel));
115 assertNotEquals(0, model.compareTo(new AxArtifactKey()));
116 assertNotEquals(0, model.compareTo(new AxPolicyModel(AxArtifactKey.getNullKey(),
117 new AxContextSchemas(schemasKey), new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
118 new AxContextAlbums(albumsKey), new AxTasks(tasksKey), new AxPolicies(policiesKey))));
119 assertNotEquals(0, model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(),
120 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
121 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
123 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
124 new AxKeyInformation(), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
125 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
126 assertNotEquals(0, model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
127 new AxKeyInformation(keyInfoKey), new AxEvents(), new AxContextAlbums(albumsKey),
128 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
130 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
131 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
132 new AxContextAlbums(), new AxTasks(tasksKey), new AxPolicies(policiesKey))));
134 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
135 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
136 new AxContextAlbums(albumsKey), new AxTasks(), new AxPolicies(policiesKey))));
138 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
139 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
140 new AxContextAlbums(albumsKey), new AxTasks(tasksKey), new AxPolicies())));
141 assertEquals(0, model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
142 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
143 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
145 model = new SupportApexPolicyModelCreator().getModel();
147 AxValidationResult result = new AxValidationResult();
148 result = model.validate(result);
149 assertEquals(ValidationResult.VALID, result.getValidationResult());
151 final AxArtifactKey savedPolicyKey = model.getKey();
152 model.setKey(AxArtifactKey.getNullKey());
153 result = new AxValidationResult();
154 result = model.validate(result);
155 assertEquals(ValidationResult.INVALID, result.getValidationResult());
157 model.setKey(savedPolicyKey);
158 result = new AxValidationResult();
159 result = model.validate(result);
160 assertEquals(ValidationResult.VALID, result.getValidationResult());
162 final AxField badField = new AxField(new AxReferenceKey(model.getEvents().get("inEvent").getKey(), "BadField"),
163 new AxArtifactKey("NonExistantSchema", "0.0.1"));
164 model.getEvents().get("inEvent").getParameterMap().put(badField.getKey().getLocalName(), badField);
165 result = new AxValidationResult();
166 result = model.validate(result);
167 assertEquals(ValidationResult.INVALID, result.getValidationResult());
169 model.getEvents().get("inEvent").getParameterMap().remove(badField.getKey().getLocalName());
170 result = new AxValidationResult();
171 result = model.validate(result);
172 assertEquals(ValidationResult.VALID, result.getValidationResult());
174 final AxContextAlbum badAlbum = new AxContextAlbum(new AxArtifactKey("BadAlbum", "0.0.1"), "SomeScope", true,
175 new AxArtifactKey("NonExistantSchema", "0.0.1"));
176 model.getAlbums().getAlbumsMap().put(badAlbum.getKey(), badAlbum);
177 result = new AxValidationResult();
178 result = model.validate(result);
179 assertEquals(ValidationResult.INVALID, result.getValidationResult());
181 model.getAlbums().getAlbumsMap().remove(badAlbum.getKey());
182 result = new AxValidationResult();
183 result = model.validate(result);
184 assertEquals(ValidationResult.VALID, result.getValidationResult());
186 final AxInputField badInField = new AxInputField(
187 new AxReferenceKey(model.getTasks().get("task").getKey(), "BadInField"),
188 new AxArtifactKey("NonExistantSchema", "0.0.1"));
189 model.getTasks().get("task").getInputFields().put(badInField.getKey().getLocalName(), badInField);
190 result = new AxValidationResult();
191 result = model.validate(result);
192 assertEquals(ValidationResult.INVALID, result.getValidationResult());
194 model.getTasks().get("task").getInputFields().remove(badInField.getKey().getLocalName());
195 result = new AxValidationResult();
196 result = model.validate(result);
197 assertEquals(ValidationResult.VALID, result.getValidationResult());
199 final AxOutputField badOutField = new AxOutputField(
200 new AxReferenceKey(model.getTasks().get("task").getKey(), "BadOutField"),
201 new AxArtifactKey("NonExistantSchema", "0.0.1"));
202 model.getTasks().get("task").getOutputFields().put(badOutField.getKey().getLocalName(), badOutField);
203 result = new AxValidationResult();
204 result = model.validate(result);
205 assertEquals(ValidationResult.INVALID, result.getValidationResult());
207 model.getTasks().get("task").getOutputFields().remove(badOutField.getKey().getLocalName());
208 result = new AxValidationResult();
209 result = model.validate(result);
210 assertEquals(ValidationResult.VALID, result.getValidationResult());
212 model.getTasks().get("task").getContextAlbumReferences()
213 .add(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
214 result = new AxValidationResult();
215 result = model.validate(result);
216 assertEquals(ValidationResult.INVALID, result.getValidationResult());
218 model.getTasks().get("task").getContextAlbumReferences()
219 .remove(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
220 result = new AxValidationResult();
221 result = model.validate(result);
222 assertEquals(ValidationResult.VALID, result.getValidationResult());
224 model.getPolicies().get("policy").getStateMap().get("state").getContextAlbumReferences()
225 .add(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
226 result = new AxValidationResult();
227 result = model.validate(result);
228 assertEquals(ValidationResult.INVALID, result.getValidationResult());
230 model.getPolicies().get("policy").getStateMap().get("state").getContextAlbumReferences()
231 .remove(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
232 result = new AxValidationResult();
233 result = model.validate(result);
234 assertEquals(ValidationResult.VALID, result.getValidationResult());
236 final AxArtifactKey savedTrigger = model.getPolicies().get("policy").getStateMap().get("state").getTrigger();
237 model.getPolicies().get("policy").getStateMap().get("state")
238 .setTrigger(new AxArtifactKey("NonExistantEvent", "0.0.1"));
239 result = new AxValidationResult();
240 result = model.validate(result);
241 assertEquals(ValidationResult.INVALID, result.getValidationResult());
243 model.getPolicies().get("policy").getStateMap().get("state").setTrigger(savedTrigger);
244 result = new AxValidationResult();
245 result = model.validate(result);
246 assertEquals(ValidationResult.VALID, result.getValidationResult());
248 final AxArtifactKey savedDefaultTask = model.getPolicies().get("policy").getStateMap().get("state")
250 model.getPolicies().get("policy").getStateMap().get("state")
251 .setDefaultTask(new AxArtifactKey("NonExistantTask", "0.0.1"));
252 result = new AxValidationResult();
253 result = model.validate(result);
254 assertEquals(ValidationResult.INVALID, result.getValidationResult());
256 model.getPolicies().get("policy").getStateMap().get("state").setDefaultTask(savedDefaultTask);
257 result = new AxValidationResult();
258 result = model.validate(result);
259 assertEquals(ValidationResult.VALID, result.getValidationResult());
261 // It is OK not to have TSL
262 final AxTaskSelectionLogic savedTaskSelectionLogic = model.getPolicies().get("policy").getStateMap()
263 .get("state").getTaskSelectionLogic();
264 model.getPolicies().get("policy").getStateMap().get("state")
265 .setTaskSelectionLogic(new AxTaskSelectionLogic(AxReferenceKey.getNullKey()));
266 result = new AxValidationResult();
267 result = model.validate(result);
268 assertEquals(ValidationResult.VALID, result.getValidationResult());
270 model.getTasks().get("task").getInputFields().put(badInField.getKey().getLocalName(), badInField);
271 result = new AxValidationResult();
272 result = model.validate(result);
273 assertEquals(ValidationResult.INVALID, result.getValidationResult());
275 model.getTasks().get("task").getInputFields().remove(badInField.getKey().getLocalName());
276 result = new AxValidationResult();
277 result = model.validate(result);
278 assertEquals(ValidationResult.VALID, result.getValidationResult());
280 model.getPolicies().get("policy").getStateMap().get("state").setTaskSelectionLogic(savedTaskSelectionLogic);
281 result = new AxValidationResult();
282 result = model.validate(result);
283 assertEquals(ValidationResult.VALID, result.getValidationResult());
285 final AxStateOutput badStateOutput = new AxStateOutput(
286 new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(),
288 new AxArtifactKey("NonExistantEvent", "0.0.1"), AxReferenceKey.getNullKey());
289 model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
290 .put(badStateOutput.getKey().getLocalName(), badStateOutput);
291 result = new AxValidationResult();
292 result = model.validate(result);
293 assertEquals(ValidationResult.INVALID, result.getValidationResult());
295 model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
296 .remove(badStateOutput.getKey().getLocalName());
297 result = new AxValidationResult();
298 result = model.validate(result);
299 assertEquals(ValidationResult.VALID, result.getValidationResult());
301 final AxStateTaskReference badTaskReference = new AxStateTaskReference(
302 new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(),
304 AxStateTaskOutputType.LOGIC, badStateOutput.getKey());
305 model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
306 .put(new AxArtifactKey("NonExistantTask", "0.0.1"), badTaskReference);
307 result = new AxValidationResult();
308 result = model.validate(result);
309 assertEquals(ValidationResult.INVALID, result.getValidationResult());
311 badTaskReference.setStateTaskOutputType(AxStateTaskOutputType.DIRECT);
312 result = new AxValidationResult();
313 result = model.validate(result);
314 assertEquals(ValidationResult.INVALID, result.getValidationResult());
316 model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
317 .remove(new AxArtifactKey("NonExistantTask", "0.0.1"));
318 result = new AxValidationResult();
319 result = model.validate(result);
320 assertEquals(ValidationResult.VALID, result.getValidationResult());
322 final AxStateTaskReference tr = model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
323 .get(new AxArtifactKey("task", "0.0.1"));
325 final String savedStateOutputName = tr.getOutput().getLocalName();
326 tr.getOutput().setLocalName("NonExistantOutput");
327 result = new AxValidationResult();
328 result = model.validate(result);
329 assertEquals(ValidationResult.INVALID, result.getValidationResult());
331 tr.getOutput().setLocalName(savedStateOutputName);
332 result = new AxValidationResult();
333 result = model.validate(result);
334 assertEquals(ValidationResult.VALID, result.getValidationResult());
336 final AxStateOutput so = model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
337 .get(savedStateOutputName);
339 final AxArtifactKey savedOutEvent = so.getOutgingEvent();
340 so.setOutgoingEvent(new AxArtifactKey("NonExistantEvent", "0.0.1"));
341 result = new AxValidationResult();
342 result = model.validate(result);
343 assertEquals(ValidationResult.INVALID, result.getValidationResult());
345 so.setOutgoingEvent(savedOutEvent);
346 result = new AxValidationResult();
347 result = model.validate(result);
348 assertEquals(ValidationResult.VALID, result.getValidationResult());