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 | |
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>
14 files changed, 606 insertions, 60 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 diff --git a/packages/docker/src/main/docker/Dockerfile b/packages/docker/src/main/docker/Dockerfile index 2277bc77..39d9ff06 100644 --- a/packages/docker/src/main/docker/Dockerfile +++ b/packages/docker/src/main/docker/Dockerfile @@ -73,7 +73,7 @@ RUN unzip -o install-drools.zip && \ chmod 600 $POLICY_HOME/config/* && \ rm -f $POLICY_INSTALL/*.conf && \ . $POLICY_HOME/etc/profile.d/env.sh && \ - $POLICY_HOME/bin/features install healthcheck distributed-locking lifecycle && \ + $POLICY_HOME/bin/features install healthcheck distributed-locking lifecycle no-locking && \ $POLICY_HOME/bin/features enable lifecycle && \ find $HOME/.m2/ -name _maven.repositories -exec rm -v {} \; && \ find $HOME/.m2/ -name _remote.repositories -exec rm -v {} \; && \ diff --git a/packages/install/pom.xml b/packages/install/pom.xml index c16a9a56..e11718db 100644 --- a/packages/install/pom.xml +++ b/packages/install/pom.xml @@ -139,6 +139,12 @@ <version>${project.version}</version> <type>zip</type> </dependency> + <dependency> + <groupId>org.onap.policy.drools-pdp</groupId> + <artifactId>feature-no-locking</artifactId> + <version>${project.version}</version> + <type>zip</type> + </dependency> </dependencies> </project> diff --git a/policy-core/pom.xml b/policy-core/pom.xml index af01bc93..33a9e12b 100644 --- a/policy-core/pom.xml +++ b/policy-core/pom.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- ============LICENSE_START======================================================= - ONAP Policy Engine - Drools PDP + ONAP ================================================================================ Copyright (C) 2017-2021 AT&T Intellectual Property. All rights reserved. Modifications Copyright (C) 2019 Bell Canada. @@ -164,7 +164,7 @@ <excludes> </excludes> <consoleOutput>true</consoleOutput> - <failsOnViolation>true</failsOnViolation> + <failOnViolation>true</failOnViolation> <violationSeverity>warning</violationSeverity> </configuration> </execution> diff --git a/policy-core/src/main/java/org/onap/policy/drools/core/lock/AlwaysSuccessLock.java b/policy-core/src/main/java/org/onap/policy/drools/core/lock/AlwaysSuccessLock.java new file mode 100644 index 00000000..6b1e1494 --- /dev/null +++ b/policy-core/src/main/java/org/onap/policy/drools/core/lock/AlwaysSuccessLock.java @@ -0,0 +1,64 @@ +/* + * ============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.drools.core.lock; + +import lombok.NonNull; + +/** + * Lock implementation whose operations always succeed. + */ +public class AlwaysSuccessLock extends LockImpl { + private static final long serialVersionUID = 1L; + + /** + * Overrides parent constructor. + */ + public AlwaysSuccessLock() { + setState(LockState.ACTIVE); + } + + /** + * Overrides parent constructor. + */ + public AlwaysSuccessLock(@NonNull LockState state, @NonNull String resourceId, + @NonNull String ownerKey, int holdSec, @NonNull LockCallback callback) { + super(state, resourceId, ownerKey, holdSec, callback); + if (!isActive()) { + throw new IllegalArgumentException("AlwaysSuccessLock can only be created in the active state"); + } + } + + /** + * Constructs the object. + */ + public AlwaysSuccessLock(@NonNull String resourceId, @NonNull String ownerKey, + int holdSec, @NonNull LockCallback callback) { + super(LockState.ACTIVE, resourceId, ownerKey, holdSec, callback); + } + + /** + * Always returns true. + */ + @Override + public synchronized boolean free() { + return true; + } +} diff --git a/policy-core/src/test/java/org/onap/policy/drools/core/lock/AlwaysFailLockTest.java b/policy-core/src/test/java/org/onap/policy/drools/core/lock/AlwaysFailLockTest.java index 06489a5c..178ef0af 100644 --- a/policy-core/src/test/java/org/onap/policy/drools/core/lock/AlwaysFailLockTest.java +++ b/policy-core/src/test/java/org/onap/policy/drools/core/lock/AlwaysFailLockTest.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP * ================================================================================ - * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved. + * 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. @@ -21,73 +21,29 @@ package org.onap.policy.drools.core.lock; import static org.assertj.core.api.Assertions.assertThatCode; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; import org.junit.Before; import org.junit.Test; -public class AlwaysFailLockTest { - private static final String RESOURCE = "hello"; - private static final String OWNER_KEY = "world"; - private static final int HOLD_SEC = 10; - private static final int HOLD_SEC2 = 10; +public class AlwaysFailLockTest extends AlwaysLockBaseTest<AlwaysFailLock> { - private LockCallback callback; - private AlwaysFailLock lock; - - /** - * Populates {@link #lock}. - */ @Before public void setUp() { callback = mock(LockCallback.class); - lock = new AlwaysFailLock(RESOURCE, OWNER_KEY, HOLD_SEC, callback); } @Test - public void testSerializable() throws Exception { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try (ObjectOutputStream oos = new ObjectOutputStream(baos)) { - oos.writeObject(lock); - } - - ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); - try (ObjectInputStream ois = new ObjectInputStream(bais)) { - lock = (AlwaysFailLock) ois.readObject(); - } - - assertEquals(LockState.UNAVAILABLE, lock.getState()); - assertEquals(RESOURCE, lock.getResourceId()); - assertEquals(OWNER_KEY, lock.getOwnerKey()); - assertEquals(HOLD_SEC, lock.getHoldSec()); - - // these fields are transient - assertNull(lock.getCallback()); - } - - @Test public void testAlwaysFailLockNoArgs() { - // verify that no-arg constructor doesn't throw an exception - assertThatCode(() -> new AlwaysFailLock()).doesNotThrowAnyException(); + assertThatCode(AlwaysFailLock::new).doesNotThrowAnyException(); } @Test - public void testAlwaysFailLock() { + public void testUnavailableLock() { assertTrue(lock.isUnavailable()); - assertEquals(RESOURCE, lock.getResourceId()); - assertEquals(OWNER_KEY, lock.getOwnerKey()); - assertEquals(HOLD_SEC, lock.getHoldSec()); - assertSame(callback, lock.getCallback()); } @Test @@ -95,13 +51,4 @@ public class AlwaysFailLockTest { assertFalse(lock.free()); assertTrue(lock.isUnavailable()); } - - @Test - public void testExtend() { - LockCallback callback2 = mock(LockCallback.class); - lock.extend(HOLD_SEC2, callback2); - - assertEquals(HOLD_SEC2, lock.getHoldSec()); - assertSame(callback2, lock.getCallback()); - } } diff --git a/policy-core/src/test/java/org/onap/policy/drools/core/lock/AlwaysLockBaseTest.java b/policy-core/src/test/java/org/onap/policy/drools/core/lock/AlwaysLockBaseTest.java new file mode 100644 index 00000000..1091b260 --- /dev/null +++ b/policy-core/src/test/java/org/onap/policy/drools/core/lock/AlwaysLockBaseTest.java @@ -0,0 +1,71 @@ +/* + * ============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.drools.core.lock; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import org.junit.Test; + +public abstract class AlwaysLockBaseTest<T extends LockImpl> { + protected static final String RESOURCE = "hello"; + protected static final String OWNER_KEY = "world"; + protected static final int HOLD_SEC = 10; + protected static final int HOLD_SEC2 = 10; + + protected LockCallback callback; + protected T lock; + + @Test + public void testSerializable() throws Exception { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try (ObjectOutputStream oos = new ObjectOutputStream(baos)) { + oos.writeObject(lock); + } + + ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); + T lock2; + try (ObjectInputStream ois = new ObjectInputStream(bais)) { + lock2 = (T) ois.readObject(); + } + + assertEquals(lock.getState(), lock2.getState()); + assertEquals(lock.getResourceId(), lock2.getResourceId()); + assertEquals(lock.getOwnerKey(), lock2.getOwnerKey()); + assertEquals(lock.getHoldSec(), lock2.getHoldSec()); + + // these fields are transient + assertNull(lock2.getCallback()); + } + + @Test + public void testAlwaysLockData() { + assertEquals(RESOURCE, lock.getResourceId()); + assertEquals(OWNER_KEY, lock.getOwnerKey()); + assertEquals(HOLD_SEC, lock.getHoldSec()); + assertSame(callback, lock.getCallback()); + } +} diff --git a/policy-core/src/test/java/org/onap/policy/drools/core/lock/AlwaysSuccessLockTest.java b/policy-core/src/test/java/org/onap/policy/drools/core/lock/AlwaysSuccessLockTest.java new file mode 100644 index 00000000..32889484 --- /dev/null +++ b/policy-core/src/test/java/org/onap/policy/drools/core/lock/AlwaysSuccessLockTest.java @@ -0,0 +1,69 @@ +/* + * ============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.drools.core.lock; + +import static org.assertj.core.api.Assertions.assertThatCode; +import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; + +import org.junit.Before; +import org.junit.Test; + +public class AlwaysSuccessLockTest extends AlwaysLockBaseTest<AlwaysSuccessLock> { + + @Before + public void setUp() { + callback = mock(LockCallback.class); + lock = new AlwaysSuccessLock(RESOURCE, OWNER_KEY, HOLD_SEC, callback); + } + + @Test + public void testAlwaysSuccessLockConstructors() { + assertThatCode(AlwaysSuccessLock::new).doesNotThrowAnyException(); + assertThatCode(() -> new AlwaysSuccessLock(LockState.ACTIVE, RESOURCE, OWNER_KEY, HOLD_SEC, callback)) + .doesNotThrowAnyException(); + assertThatIllegalArgumentException() + .isThrownBy(() -> new AlwaysSuccessLock(LockState.UNAVAILABLE, RESOURCE, OWNER_KEY, HOLD_SEC, callback)); + } + + @Test + public void testActiveLock() { + assertTrue(lock.isActive()); + } + + @Test + public void testFree() { + assertTrue(lock.free()); + assertTrue(lock.isActive()); + } + + @Test + public void testExtend() { + LockCallback callback2 = mock(LockCallback.class); + lock.extend(HOLD_SEC2, callback2); + + assertEquals(HOLD_SEC2, lock.getHoldSec()); + assertSame(callback2, lock.getCallback()); + } +} diff --git a/policy-management/src/main/java/org/onap/policy/drools/system/PolicyEngineManager.java b/policy-management/src/main/java/org/onap/policy/drools/system/PolicyEngineManager.java index 1b2c13a1..25601c8b 100644 --- a/policy-management/src/main/java/org/onap/policy/drools/system/PolicyEngineManager.java +++ b/policy-management/src/main/java/org/onap/policy/drools/system/PolicyEngineManager.java @@ -290,6 +290,7 @@ class PolicyEngineManager implements PolicyEngine { try { this.lockManager = feature.beforeCreateLockManager(this, properties); if (this.lockManager != null) { + logger.info("overridden lock manager is {}", this.lockManager); return; } } catch (RuntimeException e) { @@ -305,6 +306,8 @@ class PolicyEngineManager implements PolicyEngine { this.lockManager = new SimpleLockManager(this, new Properties()); } + logger.info("lock manager is {}", this.lockManager); + /* policy-engine dispatch post operation hook */ FeatureApiUtils.apply(getEngineProviders(), feature -> feature.afterCreateLockManager(this, properties, this.lockManager), @@ -74,6 +74,7 @@ <module>feature-mdc-filters</module> <module>feature-lifecycle</module> <module>feature-drools-init</module> + <module>feature-no-locking</module> <module>packages</module> </modules> |