package org.onap.cps.ncmp.api.impl.client
+import com.fasterxml.jackson.databind.JsonNode
+import com.fasterxml.jackson.databind.ObjectMapper
+import com.fasterxml.jackson.databind.node.ObjectNode
import org.onap.cps.ncmp.api.impl.config.NcmpConfiguration
import org.onap.cps.ncmp.api.impl.exception.HttpClientRequestException
+import org.onap.cps.ncmp.api.impl.trustlevel.dmiavailability.DmiPluginStatus
+import org.onap.cps.ncmp.utils.TestUtils
import org.spockframework.spring.SpringBean
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.http.HttpEntity
+import org.springframework.http.HttpHeaders
import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity
import org.springframework.test.context.ContextConfiguration
import static org.onap.cps.ncmp.api.impl.operations.OperationType.CREATE
@SpringBootTest
-@ContextConfiguration(classes = [NcmpConfiguration.DmiProperties, DmiRestClient])
+@ContextConfiguration(classes = [NcmpConfiguration.DmiProperties, DmiRestClient, ObjectMapper])
class DmiRestClientSpec extends Specification {
@SpringBean
@Autowired
DmiRestClient objectUnderTest
- def resourceUrl = 'some url'
+ @Autowired
+ ObjectMapper objectMapper
+
+ def resourceUrl = 'some url'
def mockResponseEntity = Mock(ResponseEntity)
+ def dmiProperties = new NcmpConfiguration.DmiProperties()
+
+ def setup() {
+ dmiProperties.authUsername = 'test user'
+ dmiProperties.authPassword = 'test pass'
+ dmiProperties.dmiBasePath = 'dmi'
+ }
def 'DMI POST operation with JSON.'() {
given: 'the rest template returns a valid response entity'
operation << [CREATE, READ, PATCH]
}
+ def 'Get dmi plugin health status #scenario'() {
+ given: 'a health check response data as jsonNode'
+ def dmiPluginHealthCheckResponseJsonData = TestUtils.getResourceFileContent('dmiPluginHealthCheckResponse.json')
+ def jsonNode = objectMapper.readValue(dmiPluginHealthCheckResponseJsonData, JsonNode.class)
+ ((ObjectNode) jsonNode).put('status', dmiAliveness);
+ and: 'the rest template return a valid json node'
+ mockRestTemplate.getForObject(*_) >> {jsonNode}
+ when: 'get aliveness of the dmi plugin'
+ def result = objectUnderTest.getDmiPluginStatus(resourceUrl)
+ then: 'return value is equal to result of rest template call'
+ result == expectedResult
+ where: 'the following dmi aliveness are being used'
+ scenario | dmiAliveness || expectedResult
+ 'dmi plugin is UP' | 'UP' || DmiPluginStatus.UP
+ 'dmi plugin is DOWN' | 'DOWN' || DmiPluginStatus.DOWN
+ }
+
+ def 'Failing to get dmi plugin health status #scenario'() {
+ given: 'the rest template return null'
+ mockRestTemplate.getForObject(*_) >> {getResponse}
+ when: 'get aliveness of the dmi plugin'
+ def result = objectUnderTest.getDmiPluginStatus(resourceUrl)
+ then: 'return value is equal to result of rest template call'
+ result == expectedResult
+ where: 'the following dmi responses are being used'
+ scenario | getResponse || expectedResult
+ 'get response is null' | null || DmiPluginStatus.DOWN
+ 'get response throws exception' | {throw new Exception()} || DmiPluginStatus.DOWN
+ }
+
+ def 'Basic auth header #scenario'() {
+ when: 'Specific dmi properties are provided'
+ dmiProperties.dmiBasicAuthEnabled = authEnabled
+ objectUnderTest.dmiProperties = dmiProperties
+ then: 'http headers to conditionally have Authorization header'
+ assert (objectUnderTest.configureHttpHeaders(new HttpHeaders()).get('Authorization') != null) == isPresentInHttpHeader
+ where: 'the following configurations are used'
+ scenario | authEnabled || isPresentInHttpHeader
+ 'auth enabled' | true || true
+ 'auth disabled' | false || false
+ }
+
}