Removing deprecated DMAAP library
[policy/drools-pdp.git] / feature-lifecycle / src / test / java / org / onap / policy / drools / lifecycle / LifecycleFsmTest.java
1 /*
2  * ============LICENSE_START=======================================================
3  * Copyright (C) 2021-2022 AT&T Intellectual Property. All rights reserved.
4  * Modifications Copyright (C) 2021, 2024 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.drools.lifecycle;
23
24 import static org.junit.jupiter.api.Assertions.assertEquals;
25
26 import java.io.IOException;
27 import java.nio.file.Files;
28 import java.nio.file.Paths;
29 import java.util.Collections;
30 import java.util.List;
31 import java.util.Map;
32 import java.util.Properties;
33 import java.util.Set;
34 import java.util.concurrent.ScheduledExecutorService;
35 import org.junit.jupiter.api.AfterAll;
36 import org.junit.jupiter.api.BeforeEach;
37 import org.junit.jupiter.api.Test;
38 import org.onap.policy.common.utils.coder.CoderException;
39 import org.onap.policy.common.utils.coder.StandardCoder;
40 import org.onap.policy.common.utils.logging.LoggerUtils;
41 import org.onap.policy.common.utils.resources.ResourceUtils;
42 import org.onap.policy.common.utils.time.PseudoScheduledExecutorService;
43 import org.onap.policy.common.utils.time.TestTimeMulti;
44 import org.onap.policy.drools.persistence.SystemPersistenceConstants;
45 import org.onap.policy.drools.system.PolicyEngineConstants;
46 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
47 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
48
49 /**
50  * Lifecycle FSM Test.
51  */
52 public class LifecycleFsmTest {
53
54     private static final String EXAMPLE_NATIVE_CONTROLLER_POLICY_NAME = "example.controller";
55     private static final String EXAMPLE_NATIVE_CONTROLLER_POLICY_JSON =
56             "src/test/resources/tosca-policy-native-controller-example.json";
57
58     private static final String EXAMPLE_NATIVE_ARTIFACT_POLICY_NAME = "example.artifact";
59     private static final String EXAMPLE_NATIVE_ARTIFACT_POLICY_JSON =
60             "src/test/resources/tosca-policy-native-artifact-example.json";
61
62     private static final String EXAMPLE_OTHER_UNVAL_POLICY_NAME = "other-unvalidated";
63     private static final String EXAMPLE_OTHER_UNVAL_POLICY_JSON =
64             "src/test/resources/tosca-policy-other-unvalidated.json";
65
66     private static final String EXAMPLE_OTHER_VAL_POLICY_NAME = "other-validated";
67     private static final String EXAMPLE_OTHER_VAL_POLICY_JSON =
68             "src/test/resources/tosca-policy-other-validated.json";
69
70     private static final String VCPE_OP_POLICY_NAME = "operational.restart";
71     private static final String VCPE_OPERATIONAL_DROOLS_POLICY_JSON =
72             "policies/vCPE.policy.operational.input.tosca.json";
73
74     private static final String VFW_OP_POLICY_NAME = "operational.modifyconfig";
75     private static final String VFW_OPERATIONAL_DROOLS_POLICY_JSON =
76             "policies/vFirewall.policy.operational.input.tosca.json";
77
78     private static final String USECASES_NATIVE_CONTROLLER_POLICY_NAME = "usecases";
79     private static final String USECASES_NATIVE_CONTROLLER_JSON =
80             "policies/usecases.native.controller.policy.input.tosca.json";
81
82     private static final String USECASES_NATIVE_ARTIFACT_POLICY_NAME = "usecases.artifacts";
83     private static final String USECASES_NATIVE_ARTIFACT_JSON =
84             "policies/usecases.native.artifact.policy.input.tosca.json";
85
86     private static final StandardCoder coder = new StandardCoder();
87
88     protected LifecycleFsm fsm;
89     private ToscaPolicy opPolicy;
90     private ToscaPolicy op2Policy;
91     private ToscaPolicy valPolicy;
92     private ToscaPolicy unvalPolicy;
93     private ToscaPolicy controllerPolicy;
94     private ToscaPolicy controller2Policy;
95     private ToscaPolicy artifactPolicy;
96     private ToscaPolicy artifact2Policy;
97
98     /**
99      * Test initialization.
100      */
101     @BeforeEach
102     public void beforeTest() throws CoderException, IOException {
103         LoggerUtils.setLevel(LoggerUtils.ROOT_LOGGER, "INFO");
104         LoggerUtils.setLevel("org.onap.policy.common.endpoints", "WARN");
105         LoggerUtils.setLevel("org.onap.policy.drools", "INFO");
106         SystemPersistenceConstants.getManager().setConfigurationDir("target/test-classes");
107         PolicyEngineConstants.getManager().configure(new Properties());
108
109         fsm = new LifecycleFsm() {
110             @Override
111             protected ScheduledExecutorService makeExecutor() {
112                 return new PseudoScheduledExecutorService(new TestTimeMulti());
113             }
114         };
115
116         opPolicy = getExamplesPolicy(VFW_OPERATIONAL_DROOLS_POLICY_JSON, VFW_OP_POLICY_NAME);
117         op2Policy = getExamplesPolicy(VCPE_OPERATIONAL_DROOLS_POLICY_JSON, VCPE_OP_POLICY_NAME);
118         controllerPolicy =
119             getPolicyFromFile(EXAMPLE_NATIVE_CONTROLLER_POLICY_JSON, EXAMPLE_NATIVE_CONTROLLER_POLICY_NAME);
120         controller2Policy = getExamplesPolicy(USECASES_NATIVE_CONTROLLER_JSON, USECASES_NATIVE_CONTROLLER_POLICY_NAME);
121         artifactPolicy =
122             getPolicyFromFile(EXAMPLE_NATIVE_ARTIFACT_POLICY_JSON, EXAMPLE_NATIVE_ARTIFACT_POLICY_NAME);
123         artifact2Policy = getExamplesPolicy(USECASES_NATIVE_ARTIFACT_JSON, USECASES_NATIVE_ARTIFACT_POLICY_NAME);
124         valPolicy =
125             getPolicyFromFile(EXAMPLE_OTHER_VAL_POLICY_JSON, EXAMPLE_OTHER_VAL_POLICY_NAME);
126         unvalPolicy =
127             getPolicyFromFile(EXAMPLE_OTHER_UNVAL_POLICY_JSON, EXAMPLE_OTHER_UNVAL_POLICY_NAME);
128
129         fsm.resetPoliciesAction();
130         resetExecutionStats();
131     }
132
133     @AfterAll
134     public static void afterClass() {
135         resetExecutionStats();
136     }
137
138     private static void resetExecutionStats() {
139         PolicyEngineConstants.getManager().getStats().getGroupStat().setPolicyExecutedCount(0L);
140         PolicyEngineConstants.getManager().getStats().getGroupStat().setPolicyExecutedFailCount(0L);
141         PolicyEngineConstants.getManager().getStats().getGroupStat().setPolicyExecutedSuccessCount(0L);
142     }
143
144     @Test
145     void testGetDeployableActions() {
146         List<ToscaPolicy> expectedDeployOrder =
147             List.of(controllerPolicy, controller2Policy, artifact2Policy, artifactPolicy,
148                 op2Policy, opPolicy, unvalPolicy, valPolicy);
149
150         assertEquals(expectedDeployOrder, fsm.getDeployablePoliciesAction(expectedDeployOrder));
151         assertEquals(expectedDeployOrder,
152             fsm.getDeployablePoliciesAction(
153                 List.of(op2Policy, artifact2Policy, valPolicy, opPolicy, unvalPolicy, artifactPolicy,
154                     controllerPolicy, controller2Policy)));
155         assertEquals(expectedDeployOrder,
156                 fsm.getDeployablePoliciesAction(
157                     List.of(artifact2Policy, op2Policy, artifactPolicy, controllerPolicy, opPolicy,
158                         controller2Policy, valPolicy, unvalPolicy)));
159     }
160
161     @Test
162     void testGetUndeployableActions() {
163         deployAllPolicies();
164         List<ToscaPolicy> expectedUndeployOrder =
165                 List.of(opPolicy, op2Policy, unvalPolicy, valPolicy, artifactPolicy,
166                         artifact2Policy, controller2Policy, controllerPolicy);
167
168         assertEquals(expectedUndeployOrder, fsm.getUndeployablePoliciesAction(Collections.emptyList()));
169         assertEquals(expectedUndeployOrder, fsm.getUndeployablePoliciesAction(Collections.emptyList()));
170         assertEquals(expectedUndeployOrder, fsm.getUndeployablePoliciesAction(Collections.emptyList()));
171     }
172
173     @Test
174     void testGetNativeArtifactPolicies() {
175         deployAllPolicies();
176
177         Map<String, List<ToscaPolicy>> deployedPolicies = fsm.groupPoliciesByPolicyType(fsm.getActivePolicies());
178         assertEquals(2, fsm.getNativeArtifactPolicies(deployedPolicies).size());
179         assertEquals(List.of(artifactPolicy, artifact2Policy), fsm.getNativeArtifactPolicies(deployedPolicies));
180     }
181
182     @Test
183     void testSetGroup() {
184         fsm.setGroup("bar");
185         assertEquals("bar", fsm.getGroup());
186     }
187
188     @Test
189     void testSetSubGroup() {
190         fsm.setSubGroup("foo");
191         assertEquals("foo", fsm.getSubGroup());
192     }
193
194     @Test
195     void testPdpType() {
196         assertEquals("foo", fsm.getPdpType());
197     }
198
199     @Test
200     void testMergePolicies() {
201         assertEquals(List.of(), fsm.getActivePolicies());
202         assertEquals(List.of(), fsm.mergePolicies(List.of(), List.of()));
203
204         fsm.deployedPolicyAction(opPolicy);
205         fsm.deployedPolicyAction(controllerPolicy);
206         assertEquals(Set.of(opPolicy, controllerPolicy), toSet(fsm.getActivePolicies()));
207         assertEquals(Set.of(opPolicy, controllerPolicy), toSet(fsm.mergePolicies(List.of(), List.of())));
208         assertEquals(Set.of(opPolicy), toSet(fsm.mergePolicies(List.of(), List.of(controllerPolicy.getIdentifier()))));
209
210         assertEquals(Set.of(controllerPolicy, op2Policy, valPolicy, opPolicy, unvalPolicy),
211                 toSet(fsm.mergePolicies(List.of(op2Policy, valPolicy, unvalPolicy), List.of())));
212         assertEquals(Set.of(controllerPolicy, op2Policy, valPolicy, opPolicy, unvalPolicy),
213                 toSet(fsm.mergePolicies(List.of(controllerPolicy, opPolicy, op2Policy, valPolicy, unvalPolicy),
214                         List.of())));
215         assertEquals(Set.of(op2Policy, valPolicy, unvalPolicy),
216                 toSet(fsm.mergePolicies(List.of(op2Policy, valPolicy, unvalPolicy),
217                         List.of(controllerPolicy.getIdentifier(), opPolicy.getIdentifier()))));
218     }
219
220     private Set<ToscaPolicy> toSet(List<ToscaPolicy> policies) {
221         return Set.copyOf(policies);
222
223     }
224
225     @Test
226     void testGetPolicyIdsMessages() {
227         assertEquals("[operational.modifyconfig 1.0.0, example.controller 1.0.0]",
228                 fsm.getPolicyIds(List.of(opPolicy, controllerPolicy)).toString());
229     }
230
231     protected void deployAllPolicies() {
232         fsm.deployedPolicyAction(controllerPolicy);
233         fsm.deployedPolicyAction(controller2Policy);
234         fsm.deployedPolicyAction(artifactPolicy);
235         fsm.deployedPolicyAction(artifact2Policy);
236         fsm.deployedPolicyAction(opPolicy);
237         fsm.deployedPolicyAction(valPolicy);
238         fsm.deployedPolicyAction(unvalPolicy);
239         fsm.deployedPolicyAction(op2Policy);
240     }
241
242     protected ToscaPolicy getPolicyFromFile(String filePath, String policyName) throws CoderException, IOException {
243         String policyJson = Files.readString(Paths.get(filePath));
244         ToscaServiceTemplate serviceTemplate = coder.decode(policyJson, ToscaServiceTemplate.class);
245         return serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyName);
246     }
247
248     protected ToscaPolicy getExamplesPolicy(String resourcePath, String policyName) throws CoderException {
249         String policyJson = ResourceUtils.getResourceAsString(resourcePath);
250         ToscaServiceTemplate serviceTemplate = new StandardCoder().decode(policyJson, ToscaServiceTemplate.class);
251         return serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyName);
252     }
253
254 }