Removing deprecated DMAAP library
[policy/drools-pdp.git] / feature-lifecycle / src / test / java / org / onap / policy / drools / lifecycle / ControllerSupport.java
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP
4  * ================================================================================
5  * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights reserved.
6  * Modifications Copyright (C) 2024 Nordix Foundation.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.drools.lifecycle;
23
24 import java.io.File;
25 import java.io.IOException;
26 import java.lang.reflect.Field;
27 import java.nio.file.Paths;
28 import java.util.List;
29 import java.util.Properties;
30 import lombok.Getter;
31 import lombok.NonNull;
32 import org.kie.api.builder.ReleaseId;
33 import org.onap.policy.drools.properties.DroolsPropertyConstants;
34 import org.onap.policy.drools.system.PolicyController;
35 import org.onap.policy.drools.system.PolicyControllerConstants;
36 import org.onap.policy.drools.util.KieUtils;
37 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
38
39 /**
40  * Controller Test Support.
41  */
42 @Getter
43 public class ControllerSupport {
44
45     protected static final String JUNIT_KMODULE_DRL_PATH = "src/test/resources/lifecycle.drl";
46     protected static final String JUNIT_KMODULE_POM_PATH = "src/test/resources/lifecycle.pom";
47     protected static final String JUNIT_KMODULE_PATH = "src/test/resources/lifecycle.kmodule";
48     protected static final String JUNIT_KJAR_DRL_PATH =
49         "src/main/resources/kbLifecycle/org/onap/policy/drools/test/";
50
51     protected static final String POLICY_TYPE_COMPLIANT_OP = "onap.policies.controlloop.operational.common.Drools";
52     protected static final String POLICY_TYPE_VERSION = "1.0.0";
53
54     protected static final String SESSION_NAME = "junits";
55
56     private final String name;
57
58     public ControllerSupport(@NonNull String name) {
59         this.name = name;
60     }
61
62     /**
63      * Create controller.
64      */
65     public PolicyController createController() throws IOException {
66         try {
67             PolicyController controller = getController();
68             controller.getDrools().delete(ToscaPolicy.class);
69             return controller;
70         } catch (IllegalArgumentException ignored) {  // NOSONAR
71             ;   // checkstyle
72         }
73
74         ReleaseId coordinates = installArtifact();
75
76         Properties controllerProps = getControllerProps(coordinates);
77
78         return PolicyControllerConstants.getFactory().build(name, controllerProps);
79     }
80
81     private Properties getControllerProps(ReleaseId coordinates) {
82         Properties controllerProps = new Properties();
83         controllerProps.put(DroolsPropertyConstants.PROPERTY_CONTROLLER_NAME, name);
84         controllerProps.put(DroolsPropertyConstants.PROPERTY_CONTROLLER_POLICY_TYPES, getPolicyType());
85         controllerProps.put(DroolsPropertyConstants.RULES_GROUPID, coordinates.getGroupId());
86         controllerProps.put(DroolsPropertyConstants.RULES_ARTIFACTID, coordinates.getArtifactId());
87         controllerProps.put(DroolsPropertyConstants.RULES_VERSION, coordinates.getVersion());
88         return controllerProps;
89     }
90
91     /**
92      * Install a maven artifact.
93      */
94     public static ReleaseId installArtifact(File kmodule, File pom,
95                                             String drlKjarPath, List<File> drls) throws IOException {
96         return KieUtils.installArtifact(kmodule, pom, drlKjarPath, drls);
97     }
98
99     /**
100      * install artifact.
101      */
102     public ReleaseId installArtifact() throws IOException {
103         return ControllerSupport.installArtifact(Paths.get(JUNIT_KMODULE_PATH).toFile(),
104             Paths.get(JUNIT_KMODULE_POM_PATH).toFile(),
105             JUNIT_KJAR_DRL_PATH,
106             List.of(Paths.get(JUNIT_KMODULE_DRL_PATH).toFile()));
107     }
108
109     /**
110      * Destroy the echo controller.
111      */
112     public void destroyController() {
113         PolicyControllerConstants.getFactory().destroy(name);
114     }
115
116     /**
117      * Get controller.
118      */
119     public PolicyController getController() {
120         return PolicyControllerConstants.getFactory().get(name);
121     }
122
123     /**
124      * Get Policy Type.
125      */
126     public static String getPolicyType() {
127         return POLICY_TYPE_COMPLIANT_OP + ":" + POLICY_TYPE_VERSION;
128     }
129
130     /**
131      * Get facts.
132      */
133     public <T> List<T> getFacts(Class<T> clazz) {
134         return PolicyControllerConstants.getFactory().get(name)
135             .getDrools()
136             .facts(SESSION_NAME, clazz);
137     }
138
139     /**
140      * Change final marker in static field.
141      */
142     public static <T> Field unsetFinalStaticAccess(Class<T> clazz, String fieldName)
143             throws NoSuchFieldException {
144         Field field = clazz.getDeclaredField(fieldName);
145         field.setAccessible(true);
146
147         return field;
148     }
149
150     /*
151      * Reassign static field.
152      */
153     public static <T, E> void setStaticField(Class<T> clazz, String fieldName, E newValue)
154         throws NoSuchFieldException, IllegalAccessException {
155         unsetFinalStaticAccess(clazz, fieldName).set(null, newValue);
156     }
157 }