2 * ============LICENSE_START=======================================================
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
13 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
23 package org.onap.appc.listener.impl;
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;
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;
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;
55 * Test the ProviderAdapter implementation.
58 @RunWith(MockitoJUnitRunner.class)
59 public class EventHandlerImplTest {
61 private TestEventHandlerImpl adapter;
62 private ListenerProperties properties;
65 private Producer mockProducer;
67 private Consumer mockConsumer;
69 private static final String PROP_FILE = "/org/onap/appc/default.properties";
71 private static final String MESSAGE_FILE = "/DCAEResponse.txt";
74 * Setup the test environment.
78 Properties allProps = new Properties();
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);
86 adapter = new TestEventHandlerImpl(properties);
87 adapter.setConsumer(mockConsumer);
88 adapter.setProducer(mockProducer);
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());
98 String hostStr = properties.getProperty("poolMembers");
99 int hostCount = hostStr.length() > 0 ? hostStr.split(",").length : 0;
100 assertEquals(hostCount, adapter.getPool().size());
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";
112 adapter.setReadTopic(readTopic);
113 assertEquals(readTopic, adapter.getReadTopic());
115 adapter.setWriteTopics(writeTopic);
116 assertEquals(writeTopic, adapter.getWriteTopics());
118 adapter.setClientName(clientName);
119 assertEquals(clientName, adapter.getClientName());
121 adapter.setClientId(clientId);
122 assertEquals(clientId, adapter.getClientId());
124 adapter.setCredentials("fake", "secret");
125 adapter.clearCredentials();
127 int oldSize = adapter.getPool().size();
128 adapter.addToPool(newHost);
129 assertEquals(oldSize + 1, adapter.getPool().size());
130 assertTrue(adapter.getPool().contains(newHost));
132 adapter.removeFromPool(newHost);
133 assertEquals(oldSize, adapter.getPool().size());
134 assertFalse(adapter.getPool().contains(newHost));
139 public void getIncomingEvents_should_success_when_no_errors_encountered() {
141 List<String> testResult = newArrayList("test-result1", "test-result2", "test-result3");
142 when(mockConsumer.fetch(anyInt(), anyInt())).thenReturn(testResult);
144 List<String> result = adapter.getIncomingEvents(5);
146 for (int i = 0; i < testResult.size(); i++) {
147 assertEquals(testResult.get(i), result.get(i));
153 public void postStatus_should_success_when_no_errors_encountered() {
155 adapter.postStatus("test-partition", "test-event");
156 verify(mockProducer).post("test-partition", "test-event");
158 adapter.postStatus("test-event");
159 verify(mockProducer).post(null, "test-event");
164 public void closeClients_should_close_producer_and_consumer() {
165 adapter.getIncomingEvents(5);
166 adapter.postStatus("test-partition", "test-event");
168 adapter.closeClients();
169 verify(mockConsumer).close();
170 verify(mockProducer).close();
175 public void testRun() {
176 EventHandlerImpl adapter = new EventHandlerImpl(properties);
178 // Runoff any old data
179 List<String> result = adapter.getIncomingEvents();
180 assertNotNull(result);
183 DummyObj data = new DummyObj();
185 adapter.postStatus(data.toJson());
187 // Wait to account for network delay
191 List<DummyObj> result2 = adapter.getIncomingEvents(DummyObj.class);
192 assertNotNull(result2);
193 // assertEquals(1, result2.size());
194 assertEquals(data.toJson(), result2.get(0).toJson());
197 private class TestEventHandlerImpl extends EventHandlerImpl {
199 private Consumer mockConsumer;
200 private Producer mockProducer;
202 private TestEventHandlerImpl(ListenerProperties props) {
207 protected Consumer getConsumer() {
212 protected Producer getProducer() {
216 private void setConsumer(Consumer consumer) {
217 mockConsumer = consumer;
220 private void setProducer(Producer producer) {
221 mockProducer = producer;
226 public static class DummyObj implements Serializable {
228 @JsonProperty("request") // Call request for default filter
234 public String toJson() {
235 return String.format("{\"request\": \"%s\"}", key);
239 private void sleep(long ms) {
242 } catch (Exception e) {