diff options
author | halil.cakal <halil.cakal@est.tech> | 2023-10-26 18:00:24 +0100 |
---|---|---|
committer | halil.cakal <halil.cakal@est.tech> | 2023-11-14 16:24:38 +0000 |
commit | 34ec9548babc6180e8fd34818fafe73260ec6042 (patch) | |
tree | 88b76627d925d8e736730cb9127a91e06fdfb010 /cps-ncmp-service/src/test/groovy/org | |
parent | 0fdda53aa0dde9ec3a4c1b287b3ff8da4a75da5c (diff) |
Trust level updates with dmi status change
- Change dmi watchdog to store Trustlevel for each DMI
- Corrected query algorithm for TrustLevel Queries
Issue-ID: CPS-1907
Change-Id: I7ca25db8edfd25b72bcda48e4fde1d9be5c56dc0
Signed-off-by: halil.cakal <halil.cakal@est.tech>
Diffstat (limited to 'cps-ncmp-service/src/test/groovy/org')
-rw-r--r-- | cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/client/DmiRestClientSpec.groovy | 65 | ||||
-rw-r--r-- | cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/inventory/CmHandleQueriesImplSpec.groovy | 59 | ||||
-rw-r--r-- | cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/trustlevel/TrustLevelTest.groovy (renamed from cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/trustlevel/TrustLevelFilterSpec.groovy) | 30 | ||||
-rw-r--r-- | cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/trustlevel/dmiavailability/DmiPluginWatchDogSpec.groovy (renamed from cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/trustlevel/dmiavailability/DMiPluginWatchDogSpec.groovy) | 38 |
4 files changed, 90 insertions, 102 deletions
diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/client/DmiRestClientSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/client/DmiRestClientSpec.groovy index 80c0a27bf7..c9ba5645fb 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/client/DmiRestClientSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/client/DmiRestClientSpec.groovy @@ -25,8 +25,8 @@ 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.config.NcmpConfiguration.DmiProperties; 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 @@ -45,35 +45,30 @@ import static org.onap.cps.ncmp.api.impl.operations.OperationType.PATCH import static org.onap.cps.ncmp.api.impl.operations.OperationType.CREATE @SpringBootTest -@ContextConfiguration(classes = [NcmpConfiguration.DmiProperties, DmiRestClient, ObjectMapper]) +@ContextConfiguration(classes = [DmiProperties, DmiRestClient, ObjectMapper]) class DmiRestClientSpec extends Specification { @SpringBean RestTemplate mockRestTemplate = Mock(RestTemplate) @Autowired + NcmpConfiguration.DmiProperties dmiProperties + + @Autowired DmiRestClient objectUnderTest @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 responseFromRestTemplate = Mock(ResponseEntity) def 'DMI POST operation with JSON.'() { - given: 'the rest template returns a valid response entity' - mockRestTemplate.postForEntity(resourceUrl, _ as HttpEntity, Object.class) >> mockResponseEntity + given: 'the rest template returns a valid response entity for the expected parameters' + mockRestTemplate.postForEntity('my url', _ as HttpEntity, Object.class) >> responseFromRestTemplate when: 'POST operation is invoked' - def result = objectUnderTest.postOperationWithJsonData(resourceUrl, 'json-data', READ) + def result = objectUnderTest.postOperationWithJsonData('my url', 'some json', READ) then: 'the output of the method is equal to the output from the test template' - result == mockResponseEntity + result == responseFromRestTemplate } def 'Failing DMI POST operation.'() { @@ -93,40 +88,34 @@ class DmiRestClientSpec extends Specification { operation << [CREATE, READ, PATCH] } - def 'Get dmi plugin health status #scenario'() { - given: 'a health check response data as jsonNode' + def 'Dmi trust level is determined by spring boot health status'() { + given: 'a health check response' 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' + ((ObjectNode) jsonNode).put('status', 'my status') 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 + when: 'get trust level of the dmi plugin' + def result = objectUnderTest.getDmiHealthStatus('some url') + then: 'the correct trust level is returned' + assert result == 'my status' } 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 + given: 'rest template with #scenario' + mockRestTemplate.getForObject(*_) >> healthStatusResponse + when: 'attempt to get health status of the dmi plugin' + def result = objectUnderTest.getDmiHealthStatus('some url') + then: 'result will be EMPTY_STRING "" ' + assert result == '' + where: 'the following values are used' + scenario | healthStatusResponse + 'null' | null + 'exception' | {throw new Exception()} } 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' diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/inventory/CmHandleQueriesImplSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/inventory/CmHandleQueriesImplSpec.groovy index 1da3a55a59..2f9d264947 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/inventory/CmHandleQueriesImplSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/inventory/CmHandleQueriesImplSpec.groovy @@ -23,28 +23,27 @@ package org.onap.cps.ncmp.api.impl.inventory import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevel import org.onap.cps.spi.utils.CpsValidator - import static org.onap.cps.ncmp.api.impl.ncmppersistence.NcmpPersistence.NCMP_DATASPACE_NAME import static org.onap.cps.ncmp.api.impl.ncmppersistence.NcmpPersistence.NCMP_DMI_REGISTRY_ANCHOR import static org.onap.cps.ncmp.api.impl.ncmppersistence.NcmpPersistence.NCMP_DMI_REGISTRY_PARENT import static org.onap.cps.spi.FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS import static org.onap.cps.spi.FetchDescendantsOption.OMIT_DESCENDANTS - -import com.hazelcast.map.IMap -import org.onap.cps.ncmp.api.impl.inventory.CmHandleQueriesImpl -import org.onap.cps.ncmp.api.impl.inventory.CmHandleState -import org.onap.cps.ncmp.api.impl.inventory.DataStoreSyncState import org.onap.cps.spi.CpsDataPersistenceService import org.onap.cps.spi.model.DataNode import spock.lang.Shared import spock.lang.Specification class CmHandleQueriesImplSpec extends Specification { - def cpsDataPersistenceService = Mock(CpsDataPersistenceService) + + def mockCpsDataPersistenceService = Mock(CpsDataPersistenceService) + + def trustLevelPerDmiPlugin = [:] + + def trustLevelPerCmHandle = [ 'PNFDemo': TrustLevel.COMPLETE, 'PNFDemo2': TrustLevel.NONE, 'PNFDemo4': TrustLevel.NONE ] + def mockCpsValidator = Mock(CpsValidator) - def trustLevelPerCmHandle = [ 'my completed cm handle': TrustLevel.COMPLETE, 'my untrusted cm handle': TrustLevel.NONE ] - def objectUnderTest = new CmHandleQueriesImpl(cpsDataPersistenceService, trustLevelPerCmHandle, mockCpsValidator) + def objectUnderTest = new CmHandleQueriesImpl(mockCpsDataPersistenceService, trustLevelPerDmiPlugin, trustLevelPerCmHandle, mockCpsValidator) @Shared def static sampleDataNodes = [new DataNode()] @@ -74,13 +73,17 @@ class CmHandleQueriesImplSpec extends Specification { } def 'Query cm handles on trust level'() { - given: 'query properties for trustlevel COMPLETE' + given: 'query properties for trust level COMPLETE' def trustLevelPropertyQueryPairs = ['trustLevel' : TrustLevel.COMPLETE.toString()] - when: 'the query is executed' + and: 'the dmi cache has been initialised and "knows" about my-dmi-plugin-identifier' + trustLevelPerDmiPlugin.put('my-dmi-plugin-identifier', TrustLevel.COMPLETE) + and: 'the DataNodes queried for a given cpsPath are returned from the persistence service' + mockResponses() + when: 'the query is run' def result = objectUnderTest.queryCmHandlesByTrustLevel(trustLevelPropertyQueryPairs) - then: 'the result only contains the completed cm handle' + then: 'the result contain trusted PNFDemo' assert result.size() == 1 - assert result[0] == 'my completed cm handle' + assert result[0] == 'PNFDemo' } def 'Query CmHandles using empty public properties query pair.'() { @@ -99,7 +102,7 @@ class CmHandleQueriesImplSpec extends Specification { def 'Query CmHandles by a private field\'s value.'() { given: 'a data node exists with a certain additional-property' - cpsDataPersistenceService.queryDataNodes(_, _, dataNodeWithPrivateField, _) >> [pnfDemo5] + mockCpsDataPersistenceService.queryDataNodes(_, _, dataNodeWithPrivateField, _) >> [pnfDemo5] when: 'a query on CmHandle private properties is executed using a map' def result = objectUnderTest.queryCmHandleAdditionalProperties(['Contact3': 'newemailforstore3@bookstore.com']) then: 'one cm handle is returned' @@ -110,7 +113,7 @@ class CmHandleQueriesImplSpec extends Specification { given: 'a cm handle state to query' def cmHandleState = CmHandleState.ADVISED and: 'the persistence service returns a list of data nodes' - cpsDataPersistenceService.queryDataNodes(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, + mockCpsDataPersistenceService.queryDataNodes(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, '//state[@cm-handle-state="ADVISED"]/ancestor::cm-handles', INCLUDE_ALL_DESCENDANTS) >> sampleDataNodes when: 'cm handles are fetched by state' def result = objectUnderTest.queryCmHandlesByState(cmHandleState) @@ -122,7 +125,7 @@ class CmHandleQueriesImplSpec extends Specification { given: 'a cm handle state to compare' def cmHandleState = state and: 'the persistence service returns a list of data nodes' - cpsDataPersistenceService.getDataNodes(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, + mockCpsDataPersistenceService.getDataNodes(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, NCMP_DMI_REGISTRY_PARENT + '/cm-handles[@id=\'some-cm-handle\']/state', OMIT_DESCENDANTS) >> [new DataNode(leaves: ['cm-handle-state': 'READY'])] when: 'cm handles are compared by state' @@ -139,7 +142,7 @@ class CmHandleQueriesImplSpec extends Specification { given: 'a cm handle state to query' def cmHandleState = CmHandleState.READY and: 'cps data service returns a list of data nodes' - cpsDataPersistenceService.getDataNodes(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, + mockCpsDataPersistenceService.getDataNodes(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, NCMP_DMI_REGISTRY_PARENT + '/cm-handles[@id=\'some-cm-handle\']/state', OMIT_DESCENDANTS) >> [new DataNode(leaves: ['cm-handle-state': 'READY'])] when: 'cm handles are fetched by state and id' @@ -152,7 +155,7 @@ class CmHandleQueriesImplSpec extends Specification { given: 'a cm handle state to query' def cmHandleState = CmHandleState.READY and: 'cps data service returns a list of data nodes' - cpsDataPersistenceService.queryDataNodes(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, + mockCpsDataPersistenceService.queryDataNodes(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, '//state/datastores/operational[@sync-state="'+'UNSYNCHRONIZED'+'"]/ancestor::cm-handles', OMIT_DESCENDANTS) >> sampleDataNodes when: 'cm handles are fetched by the UNSYNCHRONIZED operational sync state' def result = objectUnderTest.queryCmHandlesByOperationalSyncState(DataStoreSyncState.UNSYNCHRONIZED) @@ -165,7 +168,7 @@ class CmHandleQueriesImplSpec extends Specification { def cmHandleDataNode = new DataNode(xpath: 'xpath', leaves: ['cm-handle-state': 'LOCKED']) def cpsPath = '//cps-path' and: 'cps data service returns a valid data node' - cpsDataPersistenceService.queryDataNodes(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, + mockCpsDataPersistenceService.queryDataNodes(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, cpsPath + '/ancestor::cm-handles', INCLUDE_ALL_DESCENDANTS) >> Arrays.asList(cmHandleDataNode) when: 'get cm handles by cps path is invoked' @@ -186,15 +189,15 @@ class CmHandleQueriesImplSpec extends Specification { } void mockResponses() { - cpsDataPersistenceService.queryDataNodes(_, _, '//public-properties[@name=\"Contact\" and @value=\"newemailforstore@bookstore.com\"]/ancestor::cm-handles', _) >> [pnfDemo, pnfDemo2, pnfDemo4] - cpsDataPersistenceService.queryDataNodes(_, _, '//public-properties[@name=\"wont_match\" and @value=\"wont_match\"]/ancestor::cm-handles', _) >> [] - cpsDataPersistenceService.queryDataNodes(_, _, '//public-properties[@name=\"Contact2\" and @value=\"newemailforstore2@bookstore.com\"]/ancestor::cm-handles', _) >> [pnfDemo4] - cpsDataPersistenceService.queryDataNodes(_, _, '//public-properties[@name=\"Contact2\" and @value=\"\"]/ancestor::cm-handles', _) >> [] - cpsDataPersistenceService.queryDataNodes(_, _, '//state[@cm-handle-state=\"READY\"]/ancestor::cm-handles', _) >> [pnfDemo, pnfDemo3] - cpsDataPersistenceService.queryDataNodes(_, _, '//state[@cm-handle-state=\"LOCKED\"]/ancestor::cm-handles', _) >> [pnfDemo2, pnfDemo4] - cpsDataPersistenceService.queryDataNodes(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, '/dmi-registry/cm-handles[@dmi-service-name=\'my-dmi-plugin-identifier\']', OMIT_DESCENDANTS) >> [pnfDemo, pnfDemo2] - cpsDataPersistenceService.queryDataNodes(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, '/dmi-registry/cm-handles[@dmi-data-service-name=\'my-dmi-plugin-identifier\']', OMIT_DESCENDANTS) >> [pnfDemo, pnfDemo4] - cpsDataPersistenceService.queryDataNodes(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, '/dmi-registry/cm-handles[@dmi-model-service-name=\'my-dmi-plugin-identifier\']', OMIT_DESCENDANTS) >> [pnfDemo2, pnfDemo4] + mockCpsDataPersistenceService.queryDataNodes(_, _, '//public-properties[@name=\"Contact\" and @value=\"newemailforstore@bookstore.com\"]/ancestor::cm-handles', _) >> [pnfDemo, pnfDemo2, pnfDemo4] + mockCpsDataPersistenceService.queryDataNodes(_, _, '//public-properties[@name=\"wont_match\" and @value=\"wont_match\"]/ancestor::cm-handles', _) >> [] + mockCpsDataPersistenceService.queryDataNodes(_, _, '//public-properties[@name=\"Contact2\" and @value=\"newemailforstore2@bookstore.com\"]/ancestor::cm-handles', _) >> [pnfDemo4] + mockCpsDataPersistenceService.queryDataNodes(_, _, '//public-properties[@name=\"Contact2\" and @value=\"\"]/ancestor::cm-handles', _) >> [] + mockCpsDataPersistenceService.queryDataNodes(_, _, '//state[@cm-handle-state=\"READY\"]/ancestor::cm-handles', _) >> [pnfDemo, pnfDemo3] + mockCpsDataPersistenceService.queryDataNodes(_, _, '//state[@cm-handle-state=\"LOCKED\"]/ancestor::cm-handles', _) >> [pnfDemo2, pnfDemo4] + mockCpsDataPersistenceService.queryDataNodes(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, '/dmi-registry/cm-handles[@dmi-service-name=\'my-dmi-plugin-identifier\']', OMIT_DESCENDANTS) >> [pnfDemo, pnfDemo2] + mockCpsDataPersistenceService.queryDataNodes(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, '/dmi-registry/cm-handles[@dmi-data-service-name=\'my-dmi-plugin-identifier\']', OMIT_DESCENDANTS) >> [pnfDemo, pnfDemo4] + mockCpsDataPersistenceService.queryDataNodes(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, '/dmi-registry/cm-handles[@dmi-model-service-name=\'my-dmi-plugin-identifier\']', OMIT_DESCENDANTS) >> [pnfDemo2, pnfDemo4] } def static createDataNode(dataNodeId) { diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/trustlevel/TrustLevelFilterSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/trustlevel/TrustLevelTest.groovy index 8f6621d24d..9971f6307c 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/trustlevel/TrustLevelFilterSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/trustlevel/TrustLevelTest.groovy @@ -1,6 +1,6 @@ /* - * ============LICENSE_START======================================================= - * Copyright (C) 2023 Nordix Foundation + * ============LICENSE_START======================================================== + * Copyright (c) 2023 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -9,7 +9,7 @@ * 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, + * 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. @@ -20,22 +20,18 @@ package org.onap.cps.ncmp.api.impl.trustlevel - import spock.lang.Specification -class TrustLevelFilterSpec extends Specification { - - def targetTrustLevel = TrustLevel.COMPLETE - - def trustLevelPerCmHandle = [ 'my completed cm handle': TrustLevel.COMPLETE, 'my untrusted cm handle': TrustLevel.NONE ] +class TrustLevelTest extends Specification { - def objectUnderTest = new TrustLevelFilter(targetTrustLevel, trustLevelPerCmHandle) - - def 'Obtain cm handle ids by a given trust level value'() { - when: 'cm handles are retrieved' - def result = objectUnderTest.getAllCmHandleIdsByTargetTrustLevel() - then: 'the result only contains the completed cm handle' - assert result.size() == 1 - assert result[0] == 'my completed cm handle' + def 'Get effective trust level between this and other.'() { + expect: 'the lower of two is returned' + assert effectiveLevel == current.getEffectiveTrustLevel(other) + where: 'the following trust level is used' + current | other || effectiveLevel + TrustLevel.COMPLETE | TrustLevel.NONE || TrustLevel.NONE + TrustLevel.NONE | TrustLevel.COMPLETE || TrustLevel.NONE + TrustLevel.COMPLETE | TrustLevel.COMPLETE || TrustLevel.COMPLETE } + } diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/trustlevel/dmiavailability/DMiPluginWatchDogSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/trustlevel/dmiavailability/DmiPluginWatchDogSpec.groovy index b6259bdf35..2771c4df13 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/trustlevel/dmiavailability/DMiPluginWatchDogSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/trustlevel/dmiavailability/DmiPluginWatchDogSpec.groovy @@ -24,27 +24,27 @@ import org.onap.cps.ncmp.api.impl.client.DmiRestClient import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevel import spock.lang.Specification -class DMiPluginWatchDogSpec extends Specification { +class DmiPluginWatchDogSpec extends Specification { - - def mockTrustLevelPerDmiPlugin = Mock(Map<String, TrustLevel>) def mockDmiRestClient = Mock(DmiRestClient) - def objectUnderTest = new DMiPluginWatchDog(mockTrustLevelPerDmiPlugin, mockDmiRestClient) - - - def 'watch dmi plugin aliveness'() { - given: 'the dmi client returns aliveness for #dmi1Status' - mockDmiRestClient.getDmiPluginStatus('dmi1') >> dmi1Status - and: 'trust level cache returns dmi1' - mockTrustLevelPerDmiPlugin.keySet() >> {['dmi1'] as Set} - when: 'watch dog started' - objectUnderTest.watchDmiPluginAliveness() - then: 'trust level cache has been populated with #dmi1TrustLevel for dmi1' - 1 * mockTrustLevelPerDmiPlugin.put('dmi1', dmi1TrustLevel) - where: 'the following parameter are used' - scenario | dmi1Status || dmi1TrustLevel - 'dmi1 is UP' | DmiPluginStatus.UP || TrustLevel.COMPLETE - 'dmi1 is DOWN' | DmiPluginStatus.DOWN || TrustLevel.NONE + def trustLevelPerDmiPlugin = [:] + + def objectUnderTest = new DmiPluginWatchDog(mockDmiRestClient, trustLevelPerDmiPlugin) + + def 'watch dmi plugin health status for #dmiHealhStatus'() { + given: 'the cache has been initialised and "knows" about dmi-1' + trustLevelPerDmiPlugin.put('dmi-1',null) + and: 'dmi client returns health status #dmiHealhStatus' + mockDmiRestClient.getDmiHealthStatus('dmi-1') >> dmiHealhStatus + when: 'dmi watch dog method runs' + objectUnderTest.watchDmiPluginTrustLevel() + then: 'the result is as expected' + assert trustLevelPerDmiPlugin.get('dmi-1') == expectedResult + where: 'the following health status is used' + dmiHealhStatus || expectedResult + 'UP' || TrustLevel.COMPLETE + 'Other' || TrustLevel.NONE + null || TrustLevel.NONE } } |