Moving a distributed lock service unit test to open-source. There are still a few distributed unit tests that haven't been ported to Geode. This one covers a lot of the functionality of the distributed lock service.
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/2c148caa Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/2c148caa Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/2c148caa Branch: refs/heads/develop Commit: 2c148caaf6a484bce065843d4d6ba8e916bd9ad2 Parents: 717ba5c Author: Bruce Schuchardt <bschucha...@pivotal.io> Authored: Mon May 9 15:08:31 2016 -0700 Committer: Bruce Schuchardt <bschucha...@pivotal.io> Committed: Mon May 9 15:09:47 2016 -0700 ---------------------------------------------------------------------- .../distributed/DistributedLockBlackboard.java | 20 + .../DistributedLockBlackboardImpl.java | 97 + .../DistributedLockServiceDUnitTest.java | 3246 ++++++++++++++++++ .../test/dunit/standalone/DUnitLauncher.java | 3 +- 4 files changed, 3365 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2c148caa/geode-core/src/test/java/com/gemstone/gemfire/distributed/DistributedLockBlackboard.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/DistributedLockBlackboard.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/DistributedLockBlackboard.java new file mode 100755 index 0000000..de8809c --- /dev/null +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/DistributedLockBlackboard.java @@ -0,0 +1,20 @@ +package com.gemstone.gemfire.distributed; + +import java.io.Serializable; +import java.rmi.Remote; +import java.rmi.RemoteException; + +/** + * Created by bschuchardt on 5/9/2016. + */ +public interface DistributedLockBlackboard extends Remote, Serializable { + void initCount() throws RemoteException; + + void incCount() throws RemoteException; + + long getCount() throws RemoteException; + + void setIsLocked(boolean isLocked) throws RemoteException; + + boolean getIsLocked() throws RemoteException; +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2c148caa/geode-core/src/test/java/com/gemstone/gemfire/distributed/DistributedLockBlackboardImpl.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/DistributedLockBlackboardImpl.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/DistributedLockBlackboardImpl.java new file mode 100755 index 0000000..6525cd1 --- /dev/null +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/DistributedLockBlackboardImpl.java @@ -0,0 +1,97 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + */ +package com.gemstone.gemfire.distributed; + +import com.gemstone.gemfire.internal.Assert; +import com.gemstone.gemfire.test.dunit.standalone.DUnitLauncher; + +import java.rmi.Naming; +import java.rmi.NotBoundException; +import java.rmi.RemoteException; +import java.rmi.server.UnicastRemoteObject; + + +public class DistributedLockBlackboardImpl extends UnicastRemoteObject implements DistributedLockBlackboard { + public static int Count; + public static int IsLocked; + + public static DistributedLockBlackboard blackboard; + + /** + * Zero-arg constructor for remote method invocations. + */ + public DistributedLockBlackboardImpl() throws RemoteException { + super(); + } + + /** + * Creates a singleton event listeners blackboard. + */ + public static DistributedLockBlackboard getInstance() throws Exception { + if ( blackboard == null ) + initialize(); + return blackboard; + } + private static synchronized void initialize() throws Exception { + if ( blackboard == null ) { + System.out.println(DUnitLauncher.RMI_PORT_PARAM + "=" + System.getProperty(DUnitLauncher.RMI_PORT_PARAM)); + int namingPort = Integer.getInteger(DUnitLauncher.RMI_PORT_PARAM).intValue(); + String name = "//localhost:" + namingPort + "/" + "DistributedLockBlackboard"; + try { + blackboard = (DistributedLockBlackboard)Naming.lookup(name); + } catch (NotBoundException e) { + // create the master blackboard in this VM + blackboard = new DistributedLockBlackboardImpl(); + Naming.bind(name, blackboard); + } + } + } + + @Override + public synchronized void initCount() { + Count = 0; + } + + @Override + public synchronized void incCount() { + Count = Count + 1; + } + + + @Override + public synchronized long getCount() { + return Count; + } + + @Override + public synchronized void setIsLocked(boolean isLocked) { + if (isLocked) { + if (IsLocked < 1) IsLocked = 1; + } else { + if (IsLocked > 0) IsLocked = 0; + } + } + + @Override + public synchronized boolean getIsLocked() { + long isLocked = IsLocked; + Assert.assertTrue(isLocked == 0 || isLocked == 1, + "DistributedLockBlackboard internal error - IsLocked is " + isLocked); + return isLocked == 1; + } + +}