From 12ed2412adfb9ca6f0302b425dacf7fc8e4860c0 Mon Sep 17 00:00:00 2001 From: "halil.cakal" Date: Mon, 28 Aug 2023 12:25:37 +0100 Subject: [PATCH] Hazelcast cache config stroring trust level per dmi plugin - Add Hazelcast cache config to store trust level per dmi plugin Issue-ID: CPS-1855 Change-Id: Ibe7f8393008ca7352aacddba99ecd19d6e1eb326 Signed-off-by: halil.cakal --- .../embeddedcache/TrustLevelCacheConfig.java | 16 ++++ .../embeddedcache/TrustLevelCacheConfigSpec.groovy | 87 ++++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/config/embeddedcache/TrustLevelCacheConfigSpec.groovy diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/config/embeddedcache/TrustLevelCacheConfig.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/config/embeddedcache/TrustLevelCacheConfig.java index 816fc5067..66f61906d 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/config/embeddedcache/TrustLevelCacheConfig.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/config/embeddedcache/TrustLevelCacheConfig.java @@ -21,8 +21,11 @@ package org.onap.cps.ncmp.api.impl.config.embeddedcache; import com.hazelcast.collection.ISet; +import com.hazelcast.config.MapConfig; import com.hazelcast.config.SetConfig; +import com.hazelcast.map.IMap; import org.onap.cps.cache.HazelcastCacheConfig; +import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevel; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -42,5 +45,18 @@ public class TrustLevelCacheConfig extends HazelcastCacheConfig { "untrustworthyCmHandlesSet"); } + private static final MapConfig trustLevelPerDmiPluginCacheConfig = + createMapConfig("trustLevelPerDmiPluginCacheConfig"); + + /** + * Distributed instance of trust level cache that contains dmi-plugin name by trust level. + * + * @return configured map of dmi-plugin name as keys to trust-level for values. + */ + @Bean + public IMap trustLevelPerDmiPlugin() { + return createHazelcastInstance("hazelcastInstanceTrustLevelPerDmiPluginMap", + trustLevelPerDmiPluginCacheConfig).getMap("trustLevelPerDmiPlugin"); + } } diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/config/embeddedcache/TrustLevelCacheConfigSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/config/embeddedcache/TrustLevelCacheConfigSpec.groovy new file mode 100644 index 000000000..6184a9722 --- /dev/null +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/config/embeddedcache/TrustLevelCacheConfigSpec.groovy @@ -0,0 +1,87 @@ +/* + * ============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. + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.cps.ncmp.api.impl.config.embeddedcache + +import com.hazelcast.config.Config +import com.hazelcast.core.Hazelcast +import com.hazelcast.map.IMap +import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevel +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.context.SpringBootTest +import spock.lang.Specification + +@SpringBootTest(classes = [TrustLevelCacheConfig]) +class TrustLevelCacheConfigSpec extends Specification { + + @Autowired + private IMap trustLevelPerDmiPlugin + + def 'Hazelcast cache for trust level per dmi plugin'() { + expect: 'system is able to create an instance of the trust level per dmi plugin cache' + assert null != trustLevelPerDmiPlugin + and: 'there is at least 1 instance' + assert Hazelcast.allHazelcastInstances.size() > 0 + and: 'Dmi Plugin Trust Level Cache is present' + assert Hazelcast.allHazelcastInstances.name.contains('hazelcastInstanceTrustLevelPerDmiPluginMap') + } + + def 'Verify Trust Level Per Dmi Plugin Cache for basic hazelcast map operations'() { + when: 'the key inserted into Trust Level Per Dmi Plugin Cache' + trustLevelPerDmiPlugin.put('dmi1', TrustLevel.COMPLETE) + trustLevelPerDmiPlugin.put('dmi2', TrustLevel.NONE) + then: 'the value for each dmi can be retrieved' + assert trustLevelPerDmiPlugin.get('dmi1') == TrustLevel.COMPLETE + assert trustLevelPerDmiPlugin.get('dmi2') == TrustLevel.NONE + } + + def 'Verify configs for Distributed Caches'(){ + given: 'the Trust Level Per Dmi Plugin Cache config' + def trustLevelDmiPerPluginCacheConfig = Hazelcast.getHazelcastInstanceByName('hazelcastInstanceTrustLevelPerDmiPluginMap').config + def trustLevelDmiPerPluginCacheMapConfig = trustLevelDmiPerPluginCacheConfig.mapConfigs.get('trustLevelPerDmiPluginCacheConfig') + expect: 'system created instance with correct config' + assert trustLevelDmiPerPluginCacheConfig.clusterName == 'cps-and-ncmp-test-caches' + assert trustLevelDmiPerPluginCacheMapConfig.backupCount == 3 + assert trustLevelDmiPerPluginCacheMapConfig.asyncBackupCount == 3 + } + + def 'Verify deployment network configs for Distributed Caches'() { + given: 'the Trust Level Per Dmi Plugin Cache config' + def trustLevelDmiPerPluginCacheConfig = Hazelcast.getHazelcastInstanceByName('hazelcastInstanceTrustLevelPerDmiPluginMap').config.networkConfig + expect: 'system created instance with correct config' + assert trustLevelDmiPerPluginCacheConfig.join.autoDetectionConfig.enabled + assert !trustLevelDmiPerPluginCacheConfig.join.kubernetesConfig.enabled + } + + def 'Verify network config'() { + given: 'Synchronization config object and test configuration' + def objectUnderTest = new TrustLevelCacheConfig() + def testConfig = new Config() + when: 'kubernetes properties are enabled' + objectUnderTest.cacheKubernetesEnabled = true + objectUnderTest.cacheKubernetesServiceName = 'test-service-name' + and: 'method called to update the discovery mode' + objectUnderTest.updateDiscoveryMode(testConfig) + then: 'applied properties are reflected' + assert testConfig.networkConfig.join.kubernetesConfig.enabled + assert testConfig.networkConfig.join.kubernetesConfig.properties.get('service-name') == 'test-service-name' + } + +} -- 2.16.6