<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
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;
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;
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)
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 <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 4/25/18
*/
public interface Config {
- Resource getGitInfo();
-
MessageRouterSubscribeRequest getMessageRouterSubscribeRequest();
AaiClientConfiguration getAaiClientConfiguration();
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;
* @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> 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")
@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;
}
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;
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)
@GetMapping(value = "version", produces = MediaType.APPLICATION_JSON_VALUE)
@ApiOperation("Returns version information")
public Mono<Resource> version() {
- return Mono.defer(() -> Mono.just(gitInfo));
+ return Mono.defer(() -> Mono.just(config.getGitInfo()));
}
}
--- /dev/null
+/*
+ * ============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
+++ /dev/null
-/*
- * ============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 <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 7/10/18
- */
-@Configuration
-class ServiceMockProvider {
-
- @Bean
- public PrhAppConfig getPrhAppConfig() {
- return mock(PrhAppConfig.class);
- }
-
- @Bean
- public ConsumerDmaapModel getRequestDetails() {
- return mock(ConsumerDmaapModel.class);
- }
-}
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 static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
* @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 4/13/18
*/
@Configuration
-public class AaiPublisherTaskSpy {
+public class AaiPublisherTaskTestConfig {
/**
* Mocking bean for tests.
- *
- * @return A&AI ProducerTask spy
*/
@Bean
@Primary
public AaiProducerTask registerSimpleAaiPublisherTask() {
- CbsConfiguration cbsConfiguration = spy(CbsConfiguration.class);
- ConsumerDmaapModel consumerDmaapModel = spy(ConsumerDmaapModel.class);
+ CbsConfiguration cbsConfiguration = mock(CbsConfiguration.class);
doReturn(mock(AaiClientConfiguration.class)).when(cbsConfiguration).getAaiClientConfiguration();
AaiHttpPatchClient aaiReactiveHttpPatchClient = mock(AaiHttpPatchClient.class);
- AaiProducerTaskImpl aaiProducerTask = spy(new AaiProducerTaskImpl(aaiReactiveHttpPatchClient));
- return aaiProducerTask;
+ return new AaiProducerTaskImpl(aaiReactiveHttpPatchClient);
}
}
--- /dev/null
+spring:
+ profiles:
+ active: prod
\ No newline at end of file