From f32032b7b46c6857accab37be66b52ad60fcd690 Mon Sep 17 00:00:00 2001 From: ramverma Date: Wed, 6 Mar 2019 15:43:11 +0000 Subject: Adding client class for sending message to topic 1) Adding TopicSinkClient class for sending messages to topic. The same class will be used for PAP->PDP & PDP->PAP communication. 2) Once this review is through, will raise another one to remove PdpClient from policy/pap. Change-Id: I7253683d9e88885cfbe2ac9041d01da239b9321b Issue-ID: POLICY-1443 Signed-off-by: ramverma --- .../comm/client/TopicSinkClientExceptionTest.java | 35 +++++ .../event/comm/client/TopicSinkClientTest.java | 150 +++++++++++++++++++++ 2 files changed, 185 insertions(+) create mode 100644 policy-endpoints/src/test/java/org/onap/policy/common/endpoints/event/comm/client/TopicSinkClientExceptionTest.java create mode 100644 policy-endpoints/src/test/java/org/onap/policy/common/endpoints/event/comm/client/TopicSinkClientTest.java (limited to 'policy-endpoints/src/test/java/org/onap/policy/common/endpoints/event') diff --git a/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/event/comm/client/TopicSinkClientExceptionTest.java b/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/event/comm/client/TopicSinkClientExceptionTest.java new file mode 100644 index 00000000..c0814703 --- /dev/null +++ b/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/event/comm/client/TopicSinkClientExceptionTest.java @@ -0,0 +1,35 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP PAP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * 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.client; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.onap.policy.common.utils.test.ExceptionsTester; + +public class TopicSinkClientExceptionTest { + + @Test + public void test() { + assertEquals(5, new ExceptionsTester().test(TopicSinkClientException.class)); + } +} diff --git a/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/event/comm/client/TopicSinkClientTest.java b/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/event/comm/client/TopicSinkClientTest.java new file mode 100644 index 00000000..725c0418 --- /dev/null +++ b/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/event/comm/client/TopicSinkClientTest.java @@ -0,0 +1,150 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP PAP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * 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.client; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertSame; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; +import java.util.Properties; +import java.util.concurrent.atomic.AtomicReference; + +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.Test; +import org.mockito.internal.util.reflection.Whitebox; +import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure; +import org.onap.policy.common.endpoints.event.comm.TopicEndpoint; +import org.onap.policy.common.endpoints.event.comm.TopicListener; +import org.onap.policy.common.endpoints.event.comm.TopicSink; + +public class TopicSinkClientTest { + private static final String SINK_FIELD_NAME = "sink"; + private static final String TOPIC = "my-topic"; + + private TopicSinkClient client; + private TopicSink sink; + private List sinks; + + /** + * Creates mocks and an initial client object. + * + * @throws Exception if an error occurs + */ + @Before + public void setUp() throws Exception { + sink = mock(TopicSink.class); + when(sink.send(anyString())).thenReturn(true); + + sinks = Arrays.asList(sink, null); + + client = new TopicSinkClient2(TOPIC); + } + + @AfterClass + public static void tearDown() throws Exception { + // clear all topics after the tests + TopicEndpoint.manager.shutdown(); + } + + /** + * Uses a real NO-OP topic sink. + */ + @Test + public void testGetTopicSinks() throws Exception { + // clear all topics and then configure one topic + TopicEndpoint.manager.shutdown(); + + final Properties props = new Properties(); + props.setProperty("noop.sink.topics", TOPIC); + TopicEndpoint.manager.addTopicSinks(props); + + sink = TopicEndpoint.manager.getNoopTopicSink(TOPIC); + assertNotNull(sink); + + final AtomicReference evref = new AtomicReference<>(null); + + sink.register(new TopicListener() { + @Override + public void onTopicEvent(final CommInfrastructure infra, final String topic, final String event) { + evref.set(event); + } + }); + + sink.start(); + + client = new TopicSinkClient(TOPIC); + client.send(100); + + assertEquals("100", evref.get()); + } + + @Test + public void testTopicSinkClient_testGetTopic() { + assertEquals(TOPIC, client.getTopic()); + assertSame(sink, Whitebox.getInternalState(client, SINK_FIELD_NAME)); + + // unknown topic -> should throw exception + sinks = new LinkedList<>(); + assertThatThrownBy(() -> new TopicSinkClient2(TOPIC)).isInstanceOf(TopicSinkClientException.class) + .hasMessage("no sinks for topic: my-topic"); + } + + @Test + public void testSend() throws Exception { + client.send(Arrays.asList("abc", "def")); + verify(sink).send("['abc','def']".replace('\'', '"')); + + // sink send fails + when(sink.send(anyString())).thenReturn(false); + assertFalse(client.send("ghi")); + + // sink send throws an exception + final RuntimeException ex = new RuntimeException("expected exception"); + when(sink.send(anyString())).thenThrow(ex); + assertFalse(client.send("jkl")); + } + + /** + * TopicSinkClient with some overrides. + */ + private class TopicSinkClient2 extends TopicSinkClient { + + public TopicSinkClient2(final String topic) throws TopicSinkClientException { + super(topic); + } + + @Override + protected List getTopicSinks(final String topic) { + return sinks; + } + } +} -- cgit 1.2.3-korg