6c93efde0b9c593b51064f0fbd510b7ed8b2b57c
[policy/apex-pdp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  * 
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  * 
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  * 
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.apex.model.policymodel.concepts;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertFalse;
25 import static org.junit.Assert.assertNotEquals;
26 import static org.junit.Assert.assertNotNull;
27 import static org.junit.Assert.assertTrue;
28
29 import org.junit.Test;
30 import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
31 import org.onap.policy.apex.model.basicmodel.concepts.AxKeyInformation;
32 import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey;
33 import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
34 import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult.ValidationResult;
35 import org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbum;
36 import org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbums;
37 import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchemas;
38 import org.onap.policy.apex.model.eventmodel.concepts.AxEvents;
39 import org.onap.policy.apex.model.eventmodel.concepts.AxField;
40 import org.onap.policy.apex.model.eventmodel.concepts.AxInputField;
41 import org.onap.policy.apex.model.eventmodel.concepts.AxOutputField;
42 import org.onap.policy.apex.model.policymodel.concepts.AxPolicies;
43 import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
44 import org.onap.policy.apex.model.policymodel.concepts.AxStateOutput;
45 import org.onap.policy.apex.model.policymodel.concepts.AxStateTaskOutputType;
46 import org.onap.policy.apex.model.policymodel.concepts.AxStateTaskReference;
47 import org.onap.policy.apex.model.policymodel.concepts.AxTaskSelectionLogic;
48 import org.onap.policy.apex.model.policymodel.concepts.AxTasks;
49 import org.onap.policy.apex.model.policymodel.handling.SupportApexPolicyModelCreator;
50
51 /**
52  * Test policy models.
53  * 
54  * @author Liam Fallon (liam.fallon@ericsson.com)
55  */
56 public class PolicyModelTest {
57
58     @Test
59     public void testPolicyModel() {
60         assertNotNull(new AxPolicyModel());
61         assertNotNull(new AxPolicyModel(new AxArtifactKey()));
62         assertNotNull(new AxPolicyModel(new AxArtifactKey(), new AxContextSchemas(), new AxKeyInformation(),
63                         new AxEvents(), new AxContextAlbums(), new AxTasks(), new AxPolicies()));
64
65         final AxArtifactKey modelKey = new AxArtifactKey("ModelKey", "0.0.1");
66         final AxArtifactKey schemasKey = new AxArtifactKey("SchemasKey", "0.0.1");
67         final AxArtifactKey eventsKey = new AxArtifactKey("EventsKey", "0.0.1");
68         final AxArtifactKey keyInfoKey = new AxArtifactKey("SchemasKey", "0.0.1");
69         final AxArtifactKey albumsKey = new AxArtifactKey("AlbumsKey", "0.0.1");
70         final AxArtifactKey tasksKey = new AxArtifactKey("TasksKey", "0.0.1");
71         final AxArtifactKey policiesKey = new AxArtifactKey("PoliciesKey", "0.0.1");
72
73         AxPolicyModel model = new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
74                         new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
75                         new AxTasks(tasksKey), new AxPolicies(policiesKey));
76
77         model.register();
78
79         assertNotNull(model.getContextModel());
80         assertEquals("ModelKey:0.0.1", model.getKeys().get(0).getId());
81
82         model.clean();
83         assertNotNull(model);
84         assertEquals("AxPolicyModel:(AxPolicyModel:(key=AxArtifactKey:(n", model.toString().substring(0, 50));
85
86         final AxPolicyModel clonedModel = new AxPolicyModel(model);
87
88         assertFalse(model.hashCode() == 0);
89
90         assertTrue(model.equals(model));
91         assertTrue(model.equals(clonedModel));
92         assertFalse(model.equals("Hello"));
93         assertFalse(model.equals(new AxPolicyModel(new AxArtifactKey())));
94         assertFalse(model.equals(new AxPolicyModel(AxArtifactKey.getNullKey(), new AxContextSchemas(schemasKey),
95                         new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
96                         new AxTasks(tasksKey), new AxPolicies(policiesKey))));
97         assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(), new AxKeyInformation(keyInfoKey),
98                         new AxEvents(eventsKey), new AxContextAlbums(albumsKey), new AxTasks(tasksKey),
99                         new AxPolicies(policiesKey))));
100         assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey), new AxKeyInformation(),
101                         new AxEvents(eventsKey), new AxContextAlbums(albumsKey), new AxTasks(tasksKey),
102                         new AxPolicies(policiesKey))));
103         assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
104                         new AxKeyInformation(keyInfoKey), new AxEvents(), new AxContextAlbums(albumsKey),
105                         new AxTasks(tasksKey), new AxPolicies(policiesKey))));
106         assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
107                         new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(),
108                         new AxTasks(tasksKey), new AxPolicies(policiesKey))));
109         assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
110                         new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
111                         new AxTasks(), new AxPolicies(policiesKey))));
112         assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
113                         new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
114                         new AxTasks(tasksKey), new AxPolicies())));
115         assertTrue(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
116                         new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
117                         new AxTasks(tasksKey), new AxPolicies(policiesKey))));
118
119         assertEquals(0, model.compareTo(model));
120         assertEquals(0, model.compareTo(clonedModel));
121         assertNotEquals(0, model.compareTo(new AxArtifactKey()));
122         assertNotEquals(0, model.compareTo(new AxPolicyModel(AxArtifactKey.getNullKey(),
123                         new AxContextSchemas(schemasKey), new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
124                         new AxContextAlbums(albumsKey), new AxTasks(tasksKey), new AxPolicies(policiesKey))));
125         assertNotEquals(0, model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(),
126                         new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), 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(), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
131                                         new AxTasks(tasksKey), new AxPolicies(policiesKey))));
132         assertNotEquals(0, model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
133                         new AxKeyInformation(keyInfoKey), new AxEvents(), new AxContextAlbums(albumsKey),
134                         new AxTasks(tasksKey), 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(), new AxTasks(tasksKey), new AxPolicies(policiesKey))));
139         assertNotEquals(0,
140                         model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
141                                         new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
142                                         new AxContextAlbums(albumsKey), new AxTasks(), new AxPolicies(policiesKey))));
143         assertNotEquals(0,
144                         model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
145                                         new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey),
146                                         new AxContextAlbums(albumsKey), new AxTasks(tasksKey), new AxPolicies())));
147         assertEquals(0, model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
148                         new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
149                         new AxTasks(tasksKey), new AxPolicies(policiesKey))));
150
151         model = new SupportApexPolicyModelCreator().getModel();
152
153         AxValidationResult result = new AxValidationResult();
154         result = model.validate(result);
155         assertEquals(ValidationResult.VALID, result.getValidationResult());
156
157         final AxArtifactKey savedPolicyKey = model.getKey();
158         model.setKey(AxArtifactKey.getNullKey());
159         result = new AxValidationResult();
160         result = model.validate(result);
161         assertEquals(ValidationResult.INVALID, result.getValidationResult());
162
163         model.setKey(savedPolicyKey);
164         result = new AxValidationResult();
165         result = model.validate(result);
166         assertEquals(ValidationResult.VALID, result.getValidationResult());
167
168         final AxField badField = new AxField(new AxReferenceKey(model.getEvents().get("inEvent").getKey(), "BadField"),
169                         new AxArtifactKey("NonExistantSchema", "0.0.1"));
170         model.getEvents().get("inEvent").getParameterMap().put(badField.getKey().getLocalName(), badField);
171         result = new AxValidationResult();
172         result = model.validate(result);
173         assertEquals(ValidationResult.INVALID, result.getValidationResult());
174
175         model.getEvents().get("inEvent").getParameterMap().remove(badField.getKey().getLocalName());
176         result = new AxValidationResult();
177         result = model.validate(result);
178         assertEquals(ValidationResult.VALID, result.getValidationResult());
179
180         final AxContextAlbum badAlbum = new AxContextAlbum(new AxArtifactKey("BadAlbum", "0.0.1"), "SomeScope", true,
181                         new AxArtifactKey("NonExistantSchema", "0.0.1"));
182         model.getAlbums().getAlbumsMap().put(badAlbum.getKey(), badAlbum);
183         result = new AxValidationResult();
184         result = model.validate(result);
185         assertEquals(ValidationResult.INVALID, result.getValidationResult());
186
187         model.getAlbums().getAlbumsMap().remove(badAlbum.getKey());
188         result = new AxValidationResult();
189         result = model.validate(result);
190         assertEquals(ValidationResult.VALID, result.getValidationResult());
191
192         final AxInputField badInField = new AxInputField(
193                         new AxReferenceKey(model.getTasks().get("task").getKey(), "BadInField"),
194                         new AxArtifactKey("NonExistantSchema", "0.0.1"));
195         model.getTasks().get("task").getInputFields().put(badInField.getKey().getLocalName(), badInField);
196         result = new AxValidationResult();
197         result = model.validate(result);
198         assertEquals(ValidationResult.INVALID, result.getValidationResult());
199
200         model.getTasks().get("task").getInputFields().remove(badInField.getKey().getLocalName());
201         result = new AxValidationResult();
202         result = model.validate(result);
203         assertEquals(ValidationResult.VALID, result.getValidationResult());
204
205         final AxOutputField badOutField = new AxOutputField(
206                         new AxReferenceKey(model.getTasks().get("task").getKey(), "BadOutField"),
207                         new AxArtifactKey("NonExistantSchema", "0.0.1"));
208         model.getTasks().get("task").getOutputFields().put(badOutField.getKey().getLocalName(), badOutField);
209         result = new AxValidationResult();
210         result = model.validate(result);
211         assertEquals(ValidationResult.INVALID, result.getValidationResult());
212
213         model.getTasks().get("task").getOutputFields().remove(badOutField.getKey().getLocalName());
214         result = new AxValidationResult();
215         result = model.validate(result);
216         assertEquals(ValidationResult.VALID, result.getValidationResult());
217
218         model.getTasks().get("task").getContextAlbumReferences()
219                         .add(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
220         result = new AxValidationResult();
221         result = model.validate(result);
222         assertEquals(ValidationResult.INVALID, result.getValidationResult());
223
224         model.getTasks().get("task").getContextAlbumReferences()
225                         .remove(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
226         result = new AxValidationResult();
227         result = model.validate(result);
228         assertEquals(ValidationResult.VALID, result.getValidationResult());
229
230         model.getPolicies().get("policy").getStateMap().get("state").getContextAlbumReferences()
231                         .add(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
232         result = new AxValidationResult();
233         result = model.validate(result);
234         assertEquals(ValidationResult.INVALID, result.getValidationResult());
235
236         model.getPolicies().get("policy").getStateMap().get("state").getContextAlbumReferences()
237                         .remove(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
238         result = new AxValidationResult();
239         result = model.validate(result);
240         assertEquals(ValidationResult.VALID, result.getValidationResult());
241
242         final AxArtifactKey savedTrigger = model.getPolicies().get("policy").getStateMap().get("state").getTrigger();
243         model.getPolicies().get("policy").getStateMap().get("state")
244                         .setTrigger(new AxArtifactKey("NonExistantEvent", "0.0.1"));
245         result = new AxValidationResult();
246         result = model.validate(result);
247         assertEquals(ValidationResult.INVALID, result.getValidationResult());
248
249         model.getPolicies().get("policy").getStateMap().get("state").setTrigger(savedTrigger);
250         result = new AxValidationResult();
251         result = model.validate(result);
252         assertEquals(ValidationResult.VALID, result.getValidationResult());
253
254         final AxArtifactKey savedDefaultTask = model.getPolicies().get("policy").getStateMap().get("state")
255                         .getDefaultTask();
256         model.getPolicies().get("policy").getStateMap().get("state")
257                         .setDefaultTask(new AxArtifactKey("NonExistantTask", "0.0.1"));
258         result = new AxValidationResult();
259         result = model.validate(result);
260         assertEquals(ValidationResult.INVALID, result.getValidationResult());
261
262         model.getPolicies().get("policy").getStateMap().get("state").setDefaultTask(savedDefaultTask);
263         result = new AxValidationResult();
264         result = model.validate(result);
265         assertEquals(ValidationResult.VALID, result.getValidationResult());
266
267         // It is OK not to have TSL
268         final AxTaskSelectionLogic savedTaskSelectionLogic = model.getPolicies().get("policy").getStateMap()
269                         .get("state").getTaskSelectionLogic();
270         model.getPolicies().get("policy").getStateMap().get("state")
271                         .setTaskSelectionLogic(new AxTaskSelectionLogic(AxReferenceKey.getNullKey()));
272         result = new AxValidationResult();
273         result = model.validate(result);
274         assertEquals(ValidationResult.VALID, result.getValidationResult());
275
276         model.getTasks().get("task").getInputFields().put(badInField.getKey().getLocalName(), badInField);
277         result = new AxValidationResult();
278         result = model.validate(result);
279         assertEquals(ValidationResult.INVALID, result.getValidationResult());
280
281         model.getTasks().get("task").getInputFields().remove(badInField.getKey().getLocalName());
282         result = new AxValidationResult();
283         result = model.validate(result);
284         assertEquals(ValidationResult.VALID, result.getValidationResult());
285
286         model.getPolicies().get("policy").getStateMap().get("state").setTaskSelectionLogic(savedTaskSelectionLogic);
287         result = new AxValidationResult();
288         result = model.validate(result);
289         assertEquals(ValidationResult.VALID, result.getValidationResult());
290
291         final AxStateOutput badStateOutput = new AxStateOutput(
292                         new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(),
293                                         "BadSO"),
294                         new AxArtifactKey("NonExistantEvent", "0.0.1"), AxReferenceKey.getNullKey());
295         model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
296                         .put(badStateOutput.getKey().getLocalName(), badStateOutput);
297         result = new AxValidationResult();
298         result = model.validate(result);
299         assertEquals(ValidationResult.INVALID, result.getValidationResult());
300
301         model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
302                         .remove(badStateOutput.getKey().getLocalName());
303         result = new AxValidationResult();
304         result = model.validate(result);
305         assertEquals(ValidationResult.VALID, result.getValidationResult());
306
307         final AxStateTaskReference badTaskReference = new AxStateTaskReference(
308                         new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(),
309                                         "NonExistantTask"),
310                         AxStateTaskOutputType.LOGIC, badStateOutput.getKey());
311         model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
312                         .put(new AxArtifactKey("NonExistantTask", "0.0.1"), badTaskReference);
313         result = new AxValidationResult();
314         result = model.validate(result);
315         assertEquals(ValidationResult.INVALID, result.getValidationResult());
316
317         badTaskReference.setStateTaskOutputType(AxStateTaskOutputType.DIRECT);
318         result = new AxValidationResult();
319         result = model.validate(result);
320         assertEquals(ValidationResult.INVALID, result.getValidationResult());
321
322         model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
323                         .remove(new AxArtifactKey("NonExistantTask", "0.0.1"));
324         result = new AxValidationResult();
325         result = model.validate(result);
326         assertEquals(ValidationResult.VALID, result.getValidationResult());
327
328         final AxStateTaskReference tr = model.getPolicies().get("policy").getStateMap().get("state").getTaskReferences()
329                         .get(new AxArtifactKey("task", "0.0.1"));
330
331         final String savedStateOutputName = tr.getOutput().getLocalName();
332         tr.getOutput().setLocalName("NonExistantOutput");
333         result = new AxValidationResult();
334         result = model.validate(result);
335         assertEquals(ValidationResult.INVALID, result.getValidationResult());
336
337         tr.getOutput().setLocalName(savedStateOutputName);
338         result = new AxValidationResult();
339         result = model.validate(result);
340         assertEquals(ValidationResult.VALID, result.getValidationResult());
341
342         final AxStateOutput so = model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs()
343                         .get(savedStateOutputName);
344
345         final AxArtifactKey savedOutEvent = so.getOutgingEvent();
346         so.setOutgoingEvent(new AxArtifactKey("NonExistantEvent", "0.0.1"));
347         result = new AxValidationResult();
348         result = model.validate(result);
349         assertEquals(ValidationResult.INVALID, result.getValidationResult());
350
351         so.setOutgoingEvent(savedOutEvent);
352         result = new AxValidationResult();
353         result = model.validate(result);
354         assertEquals(ValidationResult.VALID, result.getValidationResult());
355     }
356 }