From: Joseph Keenan Date: Wed, 6 Jul 2022 11:32:25 +0000 (+0000) Subject: Merge "Move persistence methods from NCMPproperty handler" X-Git-Tag: 3.1.0~74 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=71d8c00bd69c833c9f861e9b1f12cadea36b1f1d;hp=43c8d0fee7a900af2b7ca6adcb42037243a47a5a;p=cps.git Merge "Move persistence methods from NCMPproperty handler" --- diff --git a/cps-dependencies/pom.xml b/cps-dependencies/pom.xml index 73cca2391..8a98baf4d 100755 --- a/cps-dependencies/pom.xml +++ b/cps-dependencies/pom.xml @@ -210,6 +210,11 @@ janino 3.1.7 + + com.hazelcast + hazelcast-spring + 4.2.5 + diff --git a/cps-ncmp-service/pom.xml b/cps-ncmp-service/pom.xml index 502e9824d..93c265a7b 100644 --- a/cps-ncmp-service/pom.xml +++ b/cps-ncmp-service/pom.xml @@ -57,6 +57,10 @@ org.mapstruct mapstruct-processor + + com.hazelcast + hazelcast-spring + org.spockframework diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/config/embeddedcache/SynchronizationSemaphoresConfig.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/config/embeddedcache/SynchronizationSemaphoresConfig.java new file mode 100644 index 000000000..978c3d16b --- /dev/null +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/config/embeddedcache/SynchronizationSemaphoresConfig.java @@ -0,0 +1,68 @@ +/* + * ============LICENSE_START======================================================== + * Copyright (C) 2022 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.config.MapConfig; +import com.hazelcast.core.Hazelcast; +import java.util.Map; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Core infrastructure of the hazelcast distributed map for Module Sync and Data Sync use cases. + */ +@Configuration +public class SynchronizationSemaphoresConfig { + + /** + * Module Sync Distributed Map Instance. + * @return Instance of Map + */ + @Bean + public Map moduleSyncSemaphore() { + return Hazelcast.newHazelcastInstance( + initializeDefaultMapConfig("moduleSyncSemaphore", "moduleSyncSemaphoreConfig")) + .getMap("moduleSyncSemaphore"); + } + + /** + * Data Sync Distributed Map Instance. + * @return Instance of Map + */ + @Bean + public Map dataSyncSemaphore() { + return Hazelcast.newHazelcastInstance( + initializeDefaultMapConfig("dataSyncSemaphore", "dataSyncSemaphoreConfig")) + .getMap("dataSyncSemaphore"); + } + + private Config initializeDefaultMapConfig(final String instanceName, final String configName) { + final Config config = new Config(instanceName); + final MapConfig mapConfig = new MapConfig(configName); + mapConfig.setTimeToLiveSeconds(30); + mapConfig.setBackupCount(3); + mapConfig.setAsyncBackupCount(3); + config.addMapConfig(mapConfig); + config.setClusterName("synchronization-semaphores"); + return config; + } +} diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/config/embeddedcache/SynchronizationSemaphoresConfigSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/config/embeddedcache/SynchronizationSemaphoresConfigSpec.groovy new file mode 100644 index 000000000..fe7ed9eeb --- /dev/null +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/config/embeddedcache/SynchronizationSemaphoresConfigSpec.groovy @@ -0,0 +1,49 @@ +/* + * ============LICENSE_START======================================================== + * Copyright (C) 2022 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.core.Hazelcast +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.test.context.ContextConfiguration +import spock.lang.Specification + +@SpringBootTest +@ContextConfiguration(classes = [SynchronizationSemaphoresConfig]) +class SynchronizationSemaphoresConfigSpec extends Specification { + + @Autowired + private Map moduleSyncSemaphore; + + @Autowired + private Map dataSyncSemaphore; + + def 'Embedded Sync Semaphores'() { + expect: 'system is able to create an instance of ModuleSyncSemaphore' + assert null != moduleSyncSemaphore + and: 'system is able to create an instance of DataSyncSemaphore' + assert null != dataSyncSemaphore + and: 'we have 2 instances' + assert Hazelcast.allHazelcastInstances.size() == 2 + and: 'the names match' + assert Hazelcast.allHazelcastInstances.name == ['moduleSyncSemaphore', 'dataSyncSemaphore'] + } +} diff --git a/cps-service/src/test/groovy/org/onap/cps/notification/NotificationErrorHandlerSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/notification/NotificationErrorHandlerSpec.groovy new file mode 100644 index 000000000..4cacc4365 --- /dev/null +++ b/cps-service/src/test/groovy/org/onap/cps/notification/NotificationErrorHandlerSpec.groovy @@ -0,0 +1,41 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2022 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.notification + +import spock.lang.Specification + +class NotificationErrorHandlerSpec extends Specification{ + + NotificationErrorHandler objectUnderTest = new NotificationErrorHandler() + + def 'Logging exception via notification error handler'() { + given: 'redirect system.out to a readable stream' + def systemOutAsStream = new ByteArrayOutputStream() + System.out = new PrintStream(systemOutAsStream) + when: 'some exception occurs' + objectUnderTest.onException(new Exception('sample exception'), 'some context') + then: 'log output results contains the correct error details' + def systemOutAsString = systemOutAsStream.toString() + systemOutAsString.contains('Failed to process') + systemOutAsString.contains('Error cause: sample exception') + systemOutAsString.contains('Error context: [some context]') + } +} +