0d486361b72dfb3e55431474f6f4fedb9ff4ea3f
[appc.git] /
1 /* 
2  * ============LICENSE_START======================================================= 
3  * ONAP : APPC 
4  * ================================================================================ 
5  * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. 
6  * ================================================================================
7  * Modifications Copyright (C) 2018 IBM
8  * ================================================================================
9  * Modifications Copyright (C) 2019 Ericsson
10  * ================================================================================
11  * Licensed under the Apache License, Version 2.0 (the "License"); 
12  * you may not use this file except in compliance with the License. 
13  * You may obtain a copy of the License at 
14  * 
15  *      http://www.apache.org/licenses/LICENSE-2.0 
16  * 
17  * Unless required by applicable law or agreed to in writing, software 
18  * distributed under the License is distributed on an "AS IS" BASIS, 
19  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
20  * See the License for the specific language governing permissions and 
21  * limitations under the License. 
22  * ============LICENSE_END========================================================= 
23  */
24
25 package org.onap.appc.adapter.messaging.dmaap.impl;
26
27 import static org.junit.Assert.assertEquals;
28 import static org.junit.Assert.assertFalse;
29 import static org.junit.Assert.assertNotNull;
30 import static org.junit.Assert.assertNull;
31 import static org.junit.Assert.assertTrue;
32 import static org.junit.Assert.fail;
33 import java.io.FileNotFoundException;
34 import java.io.IOException;
35 import java.util.Arrays;
36 import java.util.Collection;
37 import java.util.HashSet;
38 import java.util.Properties;
39 import org.junit.Ignore;
40 import org.junit.Test;
41 import org.junit.runner.RunWith;
42 import org.mockito.Mockito;
43 import org.onap.appc.configuration.Configuration;
44 import org.onap.appc.configuration.ConfigurationFactory;
45 import org.onap.appc.metricservice.MetricRegistry;
46 import org.onap.appc.metricservice.MetricService;
47 import org.onap.appc.metricservice.metric.DmaapRequestCounterBuilder;
48 import org.onap.appc.metricservice.metric.DmaapRequestCounterMetric;
49 import org.onap.appc.metricservice.metric.MetricBuilderFactory;
50 import org.onap.appc.metricservice.metric.impl.MetricBuilderFactoryImpl;
51 import org.onap.appc.metricservice.policy.PolicyBuilderFactory;
52 import org.onap.appc.metricservice.policy.PublishingPolicy;
53 import org.onap.appc.metricservice.policy.ScheduledPolicyBuilder;
54 import org.osgi.framework.FrameworkUtil;
55 import org.powermock.api.mockito.PowerMockito;
56 import org.powermock.core.classloader.annotations.PrepareForTest;
57 import org.powermock.modules.junit4.PowerMockRunner;
58 import org.powermock.reflect.Whitebox;
59 import com.att.nsa.mr.client.MRClientFactory;
60 import com.att.nsa.mr.client.MRConsumer;
61
62 @RunWith(PowerMockRunner.class)
63 @PrepareForTest({ConfigurationFactory.class, FrameworkUtil.class, MRClientFactory.class})
64 public class TestDmaapConsumerImpl {
65     String[]           hostList = { "192.168.1.1" };
66     Collection<String> hosts    = new HashSet<String>(Arrays.asList(hostList));
67
68     String             topic    = "JunitTopicOne";
69     String             group    = "junit-client";
70     String             id       = "junit-consumer-one";
71     String             key      = "key";
72     String             secret   = "secret";
73     String             filter   = null;
74
75     @Test
76     public void testDmaapConsumerImplNoFilter() {
77
78         DmaapConsumerImpl consumer = new DmaapConsumerImpl(hosts, topic, group, id, key, secret);
79
80         assertNotNull(consumer);
81
82         Properties props = consumer.getProperties();
83
84         assertEquals("192.168.1.1", props.getProperty("host"));
85         assertEquals("key", props.getProperty("username"));
86         assertEquals("secret", props.getProperty("password"));
87     }
88
89     @Test
90     public void testDmaapConsumerImplwithFilter() {
91
92         filter="";
93         DmaapConsumerImpl consumer = new DmaapConsumerImpl(hosts, topic, group, id, key, secret, filter);
94
95         assertNotNull(consumer);
96
97     }
98
99     @Test
100     public void testDmaapConsumerImplNoUserPassword() {
101
102         DmaapConsumerImpl consumer = new DmaapConsumerImpl(hosts, topic, group, id, null, null);
103
104         assertNotNull(consumer);
105
106         Properties props = consumer.getProperties();
107
108         assertEquals("192.168.1.1", props.getProperty("host"));
109         assertNull(props.getProperty("username"));
110         assertNull(props.getProperty("password"));
111         assertEquals("HTTPNOAUTH", props.getProperty("TransportType"));
112     }
113
114     @Test
115     public void testUpdateCredentials() {
116         DmaapConsumerImpl consumer = new DmaapConsumerImpl(hosts, topic, group, id, null, null);
117
118         assertNotNull(consumer);
119
120         Properties props = consumer.getProperties();
121
122         assertEquals("192.168.1.1", props.getProperty("host"));
123         assertNull(props.getProperty("username"));
124         assertNull(props.getProperty("password"));
125
126         consumer.updateCredentials(key, secret);
127
128         props = consumer.getProperties();
129         assertEquals("192.168.1.1", props.getProperty("host"));
130         assertEquals("key", props.getProperty("username"));
131         assertEquals("secret", props.getProperty("password"));
132     }
133
134     @Ignore("test is taking 130 sec")
135     @Test
136     public void testFetch() {
137         DmaapConsumerImpl consumer = new DmaapConsumerImpl(hosts, topic, group, id, key, secret);
138
139         assertNotNull(consumer);
140
141         consumer.fetch(5000,500);
142     }
143
144     @Ignore
145     @Test
146     public void testFetchIntInt() {
147         fail("Not yet implemented");
148     }
149
150     @Test
151     public void testCloseNoClient() {
152         DmaapConsumerImpl consumer = new DmaapConsumerImpl(hosts, topic, group, id, key, secret);
153
154         assertNotNull(consumer);
155
156         consumer.close();
157     }
158
159     @Ignore
160     @Test
161     public void testCloseWithClient() {
162         fail("Not yet implemented");
163     }
164
165     @Test
166     public void testToString() {
167         DmaapConsumerImpl consumer = new DmaapConsumerImpl(hosts, topic, group, id, null, null);
168
169         assertNotNull(consumer);
170
171         assertEquals("Consumer junit-client/junit-consumer-one listening to JunitTopicOne on [192.168.1.1]",
172                 consumer.toString());
173     }
174
175     @Test
176     public void testUseHttps() {
177         DmaapConsumerImpl consumer = new DmaapConsumerImpl(hosts, topic, group, id, key, secret);
178
179         assertNotNull(consumer);
180
181         assertEquals(false, consumer.isHttps());
182
183         consumer.useHttps(true);
184
185         assertEquals(true, consumer.isHttps());
186
187     }
188
189     @Test
190     public void testGetClient() throws FileNotFoundException, IOException 
191     {
192         DmaapConsumerImpl consumer = new DmaapConsumerImpl(hosts, topic, group, id, key, secret);
193         assertNotNull(consumer);
194         PowerMockito.mockStatic(MRClientFactory.class);
195         PowerMockito.when(MRClientFactory.createConsumer(Mockito.anyString())).thenReturn(Mockito.mock(MRConsumer.class));
196         assertTrue(consumer.getClient(1000,5) instanceof MRConsumer);
197         Properties props= consumer.getProperties();
198         assertEquals("1000", props.getProperty("timeout"));
199         assertEquals("5", props.getProperty("limit"));
200     }
201
202     @Test
203     public void testGetClientExceptionFlow() throws FileNotFoundException, IOException 
204     {
205         DmaapConsumerImpl consumer = new DmaapConsumerImpl(hosts, topic, group, id, key, secret);
206         assertNotNull(consumer);
207         PowerMockito.mockStatic(MRClientFactory.class);
208         PowerMockito.when(MRClientFactory.createConsumer(Mockito.anyString())).thenThrow(new IOException());
209         assertFalse(consumer.getClient(1000,5) instanceof MRConsumer);
210         Properties props= consumer.getProperties();
211         assertEquals("1000", props.getProperty("timeout"));
212         assertEquals("5", props.getProperty("limit"));
213     }
214
215     @Test
216     public void testInitMetric() throws FileNotFoundException, IOException 
217     {
218         Configuration configuration = Mockito.mock(Configuration.class);
219         Properties properties = new Properties();
220         properties.put("metric.enabled", "true");
221         Mockito.when(configuration.getProperties()).thenReturn(properties);
222         PowerMockito.mockStatic(MRClientFactory.class);
223         PowerMockito.when(MRClientFactory.createConsumer(Mockito.anyString())).thenThrow(new IOException());        
224         DmaapConsumerImpl consumer = Mockito.spy(new DmaapConsumerImpl(hosts, topic, group, id, key, secret));
225         Whitebox.setInternalState(consumer, "configuration", configuration);
226         MetricService metricService = Mockito.mock(MetricService.class);
227         MetricRegistry metricRegistry = Mockito.mock(MetricRegistry.class);
228         MetricBuilderFactory metricBuilderFactory = Mockito.spy(new MetricBuilderFactoryImpl());
229         DmaapRequestCounterBuilder builder = Mockito.mock(DmaapRequestCounterBuilder.class);
230         DmaapRequestCounterMetric metric = Mockito.mock(DmaapRequestCounterMetric.class);
231         Mockito.when(builder.withName(Mockito.anyString())).thenReturn(builder);
232         Mockito.when(builder.withType(Mockito.any())).thenReturn(builder);
233         Mockito.when(builder.withPublishedMessage(Mockito.anyLong())).thenReturn(builder);
234         Mockito.when(builder.withRecievedMessage(Mockito.anyLong())).thenReturn(builder);
235         Mockito.when(builder.build()).thenReturn(metric);
236         Mockito.when(metricBuilderFactory.dmaapRequestCounterBuilder()).thenReturn(builder);
237         Mockito.when(metricRegistry.register(Mockito.any())).thenReturn(true);
238         PublishingPolicy policy = Mockito.mock(PublishingPolicy.class);
239         PolicyBuilderFactory policyFactory = Mockito.mock(PolicyBuilderFactory.class);
240         Mockito.when(metricRegistry.policyBuilderFactory()).thenReturn(policyFactory);
241         ScheduledPolicyBuilder policyBuilder = Mockito.mock(ScheduledPolicyBuilder.class);
242         Mockito.when(policyBuilder.withPublishers(Mockito.any())).thenReturn(policyBuilder);
243         Mockito.when(policyBuilder.withMetrics(Mockito.any())).thenReturn(policyBuilder);
244         Mockito.when(policyBuilder.build()).thenReturn(policy);
245         Mockito.when(policyFactory.scheduledPolicyBuilder()).thenReturn(policyBuilder);
246         Mockito.when(metricRegistry.metricBuilderFactory()).thenReturn(metricBuilderFactory);
247         Mockito.when(metricService.createRegistry("APPC")).thenReturn(metricRegistry);
248         Mockito.doReturn(metricService).when(consumer).getMetricService();
249         consumer.fetch(1, 1);
250         Mockito.verify(policy).init();
251     }
252
253 }