package org.multiverse.stms.gamma.integration.blocking; import org.junit.Before; import org.junit.Test; import org.multiverse.stms.gamma.GammaStm; import org.multiverse.stms.gamma.transactionalobjects.GammaTxnLong; import org.multiverse.stms.gamma.transactionalobjects.txnlong.TxnLongAwaitThread; import static org.multiverse.TestUtils.assertAlive; import static org.multiverse.TestUtils.sleepMs; import static org.multiverse.api.GlobalStmInstance.getGlobalStmInstance; import static org.multiverse.api.TxnThreadLocal.clearThreadLocalTxn; public class BlockingTest { private GammaStm stm; @Before public void setUp() { stm = (GammaStm) getGlobalStmInstance(); clearThreadLocalTxn(); } @Test public void whenDesiredValueNotAvailable_thenThreadBlocks() { GammaTxnLong ref = new GammaTxnLong(stm, 0); TxnLongAwaitThread t = new TxnLongAwaitThread(ref, 1); t.start(); sleepMs(1000); assertAlive(t); } @Test public void whenDesiredValueStillNotAvailable_thenThreadBlocks() { GammaTxnLong ref = new GammaTxnLong(stm, 0); TxnLongAwaitThread t = new TxnLongAwaitThread(ref, 2); t.start(); sleepMs(2000); ref.atomicSet(1); sleepMs(1000); assertAlive(t); } }