aboutsummaryrefslogtreecommitdiffstats
path: root/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/event/comm/bus/TopicFactoryTestBase.java
blob: d8a16428bac0b9ab56d52717b9a2840ad9c16d47 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
/*
 * ============LICENSE_START=======================================================
 * policy-endpoints
 * ================================================================================
 * Copyright (C) 2018-2019 AT&T Intellectual Property. All rights reserved.
 * ================================================================================
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * ============LICENSE_END=========================================================
 */

package org.onap.policy.common.endpoints.event.comm.bus;

import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.onap.policy.common.endpoints.properties.PolicyEndPointProperties.PROPERTY_TOPIC_SERVERS_SUFFIX;

import java.util.List;
import java.util.Properties;
import org.onap.policy.common.endpoints.event.comm.Topic;

/**
 * Base class for XxxTopicFactory tests.
 *
 * @param <T> type of topic managed by the factory
 */
public abstract class TopicFactoryTestBase<T extends Topic> extends TopicTestBase {

    public static final String SERVER = "my-server";
    public static final String TOPIC2 = "my-topic-2";
    public static final String TOPIC3 = "my-topic-3";

    /**
     * Initializes a new factory.
     */
    protected abstract void initFactory();

    /**
     * Makes a property builder.
     *
     * @return a new property builder
     */
    protected abstract TopicPropertyBuilder makePropBuilder();

    /**
     * Builds a set of topics.
     *
     * @param properties the properties used to configure the topics
     * @return a list of new topics
     */
    protected abstract List<T> buildTopics(Properties properties);

    /**
     * Destroys the factory.
     */
    protected abstract void destroyFactory();

    /**
     * Destroys a topic within the factory.
     *
     * @param topic the topic to destroy
     */
    protected abstract void destroyTopic(String topic);

    /**
     * Gets the list of topics from the factory.
     *
     * @return the topic inventory
     */
    protected abstract List<T> getInventory();

    /**
     * Gets a topic from the factory.
     *
     * @param topic the topic name
     * @return the topic
     */
    protected abstract T getTopic(String topic);


    /**
     * Tests building a topic using varied Properties.
     */
    public void testBuildProperties_Variations() {
        initFactory();

        // null topic list
        assertTrue(buildTopics(makePropBuilder().build()).isEmpty());

        // empty topic list
        assertTrue(buildTopics(makePropBuilder().addTopic("").build()).isEmpty());

        // null servers
        assertTrue(buildTopics(makePropBuilder().makeTopic(MY_TOPIC).removeTopicProperty(PROPERTY_TOPIC_SERVERS_SUFFIX)
                        .build()).isEmpty());

        // empty servers
        assertTrue(buildTopics(makePropBuilder().makeTopic(MY_TOPIC).setTopicProperty(PROPERTY_TOPIC_SERVERS_SUFFIX, "")
                        .build()).isEmpty());
    }

    /**
     * Tests building multiple topics using Properties.
     */
    public void testBuildProperties_Multiple() {
        initFactory();

        // make two fully-defined topics, and add two duplicate topic names to the list
        TopicPropertyBuilder builder =
                        makePropBuilder().makeTopic(MY_TOPIC).makeTopic(TOPIC2).addTopic(MY_TOPIC).addTopic(MY_TOPIC);

        List<T> lst = buildTopics(builder.build());
        assertEquals(4, lst.size());

        int index = 0;
        T item = lst.get(index++);
        assertTrue(item != lst.get(index++));
        assertTrue(item == lst.get(index++));
        assertTrue(item == lst.get(index++));
    }

    /**
     * Tests destroy(topic), get(topic), and inventory() methods.
     */
    public void testDestroyString_testGet_testInventory() {
        initFactory();

        List<T> lst = buildTopics(makePropBuilder().makeTopic(MY_TOPIC).makeTopic(TOPIC2).build());

        int index = 0;
        T item1 = lst.get(index++);
        T item2 = lst.get(index++);

        assertEquals(2, getInventory().size());
        assertTrue(getInventory().contains(item1));
        assertTrue(getInventory().contains(item2));

        item1.start();
        item2.start();

        assertEquals(item1, getTopic(MY_TOPIC));
        assertEquals(item2, getTopic(TOPIC2));

        destroyTopic(MY_TOPIC);
        assertFalse(item1.isAlive());
        assertTrue(item2.isAlive());
        assertEquals(item2, getTopic(TOPIC2));
        assertEquals(1, getInventory().size());
        assertTrue(getInventory().contains(item2));

        // repeat
        destroyTopic(MY_TOPIC);
        assertFalse(item1.isAlive());
        assertTrue(item2.isAlive());

        // with other topic
        destroyTopic(TOPIC2);
        assertFalse(item1.isAlive());
        assertFalse(item2.isAlive());
        assertEquals(0, getInventory().size());
    }

    /**
     * Tests exception cases with destroy(topic).
     */
    public void testDestroyString_Ex() {
        // null topic
        assertThatIllegalArgumentException().as("null topic").isThrownBy(() -> destroyTopic(null));

        // empty topic
        assertThatIllegalArgumentException().as("empty topic").isThrownBy(() -> destroyTopic(""));
    }

    /**
     * Tests the destroy() method.
     */
    public void testDestroy() {
        initFactory();

        List<T> lst = buildTopics(makePropBuilder().makeTopic(MY_TOPIC).makeTopic(TOPIC2).build());

        int index = 0;
        T item1 = lst.get(index++);
        T item2 = lst.get(index++);

        item1.start();
        item2.start();

        destroyFactory();

        assertFalse(item1.isAlive());
        assertFalse(item2.isAlive());
        assertEquals(0, getInventory().size());
    }

    /**
     * Tests exception cases with get(topic).
     */
    public void testGet_Ex() {
        // null topic
        assertThatIllegalArgumentException().as("null topic").isThrownBy(() -> getTopic(null));

        // empty topic
        assertThatIllegalArgumentException().as("empty topic").isThrownBy(() -> getTopic(""));

        // unknown topic
        initFactory();
        buildTopics(makePropBuilder().makeTopic(MY_TOPIC).build());

        assertThatIllegalStateException().as("unknown topic").isThrownBy(() -> getTopic(TOPIC2));
    }
}