diff options
Diffstat (limited to 'prh-dmaap-client/src/test/java')
2 files changed, 156 insertions, 96 deletions
diff --git a/prh-dmaap-client/src/test/java/org/onap/dcaegen2/services/prh/service/consumer/DmaapConsumerReactiveHttpClientTest.java b/prh-dmaap-client/src/test/java/org/onap/dcaegen2/services/prh/service/consumer/DmaapConsumerReactiveHttpClientTest.java new file mode 100644 index 00000000..63966602 --- /dev/null +++ b/prh-dmaap-client/src/test/java/org/onap/dcaegen2/services/prh/service/consumer/DmaapConsumerReactiveHttpClientTest.java @@ -0,0 +1,156 @@ +/* + * ============LICENSE_START======================================================= + * PNF-REGISTRATION-HANDLER + * ================================================================================ + * Copyright (C) 2018 NOKIA Intellectual Property. 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.dcaegen2.services.prh.service.consumer; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; +import static org.springframework.web.reactive.function.client.ExchangeFilterFunctions.basicAuthentication; + +import java.net.URI; +import java.net.URISyntaxException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.onap.dcaegen2.services.prh.config.DmaapConsumerConfiguration; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.web.reactive.function.client.WebClient; +import org.springframework.web.reactive.function.client.WebClient.RequestHeadersUriSpec; +import org.springframework.web.reactive.function.client.WebClient.ResponseSpec; +import reactor.core.publisher.Mono; +import reactor.test.StepVerifier; + +/** + * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 6/27/18 + */ +public class DmaapConsumerReactiveHttpClientTest { + + private static DmaapConsumerReactiveHttpClient dmaapConsumerReactiveHttpClient; + + private static DmaapConsumerConfiguration consumerConfigurationMock = mock(DmaapConsumerConfiguration.class); + private static final String JSON_MESSAGE = "{ \"responseFromDmaap\": \"Success\"}"; + private static Mono<String> expectedResult = Mono.empty(); + private static WebClient webClient = mock(WebClient.class); + private static RequestHeadersUriSpec requestHeadersSpec; + private static ResponseSpec responseSpec; + + + @BeforeAll + public static void setUp() { + when(consumerConfigurationMock.dmaapHostName()).thenReturn("54.45.33.2"); + when(consumerConfigurationMock.dmaapProtocol()).thenReturn("https"); + when(consumerConfigurationMock.dmaapPortNumber()).thenReturn(1234); + when(consumerConfigurationMock.dmaapUserName()).thenReturn("PRH"); + when(consumerConfigurationMock.dmaapUserPassword()).thenReturn("PRH"); + when(consumerConfigurationMock.dmaapContentType()).thenReturn("application/json"); + when(consumerConfigurationMock.dmaapTopicName()).thenReturn("unauthenticated.SEC_OTHER_OUTPUT"); + when(consumerConfigurationMock.consumerGroup()).thenReturn("OpenDCAE-c12"); + when(consumerConfigurationMock.consumerId()).thenReturn("c12"); + + dmaapConsumerReactiveHttpClient = new DmaapConsumerReactiveHttpClient(consumerConfigurationMock); + webClient = spy(WebClient.builder() + .defaultHeader(HttpHeaders.CONTENT_TYPE, consumerConfigurationMock.dmaapContentType()) + .filter(basicAuthentication(consumerConfigurationMock.dmaapUserName(), + consumerConfigurationMock.dmaapUserPassword())) + .filter(dmaapConsumerReactiveHttpClient.logRequest()) + .filter(dmaapConsumerReactiveHttpClient.logResponse()) + .build()); + requestHeadersSpec = mock(RequestHeadersUriSpec.class); + responseSpec = mock(ResponseSpec.class); + } + + + @Test + public void getHttpResponse_Success() { + //given + expectedResult = Mono.just(JSON_MESSAGE); + + //when + mockDependantObjects(); + doReturn(expectedResult).when(responseSpec).bodyToMono(String.class); + dmaapConsumerReactiveHttpClient.initWebClient(webClient); + Mono<String> response = dmaapConsumerReactiveHttpClient.getDmaaPConsumerResponse(); + + //then + StepVerifier.create(response).expectSubscription() + .expectNextMatches(results -> { + Assertions.assertEquals(results, expectedResult.block()); + return true; + }).verifyComplete(); + } + + + @Test + public void getHttpResponse_HttpResponse4xxClientError() { + + //when + mockDependantObjects(); + doAnswer(invocationOnMock -> Mono.error(new Exception("400"))) + .when(responseSpec).onStatus(HttpStatus::is4xxClientError, e -> Mono.error(new Exception("400"))); + dmaapConsumerReactiveHttpClient.initWebClient(); + dmaapConsumerReactiveHttpClient.initWebClient(webClient); + + //then + StepVerifier.create(dmaapConsumerReactiveHttpClient.getDmaaPConsumerResponse()).expectSubscription() + .expectError(Exception.class); + + } + + @Test + public void getHttpResponse_HttpResponse5xxClientError() { + + //when + mockDependantObjects(); + doAnswer(invocationOnMock -> Mono.error(new Exception("500"))) + .when(responseSpec).onStatus(HttpStatus::is4xxClientError, e -> Mono.error(new Exception("500"))); + dmaapConsumerReactiveHttpClient.initWebClient(); + dmaapConsumerReactiveHttpClient.initWebClient(webClient); + + //then + StepVerifier.create(dmaapConsumerReactiveHttpClient.getDmaaPConsumerResponse()).expectSubscription() + .expectError(Exception.class); + } + + @Test + public void getHttpResponse_whenURISyntaxExceptionHasBeenThrown() throws URISyntaxException { + //given + dmaapConsumerReactiveHttpClient = spy(dmaapConsumerReactiveHttpClient); + //when + when(webClient.get()).thenReturn(requestHeadersSpec); + dmaapConsumerReactiveHttpClient.initWebClient(webClient); + when(dmaapConsumerReactiveHttpClient.getUri()).thenThrow(URISyntaxException.class); + + //then + StepVerifier.create(dmaapConsumerReactiveHttpClient.getDmaaPConsumerResponse()).expectSubscription() + .expectError(Exception.class); + } + + private void mockDependantObjects() { + when(webClient.get()).thenReturn(requestHeadersSpec); + when(requestHeadersSpec.uri((URI) any())).thenReturn(requestHeadersSpec); + when(requestHeadersSpec.retrieve()).thenReturn(responseSpec); + doReturn(responseSpec).when(responseSpec).onStatus(any(), any()); + } + +}
\ No newline at end of file diff --git a/prh-dmaap-client/src/test/java/org/onap/dcaegen2/services/prh/service/consumer/ExtendedDmaapConsumerHttpClientImplTest.java b/prh-dmaap-client/src/test/java/org/onap/dcaegen2/services/prh/service/consumer/ExtendedDmaapConsumerHttpClientImplTest.java deleted file mode 100644 index d2c0e77b..00000000 --- a/prh-dmaap-client/src/test/java/org/onap/dcaegen2/services/prh/service/consumer/ExtendedDmaapConsumerHttpClientImplTest.java +++ /dev/null @@ -1,96 +0,0 @@ -///*- -// * ============LICENSE_START======================================================= -// * PNF-REGISTRATION-HANDLER -// * ================================================================================ -// * Copyright (C) 2018 NOKIA Intellectual Property. 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.dcaegen2.services.prh.service.consumer; -// -//import org.apache.http.client.ResponseHandler; -//import org.apache.http.client.methods.HttpGet; -//import org.apache.http.impl.client.CloseableHttpClient; -//import org.junit.jupiter.api.Assertions; -//import org.junit.jupiter.api.BeforeAll; -//import org.junit.jupiter.api.Test; -//import org.onap.dcaegen2.services.prh.config.DmaapConsumerConfiguration; -// -//import java.io.IOException; -//import java.lang.reflect.Field; -//import java.util.Optional; -// -//import static org.mockito.ArgumentMatchers.any; -//import static org.mockito.Mockito.mock; -//import static org.mockito.Mockito.when; -// -// -//public class ExtendedDmaapConsumerHttpClientImplTest { -// -// private static ExtendedDmaapConsumerHttpClientImpl objectUnderTest; -// -// private static DmaapConsumerConfiguration configurationMock = mock(DmaapConsumerConfiguration.class); -// private static CloseableHttpClient closeableHttpClientMock = mock(CloseableHttpClient.class); -// -// private static final String JSON_MESSAGE = "{ \"responseFromDmaap\": \"Success\" }"; -// -// private static Optional<String> expectedResult = Optional.empty(); -// -// @BeforeAll -// public static void init() throws NoSuchFieldException, IllegalAccessException { -// -// when(configurationMock.dmaapHostName()).thenReturn("54.45.33.2"); -// when(configurationMock.dmaapProtocol()).thenReturn("https"); -// when(configurationMock.dmaapPortNumber()).thenReturn(1234); -// when(configurationMock.dmaapUserName()).thenReturn("PRH"); -// when(configurationMock.dmaapUserPassword()).thenReturn("PRH"); -// when(configurationMock.dmaapContentType()).thenReturn("application/json"); -// when(configurationMock.dmaapTopicName()).thenReturn("unauthenticated.SEC_OTHER_OUTPUT"); -// when(configurationMock.consumerGroup()).thenReturn("OpenDCAE-c12"); -// when(configurationMock.consumerId()).thenReturn("c12"); -// -// objectUnderTest = new ExtendedDmaapConsumerHttpClientImpl(configurationMock); -// -// setField(); -// } -// -// -// @Test -// public void getHttpResponseGet_success() throws IOException { -// expectedResult = Optional.of(JSON_MESSAGE); -// -// when(closeableHttpClientMock.execute(any(HttpGet.class), any(ResponseHandler.class))) -// .thenReturn(expectedResult); -// -// Optional<String> actualResult = objectUnderTest.getHttpConsumerResponse(); -// -// Assertions.assertEquals(expectedResult.get(), actualResult.get()); -// } -// -// @Test -// public void getExtendedDetails_returnsNull() throws IOException { -// when(closeableHttpClientMock.execute(any(HttpGet.class), any(ResponseHandler.class))). -// thenReturn(Optional.empty()); -// Optional<String> actualResult = objectUnderTest.getHttpConsumerResponse(); -// Assertions.assertEquals(Optional.empty(),actualResult); -// } -// -// -// private static void setField() throws NoSuchFieldException, IllegalAccessException { -// Field field = objectUnderTest.getClass().getDeclaredField("closeableHttpClient"); -// field.setAccessible(true); -// field.set(objectUnderTest, closeableHttpClientMock); -// } -//} |