From 6ae123a7e8c095dd87c9b459b86195f9f492b508 Mon Sep 17 00:00:00 2001 From: grabinsk Date: Wed, 29 May 2019 15:06:10 +0200 Subject: Configs cleanup Adding test for AppInfoController Change-Id: Ib793cf20a17bcca56f5fe2162048c1b95409da01 Issue-ID: DCAEGEN2-1544 Signed-off-by: grabinsk --- prh-app-server/pom.xml | 10 +++- .../prh/configuration/CbsConfiguration.java | 18 ++---- .../services/prh/configuration/Config.java | 3 - .../services/prh/configuration/PrhAppConfig.java | 11 ++-- .../prh/controllers/AppInfoController.java | 21 ++++--- .../prh/controllers/AppInfoControllerTest.java | 67 ++++++++++++++++++++++ .../prh/integration/ServiceMockProvider.java | 45 --------------- .../services/prh/tasks/AaiPublisherTaskSpy.java | 59 ------------------- .../prh/tasks/AaiPublisherTaskTestConfig.java | 53 +++++++++++++++++ prh-app-server/src/test/resources/application.yaml | 3 + 10 files changed, 153 insertions(+), 137 deletions(-) create mode 100644 prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/controllers/AppInfoControllerTest.java delete mode 100644 prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/integration/ServiceMockProvider.java delete mode 100644 prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/AaiPublisherTaskSpy.java create mode 100644 prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/AaiPublisherTaskTestConfig.java create mode 100644 prh-app-server/src/test/resources/application.yaml diff --git a/prh-app-server/pom.xml b/prh-app-server/pom.xml index 5e88011b..5fee9240 100644 --- a/prh-app-server/pom.xml +++ b/prh-app-server/pom.xml @@ -258,9 +258,15 @@ test - org.springframework - spring-test + org.springframework.boot + spring-boot-starter-test test + + + junit + junit + + io.projectreactor diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/CbsConfiguration.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/CbsConfiguration.java index 0cf07a0f..e412bff5 100644 --- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/CbsConfiguration.java +++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/CbsConfiguration.java @@ -33,12 +33,7 @@ import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRo import org.onap.dcaegen2.services.sdk.rest.services.model.logging.RequestDiagnosticContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; -import org.springframework.scheduling.annotation.EnableScheduling; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; @@ -46,11 +41,7 @@ import reactor.core.scheduler.Schedulers; import java.util.Optional; @Configuration -@ComponentScan("org.onap.dcaegen2.services.sdk.rest.services.cbs.client.providers") -@EnableConfigurationProperties -@EnableScheduling -@Primary -public class CbsConfiguration extends PrhAppConfig { +public class CbsConfiguration implements Config { private static final Logger LOGGER = LoggerFactory.getLogger(CbsConfiguration.class); private AaiClientConfiguration aaiClientCBSConfiguration; private MessageRouterPublisher messageRouterPublisher; @@ -59,8 +50,11 @@ public class CbsConfiguration extends PrhAppConfig { private MessageRouterSubscribeRequest messageRouterCBSSubscribeRequest; private MessageRouterPublishRequest messageRouterCBSUpdatePublishRequest; - @Autowired - private ConsulConfigFileReader consulConfigFileReader; + private final ConsulConfigFileReader consulConfigFileReader; + + public CbsConfiguration(ConsulConfigFileReader consulConfigFileReader) { + this.consulConfigFileReader = consulConfigFileReader; + } public void runTask() { Flux.defer(this::resolveEnvProperties) diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/Config.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/Config.java index 53ccdc05..5fe6d703 100644 --- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/Config.java +++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/Config.java @@ -25,15 +25,12 @@ import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.api.MessageRout import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.api.MessageRouterSubscriber; import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterPublishRequest; import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterSubscribeRequest; -import org.springframework.core.io.Resource; /** * @author Przemysław Wąsala on 4/25/18 */ public interface Config { - Resource getGitInfo(); - MessageRouterSubscribeRequest getMessageRouterSubscribeRequest(); AaiClientConfiguration getAaiClientConfiguration(); diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/PrhAppConfig.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/PrhAppConfig.java index 5ef00dd0..71d707bc 100644 --- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/PrhAppConfig.java +++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/PrhAppConfig.java @@ -23,8 +23,6 @@ package org.onap.dcaegen2.services.prh.configuration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.util.StreamUtils; @@ -37,9 +35,7 @@ import java.nio.charset.Charset; * @author Przemysław Wąsala on 4/9/18 */ @Configuration -@EnableConfigurationProperties -@ConfigurationProperties("app") -public abstract class PrhAppConfig implements Config { +public class PrhAppConfig { private static final Logger LOGGER = LoggerFactory.getLogger(PrhAppConfig.class); @Value("classpath:git_info.json") @@ -47,10 +43,11 @@ public abstract class PrhAppConfig implements Config { @PostConstruct private void printGitInfo() throws IOException { - LOGGER.debug("Git info={}", StreamUtils.copyToString(gitInfo.getInputStream(), Charset.defaultCharset())); + if(LOGGER.isDebugEnabled()) { + LOGGER.debug("Git info={}", StreamUtils.copyToString(gitInfo.getInputStream(), Charset.defaultCharset())); + } } - @Override public Resource getGitInfo() { return gitInfo; } diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/AppInfoController.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/AppInfoController.java index 9a49dee5..7475814f 100644 --- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/AppInfoController.java +++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/AppInfoController.java @@ -20,13 +20,17 @@ package org.onap.dcaegen2.services.prh.controllers; -import io.swagger.annotations.*; -import org.onap.dcaegen2.services.prh.configuration.Config; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import org.onap.dcaegen2.services.prh.configuration.PrhAppConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; -import org.springframework.http.*; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Mono; @@ -39,11 +43,10 @@ import reactor.core.publisher.Mono; public class AppInfoController { private static final Logger LOGGER = LoggerFactory.getLogger(AppInfoController.class); - private final Resource gitInfo; + private final PrhAppConfig config; - @Autowired - public AppInfoController(Config config) { - gitInfo = config.getGitInfo(); + public AppInfoController(PrhAppConfig config) { + this.config = config; } @GetMapping(value = "heartbeat", produces = MediaType.TEXT_PLAIN_VALUE) @@ -58,6 +61,6 @@ public class AppInfoController { @GetMapping(value = "version", produces = MediaType.APPLICATION_JSON_VALUE) @ApiOperation("Returns version information") public Mono version() { - return Mono.defer(() -> Mono.just(gitInfo)); + return Mono.defer(() -> Mono.just(config.getGitInfo())); } } diff --git a/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/controllers/AppInfoControllerTest.java b/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/controllers/AppInfoControllerTest.java new file mode 100644 index 00000000..23a444c4 --- /dev/null +++ b/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/controllers/AppInfoControllerTest.java @@ -0,0 +1,67 @@ +/* + * ============LICENSE_START======================================================= + * PNF-REGISTRATION-HANDLER + * ================================================================================ + * Copyright (C) 2019 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.controllers; + +import org.junit.jupiter.api.Test; +import org.onap.dcaegen2.services.prh.configuration.PrhAppConfig; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.core.io.ByteArrayResource; +import org.springframework.http.MediaType; +import org.springframework.test.web.reactive.server.WebTestClient; + +import static org.mockito.Mockito.when; + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +class AppInfoControllerTest { + + private static final String SAMPLE_GIT_INFO_CONTENT = "{ \"git.commit.id\" : \"37444e\" }"; + + @MockBean + private PrhAppConfig prhAppConfig; + + @Autowired + private WebTestClient webTestClient; + + @Test + void shouldProvideHeartbeatResponse() { + webTestClient + .get().uri("/heartbeat") + .accept(MediaType.TEXT_PLAIN) + .exchange() + .expectStatus().isOk() + .expectBody(String.class).isEqualTo("alive"); + } + + + @Test + void shouldProvideVersionInfo() { + when(prhAppConfig.getGitInfo()).thenReturn(new ByteArrayResource(SAMPLE_GIT_INFO_CONTENT.getBytes())); + + webTestClient + .get().uri("/version") + .accept(MediaType.APPLICATION_JSON) + .exchange() + .expectStatus().isOk() + .expectBody(String.class).isEqualTo(SAMPLE_GIT_INFO_CONTENT); + } +} \ No newline at end of file diff --git a/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/integration/ServiceMockProvider.java b/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/integration/ServiceMockProvider.java deleted file mode 100644 index 2660e3e5..00000000 --- a/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/integration/ServiceMockProvider.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * PROJECT - * ================================================================================ - * 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.integration; - -import static org.mockito.Mockito.mock; - -import org.onap.dcaegen2.services.prh.configuration.PrhAppConfig; -import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * @author Przemysław Wąsala on 7/10/18 - */ -@Configuration -class ServiceMockProvider { - - @Bean - public PrhAppConfig getPrhAppConfig() { - return mock(PrhAppConfig.class); - } - - @Bean - public ConsumerDmaapModel getRequestDetails() { - return mock(ConsumerDmaapModel.class); - } -} diff --git a/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/AaiPublisherTaskSpy.java b/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/AaiPublisherTaskSpy.java deleted file mode 100644 index 04388fb7..00000000 --- a/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/AaiPublisherTaskSpy.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * PROJECT - * ================================================================================ - * 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.tasks; - -import org.onap.dcaegen2.services.prh.configuration.CbsConfiguration; -import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel; -import org.onap.dcaegen2.services.sdk.rest.services.aai.client.config.AaiClientConfiguration; -import org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http.patch.AaiHttpPatchClient; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; - -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; - - - -/** - * @author Przemysław Wąsala on 4/13/18 - */ -@Configuration -public class AaiPublisherTaskSpy { - - /** - * Mocking bean for tests. - * - * @return A&AI ProducerTask spy - */ - @Bean - @Primary - public AaiProducerTask registerSimpleAaiPublisherTask() { - CbsConfiguration cbsConfiguration = spy(CbsConfiguration.class); - ConsumerDmaapModel consumerDmaapModel = spy(ConsumerDmaapModel.class); - doReturn(mock(AaiClientConfiguration.class)).when(cbsConfiguration).getAaiClientConfiguration(); - AaiHttpPatchClient aaiReactiveHttpPatchClient = mock(AaiHttpPatchClient.class); - AaiProducerTaskImpl aaiProducerTask = spy(new AaiProducerTaskImpl(aaiReactiveHttpPatchClient)); - - return aaiProducerTask; - } -} diff --git a/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/AaiPublisherTaskTestConfig.java b/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/AaiPublisherTaskTestConfig.java new file mode 100644 index 00000000..fe3a3ae3 --- /dev/null +++ b/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/AaiPublisherTaskTestConfig.java @@ -0,0 +1,53 @@ +/* + * ============LICENSE_START======================================================= + * PROJECT + * ================================================================================ + * 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.tasks; + +import org.onap.dcaegen2.services.prh.configuration.CbsConfiguration; +import org.onap.dcaegen2.services.sdk.rest.services.aai.client.config.AaiClientConfiguration; +import org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http.patch.AaiHttpPatchClient; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; + +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; + + + +/** + * @author Przemysław Wąsala on 4/13/18 + */ +@Configuration +public class AaiPublisherTaskTestConfig { + + /** + * Mocking bean for tests. + */ + @Bean + @Primary + public AaiProducerTask registerSimpleAaiPublisherTask() { + CbsConfiguration cbsConfiguration = mock(CbsConfiguration.class); + doReturn(mock(AaiClientConfiguration.class)).when(cbsConfiguration).getAaiClientConfiguration(); + AaiHttpPatchClient aaiReactiveHttpPatchClient = mock(AaiHttpPatchClient.class); + + return new AaiProducerTaskImpl(aaiReactiveHttpPatchClient); + } +} diff --git a/prh-app-server/src/test/resources/application.yaml b/prh-app-server/src/test/resources/application.yaml new file mode 100644 index 00000000..90385b2b --- /dev/null +++ b/prh-app-server/src/test/resources/application.yaml @@ -0,0 +1,3 @@ +spring: + profiles: + active: prod \ No newline at end of file -- cgit 1.2.3-korg