package io.airlift.airship.coordinator;
import com.google.common.base.Preconditions;
import io.airlift.airship.shared.Installation;
import io.airlift.airship.shared.SlotStatus;
import java.util.UUID;
import static io.airlift.airship.shared.SlotLifecycleState.RUNNING;
import static io.airlift.airship.shared.SlotLifecycleState.STOPPED;
import static io.airlift.airship.shared.SlotLifecycleState.TERMINATED;
public class MockRemoteSlot
implements RemoteSlot
{
private SlotStatus slotStatus;
private final MockRemoteAgent mockRemoteAgent;
public MockRemoteSlot(SlotStatus slotStatus, MockRemoteAgent mockRemoteAgent)
{
this.slotStatus = slotStatus;
this.mockRemoteAgent = mockRemoteAgent;
}
@Override
public UUID getId()
{
return slotStatus.getId();
}
@Override
public SlotStatus status()
{
return slotStatus;
}
@Override
public SlotStatus assign(Installation installation)
{
Preconditions.checkNotNull(installation, "installation is null");
slotStatus = slotStatus.changeAssignment(STOPPED, installation.getAssignment(), slotStatus.getResources());
mockRemoteAgent.setSlotStatus(slotStatus);
return slotStatus;
}
@Override
public SlotStatus terminate()
{
if (slotStatus.getState() == STOPPED) {
slotStatus = slotStatus.changeState(TERMINATED);
}
mockRemoteAgent.setSlotStatus(slotStatus);
return slotStatus;
}
@Override
public SlotStatus start()
{
if (slotStatus.getAssignment() == null) {
throw new IllegalStateException("Slot can not be started because the slot is not assigned");
}
slotStatus = slotStatus.changeState(RUNNING);
mockRemoteAgent.setSlotStatus(slotStatus);
return slotStatus;
}
@Override
public SlotStatus restart()
{
if (slotStatus.getAssignment() == null) {
throw new IllegalStateException("Slot can not be restarted because the slot is not assigned");
}
slotStatus = slotStatus.changeState(RUNNING);
mockRemoteAgent.setSlotStatus(slotStatus);
return slotStatus;
}
@Override
public SlotStatus stop()
{
if (slotStatus.getAssignment() == null) {
throw new IllegalStateException("Slot can not be stopped because the slot is not assigned");
}
slotStatus = slotStatus.changeState(STOPPED);
mockRemoteAgent.setSlotStatus(slotStatus);
return slotStatus;
}
@Override
public SlotStatus kill()
{
return stop();
}
}