diff options
author | jhh <jorge.hernandez-herrero@att.com> | 2021-03-09 10:01:17 -0600 |
---|---|---|
committer | jhh <jorge.hernandez-herrero@att.com> | 2021-03-09 15:03:32 -0600 |
commit | 149df90bb72ece740accaf3ea037cf40defcd1bd (patch) | |
tree | f0895c1729c06403abecadca1065d3dfc25de35f /feature-no-locking | |
parent | dd9d31e90873e12623865fb21bf2e4603e3e0f19 (diff) |
add no locking feature
It provides an interface to applications for locking
purposes that always succeeds. It does not deny
acquiring resource locks.
Issue-ID: POLICY-3114
Signed-off-by: jhh <jorge.hernandez-herrero@att.com>
Change-Id: I6aebb5f40e4176e0ff7b0e6c6d4042a79dd0b7a3
Signed-off-by: jhh <jorge.hernandez-herrero@att.com>
Diffstat (limited to 'feature-no-locking')
5 files changed, 385 insertions, 0 deletions
diff --git a/feature-no-locking/pom.xml b/feature-no-locking/pom.xml new file mode 100644 index 00000000..202f3c13 --- /dev/null +++ b/feature-no-locking/pom.xml @@ -0,0 +1,116 @@ +<!-- + ============LICENSE_START======================================================= + ONAP + ================================================================================ + Copyright (C) 2021 AT&T Intellectual Property. All rights reserved. + ================================================================================ + 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. + ============LICENSE_END========================================================= + --> + +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.onap.policy.drools-pdp</groupId> + <artifactId>drools-pdp</artifactId> + <version>1.8.1-SNAPSHOT</version> + </parent> + + <artifactId>feature-no-locking</artifactId> + + <name>feature-no-locking</name> + <description>Loadable module that provides no locking capability</description> + + <build> + <plugins> + <plugin> + <artifactId>maven-assembly-plugin</artifactId> + <executions> + <execution> + <id>zipfile</id> + <goals> + <goal>single</goal> + </goals> + <phase>package</phase> + <configuration> + <attach>true</attach> + <finalName>${project.artifactId}-${project.version}</finalName> + <descriptors> + <descriptor>src/assembly/assemble_zip.xml</descriptor> + </descriptors> + <appendAssemblyId>false</appendAssemblyId> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-dependency-plugin</artifactId> + <executions> + <execution> + <id>copy-dependencies</id> + <goals> + <goal>copy-dependencies</goal> + </goals> + <phase>prepare-package</phase> + <configuration> + <outputDirectory>${project.build.directory}/assembly/lib</outputDirectory> + <overWriteReleases>false</overWriteReleases> + <overWriteSnapshots>true</overWriteSnapshots> + <overWriteIfNewer>true</overWriteIfNewer> + <useRepositoryLayout>false</useRepositoryLayout> + <addParentPoms>false</addParentPoms> + <copyPom>false</copyPom> + <includeScope>runtime</includeScope> + <excludeTransitive>true</excludeTransitive> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + + <dependencies> + <dependency> + <groupId>org.onap.policy.drools-pdp</groupId> + <artifactId>policy-core</artifactId> + <version>${project.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.onap.policy.drools-pdp</groupId> + <artifactId>policy-management</artifactId> + <version>${project.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.assertj</groupId> + <artifactId>assertj-core</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.powermock</groupId> + <artifactId>powermock-api-mockito2</artifactId> + <scope>test</scope> + </dependency> + </dependencies> + +</project> diff --git a/feature-no-locking/src/assembly/assemble_zip.xml b/feature-no-locking/src/assembly/assemble_zip.xml new file mode 100644 index 00000000..2c74fc00 --- /dev/null +++ b/feature-no-locking/src/assembly/assemble_zip.xml @@ -0,0 +1,76 @@ +<!-- + ============LICENSE_START======================================================= + ONAP + ================================================================================ + Copyright (C) 2021 AT&T Intellectual Property. All rights reserved. + ================================================================================ + 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. + ============LICENSE_END========================================================= + --> + +<!-- Defines how we build the .zip file which is our distribution. --> + +<assembly + xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> + + <id>feature-no-locking</id> + <formats> + <format>zip</format> + </formats> + + <includeBaseDirectory>false</includeBaseDirectory> + + <fileSets> + <fileSet> + <directory>target</directory> + <outputDirectory>lib/feature</outputDirectory> + <includes> + <include>feature-no-locking-${project.version}.jar</include> + </includes> + </fileSet> + <fileSet> + <directory>target/assembly/lib</directory> + <outputDirectory>lib/dependencies</outputDirectory> + <includes> + <include>*.jar</include> + </includes> + </fileSet> + <fileSet> + <directory>src/main/feature/config</directory> + <outputDirectory>config</outputDirectory> + <fileMode>0644</fileMode> + <excludes/> + </fileSet> + <fileSet> + <directory>src/main/feature/bin</directory> + <outputDirectory>bin</outputDirectory> + <fileMode>0744</fileMode> + <excludes/> + </fileSet> + <fileSet> + <directory>src/main/feature/db</directory> + <outputDirectory>db</outputDirectory> + <fileMode>0744</fileMode> + <excludes/> + </fileSet> + <fileSet> + <directory>src/main/feature/install</directory> + <outputDirectory>install</outputDirectory> + <fileMode>0744</fileMode> + <excludes/> + </fileSet> + </fileSets> + +</assembly>
\ No newline at end of file diff --git a/feature-no-locking/src/main/java/org/onap/policy/no/locking/NoLockManager.java b/feature-no-locking/src/main/java/org/onap/policy/no/locking/NoLockManager.java new file mode 100644 index 00000000..1fa44391 --- /dev/null +++ b/feature-no-locking/src/main/java/org/onap/policy/no/locking/NoLockManager.java @@ -0,0 +1,96 @@ +/* + * ============LICENSE_START======================================================= + * ONAP + * ================================================================================ + * Copyright (C) 2021 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.no.locking; + +import java.util.Properties; +import lombok.NoArgsConstructor; +import lombok.ToString; +import org.onap.policy.drools.core.lock.AlwaysSuccessLock; +import org.onap.policy.drools.core.lock.Lock; +import org.onap.policy.drools.core.lock.LockCallback; +import org.onap.policy.drools.core.lock.PolicyResourceLockManager; +import org.onap.policy.drools.features.PolicyEngineFeatureApi; +import org.onap.policy.drools.system.PolicyEngine; + +/** + * In contrast with other implementations the no-lock manager provides non-synchronized access + * to resources. + */ + +@NoArgsConstructor +@ToString +public class NoLockManager implements PolicyResourceLockManager, PolicyEngineFeatureApi { + + protected static final int SEQNO = 2000; + + @Override + public Lock createLock(String resourceId, String ownerKey, int holdSec, + LockCallback callback, boolean waitForLock) { + AlwaysSuccessLock successLock = new AlwaysSuccessLock(resourceId, ownerKey, holdSec, callback); + successLock.notifyAvailable(); + return successLock; + } + + @Override + public boolean lock() { + return true; + } + + @Override + public boolean unlock() { + return true; + } + + @Override + public boolean isLocked() { + return false; + } + + @Override + public boolean start() { + return true; + } + + @Override + public boolean stop() { + return true; + } + + @Override + public void shutdown() { + // nothing to do + } + + @Override + public boolean isAlive() { + return true; + } + + @Override + public int getSequenceNumber() { + return SEQNO; + } + + @Override + public PolicyResourceLockManager beforeCreateLockManager(PolicyEngine engine, Properties properties) { + return this; + } +} diff --git a/feature-no-locking/src/main/resources/META-INF.services/org.onap.policy.drools.features.PolicyEngineFeatureApi b/feature-no-locking/src/main/resources/META-INF.services/org.onap.policy.drools.features.PolicyEngineFeatureApi new file mode 100644 index 00000000..e8a5d79f --- /dev/null +++ b/feature-no-locking/src/main/resources/META-INF.services/org.onap.policy.drools.features.PolicyEngineFeatureApi @@ -0,0 +1 @@ +org.onap.policy.no.locking.NoLockManager
\ No newline at end of file diff --git a/feature-no-locking/src/test/java/org/onap/policy/no/locking/NoLockManagerTest.java b/feature-no-locking/src/test/java/org/onap/policy/no/locking/NoLockManagerTest.java new file mode 100644 index 00000000..bae9d109 --- /dev/null +++ b/feature-no-locking/src/test/java/org/onap/policy/no/locking/NoLockManagerTest.java @@ -0,0 +1,96 @@ +/* + * ============LICENSE_START======================================================= + * ONAP + * ================================================================================ + * Copyright (C) 2021 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.no.locking; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; + +import org.junit.Before; +import org.junit.Test; +import org.onap.policy.drools.core.lock.AlwaysSuccessLock; +import org.onap.policy.drools.core.lock.Lock; +import org.onap.policy.drools.core.lock.LockCallback; + +public class NoLockManagerTest { + + private NoLockManager nlm; + private LockCallback callback; + + @Before + public void setUp() { + callback = mock(LockCallback.class); + nlm = new NoLockManager(); + } + + @Test + public void testLock() { + assertTrue(nlm.lock()); + } + + @Test + public void testUnlock() { + assertTrue(nlm.unlock()); + } + + @Test + public void testIsLocked() { + assertFalse(nlm.isLocked()); + } + + @Test + public void testStart() { + assertTrue(nlm.start()); + } + + @Test + public void testStop() { + assertTrue(nlm.stop()); + } + + @Test + public void testIsAlive() { + assertTrue(nlm.isAlive()); + } + + @Test + public void testGetSeqNo() { + assertEquals(NoLockManager.SEQNO, nlm.getSequenceNumber()); + } + + @Test + public void testBeforeCreateLockManager() { + assertEquals(nlm, nlm.beforeCreateLockManager(null, null)); + } + + @Test + public void testCreateLock() { + Lock lock = nlm.createLock("x", "y", 1, callback, false); + assertTrue(lock.isActive()); + assertTrue(lock instanceof AlwaysSuccessLock); + verify(callback).lockAvailable(lock); + verify(callback, never()).lockUnavailable(any()); + } +}
\ No newline at end of file |