2 * ============LICENSE_START=======================================================
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
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.common.endpoints.event.comm.bus;
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;
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;
46 public abstract class NoopTopicFactoryTest<F extends NoopTopicFactory<T>, T extends NoopTopicEndpoint>
47 extends TopicFactoryTestBase<T> {
49 private static final List<String> NOOP_SERVERS = Arrays.asList(CommInfrastructure.NOOP.toString());
50 private F factory = null;
52 protected abstract F buildFactory();
55 * Creates the object to be tested.
70 void testBuildBusTopicParams() {
73 T item1 = buildTopic(makeParams(servers, MY_TOPIC, true));
76 assertEquals(servers, item1.getServers());
77 assertEquals(MY_TOPIC, item1.getTopic());
81 void testBuildListOfStringStringBoolean() {
84 T item1 = buildTopic(servers, MY_TOPIC, true);
87 assertEquals(servers, item1.getServers());
88 assertEquals(MY_TOPIC, item1.getTopic());
90 // managed topic - should not build a new one
91 assertEquals(item1, buildTopic(servers, MY_TOPIC, true));
93 T item2 = buildTopic(servers, TOPIC2, true);
95 assertNotSame(item1, item2);
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);
103 T item4 = buildTopic(Collections.emptyList(), TOPIC2, true);
104 assertSame(item3, item4);
108 assertEquals(NOOP_SERVERS, buildTopic(null, MY_TOPIC, true).getServers());
112 assertEquals(NOOP_SERVERS, buildTopic(Collections.emptyList(), MY_TOPIC, true).getServers());
116 item1 = buildTopic(servers, MY_TOPIC, false);
117 assertNotSame(item1, buildTopic(servers, MY_TOPIC, false));
121 void testBuildListOfStringStringBoolean_NullTopic() {
122 assertThatThrownBy(() -> buildTopic(servers, null, true)).isInstanceOf(IllegalArgumentException.class);
126 void testBuildListOfStringStringBoolean_EmptyTopic() {
127 assertThatThrownBy(() -> buildTopic(servers, "", true)).isInstanceOf(IllegalArgumentException.class);
131 void testBuildProperties() {
134 assertEquals(1, buildTopics(makePropBuilder().makeTopic(MY_TOPIC).build()).size());
135 assertNotNull(factory.get(MY_TOPIC));
137 // unmanaged topic - get() will throw an exception
139 assertEquals(1, buildTopics(makePropBuilder().makeTopic(MY_TOPIC)
140 .setTopicProperty(PROPERTY_MANAGED_SUFFIX, "false").build()).size());
141 assertThatIllegalStateException().isThrownBy(() -> factory.get(MY_TOPIC));
143 // managed undefined - default to true
145 assertEquals(1, buildTopics(
146 makePropBuilder().makeTopic(MY_TOPIC).removeTopicProperty(PROPERTY_MANAGED_SUFFIX).build())
148 assertNotNull(factory.get(MY_TOPIC));
150 // managed empty - default to true
152 assertEquals(1, buildTopics(
153 makePropBuilder().makeTopic(MY_TOPIC).setTopicProperty(PROPERTY_MANAGED_SUFFIX, "").build())
155 assertNotNull(factory.get(MY_TOPIC));
160 assertTrue(buildTopics(makePropBuilder().build()).isEmpty());
163 assertTrue(buildTopics(makePropBuilder().addTopic("").build()).isEmpty());
167 T endpoint = buildTopics(makePropBuilder().makeTopic(MY_TOPIC)
168 .removeTopicProperty(PROPERTY_TOPIC_SERVERS_SUFFIX).build()).get(0);
169 assertEquals(NOOP_SERVERS, endpoint.getServers());
173 endpoint = buildTopics(makePropBuilder().makeTopic(MY_TOPIC).setTopicProperty(PROPERTY_TOPIC_SERVERS_SUFFIX, "")
175 assertEquals(NOOP_SERVERS, endpoint.getServers());
177 // test other options
178 super.testBuildProperties_Multiple();
183 void testDestroyString_testGet_testInventory() {
184 super.testDestroyString_testGet_testInventory();
185 super.testDestroyString_Ex();
200 protected void initFactory() {
201 if (factory != null) {
205 factory = buildFactory();
209 protected List<T> buildTopics(Properties properties) {
210 return factory.build(properties);
213 protected T buildTopic(BusTopicParams param) {
214 return factory.build(param);
217 protected T buildTopic(List<String> servers, String topic, boolean managed) {
218 return factory.build(servers, topic, managed);
222 protected void destroyFactory() {
227 protected void destroyTopic(String topic) {
228 factory.destroy(topic);
232 protected List<T> getInventory() {
233 return factory.inventory();
237 protected T getTopic(String topic) {
238 return factory.get(topic);
242 protected TopicPropertyBuilder makePropBuilder() {
243 return new NoopTopicPropertyBuilder(factory.getTopicsPropertyName());
246 private BusTopicParams makeParams(List<String> servers, String topic, boolean managed) {
247 BusTopicParams params = new BusTopicParams();
249 params.setServers(servers);
250 params.setTopic(topic);
251 params.setManaged(managed);