d2c6b1bdbcdfcf31381da7d9f43eba250b19a76f
[policy/apex-pdp.git] / model / policy-model / src / test / java / org / onap / policy / apex / model / policymodel / concepts / PolicyModelTest.java
1 /*-
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
9  * 
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  * 
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.
17  * 
18  * SPDX-License-Identifier: Apache-2.0
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.apex.model.policymodel.concepts;
23
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;
29
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;
51
52 /**
53  * Test policy models.
54  * 
55  * @author Liam Fallon (liam.fallon@ericsson.com)
56  */
57 public class PolicyModelTest {
58
59     @Test
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()));
65
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");
73
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));
77
78         model.register();
79
80         assertNotNull(model.getContextModel());
81         assertEquals("ModelKey:0.0.1", model.getKeys().get(0).getId());
82
83         model.clean();
84         assertNotNull(model);
85         assertEquals("AxPolicyModel:(AxPolicyModel:(key=AxArtifactKey:(n", model.toString().substring(0, 50));
86
87         final AxPolicyModel clonedModel = new AxPolicyModel(model);
88
89         assertFalse(model.hashCode() == 0);
90
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))));
119
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))));
129         assertNotEquals(0,
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))));
136         assertNotEquals(0,
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))));
140         assertNotEquals(0,
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))));
144         assertNotEquals(0,
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))));
151
152         model = new SupportApexPolicyModelCreator().getModel();
153
154         AxValidationResult result = new AxValidationResult();
155         result = model.validate(result);
156         assertEquals(ValidationResult.VALID, result.getValidationResult());
157
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());
163
164         model.setKey(savedPolicyKey);
165         result = new AxValidationResult();
166         result = model.validate(result);
167         assertEquals(ValidationResult.VALID, result.getValidationResult());
168
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());
175
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());
180
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());
187
188         model.getAlbums().getAlbumsMap().remove(badAlbum.getKey());
189         result = new AxValidationResult();
190         result = model.validate(result);
191         assertEquals(ValidationResult.VALID, result.getValidationResult());
192
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());
200
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());
205
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());
213
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());
218
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());
224
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());
230
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());
236
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());
242
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());
249
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());
254
255         final AxArtifactKey savedDefaultTask = model.getPolicies().get("policy").getStateMap().get("state")
256                         .getDefaultTask();
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());
262
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());
267
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());
276
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());
281
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());
286
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());
291
292         final AxStateOutput badStateOutput = new AxStateOutput(
293                         new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(),
294                                         "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());
301
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());
307
308         final AxStateTaskReference badTaskReference = new AxStateTaskReference(
309                         new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(),
310                                         "NonExistantTask"),
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());
317
318         badTaskReference.setStateTaskOutputType(AxStateTaskOutputType.DIRECT);
319         result = new AxValidationResult();
320         result = model.validate(result);
321         assertEquals(ValidationResult.INVALID, result.getValidationResult());
322
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());
328
329         final AxStateTaskReference tr = model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
330                         .get(new AxArtifactKey("task", "0.0.1"));
331
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());
337
338         tr.getOutput().setLocalName(savedStateOutputName);
339         result = new AxValidationResult();
340         result = model.validate(result);
341         assertEquals(ValidationResult.VALID, result.getValidationResult());
342
343         final AxStateOutput so = model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
344                         .get(savedStateOutputName);
345
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());
351
352         so.setOutgoingEvent(savedOutEvent);
353         result = new AxValidationResult();
354         result = model.validate(result);
355         assertEquals(ValidationResult.VALID, result.getValidationResult());
356     }
357 }