fe5a3b213ca25d2dc9fd39e55454b38800409505
[policy/drools-pdp.git] /
1 /*
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
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.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;
32
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;
43
44 /**
45  * Native Controller Policy Test.
46  */
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";
51
52     /**
53      * Test initialization.
54      */
55     @BeforeEach
56     public void init() {
57         fsm = makeFsmWithPseudoTime();
58     }
59
60     @Test
61     void testDeployUndeploy() throws IOException, CoderException {
62         fsm = makeFsmWithPseudoTime();
63
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"));
68
69         assertTrue(controllerSupport.getController().start());
70
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"));
75
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()));
83
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);
88
89         assertTrue(controller.deploy(policy));
90         /* this should be ok too */
91         assertTrue(controller.deploy(policy));
92     }
93
94     @Test
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);
100
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);
105
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();
112
113         assertEquals("usecases", properties.getProperty("controller.name"));
114
115         assertNull(properties.getProperty("rules.groupId"));
116         assertNull(properties.getProperty("rules.artifactId"));
117         assertNull(properties.getProperty("rules.version"));
118
119         assertSourceTopics(properties);
120
121         assertSinkTopics(properties);
122
123         assertEquals("test", properties.getProperty("notes"));
124         assertEquals("auto", properties.getProperty("persistence.type"));
125
126         assertTrue(controller.undeploy(nativeControllerPolicy));
127     }
128
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"));
132
133         assertEquals("org.onap.policy.controlloop.CanonicalOnset,org.onap.policy.controlloop.CanonicalAbated",
134             properties.getProperty("noop.source.topics.dcae_topic.events"));
135
136         assertEquals("[?($.closedLoopEventStatus == 'ONSET')]",
137             properties.getProperty("noop.source.topics.dcae_topic.events."
138                 + "org.onap.policy.controlloop.CanonicalOnset.filter"));
139
140         assertEquals("[?($.closedLoopEventStatus == 'ABATED')]",
141             properties.getProperty("noop.source.topics.dcae_topic.events."
142                 + "org.onap.policy.controlloop.CanonicalAbated.filter"));
143
144         assertEquals("org.onap.policy.controlloop.util.Serialization,gson",
145             properties.getProperty("noop.source.topics.dcae_topic.events.custom.gson"));
146
147         assertEquals("org.onap.policy.appc.Response",
148             properties.getProperty("noop.source.topics.appc-cl.events"));
149
150         assertEquals("[?($.CommonHeader && $.Status)]",
151             properties.getProperty("noop.source.topics.appc-cl.events.org.onap.policy.appc.Response.filter"));
152
153         assertEquals("org.onap.policy.appc.util.Serialization,gsonPretty",
154             properties.getProperty("noop.source.topics.appc-cl.events.custom.gson"));
155
156         assertEquals("org.onap.policy.appclcm.AppcLcmMessageWrapper",
157             properties.getProperty("noop.source.topics.appc-lcm-write.events"));
158
159         assertEquals("[?($.type == 'response')]",
160             properties.getProperty("noop.source.topics.appc-lcm-write.events."
161                 + "org.onap.policy.appclcm.AppcLcmMessageWrapper.filter"));
162
163         assertEquals("org.onap.policy.appclcm.util.Serialization,gson",
164             properties.getProperty("noop.source.topics.appc-lcm-write.events.custom.gson"));
165
166         assertEquals("org.onap.policy.sdnr.PciResponseWrapper",
167             properties.getProperty("noop.source.topics.sdnr-cl-rsp.events"));
168
169         assertEquals("[?($.type == 'response')]",
170             properties.getProperty("noop.source.topics.sdnr-cl-rsp.events."
171                 + "org.onap.policy.sdnr.PciResponseWrapper.filter"));
172
173         assertEquals("org.onap.policy.sdnr.util.Serialization,gson",
174             properties.getProperty("noop.source.topics.sdnr-cl-rsp.events.custom.gson"));
175     }
176
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"));
180
181         assertEquals("org.onap.policy.appc.Request",
182             properties.getProperty("noop.sink.topics.appc-cl.events"));
183
184         assertEquals("org.onap.policy.appc.util.Serialization,gsonPretty",
185             properties.getProperty("noop.sink.topics.appc-cl.events.custom.gson"));
186
187         assertEquals("org.onap.policy.appclcm.AppcLcmMessageWrapper",
188             properties.getProperty("noop.sink.topics.appc-lcm-read.events"));
189
190         assertEquals("org.onap.policy.appclcm.util.Serialization,gson",
191             properties.getProperty("noop.sink.topics.appc-lcm-read.events.custom.gson"));
192
193         assertEquals("org.onap.policy.controlloop.VirtualControlLoopNotification",
194             properties.getProperty("noop.sink.topics.policy-cl-mgt.events"));
195
196         assertEquals("org.onap.policy.controlloop.util.Serialization,gsonPretty",
197             properties.getProperty("noop.sink.topics.policy-cl-mgt.events.custom.gson"));
198
199         assertEquals("org.onap.policy.controlloop.ControlLoopResponse",
200             properties.getProperty("noop.sink.topics.dcae_cl_rsp.events"));
201
202         assertEquals("org.onap.policy.controlloop.util.Serialization,gsonPretty",
203             properties.getProperty("noop.sink.topics.dcae_cl_rsp.events.custom.gson"));
204     }
205 }