3a0ec95f1e563d737c1f5ceff349c61d255ec72b
[policy/common.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP
4  * ================================================================================
5  * Copyright (C) 2019-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.common.endpoints.event.comm.bus;
23
24 import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
25 import static org.assertj.core.api.Assertions.assertThatThrownBy;
26 import static org.junit.jupiter.api.Assertions.assertEquals;
27 import static org.junit.jupiter.api.Assertions.assertNotNull;
28 import static org.junit.jupiter.api.Assertions.assertNotSame;
29 import static org.junit.jupiter.api.Assertions.assertSame;
30 import static org.junit.jupiter.api.Assertions.assertTrue;
31 import static org.onap.policy.common.endpoints.properties.PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX;
32 import static org.onap.policy.common.endpoints.properties.PolicyEndPointProperties.PROPERTY_TOPIC_SERVERS_SUFFIX;
33
34 import java.util.ArrayList;
35 import java.util.Arrays;
36 import java.util.Collections;
37 import java.util.List;
38 import java.util.Properties;
39 import org.apache.commons.lang3.RandomStringUtils;
40 import org.junit.jupiter.api.AfterEach;
41 import org.junit.jupiter.api.BeforeEach;
42 import org.junit.jupiter.api.Test;
43 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
44 import org.onap.policy.common.endpoints.event.comm.bus.internal.BusTopicParams;
45
46 public abstract class NoopTopicFactoryTest<F extends NoopTopicFactory<T>, T extends NoopTopicEndpoint>
47     extends TopicFactoryTestBase<T> {
48
49     private static final List<String> NOOP_SERVERS = Arrays.asList(CommInfrastructure.NOOP.toString());
50     private F factory = null;
51
52     protected abstract F buildFactory();
53
54     /**
55      * Creates the object to be tested.
56      */
57     @BeforeEach
58     @Override
59     public void setUp() {
60         super.setUp();
61         initFactory();
62     }
63
64     @AfterEach
65     void tearDown() {
66         factory.destroy();
67     }
68
69     @Test
70     void testBuildBusTopicParams() {
71         initFactory();
72
73         T item1 = buildTopic(makeParams(servers, MY_TOPIC, true));
74         assertNotNull(item1);
75
76         assertEquals(servers, item1.getServers());
77         assertEquals(MY_TOPIC, item1.getTopic());
78     }
79
80     @Test
81     void testBuildListOfStringStringBoolean() {
82         initFactory();
83
84         T item1 = buildTopic(servers, MY_TOPIC, true);
85         assertNotNull(item1);
86
87         assertEquals(servers, item1.getServers());
88         assertEquals(MY_TOPIC, item1.getTopic());
89
90         // managed topic - should not build a new one
91         assertEquals(item1, buildTopic(servers, MY_TOPIC, true));
92
93         T item2 = buildTopic(servers, TOPIC2, true);
94         assertNotNull(item2);
95         assertNotSame(item1, item2);
96
97         // duplicate - should be the same, as these topics are managed
98         List<String> randomServers = new ArrayList<>();
99         randomServers.add(RandomStringUtils.randomAlphanumeric(8));
100         T item3 = buildTopic(randomServers, TOPIC2, true);
101         assertSame(item2, item3);
102
103         T item4 = buildTopic(Collections.emptyList(), TOPIC2, true);
104         assertSame(item3, item4);
105
106         // null server list
107         initFactory();
108         assertEquals(NOOP_SERVERS, buildTopic(null, MY_TOPIC, true).getServers());
109
110         // empty server list
111         initFactory();
112         assertEquals(NOOP_SERVERS, buildTopic(Collections.emptyList(), MY_TOPIC, true).getServers());
113
114         // unmanaged topic
115         initFactory();
116         item1 = buildTopic(servers, MY_TOPIC, false);
117         assertNotSame(item1, buildTopic(servers, MY_TOPIC, false));
118     }
119
120     @Test
121     void testBuildListOfStringStringBoolean_NullTopic() {
122         assertThatThrownBy(() -> buildTopic(servers, null, true)).isInstanceOf(IllegalArgumentException.class);
123     }
124
125     @Test
126     void testBuildListOfStringStringBoolean_EmptyTopic() {
127         assertThatThrownBy(() -> buildTopic(servers, "", true)).isInstanceOf(IllegalArgumentException.class);
128     }
129
130     @Test
131     void testBuildProperties() {
132         // managed topic
133         initFactory();
134         assertEquals(1, buildTopics(makePropBuilder().makeTopic(MY_TOPIC).build()).size());
135         assertNotNull(factory.get(MY_TOPIC));
136
137         // unmanaged topic - get() will throw an exception
138         initFactory();
139         assertEquals(1, buildTopics(makePropBuilder().makeTopic(MY_TOPIC)
140                         .setTopicProperty(PROPERTY_MANAGED_SUFFIX, "false").build()).size());
141         assertThatIllegalStateException().isThrownBy(() -> factory.get(MY_TOPIC));
142
143         // managed undefined - default to true
144         initFactory();
145         assertEquals(1, buildTopics(
146                         makePropBuilder().makeTopic(MY_TOPIC).removeTopicProperty(PROPERTY_MANAGED_SUFFIX).build())
147                                         .size());
148         assertNotNull(factory.get(MY_TOPIC));
149
150         // managed empty - default to true
151         initFactory();
152         assertEquals(1, buildTopics(
153                         makePropBuilder().makeTopic(MY_TOPIC).setTopicProperty(PROPERTY_MANAGED_SUFFIX, "").build())
154                                         .size());
155         assertNotNull(factory.get(MY_TOPIC));
156
157         initFactory();
158
159         // null topic list
160         assertTrue(buildTopics(makePropBuilder().build()).isEmpty());
161
162         // empty topic list
163         assertTrue(buildTopics(makePropBuilder().addTopic("").build()).isEmpty());
164
165         // null server list
166         initFactory();
167         T endpoint = buildTopics(makePropBuilder().makeTopic(MY_TOPIC)
168                         .removeTopicProperty(PROPERTY_TOPIC_SERVERS_SUFFIX).build()).get(0);
169         assertEquals(NOOP_SERVERS, endpoint.getServers());
170
171         // empty server list
172         initFactory();
173         endpoint = buildTopics(makePropBuilder().makeTopic(MY_TOPIC).setTopicProperty(PROPERTY_TOPIC_SERVERS_SUFFIX, "")
174                         .build()).get(0);
175         assertEquals(NOOP_SERVERS, endpoint.getServers());
176
177         // test other options
178         super.testBuildProperties_Multiple();
179     }
180
181     @Test
182     @Override
183     void testDestroyString_testGet_testInventory() {
184         super.testDestroyString_testGet_testInventory();
185         super.testDestroyString_Ex();
186     }
187
188     @Test
189     @Override
190     void testDestroy() {
191         super.testDestroy();
192     }
193
194     @Test
195     void testGet() {
196         super.testGet_Ex();
197     }
198
199     @Override
200     protected void initFactory() {
201         if (factory != null) {
202             factory.destroy();
203         }
204
205         factory = buildFactory();
206     }
207
208     @Override
209     protected List<T> buildTopics(Properties properties) {
210         return factory.build(properties);
211     }
212
213     protected T buildTopic(BusTopicParams param) {
214         return factory.build(param);
215     }
216
217     protected T buildTopic(List<String> servers, String topic, boolean managed) {
218         return factory.build(servers, topic, managed);
219     }
220
221     @Override
222     protected void destroyFactory() {
223         factory.destroy();
224     }
225
226     @Override
227     protected void destroyTopic(String topic) {
228         factory.destroy(topic);
229     }
230
231     @Override
232     protected List<T> getInventory() {
233         return factory.inventory();
234     }
235
236     @Override
237     protected T getTopic(String topic) {
238         return factory.get(topic);
239     }
240
241     @Override
242     protected TopicPropertyBuilder makePropBuilder() {
243         return new NoopTopicPropertyBuilder(factory.getTopicsPropertyName());
244     }
245
246     private BusTopicParams makeParams(List<String> servers, String topic, boolean managed) {
247         BusTopicParams params = new BusTopicParams();
248
249         params.setServers(servers);
250         params.setTopic(topic);
251         params.setManaged(managed);
252
253         return params;
254     }
255 }