@Test
	public void testExecutionSuccess() throws ExecutionException {

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

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

		try {
			future.get();
		} catch (InterruptedException ex) {
			fail(ex.getMessage());
		} catch (ExecutionException ex) {
			if (ex.getCause() instanceof ProcessExecutionException) {
				fail("Should execute successfully.");
			} else {
				throw ex;
			}
		}

		assertTrue(ac.getState() == ProcessState.EXECUTION_SUCCEEDED);
		assertTrue(ac.getState() == decoratedComponent.getState());
	}