package org.multiverse.commitbarriers;
import org.junit.Before;
import org.junit.Test;
import java.util.concurrent.TimeUnit;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.multiverse.TestUtils.sleepMs;
import static org.multiverse.api.TxnThreadLocal.clearThreadLocalTxn;
public class VetoCommitBarrier_setTimeoutTest {
@Before
public void setUp() {
clearThreadLocalTxn();
}
@Test
public void whenNullTimeUnit_thenNullPointerException() {
VetoCommitBarrier barrier = new VetoCommitBarrier();
try {
barrier.setTimeout(10, null);
fail();
} catch (NullPointerException expected) {
}
assertTrue(barrier.isClosed());
}
@Test
public void whenTimedOut() {
VetoCommitBarrier barrier = new VetoCommitBarrier();
barrier.setTimeout(500, TimeUnit.MILLISECONDS);
sleepMs(1000);
assertTrue(barrier.isAborted());
}
@Test
public void whenCommittedBeforeTimeout() {
VetoCommitBarrier barrier = new VetoCommitBarrier();
barrier.setTimeout(500, TimeUnit.MILLISECONDS);
barrier.atomicVetoCommit();
sleepMs(1000);
assertTrue(barrier.isCommitted());
}
@Test
public void whenAbortedBeforeTimeout() {
VetoCommitBarrier barrier = new VetoCommitBarrier();
barrier.setTimeout(500, TimeUnit.MILLISECONDS);
barrier.abort();
sleepMs(1000);
assertTrue(barrier.isAborted());
}
@Test
public void whenCommitted_thenCommitBarrierOpenException() {
VetoCommitBarrier barrier = new VetoCommitBarrier();
barrier.atomicVetoCommit();
try {
barrier.setTimeout(10, TimeUnit.SECONDS);
fail();
} catch (CommitBarrierOpenException expected) {
}
assertTrue(barrier.isCommitted());
}
@Test
public void whenAborted_thenCommitBarrierOpenException() {
VetoCommitBarrier barrier = new VetoCommitBarrier();
barrier.abort();
try {
barrier.setTimeout(10, TimeUnit.SECONDS);
fail();
} catch (CommitBarrierOpenException expected) {
}
assertTrue(barrier.isAborted());
}
}