diff options
author | Shaaban Ebrahim <shaaban.altanany@gmail.com> | 2019-09-10 18:12:32 +0200 |
---|---|---|
committer | Shaaban Ebrahim <shaaban.eltanany.ext@orange.com> | 2019-09-16 16:45:32 +0200 |
commit | bf30532b84d21e98cb266f20fe961ba280909dca (patch) | |
tree | 7caf257cf64696d8d33ba46506b894bddb49b64d | |
parent | 85f7fb219f6e1f4227ac1463290f6a6aafc2b84f (diff) |
add health-api project
Issue-ID: CCSDK-1669
Signed-off-by: Shaaban Ebrahim <shaaban.eltanany.ext@orange.com>
Change-Id: I8a05db50e4f896ecc2e040a113d1fc676f139121
18 files changed, 545 insertions, 0 deletions
diff --git a/ms/blueprintsprocessor/application/pom.xml b/ms/blueprintsprocessor/application/pom.xml index a4f60f111..655d7ee88 100755 --- a/ms/blueprintsprocessor/application/pom.xml +++ b/ms/blueprintsprocessor/application/pom.xml @@ -70,6 +70,11 @@ <groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId> <artifactId>configs-api</artifactId> </dependency> + <dependency> + <groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId> + <artifactId>health-api</artifactId> + </dependency> + <!-- Functions --> <dependency> diff --git a/ms/blueprintsprocessor/application/src/test/resources/application.properties b/ms/blueprintsprocessor/application/src/test/resources/application.properties index 766498fdc..d56e9582c 100644 --- a/ms/blueprintsprocessor/application/src/test/resources/application.properties +++ b/ms/blueprintsprocessor/application/src/test/resources/application.properties @@ -77,3 +77,7 @@ blueprintsprocessor.messageclient.self-service-api.consumerTopic=receiver.t blueprintsprocessor.messageclient.self-service-api.groupId=receiver-id blueprintsprocessor.messageclient.self-service-api.clientId=default-client-id blueprintsprocessor.messageclient.self-service-api.kafkaEnable=false + + +endpoints.user.name=ccsdkapps +endpoints.user.password=ccsdkapps diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/pom.xml b/ms/blueprintsprocessor/modules/inbounds/health-api/pom.xml new file mode 100644 index 000000000..964de1e3c --- /dev/null +++ b/ms/blueprintsprocessor/modules/inbounds/health-api/pom.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright © 2019-2020 Orange. + + ~ + ~ 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. + --> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <artifactId>inbounds</artifactId> + <groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId> + <version>0.6.1-SNAPSHOT</version> + </parent> + <groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId> + <artifactId>health-api</artifactId> + <!--<version>0.0.1-SNAPSHOT</version>--> + + <packaging>jar</packaging> + <name>health api for checking the system</name> + <description>checking system check health endpoints</description> + + <dependencies> + <dependency> + <groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId> + <artifactId>rest-lib</artifactId> + </dependency> + </dependencies> +</project> diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/configuration/BasicAuthRestClientServiceConfiguration.kt b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/configuration/BasicAuthRestClientServiceConfiguration.kt new file mode 100644 index 000000000..0a97d37c5 --- /dev/null +++ b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/configuration/BasicAuthRestClientServiceConfiguration.kt @@ -0,0 +1,50 @@ +/* + * Copyright © 2019-2020 Orange. + * + * 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. + */ + +package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.configuration + +import org.onap.ccsdk.cds.blueprintsprocessor.rest.BasicAuthRestClientProperties +import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BasicAuthRestClientService +import org.springframework.beans.factory.annotation.Value +import org.springframework.context.annotation.Bean +import org.springframework.context.annotation.Configuration +import org.springframework.context.annotation.PropertySource + +@Configuration +@PropertySource("classpath:application.properties") +open class BasicAuthRestClientServiceConfiguration { + + @Value("\${endpoints.user.name}") + private val username: String? = null + + @Value("\${endpoints.user.password}") + private val password: String? = null + + @Bean + open fun getBasicAuthRestClientProperties(): BasicAuthRestClientProperties { + val basicAuthRestClientProperties = BasicAuthRestClientProperties() + basicAuthRestClientProperties.username = username.toString() + basicAuthRestClientProperties.password = password.toString() + return basicAuthRestClientProperties + } + + @Bean + open fun getBasicAuthRestClientService(): BasicAuthRestClientService { + return BasicAuthRestClientService(getBasicAuthRestClientProperties()) + } + + +} diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/controller/HealthCheckController.kt b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/controller/HealthCheckController.kt new file mode 100644 index 000000000..1283ac5ac --- /dev/null +++ b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/controller/HealthCheckController.kt @@ -0,0 +1,48 @@ +/* + * Copyright © 2019-2020 Orange. + * + * 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. + */ + +package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.controller + +import io.swagger.annotations.Api +import io.swagger.annotations.ApiOperation +import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.HealthApiResponse +import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.service.HealthCheckService +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.http.MediaType +import org.springframework.http.ResponseEntity +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RequestMethod +import org.springframework.web.bind.annotation.ResponseBody +import org.springframework.web.bind.annotation.RestController + +@RestController +@RequestMapping("/api/v1/health") +@Api(value = "/api/v1/health", + description = "gather all HealthCheckResponses for HealthChecks known to the runtime") +open class HealthCheckController { + + @Autowired + lateinit var healthApiService: HealthCheckService + + @RequestMapping(path = [""], + method = [RequestMethod.GET], + produces = [MediaType.APPLICATION_JSON_VALUE]) + @ResponseBody + @ApiOperation(value = "Health Check", hidden = true) + fun getSystemHealthCheckResponse(): ResponseEntity<HealthApiResponse> { + return ResponseEntity.ok().body(healthApiService.retrieveSystemStatus()) + } +} diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthApiResponse.kt b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthApiResponse.kt new file mode 100644 index 000000000..4dac178e5 --- /dev/null +++ b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthApiResponse.kt @@ -0,0 +1,6 @@ +package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain + + +data class HealthApiResponse(val status: HealthCheckStatus, val checks:List<HealthCheckResponse>) + + diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthCheckResponse.kt b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthCheckResponse.kt new file mode 100644 index 000000000..acac867cb --- /dev/null +++ b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthCheckResponse.kt @@ -0,0 +1,6 @@ +package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain + + +data class HealthCheckResponse(val name: String, val status: HealthCheckStatus) + + diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthCheckStatus.kt b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthCheckStatus.kt new file mode 100644 index 000000000..a891a40d3 --- /dev/null +++ b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthCheckStatus.kt @@ -0,0 +1,6 @@ +package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain + +enum class HealthCheckStatus { + UP, + DOWN +}
\ No newline at end of file diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ServiceEndpoint.kt b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ServiceEndpoint.kt new file mode 100644 index 000000000..8fbc33b47 --- /dev/null +++ b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ServiceEndpoint.kt @@ -0,0 +1,5 @@ +package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain + + + +data class ServiceEndpoint(val serviceName: String, val serviceLink: String) diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/HealthCheckService.kt b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/HealthCheckService.kt new file mode 100644 index 000000000..09fdb67f2 --- /dev/null +++ b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/HealthCheckService.kt @@ -0,0 +1,91 @@ +/* + * Copyright © 2019-2020 Orange. + * + * 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. + */ + +package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.service + +import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.HealthApiResponse +import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.HealthCheckResponse +import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.HealthCheckStatus +import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.ServiceEndpoint +import org.onap.ccsdk.cds.blueprintsprocessor.rest.BasicAuthRestClientProperties +import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BasicAuthRestClientService +import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BlueprintWebClientService +import org.slf4j.LoggerFactory +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.http.HttpMethod +import org.springframework.stereotype.Service + + +@Service +class HealthCheckService { + + private var logger = LoggerFactory.getLogger(HealthCheckService::class.java) + + @Autowired + lateinit var basicAuthRestClientService: BasicAuthRestClientService + + @Autowired + lateinit var restClientProperties: BasicAuthRestClientProperties + + + open fun setupServiceEndpoint(): List<ServiceEndpoint> { + return listOf(ServiceEndpoint("Execution service", "http://cds-blueprints-processor-http:8080/api/v1/execution-service/health-check"), + ServiceEndpoint("Template service", "http://cds-blueprints-processor-http:8080/api/v1/template/health-check"), + ServiceEndpoint("Resources service", "http://cds-blueprints-processor-http:8080/api/v1/resources/health-check"), + ServiceEndpoint("SDC Listener service", "http://cds-sdc-listener:8080/api/v1/sdclistener/health-check") + ) + } + + fun retrieveSystemStatus(): HealthApiResponse { + logger.info("Retrieve System Status") + var healthApiResponse: HealthApiResponse + val listOfResponse = mutableListOf<HealthCheckResponse>() + var systemStatus: HealthCheckStatus = HealthCheckStatus.UP + + for (serviceEndpoint in setupServiceEndpoint().parallelStream()) { + var serviceStatus: HealthCheckStatus = retrieveServiceStatus(serviceEndpoint) + if (serviceStatus.equals(HealthCheckStatus.DOWN)) + systemStatus = HealthCheckStatus.DOWN + + listOfResponse.add(HealthCheckResponse(serviceEndpoint.serviceName, serviceStatus)) + } + healthApiResponse = HealthApiResponse(systemStatus, listOfResponse) + return healthApiResponse + } + + private fun retrieveServiceStatus(serviceEndpoint: ServiceEndpoint): HealthCheckStatus { + var serviceStatus: HealthCheckStatus = HealthCheckStatus.UP + try { + addClientPropertiesConfiguration(serviceEndpoint) + val result: BlueprintWebClientService.WebClientResponse<String> = basicAuthRestClientService.exchangeResource(HttpMethod.GET.name, "", "") + if (result == null || result.status != 200) { + serviceStatus = HealthCheckStatus.DOWN + + } + } catch (e: Exception) { + logger.error("service is down" + e) + serviceStatus = HealthCheckStatus.DOWN + + } + return serviceStatus + } + + private fun addClientPropertiesConfiguration(serviceEndpoint: ServiceEndpoint) { + restClientProperties.url = serviceEndpoint.serviceLink + } + + +} diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/resources/application.properties b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/resources/application.properties new file mode 100644 index 000000000..aca95b481 --- /dev/null +++ b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/resources/application.properties @@ -0,0 +1,18 @@ +# +# Copyright � 2019-2020 Orange. +# +# 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. +# + +endpoints.user.name=ccsdkapps +endpoints.user.password=ccsdkapps diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/HealthCheckApplicationTests.kt b/ms/blueprintsprocessor/modules/inbounds/health-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/HealthCheckApplicationTests.kt new file mode 100644 index 000000000..cd02b65dc --- /dev/null +++ b/ms/blueprintsprocessor/modules/inbounds/health-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/HealthCheckApplicationTests.kt @@ -0,0 +1,55 @@ +/* + * Copyright © 2019-2020 Orange. + * + * 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. + */ + +package org.onap.ccsdk.cds.blueprintsprocessor.healthapi + + +import org.junit.Test +import org.junit.runner.RunWith +import org.onap.ccsdk.cds.blueprintsprocessor.core.BluePrintCoreConfiguration +import org.onap.ccsdk.cds.controllerblueprints.core.interfaces.BluePrintCatalogService +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.autoconfigure.security.SecurityProperties +import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest +import org.springframework.context.annotation.ComponentScan +import org.springframework.test.context.ContextConfiguration +import org.springframework.test.context.TestPropertySource +import org.springframework.test.context.junit4.SpringRunner +import org.springframework.test.web.reactive.server.WebTestClient + + +@RunWith(SpringRunner::class) +@WebFluxTest +@ContextConfiguration(classes = [BluePrintCoreConfiguration::class, + BluePrintCatalogService::class, SecurityProperties::class]) +@ComponentScan(basePackages = ["org.onap.ccsdk.cds.blueprintsprocessor", "org.onap.ccsdk.cds.controllerblueprints"]) +@TestPropertySource(locations = ["classpath:application-test.properties"]) +class HealthCheckApplicationTests { + + + @Autowired + lateinit var webTestClient: WebTestClient + + @Test + fun testHealthApiUp() { + val result = webTestClient.get().uri("/api/v1/health") + .exchange() + .expectStatus().is2xxSuccessful + println(result) + } + + +} diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/HealthCheckServiceTest.java b/ms/blueprintsprocessor/modules/inbounds/health-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/HealthCheckServiceTest.java new file mode 100644 index 000000000..8fb5e58fc --- /dev/null +++ b/ms/blueprintsprocessor/modules/inbounds/health-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/HealthCheckServiceTest.java @@ -0,0 +1,137 @@ +/* + * Copyright © 2019-2020 Orange. + * + * 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. + */ + +package org.onap.ccsdk.cds.blueprintsprocessor.healthapi; + + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.anyString; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; +import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.HealthApiResponse; +import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.HealthCheckStatus; +import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.service.HealthCheckService; +import org.onap.ccsdk.cds.blueprintsprocessor.rest.BasicAuthRestClientProperties; +import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BasicAuthRestClientService; +import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BlueprintWebClientService.WebClientResponse; +import org.springframework.http.HttpMethod; + +@RunWith(MockitoJUnitRunner.class) +public class HealthCheckServiceTest { + + @Mock + private BasicAuthRestClientService basicAuthRestClientService; + + @Mock + private BasicAuthRestClientProperties restClientProperties; + + @InjectMocks + private HealthCheckService healthCheckService = new HealthCheckService(); + + @Before + public void setup() { + } + + @Test + public void testSystemIsCompletelyDown() { + + Mockito.when(basicAuthRestClientService.exchangeResource(anyString(), anyString(), anyString())). + thenThrow(new RuntimeException()); + HealthApiResponse healthApiResponse = healthCheckService.retrieveSystemStatus(); + assertNotNull(healthApiResponse); + Assert.assertEquals(healthApiResponse.getStatus(), HealthCheckStatus.DOWN); + healthApiResponse.getChecks().stream().forEach(serviceEndpoint -> { + assertNotNull(serviceEndpoint); + assertEquals(serviceEndpoint.getStatus(), HealthCheckStatus.DOWN); + + }); + + } + + + @Test + public void testSystemIsUPAndRunning() { + + Mockito.when(basicAuthRestClientService.exchangeResource(eq(HttpMethod.GET.name()), anyString(), anyString())). + thenReturn(new WebClientResponse<>(200, "Success")); + HealthApiResponse healthApiResponse = healthCheckService.retrieveSystemStatus(); + assertNotNull(healthApiResponse); + assertEquals(healthApiResponse.getStatus(), HealthCheckStatus.UP); + healthApiResponse.getChecks().stream().forEach(serviceEndpoint -> { + assertNotNull(serviceEndpoint); + assertEquals(serviceEndpoint.getStatus(), HealthCheckStatus.UP); + + }); + + } + + @Test + public void testServiceIsNotFound() { + Mockito.when(basicAuthRestClientService.exchangeResource(eq(HttpMethod.GET.name()), any(), anyString())). + thenReturn(new WebClientResponse<>(404, "failure")); + HealthApiResponse healthApiResponse = healthCheckService.retrieveSystemStatus(); + assertNotNull(healthApiResponse); + assertEquals(healthApiResponse.getStatus(), HealthCheckStatus.DOWN); + healthApiResponse.getChecks().stream().forEach(serviceEndpoint -> { + assertNotNull(serviceEndpoint); + assertEquals(serviceEndpoint.getStatus(), HealthCheckStatus.DOWN); + + }); + + } + + + @Test + public void testServiceInternalServerError() { + Mockito.when(basicAuthRestClientService.exchangeResource(eq(HttpMethod.GET.name()), any(), anyString())) + .thenReturn(new WebClientResponse<>(500, "failure")); + HealthApiResponse healthApiResponse = healthCheckService.retrieveSystemStatus(); + assertNotNull(healthApiResponse); + assertEquals(healthApiResponse.getStatus(), HealthCheckStatus.DOWN); + healthApiResponse.getChecks().stream().forEach(serviceEndpoint -> { + assertNotNull(serviceEndpoint); + assertEquals(serviceEndpoint.getStatus(), HealthCheckStatus.DOWN); + + }); + + } + + @Test + public void testServiceIsRedirected() { + Mockito.when(basicAuthRestClientService.exchangeResource(eq(HttpMethod.GET.name()), any(), anyString())) + .thenReturn(new WebClientResponse<>(300, "failure")); + HealthApiResponse healthApiResponse = healthCheckService.retrieveSystemStatus(); + assertNotNull(healthApiResponse); + assertEquals(healthApiResponse.getStatus(), HealthCheckStatus.DOWN); + healthApiResponse.getChecks().stream().forEach(serviceEndpoint -> { + assertNotNull(serviceEndpoint); + assertEquals(serviceEndpoint.getStatus(), HealthCheckStatus.DOWN); + + }); + + } + +} diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/test/resources/application-test.properties b/ms/blueprintsprocessor/modules/inbounds/health-api/src/test/resources/application-test.properties new file mode 100644 index 000000000..c9a5700c1 --- /dev/null +++ b/ms/blueprintsprocessor/modules/inbounds/health-api/src/test/resources/application-test.properties @@ -0,0 +1,31 @@ +# Copyright © 2019 Bell Canada. +# +# 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. + +blueprintsprocessor.db.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1 +blueprintsprocessor.db.username=sa +blueprintsprocessor.db.password= +blueprintsprocessor.db.driverClassName=org.h2.Driver +blueprintsprocessor.db.hibernateHbm2ddlAuto=create-drop +blueprintsprocessor.db.hibernateDDLAuto=update +blueprintsprocessor.db.hibernateNamingStrategy=org.hibernate.cfg.ImprovedNamingStrategy +blueprintsprocessor.db.hibernateDialect=org.hibernate.dialect.H2Dialect +# Controller Blueprints Core Configuration +blueprintsprocessor.blueprintDeployPath=./target/blueprints/deploy +blueprintsprocessor.blueprintWorkingPath=./target/blueprints/work +blueprintsprocessor.blueprintArchivePath=./target/blueprints/archive + +# Python executor +blueprints.processor.functions.python.executor.executionPath=./../../../../components/scripts/python/ccsdk_blueprints +blueprints.processor.functions.python.executor.modulePaths=./../../../../components/scripts/python/ccsdk_blueprints +server.socket=localhost:8080 diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/test/resources/logback.xml b/ms/blueprintsprocessor/modules/inbounds/health-api/src/test/resources/logback.xml new file mode 100644 index 000000000..ed92b8963 --- /dev/null +++ b/ms/blueprintsprocessor/modules/inbounds/health-api/src/test/resources/logback.xml @@ -0,0 +1,35 @@ +<!-- + ~ Copyright © 2019 Bell Canada + ~ + ~ 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. + --> + +<configuration> + <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> + <!-- encoders are assigned the type + ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> + <encoder> + <pattern>%d{HH:mm:ss.SSS} %-5level %logger{100} - %msg%n</pattern> + </encoder> + </appender> + + + <logger name="org.springframework" level="warn"/> + <logger name="org.hibernate" level="info"/> + <logger name="org.onap.ccsdk.cds.blueprintsprocessor" level="info"/> + + <root level="info"> + <appender-ref ref="STDOUT"/> + </root> + +</configuration> diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/ms/blueprintsprocessor/modules/inbounds/health-api/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 000000000..1f0955d45 --- /dev/null +++ b/ms/blueprintsprocessor/modules/inbounds/health-api/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +mock-maker-inline diff --git a/ms/blueprintsprocessor/modules/inbounds/pom.xml b/ms/blueprintsprocessor/modules/inbounds/pom.xml index 8afecab3c..66fdd95ae 100644 --- a/ms/blueprintsprocessor/modules/inbounds/pom.xml +++ b/ms/blueprintsprocessor/modules/inbounds/pom.xml @@ -33,6 +33,7 @@ <module>designer-api</module> <module>resource-api</module> <module>selfservice-api</module> + <module>health-api</module> </modules> <dependencies> <dependency> diff --git a/ms/blueprintsprocessor/parent/pom.xml b/ms/blueprintsprocessor/parent/pom.xml index e79c497be..c748682a5 100755 --- a/ms/blueprintsprocessor/parent/pom.xml +++ b/ms/blueprintsprocessor/parent/pom.xml @@ -371,6 +371,12 @@ <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId> + <artifactId>health-api</artifactId> + <version>${project.version}</version> + </dependency> + <!-- North Bound --> <dependency> <groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId> |