package io.cattle.platform.lock.impl;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import io.cattle.platform.lock.Lock;
import io.cattle.platform.lock.exception.FailedToAcquireLockException;
import org.junit.Test;
public class MultiLockTest {
@Test
public void test_good_lock() {
Lock good = LockTestUtils.goodLock(null);
Lock good2 = LockTestUtils.goodLock(null);
MultiLock multiLock = new MultiLock(null, good, good2);
multiLock.lock();
verify(good, times(0)).tryLock();
verify(good, times(1)).lock();
verify(good2, times(0)).tryLock();
verify(good2, times(1)).lock();
}
@Test
public void test_good_tryLock() {
Lock good = LockTestUtils.goodLock(null);
Lock good2 = LockTestUtils.goodLock(null);
MultiLock multiLock = new MultiLock(null, good, good2);
multiLock.tryLock();
verify(good, times(1)).tryLock();
verify(good, times(0)).lock();
verify(good2, times(1)).tryLock();
verify(good2, times(0)).lock();
}
@Test
public void test_good_unlock() {
Lock good = LockTestUtils.goodLock(null);
Lock good2 = LockTestUtils.goodLock(null);
MultiLock multiLock = new MultiLock(null, good, good2);
multiLock.unlock();
verify(good, times(1)).unlock();
verify(good2, times(1)).unlock();
}
@Test
public void test_bad_lock() {
Lock good = LockTestUtils.goodLock(null);
Lock bad = LockTestUtils.badLock(null);
Lock good2 = LockTestUtils.goodLock(null);
try {
MultiLock multiLock = new MultiLock(null, good, bad, good2);
multiLock.lock();
fail();
} catch (FailedToAcquireLockException e) {
}
verify(good, times(1)).lock();
verify(bad, times(1)).lock();
verify(good2, times(0)).lock();
}
@Test
public void test_bad_trylock() {
Lock good = LockTestUtils.goodLock(null);
Lock bad = LockTestUtils.badLock(null);
Lock good2 = LockTestUtils.goodLock(null);
MultiLock multiLock = new MultiLock(null, good, bad, good2);
assertTrue(!multiLock.tryLock());
verify(good, times(1)).tryLock();
verify(bad, times(1)).tryLock();
verify(good2, times(0)).tryLock();
}
}