5df831cc7c39ecb766e04bf7e5193082c1b0f688
[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.TestApexPolicyModelCreator;
50
51 /**
52  * @author Liam Fallon (liam.fallon@ericsson.com)
53  */
54 public class TestPolicyModel {
55
56     @Test
57     public void testPolicyModel() {
58         assertNotNull(new AxPolicyModel());
59         assertNotNull(new AxPolicyModel(new AxArtifactKey()));
60         assertNotNull(new AxPolicyModel(new AxArtifactKey(), new AxContextSchemas(), new AxKeyInformation(),
61                 new AxEvents(), new AxContextAlbums(), new AxTasks(), new AxPolicies()));
62
63         final AxArtifactKey modelKey = new AxArtifactKey("ModelKey", "0.0.1");
64         final AxArtifactKey schemasKey = new AxArtifactKey("SchemasKey", "0.0.1");
65         final AxArtifactKey eventsKey = new AxArtifactKey("EventsKey", "0.0.1");
66         final AxArtifactKey keyInfoKey = new AxArtifactKey("SchemasKey", "0.0.1");
67         final AxArtifactKey albumsKey = new AxArtifactKey("AlbumsKey", "0.0.1");
68         final AxArtifactKey tasksKey = new AxArtifactKey("TasksKey", "0.0.1");
69         final AxArtifactKey policiesKey = new AxArtifactKey("PoliciesKey", "0.0.1");
70
71         AxPolicyModel model = new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
72                 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
73                 new AxTasks(tasksKey), new AxPolicies(policiesKey));
74
75         model.register();
76
77         assertNotNull(model.getContextModel());
78         assertEquals("ModelKey:0.0.1", model.getKeys().get(0).getId());
79
80         model.clean();
81         assertNotNull(model);
82         assertEquals("AxPolicyModel:(AxPolicyModel:(key=AxArtifactKey:(n", model.toString().substring(0, 50));
83
84         final AxPolicyModel clonedModel = new AxPolicyModel(model);
85
86         assertFalse(model.hashCode() == 0);
87
88         assertTrue(model.equals(model));
89         assertTrue(model.equals(clonedModel));
90         assertFalse(model.equals("Hello"));
91         assertFalse(model.equals(new AxPolicyModel(new AxArtifactKey())));
92         assertFalse(model.equals(new AxPolicyModel(AxArtifactKey.getNullKey(), new AxContextSchemas(schemasKey),
93                 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
94                 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
95         assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(), new AxKeyInformation(keyInfoKey),
96                 new AxEvents(eventsKey), new AxContextAlbums(albumsKey), new AxTasks(tasksKey),
97                 new AxPolicies(policiesKey))));
98         assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey), new AxKeyInformation(),
99                 new AxEvents(eventsKey), new AxContextAlbums(albumsKey), new AxTasks(tasksKey),
100                 new AxPolicies(policiesKey))));
101         assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
102                 new AxKeyInformation(keyInfoKey), new AxEvents(), 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(eventsKey), new AxContextAlbums(), new AxTasks(tasksKey),
106                 new AxPolicies(policiesKey))));
107         assertFalse(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
108                 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
109                 new AxTasks(), 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(tasksKey), new AxPolicies())));
113         assertTrue(model.equals(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
114                 new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
115                 new AxTasks(tasksKey), new AxPolicies(policiesKey))));
116
117         assertEquals(0, model.compareTo(model));
118         assertEquals(0, model.compareTo(clonedModel));
119         assertNotEquals(0, model.compareTo(new AxArtifactKey()));
120         assertNotEquals(0,
121                 model.compareTo(new AxPolicyModel(AxArtifactKey.getNullKey(), new AxContextSchemas(schemasKey),
122                         new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
123                         new AxTasks(tasksKey), new AxPolicies(policiesKey))));
124         assertNotEquals(0,
125                 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(), new AxKeyInformation(keyInfoKey),
126                         new AxEvents(eventsKey), new AxContextAlbums(albumsKey), new AxTasks(tasksKey),
127                         new AxPolicies(policiesKey))));
128         assertNotEquals(0,
129                 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey), new AxKeyInformation(),
130                         new AxEvents(eventsKey), new AxContextAlbums(albumsKey), new AxTasks(tasksKey),
131                         new AxPolicies(policiesKey))));
132         assertNotEquals(0,
133                 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), new AxContextAlbums(),
139                         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), new AxContextAlbums(albumsKey),
143                         new AxTasks(), new AxPolicies(policiesKey))));
144         assertNotEquals(0,
145                 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
146                         new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
147                         new AxTasks(tasksKey), new AxPolicies())));
148         assertEquals(0,
149                 model.compareTo(new AxPolicyModel(modelKey, new AxContextSchemas(schemasKey),
150                         new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey), new AxContextAlbums(albumsKey),
151                         new AxTasks(tasksKey), new AxPolicies(policiesKey))));
152
153         model = new TestApexPolicyModelCreator().getModel();
154
155         AxValidationResult result = new AxValidationResult();
156         result = model.validate(result);
157         assertEquals(ValidationResult.VALID, result.getValidationResult());
158
159         final AxArtifactKey savedPolicyKey = model.getKey();
160         model.setKey(AxArtifactKey.getNullKey());
161         result = new AxValidationResult();
162         result = model.validate(result);
163         assertEquals(ValidationResult.INVALID, result.getValidationResult());
164
165         model.setKey(savedPolicyKey);
166         result = new AxValidationResult();
167         result = model.validate(result);
168         assertEquals(ValidationResult.VALID, result.getValidationResult());
169
170         final AxField badField = new AxField(new AxReferenceKey(model.getEvents().get("inEvent").getKey(), "BadField"),
171                 new AxArtifactKey("NonExistantSchema", "0.0.1"));
172         model.getEvents().get("inEvent").getParameterMap().put(badField.getKey().getLocalName(), badField);
173         result = new AxValidationResult();
174         result = model.validate(result);
175         assertEquals(ValidationResult.INVALID, result.getValidationResult());
176
177         model.getEvents().get("inEvent").getParameterMap().remove(badField.getKey().getLocalName());
178         result = new AxValidationResult();
179         result = model.validate(result);
180         assertEquals(ValidationResult.VALID, result.getValidationResult());
181
182         final AxContextAlbum badAlbum = new AxContextAlbum(new AxArtifactKey("BadAlbum", "0.0.1"), "SomeScope", true,
183                 new AxArtifactKey("NonExistantSchema", "0.0.1"));
184         model.getAlbums().getAlbumsMap().put(badAlbum.getKey(), badAlbum);
185         result = new AxValidationResult();
186         result = model.validate(result);
187         assertEquals(ValidationResult.INVALID, result.getValidationResult());
188
189         model.getAlbums().getAlbumsMap().remove(badAlbum.getKey());
190         result = new AxValidationResult();
191         result = model.validate(result);
192         assertEquals(ValidationResult.VALID, result.getValidationResult());
193
194         final AxInputField badInField =
195                 new AxInputField(new AxReferenceKey(model.getTasks().get("task").getKey(), "BadInField"),
196                         new AxArtifactKey("NonExistantSchema", "0.0.1"));
197         model.getTasks().get("task").getInputFields().put(badInField.getKey().getLocalName(), badInField);
198         result = new AxValidationResult();
199         result = model.validate(result);
200         assertEquals(ValidationResult.INVALID, result.getValidationResult());
201
202         model.getTasks().get("task").getInputFields().remove(badInField.getKey().getLocalName());
203         result = new AxValidationResult();
204         result = model.validate(result);
205         assertEquals(ValidationResult.VALID, result.getValidationResult());
206
207         final AxOutputField badOutField =
208                 new AxOutputField(new AxReferenceKey(model.getTasks().get("task").getKey(), "BadOutField"),
209                         new AxArtifactKey("NonExistantSchema", "0.0.1"));
210         model.getTasks().get("task").getOutputFields().put(badOutField.getKey().getLocalName(), badOutField);
211         result = new AxValidationResult();
212         result = model.validate(result);
213         assertEquals(ValidationResult.INVALID, result.getValidationResult());
214
215         model.getTasks().get("task").getOutputFields().remove(badOutField.getKey().getLocalName());
216         result = new AxValidationResult();
217         result = model.validate(result);
218         assertEquals(ValidationResult.VALID, result.getValidationResult());
219
220         model.getTasks().get("task").getContextAlbumReferences()
221                 .add(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
222         result = new AxValidationResult();
223         result = model.validate(result);
224         assertEquals(ValidationResult.INVALID, result.getValidationResult());
225
226         model.getTasks().get("task").getContextAlbumReferences()
227                 .remove(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
228         result = new AxValidationResult();
229         result = model.validate(result);
230         assertEquals(ValidationResult.VALID, result.getValidationResult());
231
232         model.getPolicies().get("policy").getStateMap().get("state").getContextAlbumReferences()
233                 .add(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
234         result = new AxValidationResult();
235         result = model.validate(result);
236         assertEquals(ValidationResult.INVALID, result.getValidationResult());
237
238         model.getPolicies().get("policy").getStateMap().get("state").getContextAlbumReferences()
239                 .remove(new AxArtifactKey("NonExistantContextAlbum", "0.0.1"));
240         result = new AxValidationResult();
241         result = model.validate(result);
242         assertEquals(ValidationResult.VALID, result.getValidationResult());
243
244         final AxArtifactKey savedTrigger = model.getPolicies().get("policy").getStateMap().get("state").getTrigger();
245         model.getPolicies().get("policy").getStateMap().get("state")
246                 .setTrigger(new AxArtifactKey("NonExistantEvent", "0.0.1"));
247         result = new AxValidationResult();
248         result = model.validate(result);
249         assertEquals(ValidationResult.INVALID, result.getValidationResult());
250
251         model.getPolicies().get("policy").getStateMap().get("state").setTrigger(savedTrigger);
252         result = new AxValidationResult();
253         result = model.validate(result);
254         assertEquals(ValidationResult.VALID, result.getValidationResult());
255
256         final AxArtifactKey savedDefaultTask =
257                 model.getPolicies().get("policy").getStateMap().get("state").getDefaultTask();
258         model.getPolicies().get("policy").getStateMap().get("state")
259                 .setDefaultTask(new AxArtifactKey("NonExistantTask", "0.0.1"));
260         result = new AxValidationResult();
261         result = model.validate(result);
262         assertEquals(ValidationResult.INVALID, result.getValidationResult());
263
264         model.getPolicies().get("policy").getStateMap().get("state").setDefaultTask(savedDefaultTask);
265         result = new AxValidationResult();
266         result = model.validate(result);
267         assertEquals(ValidationResult.VALID, result.getValidationResult());
268
269         // It is OK not to have TSL
270         final AxTaskSelectionLogic savedTSL =
271                 model.getPolicies().get("policy").getStateMap().get("state").getTaskSelectionLogic();
272         model.getPolicies().get("policy").getStateMap().get("state")
273                 .setTaskSelectionLogic(new AxTaskSelectionLogic(AxReferenceKey.getNullKey()));
274         result = new AxValidationResult();
275         result = model.validate(result);
276         assertEquals(ValidationResult.VALID, result.getValidationResult());
277
278         model.getTasks().get("task").getInputFields().put(badInField.getKey().getLocalName(), badInField);
279         result = new AxValidationResult();
280         result = model.validate(result);
281         assertEquals(ValidationResult.INVALID, result.getValidationResult());
282
283         model.getTasks().get("task").getInputFields().remove(badInField.getKey().getLocalName());
284         result = new AxValidationResult();
285         result = model.validate(result);
286         assertEquals(ValidationResult.VALID, result.getValidationResult());
287
288         model.getPolicies().get("policy").getStateMap().get("state").setTaskSelectionLogic(savedTSL);
289         result = new AxValidationResult();
290         result = model.validate(result);
291         assertEquals(ValidationResult.VALID, result.getValidationResult());
292
293         final AxStateOutput badStateOutput = new AxStateOutput(
294                 new AxReferenceKey(model.getPolicies().get("policy").getStateMap().get("state").getKey(), "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 badTR = 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"), badTR);
314         result = new AxValidationResult();
315         result = model.validate(result);
316         assertEquals(ValidationResult.INVALID, result.getValidationResult());
317
318         badTR.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 savedSOName = 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(savedSOName);
339         result = new AxValidationResult();
340         result = model.validate(result);
341         assertEquals(ValidationResult.VALID, result.getValidationResult());
342
343         final AxStateOutput so =
344                 model.getPolicies().get("policy").getStateMap().get("state").getStateOutputs().get(savedSOName);
345
346         final AxArtifactKey savedOE = 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(savedOE);
353         result = new AxValidationResult();
354         result = model.validate(result);
355         assertEquals(ValidationResult.VALID, result.getValidationResult());
356     }
357 }