EventHandlerImpl unit tests
[appc.git] / appc-event-listener / appc-event-listener-bundle / src / test / java / org / onap / appc / listener / impl / EventHandlerImplTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP : APPC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Copyright (C) 2017 Amdocs
8  * =============================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  * 
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  * 
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * ============LICENSE_END=========================================================
21  */
22
23 package org.onap.appc.listener.impl;
24
25 import static com.google.common.collect.Lists.newArrayList;
26 import static org.junit.Assert.assertEquals;
27 import static org.junit.Assert.assertFalse;
28 import static org.junit.Assert.assertNotNull;
29 import static org.junit.Assert.assertTrue;
30 import static org.mockito.Matchers.anyInt;
31 import static org.mockito.Mockito.mock;
32 import static org.mockito.Mockito.spy;
33 import static org.mockito.Mockito.verify;
34 import static org.mockito.Mockito.when;
35
36 import com.fasterxml.jackson.annotation.JsonProperty;
37 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
38 import java.io.IOException;
39 import java.io.Serializable;
40 import java.util.HashSet;
41 import java.util.List;
42 import java.util.Properties;
43 import java.util.Set;
44 import java.util.function.Function;
45 import org.junit.Before;
46 import org.junit.Test;
47 import org.junit.runner.RunWith;
48 import org.mockito.Mock;
49 import org.mockito.runners.MockitoJUnitRunner;
50 import org.onap.appc.adapter.message.Consumer;
51 import org.onap.appc.adapter.message.Producer;
52 import org.onap.appc.listener.ListenerProperties;
53
54 /**
55  * Test the ProviderAdapter implementation.
56  */
57
58 @RunWith(MockitoJUnitRunner.class)
59 public class EventHandlerImplTest {
60
61     private TestEventHandlerImpl adapter;
62     private ListenerProperties properties;
63
64     @Mock
65     private Producer mockProducer;
66     @Mock
67     private Consumer mockConsumer;
68
69     private static final String PROP_FILE = "/org/onap/appc/default.properties";
70
71     private static final String MESSAGE_FILE = "/DCAEResponse.txt";
72
73     /**
74      * Setup the test environment.
75      */
76     @Before
77     public void setup() {
78         Properties allProps = new Properties();
79         try {
80             allProps.load(getClass().getResourceAsStream(PROP_FILE));
81             allProps.remove("appc.ClosedLoop.topic.read.filter");
82             properties = new ListenerProperties("appc.ClosedLoop", allProps);
83         } catch (IOException e) {
84             System.out.println("WARNING: Failed to load properties file: " + PROP_FILE);
85         }
86         adapter = new TestEventHandlerImpl(properties);
87         adapter.setConsumer(mockConsumer);
88         adapter.setProducer(mockProducer);
89     }
90
91     @Test
92     public void testInitialProperties() {
93         assertEquals(properties.getProperty("topic.read"), adapter.getReadTopic());
94         assertTrue(adapter.getWriteTopics().contains(properties.getProperty("topic.write")));
95         assertEquals(properties.getProperty("client.name"), adapter.getClientName());
96         assertEquals(properties.getProperty("client.name.id"), adapter.getClientId());
97
98         String hostStr = properties.getProperty("poolMembers");
99         int hostCount = hostStr.length() > 0 ? hostStr.split(",").length : 0;
100         assertEquals(hostCount, adapter.getPool().size());
101     }
102
103     @Test
104     public void testGettersAndSetters() {
105         String readTopic = "read";
106         Set<String> writeTopic = new HashSet<>();
107         writeTopic.add("write");
108         String clientName = "APPC-TEST";
109         String clientId = "00";
110         String newHost = "google.com";
111
112         adapter.setReadTopic(readTopic);
113         assertEquals(readTopic, adapter.getReadTopic());
114
115         adapter.setWriteTopics(writeTopic);
116         assertEquals(writeTopic, adapter.getWriteTopics());
117
118         adapter.setClientName(clientName);
119         assertEquals(clientName, adapter.getClientName());
120
121         adapter.setClientId(clientId);
122         assertEquals(clientId, adapter.getClientId());
123
124         adapter.setCredentials("fake", "secret");
125         adapter.clearCredentials();
126
127         int oldSize = adapter.getPool().size();
128         adapter.addToPool(newHost);
129         assertEquals(oldSize + 1, adapter.getPool().size());
130         assertTrue(adapter.getPool().contains(newHost));
131
132         adapter.removeFromPool(newHost);
133         assertEquals(oldSize, adapter.getPool().size());
134         assertFalse(adapter.getPool().contains(newHost));
135
136     }
137
138     @Test
139     public void getIncomingEvents_should_success_when_no_errors_encountered() {
140
141         List<String> testResult = newArrayList("test-result1", "test-result2", "test-result3");
142         when(mockConsumer.fetch(anyInt(), anyInt())).thenReturn(testResult);
143
144         List<String> result = adapter.getIncomingEvents(5);
145
146         for (int i = 0; i < testResult.size(); i++) {
147             assertEquals(testResult.get(i), result.get(i));
148         }
149     }
150
151
152     @Test
153     public void postStatus_should_success_when_no_errors_encountered() {
154
155         adapter.postStatus("test-partition", "test-event");
156         verify(mockProducer).post("test-partition", "test-event");
157
158         adapter.postStatus("test-event");
159         verify(mockProducer).post(null, "test-event");
160     }
161
162
163     @Test
164     public void closeClients_should_close_producer_and_consumer() {
165         adapter.getIncomingEvents(5);
166         adapter.postStatus("test-partition", "test-event");
167
168         adapter.closeClients();
169         verify(mockConsumer).close();
170         verify(mockProducer).close();
171     }
172
173
174 //    @Test
175     public void testRun() {
176         EventHandlerImpl adapter = new EventHandlerImpl(properties);
177
178         // Runoff any old data
179         List<String> result = adapter.getIncomingEvents();
180         assertNotNull(result);
181
182         // Post new data
183         DummyObj data = new DummyObj();
184         data.key = "value";
185         adapter.postStatus(data.toJson());
186
187         // Wait to account for network delay
188         sleep(2000);
189
190         // Get data back
191         List<DummyObj> result2 = adapter.getIncomingEvents(DummyObj.class);
192         assertNotNull(result2);
193 //        assertEquals(1, result2.size());
194         assertEquals(data.toJson(), result2.get(0).toJson());
195     }
196
197     private class TestEventHandlerImpl extends EventHandlerImpl {
198
199         private Consumer mockConsumer;
200         private Producer mockProducer;
201
202         private TestEventHandlerImpl(ListenerProperties props) {
203             super(props);
204         }
205
206         @Override
207         protected Consumer getConsumer() {
208             return mockConsumer;
209         }
210
211         @Override
212         protected Producer getProducer() {
213             return mockProducer;
214         }
215
216         private void setConsumer(Consumer consumer) {
217             mockConsumer = consumer;
218         }
219
220         private void setProducer(Producer producer) {
221             mockProducer = producer;
222         }
223     }
224
225     @JsonSerialize
226     public static class DummyObj implements Serializable {
227
228         @JsonProperty("request") // Call request for default filter
229         public String key;
230
231         public DummyObj() {
232         }
233
234         public String toJson() {
235             return String.format("{\"request\": \"%s\"}", key);
236         }
237     }
238
239     private void sleep(long ms) {
240         try {
241             Thread.sleep(ms);
242         } catch (Exception e) {
243             return;
244         }
245     }
246 }