package com.aol.micro.server.curator.lock;
import java.io.IOException;
import java.util.Properties;
import java.util.UUID;
import org.apache.zookeeper.server.ServerConfig;
import org.apache.zookeeper.server.ZooKeeperServerMain;
import org.apache.zookeeper.server.admin.AdminServer.AdminServerException;
import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import com.aol.micro.server.dist.lock.DistributedLockService;
public class IntegrationTest {
private CuratorDistributedLockServiceProvider provider;
private ZooKeeperServerMain zooKeeperServer;
@Before
public void initialize() {
Properties startupProperties = new Properties();
startupProperties.put("dataDir", "/tmp/zookeeper");
startupProperties.put("clientPort", "12181");
QuorumPeerConfig quorumConfiguration = new QuorumPeerConfig();
try {
quorumConfiguration.parseProperties(startupProperties);
} catch(Exception e) {
throw new RuntimeException(e);
}
zooKeeperServer = new ZooKeeperServerMain();
final ServerConfig configuration = new ServerConfig();
configuration.readFrom(quorumConfiguration);
new Thread(() -> {
try {
zooKeeperServer.runFromConfig(configuration);
} catch (IOException | AdminServerException e) {
e.printStackTrace();
}
}).start();
provider = new CuratorDistributedLockServiceProvider("localhost:12181", "1000", "1", "/test");
}
@Test
public void lock() {
final String lockName = UUID.randomUUID().toString();
DistributedLockService lock = provider.getDistributedLock(10000);
Assert.assertTrue(lock.tryLock(lockName));
Assert.assertTrue(lock.tryLock(lockName));
DistributedLockService lock2 = provider.getDistributedLock(10000);
Assert.assertFalse(lock2.tryLock(lockName));
}
}