/** * Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.util.async; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; import org.testng.annotations.Test; import com.opengamma.util.test.TestGroup; /** * Tests the {@link BlockingOperation} class. */ @Test(groups = TestGroup.INTEGRATION) public class BlockingOperationTest { public void testDefaultState() { assertTrue(BlockingOperation.isOn()); assertFalse(BlockingOperation.isOff()); } public void testSingleCall() { BlockingOperation.off(); try { assertFalse(BlockingOperation.isOn()); assertTrue(BlockingOperation.isOff()); } finally { BlockingOperation.on(); } } public void testNestedCall() { BlockingOperation.off(); try { assertFalse(BlockingOperation.isOn()); assertTrue(BlockingOperation.isOff()); testSingleCall(); assertFalse(BlockingOperation.isOn()); assertTrue(BlockingOperation.isOff()); } finally { BlockingOperation.on(); } } private static void operation(final boolean willBlock) { if (willBlock) { BlockingOperation.wouldBlock(); } } public void testBlockingCallWithBlockingOn() { operation(true); } public void testBlockingCallWithBlockingOff() { BlockingOperation.off(); try { operation(true); fail(); } catch (BlockingOperation e) { assertNotNull(e); } finally { BlockingOperation.on(); } } public void testNonBlockingCallWithBlockingOn() { operation(false); } public void testNonBlockingCallWithBlockingOff() { BlockingOperation.off(); try { operation(false); } catch (BlockingOperation e) { fail(); } finally { BlockingOperation.on(); } } }