2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2020-2022 AT&T Intellectual Property. All rights reserved.
4 * Modifications Copyright (C) 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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 * SPDX-License-Identifier: Apache-2.0
19 * =============LICENSE_END========================================================
22 package org.onap.policy.drools.lifecycle;
24 import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
25 import static org.junit.jupiter.api.Assertions.assertEquals;
26 import static org.junit.jupiter.api.Assertions.assertFalse;
27 import static org.junit.jupiter.api.Assertions.assertNull;
28 import static org.junit.jupiter.api.Assertions.assertSame;
29 import static org.junit.jupiter.api.Assertions.assertTrue;
30 import static org.onap.policy.common.message.bus.properties.MessageBusProperties.PROPERTY_NOOP_SINK_TOPICS;
31 import static org.onap.policy.common.message.bus.properties.MessageBusProperties.PROPERTY_NOOP_SOURCE_TOPICS;
33 import java.io.IOException;
34 import java.util.Properties;
35 import org.junit.jupiter.api.BeforeEach;
36 import org.junit.jupiter.api.Test;
37 import org.onap.policy.common.message.bus.event.TopicEndpointManager;
38 import org.onap.policy.common.utils.coder.CoderException;
39 import org.onap.policy.drools.domain.models.controller.ControllerPolicy;
40 import org.onap.policy.drools.server.restful.TestConstants;
41 import org.onap.policy.drools.system.PolicyControllerConstants;
42 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
45 * Native Controller Policy Test.
47 class PolicyTypeNativeDroolsControllerTest extends LifecycleStateRunningTest {
48 private static final String EXAMPLE_NATIVE_DROOLS_POLICY_NAME = "example.controller";
49 private static final String EXAMPLE_NATIVE_DROOLS_POLICY_JSON =
50 "src/test/resources/tosca-policy-native-controller-example.json";
53 * Test initialization.
57 fsm = makeFsmWithPseudoTime();
61 void testDeployUndeploy() throws IOException, CoderException {
62 fsm = makeFsmWithPseudoTime();
64 assertTrue(controllerSupport.getController().getDrools().isBrained());
65 assertFalse(controllerSupport.getController().isAlive());
66 assertFalse(controllerSupport.getController().getDrools().isAlive());
67 assertSame(controllerSupport.getController(), PolicyControllerConstants.getFactory().get("lifecycle"));
69 assertTrue(controllerSupport.getController().start());
71 assertTrue(controllerSupport.getController().isAlive());
72 assertTrue(controllerSupport.getController().getDrools().isAlive());
73 assertTrue(controllerSupport.getController().getDrools().isBrained());
74 assertSame(controllerSupport.getController(), PolicyControllerConstants.getFactory().get("lifecycle"));
76 ToscaPolicy policy = getPolicyFromFile(EXAMPLE_NATIVE_DROOLS_POLICY_JSON, EXAMPLE_NATIVE_DROOLS_POLICY_NAME);
77 ControllerPolicy controllerPolicy = fsm.getDomainMaker().convertTo(policy, ControllerPolicy.class);
78 PolicyTypeNativeDroolsController controller =
79 new PolicyTypeNativeDroolsController(policy.getTypeIdentifier(), fsm);
80 assertTrue(controller.undeploy(policy));
81 assertThatIllegalArgumentException().isThrownBy(
82 () -> PolicyControllerConstants.getFactory().get(controllerPolicy.getName()));
84 Properties noopTopicProperties = new Properties();
85 noopTopicProperties.put(PROPERTY_NOOP_SOURCE_TOPICS, TestConstants.DCAE_TOPIC);
86 noopTopicProperties.put(PROPERTY_NOOP_SINK_TOPICS, TestConstants.APPC_CL_TOPIC);
87 TopicEndpointManager.getManager().addTopics(noopTopicProperties);
89 assertTrue(controller.deploy(policy));
90 /* this should be ok too */
91 assertTrue(controller.deploy(policy));
95 void testControllerProperties() throws CoderException {
96 Properties noopTopicProperties = new Properties();
97 String noopSources = String.join(",", TestConstants.DCAE_TOPIC, TestConstants.APPC_CL_TOPIC,
98 TestConstants.APPC_LCM_WRITE_TOPIC, TestConstants.SDNR_CL_RSP_TOPIC);
99 noopTopicProperties.put(PROPERTY_NOOP_SOURCE_TOPICS, noopSources);
101 String noopSinks = String.join(",", TestConstants.APPC_CL_TOPIC, TestConstants.APPC_LCM_READ_TOPIC,
102 TestConstants.POLICY_CL_MGT_TOPIC, TestConstants.DCAE_CL_RSP_TOPIC);
103 noopTopicProperties.put(PROPERTY_NOOP_SINK_TOPICS, noopSinks);
104 TopicEndpointManager.getManager().addTopics(noopTopicProperties);
106 ToscaPolicy nativeControllerPolicy =
107 getExamplesPolicy("policies/usecases.native.controller.policy.input.tosca.json", "usecases");
108 PolicyTypeNativeDroolsController controller =
109 new PolicyTypeNativeDroolsController(nativeControllerPolicy.getTypeIdentifier(), fsm);
110 assertTrue(controller.deploy(nativeControllerPolicy));
111 Properties properties = PolicyControllerConstants.getFactory().get("usecases").getProperties();
113 assertEquals("usecases", properties.getProperty("controller.name"));
115 assertNull(properties.getProperty("rules.groupId"));
116 assertNull(properties.getProperty("rules.artifactId"));
117 assertNull(properties.getProperty("rules.version"));
119 assertSourceTopics(properties);
121 assertSinkTopics(properties);
123 assertEquals("test", properties.getProperty("notes"));
124 assertEquals("auto", properties.getProperty("persistence.type"));
126 assertTrue(controller.undeploy(nativeControllerPolicy));
129 private static void assertSourceTopics(Properties properties) {
130 assertEquals("dcae_topic,appc-cl,appc-lcm-write,sdnr-cl-rsp",
131 properties.getProperty("noop.source.topics"));
133 assertEquals("org.onap.policy.controlloop.CanonicalOnset,org.onap.policy.controlloop.CanonicalAbated",
134 properties.getProperty("noop.source.topics.dcae_topic.events"));
136 assertEquals("[?($.closedLoopEventStatus == 'ONSET')]",
137 properties.getProperty("noop.source.topics.dcae_topic.events."
138 + "org.onap.policy.controlloop.CanonicalOnset.filter"));
140 assertEquals("[?($.closedLoopEventStatus == 'ABATED')]",
141 properties.getProperty("noop.source.topics.dcae_topic.events."
142 + "org.onap.policy.controlloop.CanonicalAbated.filter"));
144 assertEquals("org.onap.policy.controlloop.util.Serialization,gson",
145 properties.getProperty("noop.source.topics.dcae_topic.events.custom.gson"));
147 assertEquals("org.onap.policy.appc.Response",
148 properties.getProperty("noop.source.topics.appc-cl.events"));
150 assertEquals("[?($.CommonHeader && $.Status)]",
151 properties.getProperty("noop.source.topics.appc-cl.events.org.onap.policy.appc.Response.filter"));
153 assertEquals("org.onap.policy.appc.util.Serialization,gsonPretty",
154 properties.getProperty("noop.source.topics.appc-cl.events.custom.gson"));
156 assertEquals("org.onap.policy.appclcm.AppcLcmMessageWrapper",
157 properties.getProperty("noop.source.topics.appc-lcm-write.events"));
159 assertEquals("[?($.type == 'response')]",
160 properties.getProperty("noop.source.topics.appc-lcm-write.events."
161 + "org.onap.policy.appclcm.AppcLcmMessageWrapper.filter"));
163 assertEquals("org.onap.policy.appclcm.util.Serialization,gson",
164 properties.getProperty("noop.source.topics.appc-lcm-write.events.custom.gson"));
166 assertEquals("org.onap.policy.sdnr.PciResponseWrapper",
167 properties.getProperty("noop.source.topics.sdnr-cl-rsp.events"));
169 assertEquals("[?($.type == 'response')]",
170 properties.getProperty("noop.source.topics.sdnr-cl-rsp.events."
171 + "org.onap.policy.sdnr.PciResponseWrapper.filter"));
173 assertEquals("org.onap.policy.sdnr.util.Serialization,gson",
174 properties.getProperty("noop.source.topics.sdnr-cl-rsp.events.custom.gson"));
177 private static void assertSinkTopics(Properties properties) {
178 assertEquals("appc-cl,appc-lcm-read,policy-cl-mgt,dcae_cl_rsp",
179 properties.getProperty("noop.sink.topics"));
181 assertEquals("org.onap.policy.appc.Request",
182 properties.getProperty("noop.sink.topics.appc-cl.events"));
184 assertEquals("org.onap.policy.appc.util.Serialization,gsonPretty",
185 properties.getProperty("noop.sink.topics.appc-cl.events.custom.gson"));
187 assertEquals("org.onap.policy.appclcm.AppcLcmMessageWrapper",
188 properties.getProperty("noop.sink.topics.appc-lcm-read.events"));
190 assertEquals("org.onap.policy.appclcm.util.Serialization,gson",
191 properties.getProperty("noop.sink.topics.appc-lcm-read.events.custom.gson"));
193 assertEquals("org.onap.policy.controlloop.VirtualControlLoopNotification",
194 properties.getProperty("noop.sink.topics.policy-cl-mgt.events"));
196 assertEquals("org.onap.policy.controlloop.util.Serialization,gsonPretty",
197 properties.getProperty("noop.sink.topics.policy-cl-mgt.events.custom.gson"));
199 assertEquals("org.onap.policy.controlloop.ControlLoopResponse",
200 properties.getProperty("noop.sink.topics.dcae_cl_rsp.events"));
202 assertEquals("org.onap.policy.controlloop.util.Serialization,gsonPretty",
203 properties.getProperty("noop.sink.topics.dcae_cl_rsp.events.custom.gson"));