5264b2f4ed61d0f225ea2610b7a59e78efecc34d
[policy/common.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * policy-endpoints
4  * ================================================================================
5  * Copyright (C) 2018-2020 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.common.endpoints.event.comm.bus.internal;
22
23 import static org.assertj.core.api.Assertions.assertThatCode;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertFalse;
26 import static org.junit.Assert.assertNotNull;
27 import static org.junit.Assert.fail;
28 import static org.mockito.Mockito.mock;
29 import static org.mockito.Mockito.when;
30
31 import com.att.nsa.cambria.client.CambriaConsumer;
32 import java.io.IOException;
33 import java.util.Arrays;
34 import java.util.Collections;
35 import java.util.List;
36 import org.apache.commons.collections4.IteratorUtils;
37 import org.junit.Before;
38 import org.junit.Test;
39 import org.onap.dmaap.mr.client.impl.MRConsumerImpl;
40 import org.onap.dmaap.mr.client.response.MRConsumerResponse;
41 import org.onap.policy.common.endpoints.event.comm.bus.TopicTestBase;
42 import org.onap.policy.common.endpoints.event.comm.bus.internal.BusConsumer.CambriaConsumerWrapper;
43 import org.onap.policy.common.endpoints.event.comm.bus.internal.BusConsumer.DmaapAafConsumerWrapper;
44 import org.onap.policy.common.endpoints.event.comm.bus.internal.BusConsumer.DmaapConsumerWrapper;
45 import org.onap.policy.common.endpoints.event.comm.bus.internal.BusConsumer.DmaapDmeConsumerWrapper;
46 import org.powermock.reflect.Whitebox;
47
48 public class BusConsumerTest extends TopicTestBase {
49
50     @Before
51     @Override
52     public void setUp() {
53         super.setUp();
54     }
55
56     @Test
57     public void testCambriaConsumerWrapper() {
58         // verify that different wrappers can be built
59         new CambriaConsumerWrapper(makeBuilder().build());
60         new CambriaConsumerWrapper(makeBuilder().useHttps(false).build());
61         new CambriaConsumerWrapper(makeBuilder().useHttps(true).build());
62         new CambriaConsumerWrapper(makeBuilder().useHttps(true).allowSelfSignedCerts(false).build());
63         new CambriaConsumerWrapper(makeBuilder().useHttps(true).allowSelfSignedCerts(true).build());
64         new CambriaConsumerWrapper(makeBuilder().apiKey(null).build());
65         new CambriaConsumerWrapper(makeBuilder().apiSecret(null).build());
66         new CambriaConsumerWrapper(makeBuilder().apiKey(null).apiSecret(null).build());
67         new CambriaConsumerWrapper(makeBuilder().userName(null).build());
68         new CambriaConsumerWrapper(makeBuilder().password(null).build());
69
70         assertThatCode(() -> new CambriaConsumerWrapper(makeBuilder().userName(null).password(null).build()))
71                         .doesNotThrowAnyException();
72     }
73
74     @Test
75     public void testCambriaConsumerWrapperFetch() throws Exception {
76         CambriaConsumer inner = mock(CambriaConsumer.class);
77         List<String> lst = Arrays.asList(MY_MESSAGE, MY_MESSAGE2);
78         when(inner.fetch()).thenReturn(lst);
79
80         CambriaConsumerWrapper cons = new CambriaConsumerWrapper(builder.build());
81         Whitebox.setInternalState(cons, "consumer", inner);
82
83         assertEquals(lst, IteratorUtils.toList(cons.fetch().iterator()));
84
85         // arrange to throw exception next time fetch is called
86         IOException ex = new IOException(EXPECTED);
87         when(inner.fetch()).thenThrow(ex);
88
89         cons.fetchTimeout = 10;
90
91         try {
92             cons.fetch();
93             fail("missing exception");
94
95         } catch (IOException e) {
96             assertEquals(ex, e);
97         }
98     }
99
100     @Test
101     public void testCambriaConsumerWrapperClose() {
102         CambriaConsumerWrapper cons = new CambriaConsumerWrapper(builder.build());
103
104         // set filter several times to cause different branches of close() to be executed
105         for (int count = 0; count < 3; ++count) {
106             cons.close();
107             final int count2 = count;
108             assertThatCode(() -> cons.setFilter("close=" + count2)).doesNotThrowAnyException();
109         }
110     }
111
112     @Test
113     public void testCambriaConsumerWrapperSetFilter() {
114         // set filter several times to cause different branches to be executed
115         CambriaConsumerWrapper cons = new CambriaConsumerWrapper(builder.build());
116         for (int count = 0; count < 3; ++count) {
117             final int count2 = count;
118             assertThatCode(() -> cons.setFilter("set-filter=" + count2)).doesNotThrowAnyException();
119         }
120     }
121
122     @Test
123     public void testCambriaConsumerWrapperToString() {
124         assertNotNull(new CambriaConsumerWrapper(makeBuilder().build()).toString());
125     }
126
127     @Test
128     public void testDmaapConsumerWrapper() throws Exception {
129         // verify that different wrappers can be built
130         assertThatCode(() -> new DmaapAafConsumerWrapper(makeBuilder().build())).doesNotThrowAnyException();
131     }
132
133     @Test(expected = IllegalArgumentException.class)
134     public void testDmaapConsumerWrapper_InvalidTopic() throws Exception {
135         new DmaapAafConsumerWrapper(makeBuilder().topic(null).build());
136     }
137
138     @Test
139     public void testDmaapConsumerWrapperFetch() throws Exception {
140         DmaapAafConsumerWrapper dmaap = new DmaapAafConsumerWrapper(makeBuilder().build());
141         MRConsumerImpl cons = mock(MRConsumerImpl.class);
142
143         dmaap.fetchTimeout = 5;
144         dmaap.consumer = cons;
145
146         // null return
147         when(cons.fetchWithReturnConsumerResponse()).thenReturn(null);
148         assertFalse(dmaap.fetch().iterator().hasNext());
149
150         // with messages, 200
151         List<String> lst = Arrays.asList(MY_MESSAGE, MY_MESSAGE2);
152         MRConsumerResponse resp = new MRConsumerResponse();
153         resp.setResponseCode("200");
154         resp.setActualMessages(lst);
155         when(cons.fetchWithReturnConsumerResponse()).thenReturn(resp);
156
157         assertEquals(lst, IteratorUtils.toList(dmaap.fetch().iterator()));
158
159         // null messages
160         resp.setActualMessages(null);
161         when(cons.fetchWithReturnConsumerResponse()).thenReturn(resp);
162
163         assertFalse(dmaap.fetch().iterator().hasNext());
164
165         // with messages, NOT 200
166         resp.setResponseCode("400");
167         resp.setActualMessages(lst);
168         when(cons.fetchWithReturnConsumerResponse()).thenReturn(resp);
169
170         assertEquals(lst, IteratorUtils.toList(dmaap.fetch().iterator()));
171     }
172
173     @Test
174     public void testDmaapConsumerWrapperClose() throws Exception {
175         assertThatCode(() -> new DmaapAafConsumerWrapper(makeBuilder().build()).close()).doesNotThrowAnyException();
176     }
177
178     @Test
179     public void testDmaapConsumerWrapperToString() throws Exception {
180         assertNotNull(new DmaapConsumerWrapper(makeBuilder().build()) {}.toString());
181     }
182
183     @Test
184     public void testDmaapAafConsumerWrapper() throws Exception {
185         // verify that different wrappers can be built
186         new DmaapAafConsumerWrapper(makeBuilder().useHttps(true).build());
187         assertThatCode(() -> new DmaapAafConsumerWrapper(makeBuilder().useHttps(false).build()))
188                         .doesNotThrowAnyException();
189     }
190
191     @Test(expected = IllegalArgumentException.class)
192     public void testDmaapAafConsumerWrapper_InvalidServers() throws Exception {
193         /*
194          * Unfortunately, the MR code intercepts this and throws an exception before the
195          * wrapper gets a chance to check it, thus this test does not improve the coverage
196          * for the constructor.
197          */
198         new DmaapAafConsumerWrapper(makeBuilder().servers(Collections.emptyList()).build());
199     }
200
201     @Test
202     public void testDmaapAafConsumerWrapperToString() throws Exception {
203         assertNotNull(new DmaapAafConsumerWrapper(makeBuilder().build()).toString());
204     }
205
206     @Test
207     public void testDmaapDmeConsumerWrapper() throws Exception {
208         // verify that different wrappers can be built
209         new DmaapDmeConsumerWrapper(makeBuilder().build());
210         new DmaapDmeConsumerWrapper(makeBuilder().useHttps(true).build());
211         new DmaapDmeConsumerWrapper(makeBuilder().useHttps(false).build());
212         new DmaapDmeConsumerWrapper(makeBuilder().additionalProps(null).build());
213
214         addProps.put(ROUTE_PROP, MY_ROUTE);
215         new DmaapDmeConsumerWrapper(makeBuilder().build());
216         assertThatCode(() -> new DmaapDmeConsumerWrapper(makeBuilder().partner(null).build()))
217                         .doesNotThrowAnyException();
218     }
219
220     @Test(expected = IllegalArgumentException.class)
221     public void testDmaapDmeConsumerWrapper_InvalidEnvironment() throws Exception {
222         new DmaapDmeConsumerWrapper(makeBuilder().environment(null).build());
223     }
224
225     @Test(expected = IllegalArgumentException.class)
226     public void testDmaapDmeConsumerWrapper_InvalidAft() throws Exception {
227         new DmaapDmeConsumerWrapper(makeBuilder().aftEnvironment(null).build());
228     }
229
230     @Test(expected = IllegalArgumentException.class)
231     public void testDmaapDmeConsumerWrapper_InvalidLat() throws Exception {
232         new DmaapDmeConsumerWrapper(makeBuilder().latitude(null).build());
233     }
234
235     @Test(expected = IllegalArgumentException.class)
236     public void testDmaapDmeConsumerWrapper_InvalidLong() throws Exception {
237         new DmaapDmeConsumerWrapper(makeBuilder().longitude(null).build());
238     }
239
240     @Test(expected = IllegalArgumentException.class)
241     public void testDmaapDmeConsumerWrapper_InvalidPartner() throws Exception {
242         new DmaapDmeConsumerWrapper(makeBuilder().partner(null).build());
243     }
244 }