1e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov/******************************************************************************* 2b9d1b54e300318b470d9fedccc69d75187016444Evgeny Mandrikov * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors 3e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * All rights reserved. This program and the accompanying materials 4e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * are made available under the terms of the Eclipse Public License v1.0 5e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * which accompanies this distribution, and is available at 6e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * http://www.eclipse.org/legal/epl-v10.html 7e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 8e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Contributors: 9e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Marc R. Hoffmann - initial API and implementation 10e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 11e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov *******************************************************************************/ 1282608019c1e03552fc80df7f70e7f7c5270a0637Marc R. Hoffmannpackage org.jacoco.agent.rt.internal.output; 13e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 14e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport static org.junit.Assert.fail; 15e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 16e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.util.concurrent.Executor; 17e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.util.concurrent.ExecutorService; 18e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.util.concurrent.Executors; 19e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.util.concurrent.Future; 20e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.util.concurrent.TimeUnit; 21e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.util.concurrent.TimeoutException; 22e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 23e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.junit.After; 24e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.junit.Before; 25e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 26e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov/** 27e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Unit tests base for tests that need an {@link Executor} for multithreaded 28e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * test scenarios. 29e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 30e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovpublic abstract class ExecutorTestBase { 31e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 32e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov protected ExecutorService executor; 33e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 34e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov @Before 35e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void setup() throws Exception { 36e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov executor = Executors.newSingleThreadExecutor(); 37e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 38e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 39e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov @After 40e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void teardown() throws Exception { 41e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov executor.shutdown(); 42e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 43e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 44e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov /** 45e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Asserts that the given future blocks. 46e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 47e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @param future 48e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * future to test 49e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @throws Exception 50e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 51e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov protected void assertBlocks(final Future<?> future) throws Exception { 52e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov try { 53e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov future.get(10, TimeUnit.MILLISECONDS); 54e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov fail("Operation should block"); 55e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } catch (TimeoutException e) { 56e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 57e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 58e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 59e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov} 60