2 * ============LICENSE_START=======================================================
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
22 package org.onap.policy.drools.lifecycle;
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;
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;
40 * Controller Test Support.
43 public class ControllerSupport {
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/";
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";
54 protected static final String SESSION_NAME = "junits";
56 private final String name;
58 public ControllerSupport(@NonNull String name) {
65 public PolicyController createController() throws IOException {
67 PolicyController controller = getController();
68 controller.getDrools().delete(ToscaPolicy.class);
70 } catch (IllegalArgumentException ignored) { // NOSONAR
74 ReleaseId coordinates = installArtifact();
76 Properties controllerProps = getControllerProps(coordinates);
78 return PolicyControllerConstants.getFactory().build(name, controllerProps);
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;
92 * Install a maven artifact.
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);
102 public ReleaseId installArtifact() throws IOException {
103 return ControllerSupport.installArtifact(Paths.get(JUNIT_KMODULE_PATH).toFile(),
104 Paths.get(JUNIT_KMODULE_POM_PATH).toFile(),
106 List.of(Paths.get(JUNIT_KMODULE_DRL_PATH).toFile()));
110 * Destroy the echo controller.
112 public void destroyController() {
113 PolicyControllerConstants.getFactory().destroy(name);
119 public PolicyController getController() {
120 return PolicyControllerConstants.getFactory().get(name);
126 public static String getPolicyType() {
127 return POLICY_TYPE_COMPLIANT_OP + ":" + POLICY_TYPE_VERSION;
133 public <T> List<T> getFacts(Class<T> clazz) {
134 return PolicyControllerConstants.getFactory().get(name)
136 .facts(SESSION_NAME, clazz);
140 * Change final marker in static field.
142 public static <T> Field unsetFinalStaticAccess(Class<T> clazz, String fieldName)
143 throws NoSuchFieldException {
144 Field field = clazz.getDeclaredField(fieldName);
145 field.setAccessible(true);
151 * Reassign static field.
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);