### Question:
EnvironmentModifyWorkflow extends CancellableWorkflow<EnvironmentModifyWorkflow.EnvironmentModificationPhase> { @Override public void fail( final String message, final Throwable e ) { environment.setStatus( EnvironmentStatus.UNHEALTHY ); saveEnvironment(); operationTracker.addLogFailed( message ); super.fail( message, e ); } EnvironmentModifyWorkflow( String defaultDomain, IdentityManager identityManager, PeerManager peerManager,
                                      SecurityManager securityManager, LocalEnvironment environment, Topology topology,
                                      Set<String> removedContainers, Map<String, ContainerQuota> changedContainers,
                                      TrackerOperation operationTracker, EnvironmentManagerImpl environmentManager ); EnvironmentModificationPhase INIT(); EnvironmentModificationPhase GENERATE_KEYS(); EnvironmentModificationPhase RESERVE_NET(); EnvironmentModificationPhase SETUP_P2P(); EnvironmentModificationPhase PREPARE_TEMPLATES(); EnvironmentModificationPhase CLONE_CONTAINERS(); EnvironmentModificationPhase CONFIGURE_HOSTS(); EnvironmentModificationPhase CONFIGURE_SSH(); EnvironmentModificationPhase SET_QUOTA(); EnvironmentModificationPhase MODIFY_QUOTA(); EnvironmentModificationPhase DESTROY_CONTAINERS(); EnvironmentModificationPhase REMOVE_HOSTNAMES(); void FINALIZE(); @Override void fail( final String message, final Throwable e ); @Override void onCancellation();  }### Answer:
@Test public void testFail() throws Exception { Throwable throwable = mock( Throwable.class ); workflow.fail( "", throwable ); verify( trackerOperation ).addLogFailed( anyString() ); }