add health-api project 79/95479/3
authorShaaban Ebrahim <shaaban.altanany@gmail.com>
Tue, 10 Sep 2019 16:12:32 +0000 (18:12 +0200)
committerShaaban Ebrahim <shaaban.eltanany.ext@orange.com>
Mon, 16 Sep 2019 14:45:32 +0000 (16:45 +0200)
Issue-ID: CCSDK-1669
Signed-off-by: Shaaban Ebrahim <shaaban.eltanany.ext@orange.com>
Change-Id: I8a05db50e4f896ecc2e040a113d1fc676f139121

18 files changed:
ms/blueprintsprocessor/application/pom.xml
ms/blueprintsprocessor/application/src/test/resources/application.properties
ms/blueprintsprocessor/modules/inbounds/health-api/pom.xml [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/configuration/BasicAuthRestClientServiceConfiguration.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/controller/HealthCheckController.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthApiResponse.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthCheckResponse.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthCheckStatus.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ServiceEndpoint.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/HealthCheckService.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api/src/main/resources/application.properties [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/HealthCheckApplicationTests.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/HealthCheckServiceTest.java [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api/src/test/resources/application-test.properties [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api/src/test/resources/logback.xml [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/pom.xml
ms/blueprintsprocessor/parent/pom.xml

index a4f60f1..655d7ee 100755 (executable)
             <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>
index 766498f..d56e958 100644 (file)
@@ -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 (file)
index 0000000..964de1e
--- /dev/null
@@ -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 (file)
index 0000000..0a97d37
--- /dev/null
@@ -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 (file)
index 0000000..1283ac5
--- /dev/null
@@ -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 (file)
index 0000000..4dac178
--- /dev/null
@@ -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 (file)
index 0000000..acac867
--- /dev/null
@@ -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 (file)
index 0000000..a891a40
--- /dev/null
@@ -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 (file)
index 0000000..8fbc33b
--- /dev/null
@@ -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 (file)
index 0000000..09fdb67
--- /dev/null
@@ -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 (file)
index 0000000..aca95b4
--- /dev/null
@@ -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 (file)
index 0000000..cd02b65
--- /dev/null
@@ -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 (file)
index 0000000..8fb5e58
--- /dev/null
@@ -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 (file)
index 0000000..c9a5700
--- /dev/null
@@ -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 (file)
index 0000000..ed92b89
--- /dev/null
@@ -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 (file)
index 0000000..1f0955d
--- /dev/null
@@ -0,0 +1 @@
+mock-maker-inline
index 8afecab..66fdd95 100644 (file)
@@ -33,6 +33,7 @@
         <module>designer-api</module>
         <module>resource-api</module>
         <module>selfservice-api</module>
+        <module>health-api</module>
     </modules>
     <dependencies>
         <dependency>
index e79c497..c748682 100755 (executable)
                 <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>