@Test(expected = ProcessExecutionException.class)
	public void testExecutionFail() throws ProcessExecutionException, ExecutionException {

		IProcessComponent<Void> decoratedComponent = TestUtil.executionFailComponent(true);
		IProcessComponent<Void> busyComponent = new BusyComponent(decoratedComponent);
		AsyncComponent<Void> ac = new AsyncComponent<Void>(busyComponent);

		Future<?> future = null;
		try {
			future = ac.execute();
		} catch (InvalidProcessStateException | ProcessExecutionException ex1) {
			fail();
		}

		try {
			future.get();
		} catch (InterruptedException ex) {
			fail(ex.getMessage());
		} catch (ExecutionException ex) {
			if (ex.getCause() instanceof ProcessExecutionException) {
				// expected, throw
				throw (ProcessExecutionException) ex.getCause();
			} else {
				throw ex;
			}
		} finally {
			assertTrue(ac.getState() == ProcessState.EXECUTION_FAILED);
			assertTrue(ac.getState() == decoratedComponent.getState());
		}
	}