Hazelcast cache config stroring trust level per dmi plugin 33/135833/4
authorhalil.cakal <halil.cakal@est.tech>
Mon, 28 Aug 2023 11:25:37 +0000 (12:25 +0100)
committerhalil.cakal <halil.cakal@est.tech>
Thu, 31 Aug 2023 10:18:23 +0000 (11:18 +0100)
- Add Hazelcast cache config to store trust level
  per dmi plugin

Issue-ID: CPS-1855
Change-Id: Ibe7f8393008ca7352aacddba99ecd19d6e1eb326
Signed-off-by: halil.cakal <halil.cakal@est.tech>
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/config/embeddedcache/TrustLevelCacheConfig.java
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/config/embeddedcache/TrustLevelCacheConfigSpec.groovy [new file with mode: 0644]

index 816fc50..66f6190 100644 (file)
 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<String, TrustLevel> 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 (file)
index 0000000..6184a97
--- /dev/null
@@ -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<String, TrustLevel> 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'
+    }
+
+}