MachineLifecycleEffectorTasks { public static boolean canStop(StopMode stopMode, Entity entity) { boolean isEntityStopped = entity.getAttribute(SoftwareProcess.SERVICE_STATE_ACTUAL)==Lifecycle.STOPPED; return canStop(stopMode, isEntityStopped); }  void attachLifecycleEffectors(Entity entity); Effector<Void> newStartEffector(); Effector<Void> newRestartEffector(); Effector<Void> newStopEffector(); Effector<Void> newSuspendEffector(); EffectorBody<Void> newStartEffectorTask(); EffectorBody<Void> newRestartEffectorTask(); EffectorBody<Void> newStopEffectorTask(); EffectorBody<Void> newSuspendEffectorTask(); void start(Collection<? extends Location> locations); @SuppressWarnings("deprecation") static String resolveOnBoxDir(EntityInternal entity, MachineLocation machine); void restart(ConfigBag parameters); void stop(ConfigBag parameters); void suspend(ConfigBag parameters); static StopMode getStopMachineMode(ConfigBag parameters); static boolean canStop(StopMode stopMode, Entity entity); static CloseableLatch waitForCloseableLatch(Entity entity, ConfigKey<Boolean> configKey); static final ConfigKey<Boolean> ON_BOX_BASE_DIR_RESOLVED; static final ConfigKey<Collection<? extends Location>> LOCATIONS; static final ConfigKey<Duration> STOP_PROCESS_TIMEOUT; @Beta
    static final ConfigKey<Duration> STOP_WAIT_PROVISIONING_TIMEOUT; @Beta
    static final AttributeSensor<MachineLocation> INTERNAL_PROVISIONED_MACHINE; }
@Test(dataProvider = "canStopStates") public void testBasicSonftwareProcessCanStop(StopMode mode, boolean isEntityStopped, boolean expected) { boolean canStop = canStop(app, mode, isEntityStopped); assertEquals(canStop, expected); }