diff options
author | Patrick Brady <patrick.brady@att.com> | 2019-10-10 15:34:00 -0700 |
---|---|---|
committer | Takamune Cho <takamune.cho@att.com> | 2019-11-08 16:38:47 +0000 |
commit | 6a6d3afd489ea3b8945f1cdd8a8a74afdcc5221a (patch) | |
tree | 1b9b67b9683145d693d831eea7128d36738aa9a4 /services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test | |
parent | 7b04a1754482ba02a49d4d6376dc45e4cd6551f4 (diff) |
Dmaap micro service jar
Creating a service running in a standalone jar to handle
the publishing and recieving of dmaap messages for appc.
Dmaap adapter and event listener code is copeid from the
main appc project. It will be moved in a later commit.
Change-Id: I3fa7b5dc60345f0f38f763a243150b8472f985ac
Signed-off-by: Patrick Brady <patrick.brady@att.com>
Issue-ID: APPC-1744
Diffstat (limited to 'services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test')
13 files changed, 1118 insertions, 0 deletions
diff --git a/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/TestAppcDmaapAdapterActivator.java b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/TestAppcDmaapAdapterActivator.java new file mode 100644 index 000000000..e5ee0680c --- /dev/null +++ b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/TestAppcDmaapAdapterActivator.java @@ -0,0 +1,46 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 2017 Amdocs + * ============================================================================= + * 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.appc.adapter.messaging.dmaap; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; + +import org.junit.Test; +import org.onap.appc.adapter.messaging.dmaap.AppcDmaapAdapterActivator; + +public class TestAppcDmaapAdapterActivator { + + @Test + public void test_dmaap_activator() { + // This does nothing since the activator does nothing + AppcDmaapAdapterActivator appc = new AppcDmaapAdapterActivator(); + try { + appc.start(null); + appc.stop(null); + } catch (Exception e) { + fail("Got exception when starting stopping. " + e.getMessage()); + } + assertNotNull(appc.getName()); + } +} diff --git a/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/TestDmaapConsuming.java b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/TestDmaapConsuming.java new file mode 100644 index 000000000..ec9740053 --- /dev/null +++ b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/TestDmaapConsuming.java @@ -0,0 +1,83 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 2017 Amdocs + * ============================================================================= + * 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.appc.adapter.messaging.dmaap; + + +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.onap.appc.adapter.message.Consumer; +import org.onap.appc.adapter.messaging.dmaap.http.HttpDmaapConsumerImpl; +import org.onap.appc.configuration.Configuration; +import org.onap.appc.configuration.ConfigurationFactory; +import org.junit.Ignore; + +import java.util.Arrays; +import java.util.List; + +/** + * Must have a DMaaP cluster or simulator up and running + * Update the hostname, topic, client properties in + * resources/org/onap/appc/default.properties + * + */ +public class TestDmaapConsuming { + + private static Consumer httpConsumer; + + @BeforeClass + public static void setUp() { + + Configuration configuration = ConfigurationFactory.getConfiguration(); + + List<String> hosts = Arrays.asList(configuration.getProperty("poolMembers").split(",")); + String topic = configuration.getProperty("topic.read"); + String consumerName = configuration.getProperty("client.name"); + String consumerId = configuration.getProperty("client.name.id"); + String msgFilter = configuration.getProperty("message.filter"); + String user = configuration.getProperty("dmaap.appc.username"); + String password = configuration.getProperty("dmaap.appc.password"); + + httpConsumer = new HttpDmaapConsumerImpl(hosts, topic, consumerName, consumerId, msgFilter); + } + + @Test + @Ignore + public void testHttpFetchMessages() { + testFetchMessages(httpConsumer); + } + + @Test + @Ignore + public void testFetchMessages() { + testFetchMessages(httpConsumer); + } + + private void testFetchMessages(Consumer consumer) { + List<String> messages = consumer.fetch(1000, 100); + Assert.assertNotNull(messages); + Assert.assertFalse(messages.isEmpty()); + } + +} diff --git a/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/TestDmaapProducing.java b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/TestDmaapProducing.java new file mode 100644 index 000000000..5b2183e37 --- /dev/null +++ b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/TestDmaapProducing.java @@ -0,0 +1,79 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 2017 Amdocs + * ============================================================================= + * 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.appc.adapter.messaging.dmaap; + + +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Ignore; +import org.junit.Test; +import org.onap.appc.adapter.message.Producer; +import org.onap.appc.adapter.messaging.dmaap.http.HttpDmaapProducerImpl; +import org.onap.appc.configuration.Configuration; +import org.onap.appc.configuration.ConfigurationFactory; + +import java.util.Arrays; +import java.util.List; + +/** + * Must have a DMaaP cluster or simulator up and running + * Update the hostname, topic, client properties in + * resources/org/onap/appc/default.properties + * + */ +public class TestDmaapProducing { + + private static Producer httpProducer; + + @BeforeClass + public static void setUp() { + + Configuration configuration = ConfigurationFactory.getConfiguration(); + + List<String> hosts = Arrays.asList(configuration.getProperty("poolMembers").split(",")); + String topic = configuration.getProperty("topic.write"); + String user = configuration.getProperty("dmaap.appc.username"); + String password = configuration.getProperty("dmaap.appc.password"); + + httpProducer = new HttpDmaapProducerImpl(hosts, topic); + httpProducer.updateCredentials(user,password); + } + + @Test + @Ignore + public void testHttpPostMessage() { + testPostMessage(httpProducer); + } + + @Test + @Ignore + public void testPostMessages() { + testPostMessage(httpProducer); + } + + private void testPostMessage(Producer producer) { + Assert.assertTrue(producer.post("partition", "{\"message\": \"Hello, world!\"}")); + } + +} diff --git a/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/http/TestAuthenticationException.java b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/http/TestAuthenticationException.java new file mode 100644 index 000000000..448af3022 --- /dev/null +++ b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/http/TestAuthenticationException.java @@ -0,0 +1,35 @@ +/* + * ============LICENSE_START========================================== + * org.onap.music + * =================================================================== + * Copyright (c) 2019 IBM. + * =================================================================== + * 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.appc.adapter.messaging.dmaap.http; + +import org.junit.Assert; +import org.junit.Test; + +public class TestAuthenticationException { + + @Test + public void testAuthException() { + AuthenticationException authException = new AuthenticationException("AuthenticationException"); + Assert.assertEquals("AuthenticationException", authException.getMessage()); + } + +} diff --git a/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/http/TestCommonHttpClient.java b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/http/TestCommonHttpClient.java new file mode 100644 index 000000000..660a6e4bc --- /dev/null +++ b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/http/TestCommonHttpClient.java @@ -0,0 +1,118 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2018 Nokia. All rights reserved. + * ============================================================================= + * 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.appc.adapter.messaging.dmaap.http; + +import static org.junit.Assert.*; + +import java.net.URI; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.junit.Before; +import org.junit.Test; + +public class TestCommonHttpClient { + + private static final String HTTP = "http://"; + private static final String HTTPS = "https://"; + private static final String URL = "example.org/location"; + private static final URI URI = java.net.URI.create(HTTP + URL); + private static final String USERNAME = "username"; + private static final String PASSWORD = "password"; + private static final int TIMEOUT = 15000; + private static final int TIMEOUT_OFFSET = 5000; + private static final int HTTP_PORT = 3904; + private static final int HTTPS_PORT = 3905; + + private CommonHttpClient commonHttpClient; + + @Before + public void setUp() { + commonHttpClient = new CommonHttpClient() {}; + } + + private void setBasicAuth() { + commonHttpClient.setBasicAuth(USERNAME, PASSWORD); + } + + private void noBasicAuth() { + commonHttpClient.setBasicAuth(null, null); + } + + @Test + public void shouldGetHttpRequest_whenSetBasicAuth() throws AuthenticationException { + + setBasicAuth(); + + HttpGet httpGet = commonHttpClient.getReq(URI, TIMEOUT); + + assertNotNull(httpGet); + assertNotNull(httpGet.getFirstHeader("Authorization")); + assertNotNull(httpGet.getConfig()); + assertEquals(httpGet.getConfig().getSocketTimeout(), TIMEOUT + TIMEOUT_OFFSET); + } + + @Test + public void shouldPostHttpRequest_whenSetBasicAuth() throws AuthenticationException { + + setBasicAuth(); + + HttpPost httpPost = commonHttpClient.postReq(URL); + + assertNotNull(httpPost); + assertNotNull(httpPost.getFirstHeader("Authorization")); + assertNotNull(httpPost.getConfig()); + assertEquals(httpPost.getConfig().getSocketTimeout(), TIMEOUT_OFFSET); + } + + @Test + public void shouldGetClient() { + assertNotNull(commonHttpClient.getClient()); + } + + @Test + public void shouldFormatHostString() { + String httpUrl = HTTP + URL + ":" + HTTP_PORT; + String httpsUrl = HTTPS + URL + ":" + HTTPS_PORT; + String outputUrl; + + outputUrl = commonHttpClient.formatHostString(httpUrl); + assertTrue(assertMessage(httpUrl, outputUrl), httpUrl.equals(outputUrl)); + + outputUrl = commonHttpClient.formatHostString(httpsUrl); + assertTrue(assertMessage(httpsUrl, outputUrl), httpsUrl.equals(outputUrl)); + + outputUrl = commonHttpClient.formatHostString(httpsUrl + "/"); + assertTrue(assertMessage(httpsUrl, outputUrl), httpsUrl.equals(outputUrl)); + + outputUrl = commonHttpClient.formatHostString(URL + ":" + HTTP_PORT); + assertTrue(assertMessage(httpUrl, outputUrl), httpUrl.equals(outputUrl)); + + outputUrl = commonHttpClient.formatHostString(URL + ":" + HTTPS_PORT); + assertTrue(assertMessage(httpsUrl, outputUrl), httpsUrl.equals(outputUrl)); + + outputUrl = commonHttpClient.formatHostString(URL); + assertTrue(assertMessage(httpUrl, outputUrl), httpUrl.equals(outputUrl)); + } + + private String assertMessage(String expected, String actual) { + return "Expected: " + expected + " Actual: " + actual; + } +}
\ No newline at end of file diff --git a/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/http/TestHttpDmaapConsumerImpl.java b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/http/TestHttpDmaapConsumerImpl.java new file mode 100644 index 000000000..ea9a5e921 --- /dev/null +++ b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/http/TestHttpDmaapConsumerImpl.java @@ -0,0 +1,153 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2018 Nokia. All rights reserved. + * ============================================================================= + * 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.appc.adapter.messaging.dmaap.http; + +import static javax.ws.rs.core.Response.Status.FORBIDDEN; +import static javax.ws.rs.core.Response.Status.OK; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.same; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.mockito.Mockito.when; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import org.apache.http.HttpEntity; +import org.apache.http.StatusLine; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.Spy; + +public class TestHttpDmaapConsumerImpl { + + private static final Collection<String> URLS = Arrays.asList("test.com", "test.org"); + private static final Collection<String> OUTPUT_MSG = Arrays.asList("FirstMessage", "SecondMessage"); + private static final String TOPIC_NAME = "Topic"; + private static final String CONSUMER_NAME = "Consumer"; + private static final String CONSUMER_ID = "Id"; + private static final String FILTER = "filter"; + private static final String USERNAME = "username"; + private static final String PASSWORD = "password"; + private static final String MESSAGE_BODY = "[FirstMessage, SecondMessage]"; + private static final int TIMEOUT_MS = 1000; + private static final int LIMIT = 1000; + + @Spy + private HttpDmaapConsumerImpl httpDmaapConsumer; + + @Mock + private CloseableHttpClient httpClient; + + @Mock + private CloseableHttpResponse httpResponse; + + @Mock + private StatusLine statusLine; + + @Mock + private HttpEntity entity; + + @Before + public void setUp() throws Exception { + httpDmaapConsumer = new HttpDmaapConsumerImpl(URLS, TOPIC_NAME, CONSUMER_NAME, CONSUMER_ID, FILTER); + httpDmaapConsumer.updateCredentials(USERNAME, PASSWORD); + + MockitoAnnotations.initMocks(this); + doReturn(httpClient).when(httpDmaapConsumer).getClient(); + when(httpClient.execute(any(HttpGet.class))).thenReturn(httpResponse); + when(httpResponse.getStatusLine()).thenReturn(statusLine); + when(httpResponse.getEntity()).thenReturn(entity); + doReturn(MESSAGE_BODY).when(httpDmaapConsumer).entityToString(same(entity)); + } + + @Test + public void shouldGetHttpRequest() throws Exception { + + when(statusLine.getStatusCode()).thenReturn(OK.getStatusCode()); + + List<String> output = httpDmaapConsumer.fetch(); + + assertFalse(output.isEmpty()); + assertTrue(output.containsAll(OUTPUT_MSG)); + verify(httpClient).execute(any(HttpGet.class)); + verify(httpResponse).getStatusLine(); + verify(httpResponse).getEntity(); + verify(httpResponse).close(); + verify(statusLine).getStatusCode(); + verifyNoMoreInteractions(httpClient, httpResponse, statusLine, entity); + } + + @Test + public void shouldNotBeSuccessful_whenHttpResponseIsOtherThanOk() throws Exception { + + when(statusLine.getStatusCode()).thenReturn(FORBIDDEN.getStatusCode()); + + List<String> output = httpDmaapConsumer.fetch(TIMEOUT_MS, LIMIT); + + assertTrue(output.isEmpty()); + verify(httpClient).execute(any(HttpGet.class)); + verify(httpResponse).getStatusLine(); + verify(httpResponse).getEntity(); + verify(httpResponse).close(); + verify(statusLine).getStatusCode(); + verifyNoMoreInteractions(httpClient, httpResponse, statusLine, entity); + } + + @Test + public void shouldNotBeSuccessful_whenRequestToOneOfUrlsCannotBeSent() throws Exception { + + when(httpClient.execute(any(HttpGet.class))).thenThrow(new ClientProtocolException()); + + List<String> output = httpDmaapConsumer.fetch(TIMEOUT_MS, LIMIT); + + assertTrue(output.isEmpty()); + verify(httpClient).execute(any(HttpGet.class)); + verifyNoMoreInteractions(httpClient, httpResponse, statusLine, entity); + + + reset(httpClient); + when(httpClient.execute(any(HttpGet.class))).thenReturn(httpResponse); + when(statusLine.getStatusCode()).thenReturn(OK.getStatusCode()); + + output = httpDmaapConsumer.fetch(TIMEOUT_MS, LIMIT); + + assertFalse(output.isEmpty()); + assertTrue(output.containsAll(OUTPUT_MSG)); + verify(httpClient).execute(any(HttpGet.class)); + verify(httpResponse).getStatusLine(); + verify(httpResponse).getEntity(); + verify(httpResponse).close(); + verify(statusLine).getStatusCode(); + verifyNoMoreInteractions(httpClient, httpResponse, statusLine, entity); + } + +}
\ No newline at end of file diff --git a/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/http/TestHttpDmaapProducerImpl.java b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/http/TestHttpDmaapProducerImpl.java new file mode 100644 index 000000000..01e41a857 --- /dev/null +++ b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/http/TestHttpDmaapProducerImpl.java @@ -0,0 +1,135 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2018 Nokia. All rights reserved. + * ============================================================================= + * 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.appc.adapter.messaging.dmaap.http; + +import static javax.ws.rs.core.Response.Status.FORBIDDEN; +import static javax.ws.rs.core.Response.Status.OK; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.mockito.Mockito.when; + +import java.util.Arrays; +import java.util.Collection; +import org.apache.http.StatusLine; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.CloseableHttpClient; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.Spy; + +public class TestHttpDmaapProducerImpl { + + private static final Collection<String> URLS = Arrays.asList("test.com", "test.org"); + private static final String TOPIC_NAME = "Topic"; + private static final String USERNAME = "username"; + private static final String PASSWORD = "password"; + private static final String PARTITION = "partition"; + private static final String DATA = "data"; + + + @Spy + private HttpDmaapProducerImpl httpDmaapProducer = new HttpDmaapProducerImpl(); + + @Mock + private CloseableHttpClient httpClient; + + @Mock + private CloseableHttpResponse httpResponse; + + @Mock + private StatusLine statusLine; + + @Before + public void setUp() throws Exception { + httpDmaapProducer = new HttpDmaapProducerImpl(URLS, TOPIC_NAME); + httpDmaapProducer.updateCredentials(USERNAME, PASSWORD); + + MockitoAnnotations.initMocks(this); + doReturn(httpClient).when(httpDmaapProducer).getClient(); + when(httpClient.execute(any(HttpPost.class))).thenReturn(httpResponse); + when(httpResponse.getStatusLine()).thenReturn(statusLine); + } + + @Test + public void shouldPostHttpRequest() throws Exception { + + when(statusLine.getStatusCode()).thenReturn(OK.getStatusCode()); + + boolean successful = httpDmaapProducer.post(PARTITION, DATA); + + assertTrue(successful); + verify(httpClient).execute(any(HttpPost.class)); + verify(httpResponse).getStatusLine(); + verify(httpResponse).close(); + verify(statusLine).getStatusCode(); + verifyNoMoreInteractions(httpClient, httpResponse, statusLine); + } + + @Test + public void shouldNotBeSuccessful_whenHttpResponseIsOtherThanOk() throws Exception { + + when(statusLine.getStatusCode()).thenReturn(FORBIDDEN.getStatusCode()); + + boolean successful = httpDmaapProducer.post(PARTITION, DATA); + + assertFalse(successful); + verify(httpClient).execute(any(HttpPost.class)); + verify(httpResponse).getStatusLine(); + verify(httpResponse).close(); + verify(statusLine).getStatusCode(); + verifyNoMoreInteractions(httpClient, httpResponse, statusLine); + } + + @Test + public void shouldNotBeSuccessful_whenRequestToOneOfUrlsCannotBeSent() throws Exception { + + when(httpClient.execute(any(HttpPost.class))).thenThrow(new ClientProtocolException()); + + boolean successful = httpDmaapProducer.post(PARTITION, DATA); + + assertFalse(successful); + verify(httpClient).execute(any(HttpPost.class)); + verifyNoMoreInteractions(httpClient, httpResponse, statusLine); + + + reset(httpClient); + when(httpClient.execute(any(HttpPost.class))).thenReturn(httpResponse); + when(statusLine.getStatusCode()).thenReturn(OK.getStatusCode()); + + successful = httpDmaapProducer.post(PARTITION, DATA); + + assertTrue(successful); + verify(httpClient).execute(any(HttpPost.class)); + verify(httpResponse).getStatusLine(); + verify(httpResponse).close(); + verify(statusLine).getStatusCode(); + verifyNoMoreInteractions(httpClient, httpResponse, statusLine); + } +}
\ No newline at end of file diff --git a/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/utils/TestDmaapUtil.java b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/utils/TestDmaapUtil.java new file mode 100644 index 000000000..1567242b5 --- /dev/null +++ b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/utils/TestDmaapUtil.java @@ -0,0 +1,268 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 2017 Amdocs + * ============================================================================= + * 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.appc.adapter.messaging.dmaap.utils; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Field; +import java.util.Properties; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.onap.appc.configuration.ConfigurationFactory; + +public class TestDmaapUtil { + private static Class<?> configurationFactoryClass; + private static Field configField; + + @Test + public void testCreateConsumerPropFile() { + String topic = "JunitTopicOne"; + Properties junitProps = new Properties(); + junitProps.put("host", "192.168.10.10"); + junitProps.put("group", "junit-client"); + junitProps.put("id", "junit-consumer-one"); + junitProps.put("filter", "none"); + + String junitFile = null; + + // ensure file path property is not set + if (System.getProperty(DmaapUtil.DMAAP_PROPERTIES_PATH) != null) { + System.clearProperty(DmaapUtil.DMAAP_PROPERTIES_PATH); + + // set configuration to null to force reloading of properties + try { + configField.set(null, null); + } catch (IllegalArgumentException | IllegalAccessException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + try { + junitFile = DmaapUtil.createConsumerPropFile(topic, junitProps); + } catch (IOException e) { + e.printStackTrace(); + fail("Exception creating consumer property file"); + } + + assertNotNull(junitFile); + + // open file and verify properties + File testFile = new File(junitFile); + assertTrue(testFile.exists()); + + InputStream is = null; + Properties testProps = new Properties(); + try { + is = new FileInputStream(testFile); + testProps.load(is); + } catch (FileNotFoundException e) { + e.printStackTrace(); + fail("Exception opening consumer property file"); + } catch (IOException e) { + e.printStackTrace(); + fail("Exception opening consumer property file"); + } finally { + try { + if (is != null) { + is.close(); + } + } catch (IOException ex) { + ex.printStackTrace(); + fail("Exception closing consumer property file"); + } + } + + assertFalse(testProps.isEmpty()); + + assertEquals(testProps.get("host"), "192.168.10.10"); + assertEquals(testProps.get("group"), "junit-client"); + assertEquals(testProps.get("id"), "junit-consumer-one"); + assertEquals(testProps.get("filter"), "none"); + assertEquals(testProps.get("TransportType"), "HTTPNOAUTH"); + } + + @Test + public void testCreateConsumerPropFileWithCustomProfile() { + String topic = "JunitTopicOne"; + Properties junitProps = new Properties(); + junitProps.put("host", "192.168.10.10"); + junitProps.put("group", "junit-client"); + junitProps.put("id", "junit-consumer-two"); + junitProps.put("filter", "none"); + + String junitFile = null; + + // set property for DMaaP profile + System.setProperty(DmaapUtil.DMAAP_PROPERTIES_PATH, "src/test/resources/org/onap/appc"); + + // set configuration to null to force reloading of properties + try { + configField.set(null, null); + } catch (IllegalArgumentException | IllegalAccessException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + + try { + junitFile = DmaapUtil.createConsumerPropFile(topic, junitProps); + } catch (IOException e) { + e.printStackTrace(); + fail("Exception creating consumer property file"); + } + + assertNotNull(junitFile); + + // open file and verify properties + File testFile = new File(junitFile); + assertTrue(testFile.exists()); + + InputStream is = null; + Properties testProps = new Properties(); + try { + is = new FileInputStream(testFile); + testProps.load(is); + } catch (FileNotFoundException e) { + e.printStackTrace(); + fail("Exception opening consumer property file"); + } catch (IOException e) { + e.printStackTrace(); + fail("Exception opening consumer property file"); + } finally { + try { + if (is != null) { + is.close(); + } + } catch (IOException ex) { + ex.printStackTrace(); + fail("Exception closing consumer property file"); + } + } + + assertFalse(testProps.isEmpty()); + + assertEquals(testProps.get("host"), "192.168.10.10"); + assertEquals(testProps.get("group"), "junit-client"); + assertEquals(testProps.get("id"), "junit-consumer-two"); + assertEquals(testProps.get("filter"), "none"); + assertEquals(testProps.get("TransportType"), "HTTPAAF"); + } + + @Test + public void testCreateProducerPropFile() { + String topic = "JunitTopicOne"; + Properties junitProps = new Properties(); + junitProps.put("host", "192.168.10.10"); + junitProps.put("group", "junit-client"); + junitProps.put("id", "junit-producer-one"); + junitProps.put("filter", "none"); + + String junitFile = null; + + // ensure file path property is not set + if (System.getProperty(DmaapUtil.DMAAP_PROPERTIES_PATH) != null) { + System.clearProperty(DmaapUtil.DMAAP_PROPERTIES_PATH); + + // set configuration to null to force reloading of properties + try { + configField.set(null, null); + } catch (IllegalArgumentException | IllegalAccessException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + + try { + junitFile = DmaapUtil.createProducerPropFile(topic, junitProps); + } catch (IOException e) { + e.printStackTrace(); + fail("Exception creating consumer property file"); + } + + assertNotNull(junitFile); + + // open file and verify properties + File testFile = new File(junitFile); + assertTrue(testFile.exists()); + + InputStream is = null; + Properties testProps = new Properties(); + try { + is = new FileInputStream(testFile); + testProps.load(is); + } catch (FileNotFoundException e) { + e.printStackTrace(); + fail("Exception opening consumer property file"); + } catch (IOException e) { + e.printStackTrace(); + fail("Exception opening consumer property file"); + } finally { + try { + if (is != null) { + is.close(); + } + } catch (IOException ex) { + ex.printStackTrace(); + fail("Exception closing consumer property file"); + } + } + + assertFalse(testProps.isEmpty()); + + assertEquals(testProps.get("host"), "192.168.10.10"); + assertEquals(testProps.get("group"), "junit-client"); + assertEquals(testProps.get("id"), "junit-producer-one"); + assertEquals(testProps.get("filter"), "none"); + assertEquals("HTTPNOAUTH", testProps.get("TransportType")); + } + + /** + * Use reflection to locate fields and methods so that they can be + * manipulated during the test to change the internal state accordingly. + * + * @throws NoSuchFieldException + * if the field(s) dont exist + * @throws SecurityException + * if reflective access is not allowed + * @throws NoSuchMethodException + * If the method(s) dont exist + */ + @SuppressWarnings("nls") + @BeforeClass + public static void once() throws NoSuchFieldException, SecurityException, NoSuchMethodException { + configurationFactoryClass = ConfigurationFactory.class; + + configField = configurationFactoryClass.getDeclaredField("config"); + configField.setAccessible(true); + } +} diff --git a/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/resources/DCAEResponse.txt b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/resources/DCAEResponse.txt new file mode 100644 index 000000000..884a8525f --- /dev/null +++ b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/resources/DCAEResponse.txt @@ -0,0 +1,20 @@ +{ +"requestTime": "0000-00-00 14:31:19.653787", +"policyVersion": "13", +"VMName": "123", +"from": "test", +"msgOid": ".1.3.6.1.4.1.193.183.4.1.3.5.1.4", +"trapID": "1234567", +"requestClient": "test", +"message": "Abnormal condition detected", +"time": "123567890", +"policyName": "RESTART", +"trapIDOID": ".1.3.6.1.4.1.193.183.4.1.3.5.1.3", +"request": "Restart", +"OPS_CL_timer": "15", +"nOID": ".1.3.6.1.4.1.193.183.4.2.0.4", +"AgentAddress": "192.168.1.2", +"vmOID": ".1.3.6.1.4.1.193.183.4.1.2.1", +"AICTenantID": "0123456789abcdef0123456789", +"AICVServerSelfLink": "http://somewhere" +}
\ No newline at end of file diff --git a/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/resources/org/onap/appc/consumer.properties b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/resources/org/onap/appc/consumer.properties new file mode 100644 index 000000000..709619452 --- /dev/null +++ b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/resources/org/onap/appc/consumer.properties @@ -0,0 +1,54 @@ +### +# ============LICENSE_START======================================================= +# ONAP : APPC +# ================================================================================ +# Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. +# ================================================================================ +# Copyright (C) 2017 Amdocs +# ============================================================================= +# 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========================================================= +### + +#TransportType-Specify which way user want to use. I.e. <HTTPAAF,DME2,HTTPAUTH > +TransportType=HTTPAAF +Latitude =50.000000 +Longitude =-100.000000 +Version =1.0 +ServiceName =dmaap-v1.dev.dmaap.dt.saat.acsi.openecomp.org/events +Environment =TEST +Partner=BOT_R +routeOffer=MR1 +SubContextPath =/ +Protocol =http +MethodType =GET +contenttype =application/json +#authKey=01234567890abcde:01234567890abcdefghijklmn +#authDate=2016-02-18T13:57:37-0800 +host=127.0.0.1 +topic=org.onap.appc.UNIT-TEST +group=jmsgrp +id=2 +timeout=15000 +limit=1000 +filter= +AFT_DME2_EXCHANGE_REQUEST_HANDLERS=com.att.nsa.test.PreferredRouteRequestHandler +AFT_DME2_EXCHANGE_REPLY_HANDLERS=com.att.nsa.test.PreferredRouteReplyHandler +AFT_DME2_REQ_TRACE_ON=true +AFT_ENVIRONMENT=AFTUAT +AFT_DME2_EP_CONN_TIMEOUT=15000 +AFT_DME2_ROUNDTRIP_TIMEOUT_MS=240000 +AFT_DME2_EP_READ_TIMEOUT_MS=50000 +sessionstickinessrequired=NO +DME2preferredRouterFilePath=preferredRoute.txt diff --git a/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/resources/org/onap/appc/default.properties b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/resources/org/onap/appc/default.properties new file mode 100644 index 000000000..8dea0a61d --- /dev/null +++ b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/resources/org/onap/appc/default.properties @@ -0,0 +1,38 @@ +### +# ============LICENSE_START======================================================= +# ONAP : APPC +# ================================================================================ +# Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. +# ================================================================================ +# Copyright (C) 2017 Amdocs +# ============================================================================= +# 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========================================================= +### + +org.onap.appc.bootstrap.file=test.properties +org.onap.appc.bootstrap.path=/opt/onap/appc/data/properties,${user.home},. + +# Properties commented out below are provided in appc.properties +poolMembers=10.0.0.1 +#event.pool.members=<DMAAP_IP>:3904 + +topic.read=APPC-CL +topic.read.timeout=5 +topic.write=APPC-CL +event.topic.write=APPC-CL +client.name=APPC-CLIENT-DMAAP-ADAPTER-TEST +client.name.id=0 + +metric.enabled=false; diff --git a/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/resources/org/onap/appc/producer.properties b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/resources/org/onap/appc/producer.properties new file mode 100644 index 000000000..9cc7f2e55 --- /dev/null +++ b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/resources/org/onap/appc/producer.properties @@ -0,0 +1,52 @@ +### +# ============LICENSE_START======================================================= +# ONAP : APPC +# ================================================================================ +# Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. +# ================================================================================ +# Copyright (C) 2017 Amdocs +# ============================================================================= +# 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========================================================= +### + +#TransportType-Specify which way user want to use. I.e. <HTTPAAF,DME2,HTTPAUTH > +TransportType=HTTPAAF +Latitude =50.000000 +Longitude =-100.000000 +Version =1.0 +ServiceName =dmaap-v1.dev.dmaap.dt.saat.acsi.openecomp.org/events +Environment =TEST +Partner=BOT_R +SubContextPath =/ +Protocol =http +MethodType =POST +contenttype = application/json +authKey=01234567890abcde:01234567890abcdefghijklmn +authDate=2016-07-20T11:30:56-0700 +host=127.0.0.1 +topic=org.onap.appc.UNIT-TEST +partition=2 +maxBatchSize=100 +maxAgeMs=250 +AFT_DME2_EXCHANGE_REQUEST_HANDLERS=com.att.nsa.test.PreferredRouteRequestHandler +AFT_DME2_EXCHANGE_REPLY_HANDLERS=com.att.nsa.test.PreferredRouteReplyHandler +AFT_DME2_REQ_TRACE_ON=true +AFT_ENVIRONMENT=AFTUAT +AFT_DME2_EP_CONN_TIMEOUT=15000 +AFT_DME2_ROUNDTRIP_TIMEOUT_MS=240000 +AFT_DME2_EP_READ_TIMEOUT_MS=50000 +sessionstickinessrequired=NO +DME2preferredRouterFilePath=preferredRoute.txt +MessageSentThreadOccurance=50 diff --git a/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/resources/test.properties b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/resources/test.properties new file mode 100644 index 000000000..a451739bf --- /dev/null +++ b/services/appc-dmaap-service/appc-dmaap-adapter-bundle/src/test/resources/test.properties @@ -0,0 +1,37 @@ +### +# ============LICENSE_START======================================================= +# ONAP : APPC +# ================================================================================ +# Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. +# ================================================================================ +# Copyright (C) 2017 Amdocs +# ============================================================================= +# 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========================================================= +### + +# Properties commented out below are provided in appc.properties +#poolMembers=<DMAAP_IP>:3904 +#event.pool.members=<DMAAP_IP>:3904 + +topic.read=APPC-TEST2 +topic.read.timeout=5 +topic.write=APPC-TEST2 +event.topic.write=APPC-TEST2 +client.name=APPC-CLIENT-DMAAP-ADAPTER-TEST +client.name.id=0 +#client.key=fakeKey +#client.secret=fakeSecret +#event.client.key=fakeKey +#event.client.secret=fakeSecret |