package org.zstack.test.compute.host; import org.zstack.header.host.*; import org.zstack.utils.Utils; import org.zstack.utils.logging.CLogger; public class ChangeHostStateExtension implements HostChangeStateExtensionPoint { private CLogger logger = Utils.getLogger(ChangeHostStateExtension.class); private HostState expectedCurrent; private HostState expectedNext; private HostStateEvent expectedStateEvent; private boolean beforeCalled = false; private boolean afterCalled = false; private boolean preventChange = false; @Override public void preChangeHostState(HostInventory inventory, HostStateEvent event, HostState nextState) throws HostException { if (this.preventChange) { throw new HostException("Prevent changing host state on purpose"); } } @Override public void beforeChangeHostState(HostInventory inventory, HostStateEvent event, HostState nextState) { if (inventory.getState().equals(this.expectedCurrent.toString()) && event == this.expectedStateEvent && nextState == this.expectedNext) { this.beforeCalled = true; } else { String err = String.format("beforeChangeHostState: expected current state: %s state event: %s next state: %s but got current: %s event: %s next: %s", this.expectedCurrent, this.expectedStateEvent, this.expectedNext, inventory.getState(), event, nextState); logger.warn(err); } } @Override public void afterChangeHostState(HostInventory inventory, HostStateEvent event, HostState previousState) { if (inventory.getState().equals(this.expectedNext.toString()) && event == this.expectedStateEvent && previousState == this.expectedCurrent) { this.afterCalled = true; } else { String err = String.format("afterChangeHostState: expected current state: %s state event: %s previous state: %s but got current: %s event: %s previous: %s", this.expectedNext, this.expectedStateEvent, this.expectedCurrent, inventory.getState(), event, previousState); logger.warn(err); } } public HostState getExpectedCurrent() { return expectedCurrent; } public void setExpectedCurrent(HostState expectedCurrent) { this.expectedCurrent = expectedCurrent; } public HostState getExpectedNext() { return expectedNext; } public void setExpectedNext(HostState expectedNext) { this.expectedNext = expectedNext; } public HostStateEvent getExpectedStateEvent() { return expectedStateEvent; } public void setExpectedStateEvent(HostStateEvent expectedStateEvent) { this.expectedStateEvent = expectedStateEvent; } public boolean isBeforeCalled() { return beforeCalled; } public void setBeforeCalled(boolean beforeCalled) { this.beforeCalled = beforeCalled; } public boolean isAfterCalled() { return afterCalled; } public void setAfterCalled(boolean afterCalled) { this.afterCalled = afterCalled; } public boolean isPreventChange() { return preventChange; } public void setPreventChange(boolean preventChange) { this.preventChange = preventChange; } }