package org.multiverse.commitbarriers;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.multiverse.TestThread;
import java.util.concurrent.TimeUnit;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.multiverse.TestUtils.*;
import static org.multiverse.api.TxnThreadLocal.clearThreadLocalTxn;
public class CountDownCommitBarrier_tryAwaitOpenUninterruptiblyTest {
private CountDownCommitBarrier barrier;
@Before
public void setUp() {
clearThreadLocalTxn();
clearCurrentThreadInterruptedStatus();
}
@After
public void tearDown() {
clearCurrentThreadInterruptedStatus();
}
@Test
public void whenNullTimeout_thenNullPointerException() {
barrier = new CountDownCommitBarrier(1);
try {
barrier.tryAwaitOpenUninterruptibly(1, null);
fail();
} catch (NullPointerException expected) {
}
assertTrue(barrier.isClosed());
}
@Test
@Ignore
public void whenInterruptedWhileWaiting() {
}
@Test
public void whenCommittedWhileWaiting() throws InterruptedException {
barrier = new CountDownCommitBarrier(1);
TestThread t = new TestThread() {
@Override
public void doRun() throws Exception {
boolean result = barrier.tryAwaitOpenUninterruptibly(1, TimeUnit.DAYS);
assertTrue(result);
}
};
t.start();
sleepMs(500);
assertAlive(t);
barrier.countDown();
t.join();
assertNothingThrown(t);
assertTrue(barrier.isCommitted());
}
@Test
@Ignore
public void whenAbortedWhileWaiting() {
}
@Test
@Ignore
public void whenTimeout() {
}
@Test
public void whenCommitted() {
barrier = new CountDownCommitBarrier(0);
boolean result = barrier.tryAwaitOpenUninterruptibly(1, TimeUnit.DAYS);
assertTrue(result);
assertTrue(barrier.isCommitted());
}
@Test
public void whenAborted() {
barrier = new CountDownCommitBarrier(1);
barrier.abort();
boolean result = barrier.tryAwaitOpenUninterruptibly(1, TimeUnit.DAYS);
assertTrue(result);
assertTrue(barrier.isAborted());
}
}