Removing deprecated DMAAP library
[policy/drools-pdp.git] / policy-management / src / test / java / org / onap / policy / drools / controller / DroolsControllerFactoryTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * policy-management
4  * ================================================================================
5  * Copyright (C) 2018-2020 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.controller;
23
24 import static org.junit.jupiter.api.Assertions.assertEquals;
25 import static org.junit.jupiter.api.Assertions.assertNotNull;
26 import static org.junit.jupiter.api.Assertions.assertSame;
27 import static org.junit.jupiter.api.Assertions.assertTrue;
28 import static org.junit.jupiter.api.Assertions.fail;
29 import static org.onap.policy.drools.properties.DroolsPropertyConstants.PROPERTY_CONTROLLER_TYPE;
30
31 import java.util.List;
32 import java.util.Properties;
33 import org.junit.jupiter.api.Test;
34 import org.onap.policy.drools.controller.internal.NullDroolsController;
35 import org.onap.policy.drools.features.DroolsControllerFeatureApi;
36 import org.onap.policy.drools.properties.DroolsPropertyConstants;
37 import org.onap.policy.drools.protocol.coders.TopicCoderFilterConfiguration;
38
39 public class DroolsControllerFactoryTest {
40
41     private static final String DROOLS_CONTROLLER_BUILDER_TAG = "DroolsControllerFactoryTest";
42     public static final String TEST_GROUP_ID = "testGroupId";
43     public static final String TEST_ARTIFACT_ID = "testArtifactId";
44     public static final String TEST_VERSION = "testVersion";
45
46     @Test
47     void testBuildNullController() {
48         Properties droolsProps = new Properties();
49         DroolsController droolsController = DroolsControllerConstants.getFactory().build(droolsProps, null, null);
50
51         if (!isNullController(droolsController)) {
52             fail("drools controller is not a null controller");
53         }
54     }
55
56     @Test
57     void testGetNullController() {
58         DroolsController controller =
59             DroolsControllerConstants.getFactory().get(DroolsControllerConstants.NO_GROUP_ID,
60                 DroolsControllerConstants.NO_ARTIFACT_ID, DroolsControllerConstants.NO_VERSION);
61
62         assertNotNull(controller);
63         assertEquals(DroolsControllerConstants.NO_GROUP_ID, controller.getGroupId());
64         assertEquals(DroolsControllerConstants.NO_ARTIFACT_ID, controller.getArtifactId());
65         assertEquals(DroolsControllerConstants.NO_VERSION, controller.getVersion());
66     }
67
68     @Test
69     void testInventory() {
70         List<DroolsController> controllers = DroolsControllerConstants.getFactory().inventory();
71         assertNotNull(controllers);
72
73         for (DroolsController controller : controllers) {
74             if (!isNullController(controller) && !isActualController(controller)) {
75                 fail("drools controller is not a null controller");
76             }
77         }
78     }
79
80     @Test
81     void testShutdown() {
82         DroolsControllerFactory droolsFactory = new IndexedDroolsControllerFactory();
83         droolsFactory.shutdown();
84         assertTrue(droolsFactory.inventory().isEmpty());
85     }
86
87     @Test
88     void testDestroy() {
89         DroolsControllerFactory droolsFactory = new IndexedDroolsControllerFactory();
90         droolsFactory.destroy();
91         assertTrue(droolsFactory.inventory().isEmpty());
92     }
93
94     private boolean isNullController(DroolsController droolsController) {
95         if (droolsController == null) {
96             return false;
97         }
98
99         if (!DroolsControllerConstants.NO_GROUP_ID.equals(droolsController.getGroupId())) {
100             return false;
101         }
102
103         if (!DroolsControllerConstants.NO_ARTIFACT_ID.equals(droolsController.getArtifactId())) {
104             return false;
105         }
106
107         return DroolsControllerConstants.NO_VERSION.equals(droolsController.getVersion());
108     }
109
110     @Test
111     void testControllerType() {
112         DroolsControllerFactory droolsFactory = new IndexedDroolsControllerFactory();
113         Properties props = new Properties();
114
115         // this should build a 'NullDroolsController'
116         DroolsController ctrl1 = droolsFactory.build(props, null, null);
117         assertSame(NullDroolsController.class, ctrl1.getClass());
118
119         props.setProperty(PROPERTY_CONTROLLER_TYPE, DROOLS_CONTROLLER_BUILDER_TAG);
120         props.setProperty(DroolsPropertyConstants.RULES_GROUPID, TEST_GROUP_ID);
121         props.setProperty(DroolsPropertyConstants.RULES_ARTIFACTID, TEST_ARTIFACT_ID);
122         props.setProperty(DroolsPropertyConstants.RULES_VERSION, TEST_VERSION);
123
124         // this should build a 'TestDroolsController'
125         DroolsController ctrl2 = droolsFactory.build(props, null, null);
126         assertSame(TestDroolsController.class, ctrl2.getClass());
127
128         // verify that we can find the controller in the factory table
129         assertSame(ctrl2, droolsFactory.get(ctrl2.getGroupId(), ctrl2.getArtifactId(), null));
130     }
131
132     private boolean isActualController(DroolsController droolsController) {
133         if (droolsController == null) {
134             return false;
135         }
136
137         if (!"org.onap.policy.drools.test".equals(droolsController.getGroupId())) {
138             return false;
139         }
140
141         if (!"protocolcoder".equals(droolsController.getArtifactId())) {
142             return false;
143         }
144
145         return droolsController.getVersion() != null && droolsController.getVersion().substring(0, 1).matches("[0-9]");
146     }
147
148     /**
149      * This class provides an alternate DroolsController implementation,
150      * for the purpose of easy identification within a Junit test.
151      */
152     public static class TestDroolsController extends NullDroolsController {
153         @Override
154         public String getGroupId() {
155             return TEST_GROUP_ID;
156         }
157
158         @Override
159         public String getArtifactId() {
160             return TEST_ARTIFACT_ID;
161         }
162     }
163
164     /**
165      * An instance of this class is created by 'IndexedDroolsControllerFactory',
166      * using features. It does the build operation when the value of the
167      * 'controller.type' property matches the value of DROOLS_CONTROLLER_BUILDER_TAG.
168      */
169     public static class DroolsBuilder implements DroolsControllerFeatureApi {
170         @Override
171         public int getSequenceNumber() {
172             return 1;
173         }
174
175         @Override
176         public DroolsController beforeInstance(Properties properties,
177                 String groupId, String artifactId, String version,
178                 List<TopicCoderFilterConfiguration> decoderConfigurations,
179                 List<TopicCoderFilterConfiguration> encoderConfigurations) {
180
181             if (DROOLS_CONTROLLER_BUILDER_TAG.equals(properties.getProperty(PROPERTY_CONTROLLER_TYPE))) {
182                 return new TestDroolsController();
183             }
184             return null;
185         }
186     }
187 }