829f9334274bfc869398b23d04cfb6d6c2085962
[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         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)));
110
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))));
120         assertNotEquals(0,
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))));
127         assertNotEquals(0,
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))));
131         assertNotEquals(0,
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))));
135         assertNotEquals(0,
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))));
142
143         model = new SupportApexPolicyModelCreator().getModel();
144
145         AxValidationResult result = new AxValidationResult();
146         result = model.validate(result);
147         assertEquals(ValidationResult.VALID, result.getValidationResult());
148
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());
154
155         model.setKey(savedPolicyKey);
156         result = new AxValidationResult();
157         result = model.validate(result);
158         assertEquals(ValidationResult.VALID, result.getValidationResult());
159
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());
166
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());
171
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());
178
179         model.getAlbums().getAlbumsMap().remove(badAlbum.getKey());
180         result = new AxValidationResult();
181         result = model.validate(result);
182         assertEquals(ValidationResult.VALID, result.getValidationResult());
183
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());
191
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());
196
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());
204
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());
209
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());
215
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());
221
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());
227
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());
233
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());
240
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());
245
246         final AxArtifactKey savedDefaultTask = model.getPolicies().get("policy").getStateMap().get("state")
247                         .getDefaultTask();
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());
253
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());
258
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());
267
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());
272
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());
277
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());
282
283         final AxStateOutput badStateOutput = new AxStateOutput(
284                         new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(),
285                                         "BadSO"),
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());
292
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());
298
299         final AxStateTaskReference badTaskReference = new AxStateTaskReference(
300                         new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(),
301                                         "NonExistantTask"),
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());
308
309         badTaskReference.setStateTaskOutputType(AxStateTaskOutputType.DIRECT);
310         result = new AxValidationResult();
311         result = model.validate(result);
312         assertEquals(ValidationResult.INVALID, result.getValidationResult());
313
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());
319
320         final AxStateTaskReference tr = model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
321                         .get(new AxArtifactKey("task", "0.0.1"));
322
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());
328
329         tr.getOutput().setLocalName(savedStateOutputName);
330         result = new AxValidationResult();
331         result = model.validate(result);
332         assertEquals(ValidationResult.VALID, result.getValidationResult());
333
334         final AxStateOutput so = model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
335                         .get(savedStateOutputName);
336
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());
342
343         so.setOutgoingEvent(savedOutEvent);
344         result = new AxValidationResult();
345         result = model.validate(result);
346         assertEquals(ValidationResult.VALID, result.getValidationResult());
347     }
348 }