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 // disabling sonar because this code tests the equals() method
83 assertEquals(model, model); // NOSONAR
84 assertEquals(model, clonedModel);
85 assertNotEquals(model, "Hello");
86 assertNotEquals(model, new AxPolicyModel(new AxArtifactKey()));
87 assertNotEquals(model, new AxPolicyModel(AxArtifactKey.getNullKey(), new AxContextSchemas(schemasKey),
88 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
89 new AxTasks(tasksKey), new AxPolicies(policiesKey)));
90 assertNotEquals(model, new AxPolicyModel(modelKey, new AxContextSchemas(), new AxKeyInformation(keyInfoKey),
91 new AxEvents(eventsKey), new AxContextAlbums(albumsKey), new AxTasks(tasksKey),
92 new AxPolicies(policiesKey)));
93 assertNotEquals(model, new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey), new AxKeyInformation(),
94 new AxEvents(eventsKey), new AxContextAlbums(albumsKey), new AxTasks(tasksKey),
95 new AxPolicies(policiesKey)));
96 assertNotEquals(model, new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
97 new AxKeyInformation(keyInfoKey), new AxEvents(), new AxContextAlbums(albumsKey),
98 new AxTasks(tasksKey), new AxPolicies(policiesKey)));
99 assertNotEquals(model, new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
100 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(),
101 new AxTasks(tasksKey), new AxPolicies(policiesKey)));
102 assertNotEquals(model, new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
103 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
104 new AxTasks(), new AxPolicies(policiesKey)));
105 assertNotEquals(model, new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
106 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
107 new AxTasks(tasksKey), new AxPolicies()));
108 assertEquals(model, new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
109 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
110 new AxTasks(tasksKey), new AxPolicies(policiesKey)));
112 assertEquals(0, model.compareTo(model));
113 assertEquals(0, model.compareTo(clonedModel));
114 assertNotEquals(0, model.compareTo(new AxArtifactKey()));
115 assertNotEquals(0, model.compareTo(new AxPolicyModel(AxArtifactKey.getNullKey(),
116 new AxContextSchemas(schemasKey), new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
117 new AxContextAlbums(albumsKey), new AxTasks(tasksKey), new AxPolicies(policiesKey))));
118 assertNotEquals(0, model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(),
119 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
120 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
122 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
123 new AxKeyInformation(), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
124 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
125 assertNotEquals(0, model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
126 new AxKeyInformation(keyInfoKey), new AxEvents(), new AxContextAlbums(albumsKey),
127 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
129 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
130 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
131 new AxContextAlbums(), new AxTasks(tasksKey), new AxPolicies(policiesKey))));
133 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
134 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
135 new AxContextAlbums(albumsKey), new AxTasks(), new AxPolicies(policiesKey))));
137 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
138 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
139 new AxContextAlbums(albumsKey), new AxTasks(tasksKey), new AxPolicies())));
140 assertEquals(0, model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
141 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
142 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
144 model = new SupportApexPolicyModelCreator().getModel();
146 AxValidationResult result = new AxValidationResult();
147 result = model.validate(result);
148 assertEquals(ValidationResult.VALID, result.getValidationResult());
150 final AxArtifactKey savedPolicyKey = model.getKey();
151 model.setKey(AxArtifactKey.getNullKey());
152 result = new AxValidationResult();
153 result = model.validate(result);
154 assertEquals(ValidationResult.INVALID, result.getValidationResult());
156 model.setKey(savedPolicyKey);
157 result = new AxValidationResult();
158 result = model.validate(result);
159 assertEquals(ValidationResult.VALID, result.getValidationResult());
161 final AxField badField = new AxField(new AxReferenceKey(model.getEvents().get("inEvent").getKey(), "BadField"),
162 new AxArtifactKey("NonExistantSchema", "0.0.1"));
163 model.getEvents().get("inEvent").getParameterMap().put(badField.getKey().getLocalName(), badField);
164 result = new AxValidationResult();
165 result = model.validate(result);
166 assertEquals(ValidationResult.INVALID, result.getValidationResult());
168 model.getEvents().get("inEvent").getParameterMap().remove(badField.getKey().getLocalName());
169 result = new AxValidationResult();
170 result = model.validate(result);
171 assertEquals(ValidationResult.VALID, result.getValidationResult());
173 final AxContextAlbum badAlbum = new AxContextAlbum(new AxArtifactKey("BadAlbum", "0.0.1"), "SomeScope", true,
174 new AxArtifactKey("NonExistantSchema", "0.0.1"));
175 model.getAlbums().getAlbumsMap().put(badAlbum.getKey(), badAlbum);
176 result = new AxValidationResult();
177 result = model.validate(result);
178 assertEquals(ValidationResult.INVALID, result.getValidationResult());
180 model.getAlbums().getAlbumsMap().remove(badAlbum.getKey());
181 result = new AxValidationResult();
182 result = model.validate(result);
183 assertEquals(ValidationResult.VALID, result.getValidationResult());
185 final AxInputField badInField = new AxInputField(
186 new AxReferenceKey(model.getTasks().get("task").getKey(), "BadInField"),
187 new AxArtifactKey("NonExistantSchema", "0.0.1"));
188 model.getTasks().get("task").getInputFields().put(badInField.getKey().getLocalName(), badInField);
189 result = new AxValidationResult();
190 result = model.validate(result);
191 assertEquals(ValidationResult.INVALID, result.getValidationResult());
193 model.getTasks().get("task").getInputFields().remove(badInField.getKey().getLocalName());
194 result = new AxValidationResult();
195 result = model.validate(result);
196 assertEquals(ValidationResult.VALID, result.getValidationResult());
198 final AxOutputField badOutField = new AxOutputField(
199 new AxReferenceKey(model.getTasks().get("task").getKey(), "BadOutField"),
200 new AxArtifactKey("NonExistantSchema", "0.0.1"));
201 model.getTasks().get("task").getOutputFields().put(badOutField.getKey().getLocalName(), badOutField);
202 result = new AxValidationResult();
203 result = model.validate(result);
204 assertEquals(ValidationResult.INVALID, result.getValidationResult());
206 model.getTasks().get("task").getOutputFields().remove(badOutField.getKey().getLocalName());
207 result = new AxValidationResult();
208 result = model.validate(result);
209 assertEquals(ValidationResult.VALID, result.getValidationResult());
211 model.getTasks().get("task").getContextAlbumReferences()
212 .add(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
213 result = new AxValidationResult();
214 result = model.validate(result);
215 assertEquals(ValidationResult.INVALID, result.getValidationResult());
217 model.getTasks().get("task").getContextAlbumReferences()
218 .remove(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
219 result = new AxValidationResult();
220 result = model.validate(result);
221 assertEquals(ValidationResult.VALID, result.getValidationResult());
223 model.getPolicies().get("policy").getStateMap().get("state").getContextAlbumReferences()
224 .add(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
225 result = new AxValidationResult();
226 result = model.validate(result);
227 assertEquals(ValidationResult.INVALID, result.getValidationResult());
229 model.getPolicies().get("policy").getStateMap().get("state").getContextAlbumReferences()
230 .remove(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
231 result = new AxValidationResult();
232 result = model.validate(result);
233 assertEquals(ValidationResult.VALID, result.getValidationResult());
235 final AxArtifactKey savedTrigger = model.getPolicies().get("policy").getStateMap().get("state").getTrigger();
236 model.getPolicies().get("policy").getStateMap().get("state")
237 .setTrigger(new AxArtifactKey("NonExistantEvent", "0.0.1"));
238 result = new AxValidationResult();
239 result = model.validate(result);
240 assertEquals(ValidationResult.INVALID, result.getValidationResult());
242 model.getPolicies().get("policy").getStateMap().get("state").setTrigger(savedTrigger);
243 result = new AxValidationResult();
244 result = model.validate(result);
245 assertEquals(ValidationResult.VALID, result.getValidationResult());
247 final AxArtifactKey savedDefaultTask = model.getPolicies().get("policy").getStateMap().get("state")
249 model.getPolicies().get("policy").getStateMap().get("state")
250 .setDefaultTask(new AxArtifactKey("NonExistantTask", "0.0.1"));
251 result = new AxValidationResult();
252 result = model.validate(result);
253 assertEquals(ValidationResult.INVALID, result.getValidationResult());
255 model.getPolicies().get("policy").getStateMap().get("state").setDefaultTask(savedDefaultTask);
256 result = new AxValidationResult();
257 result = model.validate(result);
258 assertEquals(ValidationResult.VALID, result.getValidationResult());
260 // It is OK not to have TSL
261 final AxTaskSelectionLogic savedTaskSelectionLogic = model.getPolicies().get("policy").getStateMap()
262 .get("state").getTaskSelectionLogic();
263 model.getPolicies().get("policy").getStateMap().get("state")
264 .setTaskSelectionLogic(new AxTaskSelectionLogic(AxReferenceKey.getNullKey()));
265 result = new AxValidationResult();
266 result = model.validate(result);
267 assertEquals(ValidationResult.VALID, result.getValidationResult());
269 model.getTasks().get("task").getInputFields().put(badInField.getKey().getLocalName(), badInField);
270 result = new AxValidationResult();
271 result = model.validate(result);
272 assertEquals(ValidationResult.INVALID, result.getValidationResult());
274 model.getTasks().get("task").getInputFields().remove(badInField.getKey().getLocalName());
275 result = new AxValidationResult();
276 result = model.validate(result);
277 assertEquals(ValidationResult.VALID, result.getValidationResult());
279 model.getPolicies().get("policy").getStateMap().get("state").setTaskSelectionLogic(savedTaskSelectionLogic);
280 result = new AxValidationResult();
281 result = model.validate(result);
282 assertEquals(ValidationResult.VALID, result.getValidationResult());
284 final AxStateOutput badStateOutput = new AxStateOutput(
285 new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(),
287 new AxArtifactKey("NonExistantEvent", "0.0.1"), AxReferenceKey.getNullKey());
288 model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
289 .put(badStateOutput.getKey().getLocalName(), badStateOutput);
290 result = new AxValidationResult();
291 result = model.validate(result);
292 assertEquals(ValidationResult.INVALID, result.getValidationResult());
294 model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
295 .remove(badStateOutput.getKey().getLocalName());
296 result = new AxValidationResult();
297 result = model.validate(result);
298 assertEquals(ValidationResult.VALID, result.getValidationResult());
300 final AxStateTaskReference badTaskReference = new AxStateTaskReference(
301 new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(),
303 AxStateTaskOutputType.LOGIC, badStateOutput.getKey());
304 model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
305 .put(new AxArtifactKey("NonExistantTask", "0.0.1"), badTaskReference);
306 result = new AxValidationResult();
307 result = model.validate(result);
308 assertEquals(ValidationResult.INVALID, result.getValidationResult());
310 badTaskReference.setStateTaskOutputType(AxStateTaskOutputType.DIRECT);
311 result = new AxValidationResult();
312 result = model.validate(result);
313 assertEquals(ValidationResult.INVALID, result.getValidationResult());
315 model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
316 .remove(new AxArtifactKey("NonExistantTask", "0.0.1"));
317 result = new AxValidationResult();
318 result = model.validate(result);
319 assertEquals(ValidationResult.VALID, result.getValidationResult());
321 final AxStateTaskReference tr = model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
322 .get(new AxArtifactKey("task", "0.0.1"));
324 final String savedStateOutputName = tr.getOutput().getLocalName();
325 tr.getOutput().setLocalName("NonExistantOutput");
326 result = new AxValidationResult();
327 result = model.validate(result);
328 assertEquals(ValidationResult.INVALID, result.getValidationResult());
330 tr.getOutput().setLocalName(savedStateOutputName);
331 result = new AxValidationResult();
332 result = model.validate(result);
333 assertEquals(ValidationResult.VALID, result.getValidationResult());
335 final AxStateOutput so = model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
336 .get(savedStateOutputName);
338 final AxArtifactKey savedOutEvent = so.getOutgingEvent();
339 so.setOutgoingEvent(new AxArtifactKey("NonExistantEvent", "0.0.1"));
340 result = new AxValidationResult();
341 result = model.validate(result);
342 assertEquals(ValidationResult.INVALID, result.getValidationResult());
344 so.setOutgoingEvent(savedOutEvent);
345 result = new AxValidationResult();
346 result = model.validate(result);
347 assertEquals(ValidationResult.VALID, result.getValidationResult());