2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2016-2018 Ericsson. All rights reserved.
4 * Modifications Copyright (C) 2019-2020 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.assertNotEquals;
26 import static org.junit.Assert.assertNotNull;
28 import org.junit.Test;
29 import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
30 import org.onap.policy.apex.model.basicmodel.concepts.AxKeyInformation;
31 import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey;
32 import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
33 import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult.ValidationResult;
34 import org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbum;
35 import org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbums;
36 import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchemas;
37 import org.onap.policy.apex.model.eventmodel.concepts.AxEvents;
38 import org.onap.policy.apex.model.eventmodel.concepts.AxField;
39 import org.onap.policy.apex.model.eventmodel.concepts.AxInputField;
40 import org.onap.policy.apex.model.eventmodel.concepts.AxOutputField;
41 import org.onap.policy.apex.model.policymodel.handling.SupportApexPolicyModelCreator;
46 * @author Liam Fallon (liam.fallon@ericsson.com)
48 public class PolicyModelTest {
51 public void testPolicyModel() {
52 assertNotNull(new AxPolicyModel());
53 assertNotNull(new AxPolicyModel(new AxArtifactKey()));
54 assertNotNull(new AxPolicyModel(new AxArtifactKey(), new AxContextSchemas(), new AxKeyInformation(),
55 new AxEvents(), new AxContextAlbums(), new AxTasks(), new AxPolicies()));
57 final AxArtifactKey modelKey = new AxArtifactKey("ModelKey", "0.0.1");
58 final AxArtifactKey schemasKey = new AxArtifactKey("SchemasKey", "0.0.1");
59 final AxArtifactKey eventsKey = new AxArtifactKey("EventsKey", "0.0.1");
60 final AxArtifactKey keyInfoKey = new AxArtifactKey("SchemasKey", "0.0.1");
61 final AxArtifactKey albumsKey = new AxArtifactKey("AlbumsKey", "0.0.1");
62 final AxArtifactKey tasksKey = new AxArtifactKey("TasksKey", "0.0.1");
63 final AxArtifactKey policiesKey = new AxArtifactKey("PoliciesKey", "0.0.1");
65 AxPolicyModel model = new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
66 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
67 new AxTasks(tasksKey), new AxPolicies(policiesKey));
71 assertNotNull(model.getContextModel());
72 assertEquals("ModelKey:0.0.1", model.getKeys().get(0).getId());
76 assertEquals("AxPolicyModel:(AxPolicyModel:(key=AxArtifactKey:(n", model.toString().substring(0, 50));
78 final AxPolicyModel clonedModel = new AxPolicyModel(model);
80 assertNotEquals(0, model.hashCode());
82 assertEquals(model, model);
83 assertEquals(model, clonedModel);
84 assertNotEquals(model, (Object) "Hello");
85 assertNotEquals(model, new AxPolicyModel(new AxArtifactKey()));
86 assertNotEquals(model, new AxPolicyModel(AxArtifactKey.getNullKey(), new AxContextSchemas(schemasKey),
87 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
88 new AxTasks(tasksKey), new AxPolicies(policiesKey)));
89 assertNotEquals(model, new AxPolicyModel(modelKey, new AxContextSchemas(), new AxKeyInformation(keyInfoKey),
90 new AxEvents(eventsKey), new AxContextAlbums(albumsKey), new AxTasks(tasksKey),
91 new AxPolicies(policiesKey)));
92 assertNotEquals(model, new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey), new AxKeyInformation(),
93 new AxEvents(eventsKey), new AxContextAlbums(albumsKey), new AxTasks(tasksKey),
94 new AxPolicies(policiesKey)));
95 assertNotEquals(model, new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
96 new AxKeyInformation(keyInfoKey), new AxEvents(), new AxContextAlbums(albumsKey),
97 new AxTasks(tasksKey), new AxPolicies(policiesKey)));
98 assertNotEquals(model, new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
99 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(),
100 new AxTasks(tasksKey), new AxPolicies(policiesKey)));
101 assertNotEquals(model, new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
102 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
103 new AxTasks(), new AxPolicies(policiesKey)));
104 assertNotEquals(model, new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
105 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
106 new AxTasks(tasksKey), new AxPolicies()));
107 assertEquals(model, new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
108 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
109 new AxTasks(tasksKey), new AxPolicies(policiesKey)));
111 assertEquals(0, model.compareTo(model));
112 assertEquals(0, model.compareTo(clonedModel));
113 assertNotEquals(0, model.compareTo(new AxArtifactKey()));
114 assertNotEquals(0, model.compareTo(new AxPolicyModel(AxArtifactKey.getNullKey(),
115 new AxContextSchemas(schemasKey), new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
116 new AxContextAlbums(albumsKey), new AxTasks(tasksKey), new AxPolicies(policiesKey))));
117 assertNotEquals(0, model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(),
118 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
119 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
121 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
122 new AxKeyInformation(), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
123 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
124 assertNotEquals(0, model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
125 new AxKeyInformation(keyInfoKey), new AxEvents(), new AxContextAlbums(albumsKey),
126 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
128 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
129 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
130 new AxContextAlbums(), new AxTasks(tasksKey), new AxPolicies(policiesKey))));
132 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
133 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
134 new AxContextAlbums(albumsKey), new AxTasks(), new AxPolicies(policiesKey))));
136 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
137 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
138 new AxContextAlbums(albumsKey), new AxTasks(tasksKey), new AxPolicies())));
139 assertEquals(0, model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
140 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
141 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
143 model = new SupportApexPolicyModelCreator().getModel();
145 AxValidationResult result = new AxValidationResult();
146 result = model.validate(result);
147 assertEquals(ValidationResult.VALID, result.getValidationResult());
149 final AxArtifactKey savedPolicyKey = model.getKey();
150 model.setKey(AxArtifactKey.getNullKey());
151 result = new AxValidationResult();
152 result = model.validate(result);
153 assertEquals(ValidationResult.INVALID, result.getValidationResult());
155 model.setKey(savedPolicyKey);
156 result = new AxValidationResult();
157 result = model.validate(result);
158 assertEquals(ValidationResult.VALID, result.getValidationResult());
160 final AxField badField = new AxField(new AxReferenceKey(model.getEvents().get("inEvent").getKey(), "BadField"),
161 new AxArtifactKey("NonExistantSchema", "0.0.1"));
162 model.getEvents().get("inEvent").getParameterMap().put(badField.getKey().getLocalName(), badField);
163 result = new AxValidationResult();
164 result = model.validate(result);
165 assertEquals(ValidationResult.INVALID, result.getValidationResult());
167 model.getEvents().get("inEvent").getParameterMap().remove(badField.getKey().getLocalName());
168 result = new AxValidationResult();
169 result = model.validate(result);
170 assertEquals(ValidationResult.VALID, result.getValidationResult());
172 final AxContextAlbum badAlbum = new AxContextAlbum(new AxArtifactKey("BadAlbum", "0.0.1"), "SomeScope", true,
173 new AxArtifactKey("NonExistantSchema", "0.0.1"));
174 model.getAlbums().getAlbumsMap().put(badAlbum.getKey(), badAlbum);
175 result = new AxValidationResult();
176 result = model.validate(result);
177 assertEquals(ValidationResult.INVALID, result.getValidationResult());
179 model.getAlbums().getAlbumsMap().remove(badAlbum.getKey());
180 result = new AxValidationResult();
181 result = model.validate(result);
182 assertEquals(ValidationResult.VALID, result.getValidationResult());
184 final AxInputField badInField = new AxInputField(
185 new AxReferenceKey(model.getTasks().get("task").getKey(), "BadInField"),
186 new AxArtifactKey("NonExistantSchema", "0.0.1"));
187 model.getTasks().get("task").getInputFields().put(badInField.getKey().getLocalName(), badInField);
188 result = new AxValidationResult();
189 result = model.validate(result);
190 assertEquals(ValidationResult.INVALID, result.getValidationResult());
192 model.getTasks().get("task").getInputFields().remove(badInField.getKey().getLocalName());
193 result = new AxValidationResult();
194 result = model.validate(result);
195 assertEquals(ValidationResult.VALID, result.getValidationResult());
197 final AxOutputField badOutField = new AxOutputField(
198 new AxReferenceKey(model.getTasks().get("task").getKey(), "BadOutField"),
199 new AxArtifactKey("NonExistantSchema", "0.0.1"));
200 model.getTasks().get("task").getOutputFields().put(badOutField.getKey().getLocalName(), badOutField);
201 result = new AxValidationResult();
202 result = model.validate(result);
203 assertEquals(ValidationResult.INVALID, result.getValidationResult());
205 model.getTasks().get("task").getOutputFields().remove(badOutField.getKey().getLocalName());
206 result = new AxValidationResult();
207 result = model.validate(result);
208 assertEquals(ValidationResult.VALID, result.getValidationResult());
210 model.getTasks().get("task").getContextAlbumReferences()
211 .add(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
212 result = new AxValidationResult();
213 result = model.validate(result);
214 assertEquals(ValidationResult.INVALID, result.getValidationResult());
216 model.getTasks().get("task").getContextAlbumReferences()
217 .remove(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
218 result = new AxValidationResult();
219 result = model.validate(result);
220 assertEquals(ValidationResult.VALID, result.getValidationResult());
222 model.getPolicies().get("policy").getStateMap().get("state").getContextAlbumReferences()
223 .add(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
224 result = new AxValidationResult();
225 result = model.validate(result);
226 assertEquals(ValidationResult.INVALID, result.getValidationResult());
228 model.getPolicies().get("policy").getStateMap().get("state").getContextAlbumReferences()
229 .remove(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
230 result = new AxValidationResult();
231 result = model.validate(result);
232 assertEquals(ValidationResult.VALID, result.getValidationResult());
234 final AxArtifactKey savedTrigger = model.getPolicies().get("policy").getStateMap().get("state").getTrigger();
235 model.getPolicies().get("policy").getStateMap().get("state")
236 .setTrigger(new AxArtifactKey("NonExistantEvent", "0.0.1"));
237 result = new AxValidationResult();
238 result = model.validate(result);
239 assertEquals(ValidationResult.INVALID, result.getValidationResult());
241 model.getPolicies().get("policy").getStateMap().get("state").setTrigger(savedTrigger);
242 result = new AxValidationResult();
243 result = model.validate(result);
244 assertEquals(ValidationResult.VALID, result.getValidationResult());
246 final AxArtifactKey savedDefaultTask = model.getPolicies().get("policy").getStateMap().get("state")
248 model.getPolicies().get("policy").getStateMap().get("state")
249 .setDefaultTask(new AxArtifactKey("NonExistantTask", "0.0.1"));
250 result = new AxValidationResult();
251 result = model.validate(result);
252 assertEquals(ValidationResult.INVALID, result.getValidationResult());
254 model.getPolicies().get("policy").getStateMap().get("state").setDefaultTask(savedDefaultTask);
255 result = new AxValidationResult();
256 result = model.validate(result);
257 assertEquals(ValidationResult.VALID, result.getValidationResult());
259 // It is OK not to have TSL
260 final AxTaskSelectionLogic savedTaskSelectionLogic = model.getPolicies().get("policy").getStateMap()
261 .get("state").getTaskSelectionLogic();
262 model.getPolicies().get("policy").getStateMap().get("state")
263 .setTaskSelectionLogic(new AxTaskSelectionLogic(AxReferenceKey.getNullKey()));
264 result = new AxValidationResult();
265 result = model.validate(result);
266 assertEquals(ValidationResult.VALID, result.getValidationResult());
268 model.getTasks().get("task").getInputFields().put(badInField.getKey().getLocalName(), badInField);
269 result = new AxValidationResult();
270 result = model.validate(result);
271 assertEquals(ValidationResult.INVALID, result.getValidationResult());
273 model.getTasks().get("task").getInputFields().remove(badInField.getKey().getLocalName());
274 result = new AxValidationResult();
275 result = model.validate(result);
276 assertEquals(ValidationResult.VALID, result.getValidationResult());
278 model.getPolicies().get("policy").getStateMap().get("state").setTaskSelectionLogic(savedTaskSelectionLogic);
279 result = new AxValidationResult();
280 result = model.validate(result);
281 assertEquals(ValidationResult.VALID, result.getValidationResult());
283 final AxStateOutput badStateOutput = new AxStateOutput(
284 new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(),
286 new AxArtifactKey("NonExistantEvent", "0.0.1"), AxReferenceKey.getNullKey());
287 model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
288 .put(badStateOutput.getKey().getLocalName(), badStateOutput);
289 result = new AxValidationResult();
290 result = model.validate(result);
291 assertEquals(ValidationResult.INVALID, result.getValidationResult());
293 model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
294 .remove(badStateOutput.getKey().getLocalName());
295 result = new AxValidationResult();
296 result = model.validate(result);
297 assertEquals(ValidationResult.VALID, result.getValidationResult());
299 final AxStateTaskReference badTaskReference = new AxStateTaskReference(
300 new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(),
302 AxStateTaskOutputType.LOGIC, badStateOutput.getKey());
303 model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
304 .put(new AxArtifactKey("NonExistantTask", "0.0.1"), badTaskReference);
305 result = new AxValidationResult();
306 result = model.validate(result);
307 assertEquals(ValidationResult.INVALID, result.getValidationResult());
309 badTaskReference.setStateTaskOutputType(AxStateTaskOutputType.DIRECT);
310 result = new AxValidationResult();
311 result = model.validate(result);
312 assertEquals(ValidationResult.INVALID, result.getValidationResult());
314 model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
315 .remove(new AxArtifactKey("NonExistantTask", "0.0.1"));
316 result = new AxValidationResult();
317 result = model.validate(result);
318 assertEquals(ValidationResult.VALID, result.getValidationResult());
320 final AxStateTaskReference tr = model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
321 .get(new AxArtifactKey("task", "0.0.1"));
323 final String savedStateOutputName = tr.getOutput().getLocalName();
324 tr.getOutput().setLocalName("NonExistantOutput");
325 result = new AxValidationResult();
326 result = model.validate(result);
327 assertEquals(ValidationResult.INVALID, result.getValidationResult());
329 tr.getOutput().setLocalName(savedStateOutputName);
330 result = new AxValidationResult();
331 result = model.validate(result);
332 assertEquals(ValidationResult.VALID, result.getValidationResult());
334 final AxStateOutput so = model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
335 .get(savedStateOutputName);
337 final AxArtifactKey savedOutEvent = so.getOutgingEvent();
338 so.setOutgoingEvent(new AxArtifactKey("NonExistantEvent", "0.0.1"));
339 result = new AxValidationResult();
340 result = model.validate(result);
341 assertEquals(ValidationResult.INVALID, result.getValidationResult());
343 so.setOutgoingEvent(savedOutEvent);
344 result = new AxValidationResult();
345 result = model.validate(result);
346 assertEquals(ValidationResult.VALID, result.getValidationResult());