Changes for checkstyle 8.32
[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.handling.SupportApexPolicyModelCreator;
44
45 /**
46  * Test policy models.
47  * 
48  * @author Liam Fallon (liam.fallon@ericsson.com)
49  */
50 public class PolicyModelTest {
51
52     @Test
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()));
58
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");
66
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));
70
71         model.register();
72
73         assertNotNull(model.getContextModel());
74         assertEquals("ModelKey:0.0.1", model.getKeys().get(0).getId());
75
76         model.clean();
77         assertNotNull(model);
78         assertEquals("AxPolicyModel:(AxPolicyModel:(key=AxArtifactKey:(n", model.toString().substring(0, 50));
79
80         final AxPolicyModel clonedModel = new AxPolicyModel(model);
81
82         assertFalse(model.hashCode() == 0);
83
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))));
112
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))));
122         assertNotEquals(0,
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))));
129         assertNotEquals(0,
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))));
133         assertNotEquals(0,
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))));
137         assertNotEquals(0,
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))));
144
145         model = new SupportApexPolicyModelCreator().getModel();
146
147         AxValidationResult result = new AxValidationResult();
148         result = model.validate(result);
149         assertEquals(ValidationResult.VALID, result.getValidationResult());
150
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());
156
157         model.setKey(savedPolicyKey);
158         result = new AxValidationResult();
159         result = model.validate(result);
160         assertEquals(ValidationResult.VALID, result.getValidationResult());
161
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());
168
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());
173
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());
180
181         model.getAlbums().getAlbumsMap().remove(badAlbum.getKey());
182         result = new AxValidationResult();
183         result = model.validate(result);
184         assertEquals(ValidationResult.VALID, result.getValidationResult());
185
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());
193
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());
198
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());
206
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());
211
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());
217
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());
223
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());
229
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());
235
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());
242
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());
247
248         final AxArtifactKey savedDefaultTask = model.getPolicies().get("policy").getStateMap().get("state")
249                         .getDefaultTask();
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());
255
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());
260
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());
269
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());
274
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());
279
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());
284
285         final AxStateOutput badStateOutput = new AxStateOutput(
286                         new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(),
287                                         "BadSO"),
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());
294
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());
300
301         final AxStateTaskReference badTaskReference = new AxStateTaskReference(
302                         new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(),
303                                         "NonExistantTask"),
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());
310
311         badTaskReference.setStateTaskOutputType(AxStateTaskOutputType.DIRECT);
312         result = new AxValidationResult();
313         result = model.validate(result);
314         assertEquals(ValidationResult.INVALID, result.getValidationResult());
315
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());
321
322         final AxStateTaskReference tr = model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
323                         .get(new AxArtifactKey("task", "0.0.1"));
324
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());
330
331         tr.getOutput().setLocalName(savedStateOutputName);
332         result = new AxValidationResult();
333         result = model.validate(result);
334         assertEquals(ValidationResult.VALID, result.getValidationResult());
335
336         final AxStateOutput so = model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
337                         .get(savedStateOutputName);
338
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());
344
345         so.setOutgoingEvent(savedOutEvent);
346         result = new AxValidationResult();
347         result = model.validate(result);
348         assertEquals(ValidationResult.VALID, result.getValidationResult());
349     }
350 }