package com.github.mongobee.dao; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.junit.Test; import com.github.fakemongo.Fongo; import com.mongodb.DB; import com.mongodb.client.MongoDatabase; /** * @author colsson11 * @since 13.01.15 */ public class LockDaoTest { private static final String TEST_SERVER = "testServer"; private static final String DB_NAME = "mongobeetest"; @Test public void shouldGetLockWhenNotPreviouslyHeld() throws Exception { // given MongoDatabase db = new Fongo(TEST_SERVER).getDatabase(DB_NAME); LockDao dao = new LockDao(); dao.intitializeLock(db); // when boolean hasLock = dao.acquireLock(db); // then assertTrue(hasLock); } @Test public void shouldNotGetLockWhenPreviouslyHeld() throws Exception { // given MongoDatabase db = new Fongo(TEST_SERVER).getDatabase(DB_NAME); LockDao dao = new LockDao(); dao.intitializeLock(db); // when dao.acquireLock(db); boolean hasLock = dao.acquireLock(db); // then assertFalse(hasLock); } @Test public void shouldGetLockWhenPreviouslyHeldAndReleased() throws Exception { // given MongoDatabase db = new Fongo(TEST_SERVER).getDatabase(DB_NAME); LockDao dao = new LockDao(); dao.intitializeLock(db); // when dao.acquireLock(db); dao.releaseLock(db); boolean hasLock = dao.acquireLock(db); // then assertTrue(hasLock); } @Test public void releaseLockShouldBeIdempotent() { // given MongoDatabase db = new Fongo(TEST_SERVER).getDatabase(DB_NAME); LockDao dao = new LockDao(); dao.intitializeLock(db); // when dao.releaseLock(db); dao.releaseLock(db); boolean hasLock = dao.acquireLock(db); // then assertTrue(hasLock); } @Test public void whenLockNotHeldCheckReturnsFalse() { MongoDatabase db = new Fongo(TEST_SERVER).getDatabase(DB_NAME); LockDao dao = new LockDao(); dao.intitializeLock(db); assertFalse(dao.isLockHeld(db)); } @Test public void whenLockHeldCheckReturnsTrue() { MongoDatabase db = new Fongo(TEST_SERVER).getDatabase(DB_NAME); LockDao dao = new LockDao(); dao.intitializeLock(db); dao.acquireLock(db); assertTrue(dao.isLockHeld(db)); } }