30b92ca4c6242c073584b1a343ffbfa5d5d04ae3
[policy/apex-pdp.git] /
1 /*-
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
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.assertNotEquals;
26 import static org.junit.Assert.assertNotNull;
27
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;
42
43 /**
44  * Test policy models.
45  *
46  * @author Liam Fallon (liam.fallon@ericsson.com)
47  */
48 public class PolicyModelTest {
49
50     @Test
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()));
56
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");
64
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));
68
69         model.register();
70
71         assertNotNull(model.getContextModel());
72         assertEquals("ModelKey:0.0.1", model.getKeys().get(0).getId());
73
74         model.clean();
75         assertNotNull(model);
76         assertEquals("AxPolicyModel:(AxPolicyModel:(key=AxArtifactKey:(n", model.toString().substring(0, 50));
77
78         final AxPolicyModel clonedModel = new AxPolicyModel(model);
79
80         assertNotEquals(0, model.hashCode());
81
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)));
111
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))));
121         assertNotEquals(0,
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))));
128         assertNotEquals(0,
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))));
132         assertNotEquals(0,
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))));
136         assertNotEquals(0,
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))));
143
144         model = new SupportApexPolicyModelCreator().getModel();
145
146         AxValidationResult result = new AxValidationResult();
147         result = model.validate(result);
148         assertEquals(ValidationResult.VALID, result.getValidationResult());
149
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());
155
156         model.setKey(savedPolicyKey);
157         result = new AxValidationResult();
158         result = model.validate(result);
159         assertEquals(ValidationResult.VALID, result.getValidationResult());
160
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());
167
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());
172
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());
179
180         model.getAlbums().getAlbumsMap().remove(badAlbum.getKey());
181         result = new AxValidationResult();
182         result = model.validate(result);
183         assertEquals(ValidationResult.VALID, result.getValidationResult());
184
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());
192
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());
197
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());
205
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());
210
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());
216
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());
222
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());
228
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());
234
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());
241
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());
246
247         final AxArtifactKey savedDefaultTask = model.getPolicies().get("policy").getStateMap().get("state")
248                         .getDefaultTask();
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());
254
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());
259
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());
268
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());
273
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());
278
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());
283
284         final AxStateOutput badStateOutput = new AxStateOutput(
285                         new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(),
286                                         "BadSO"),
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());
293
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());
299
300         final AxStateTaskReference badTaskReference = new AxStateTaskReference(
301                         new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(),
302                                         "NonExistantTask"),
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());
309
310         badTaskReference.setStateTaskOutputType(AxStateTaskOutputType.DIRECT);
311         result = new AxValidationResult();
312         result = model.validate(result);
313         assertEquals(ValidationResult.INVALID, result.getValidationResult());
314
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());
320
321         final AxStateTaskReference tr = model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
322                         .get(new AxArtifactKey("task", "0.0.1"));
323
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());
329
330         tr.getOutput().setLocalName(savedStateOutputName);
331         result = new AxValidationResult();
332         result = model.validate(result);
333         assertEquals(ValidationResult.VALID, result.getValidationResult());
334
335         final AxStateOutput so = model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
336                         .get(savedStateOutputName);
337
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());
343
344         so.setOutgoingEvent(savedOutEvent);
345         result = new AxValidationResult();
346         result = model.validate(result);
347         assertEquals(ValidationResult.VALID, result.getValidationResult());
348     }
349 }