package org.zstack.test.compute.cluster; import org.zstack.header.cluster.*; import org.zstack.utils.Utils; import org.zstack.utils.logging.CLogger; public class ClusteChangeStateExtension implements ClusterChangeStateExtensionPoint { CLogger logger = Utils.getLogger(ClusteChangeStateExtension.class); private ClusterState expectedCurrent; private ClusterState expectedNext; private ClusterStateEvent expectedStateEvent; private boolean isBeforeSuccess = false; private boolean isAfterSuccess = false; private boolean preventChange = false; @Override public void preChangeClusterState(ClusterInventory inventory, ClusterStateEvent event, ClusterState nextState) throws ClusterException { if (this.preventChange) { throw new ClusterException("Prevent changing cluster state on purpose"); } } @Override public void beforeChangeClusterState(ClusterInventory inventory, ClusterStateEvent event, ClusterState nextState) { if (inventory.getState().equals(this.expectedCurrent.toString()) && event == this.expectedStateEvent && nextState == this.expectedNext) { this.isBeforeSuccess = true; } else { String err = String.format("beforeChangeClusterState: 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 afterChangeClusterState(ClusterInventory inventory, ClusterStateEvent event, ClusterState previousState) { if (inventory.getState().equals(this.expectedNext.toString()) && event == this.expectedStateEvent && previousState == this.expectedCurrent) { this.isAfterSuccess = true; } else { String err = String.format("afterChangeClusterState: expected previous state: %s state event:%s current state:%s, but got previous:%s event: %s current :%s", this.expectedCurrent, this.expectedStateEvent, this.expectedNext, previousState, event, inventory.getState()); logger.warn(err); } } public ClusterState getExpectedCurrent() { return expectedCurrent; } public void setExpectedCurrent(ClusterState expectedCurrent) { this.expectedCurrent = expectedCurrent; } public ClusterState getExpectedNext() { return expectedNext; } public void setExpectedNext(ClusterState expectedNext) { this.expectedNext = expectedNext; } public ClusterStateEvent getExpectedStateEvent() { return expectedStateEvent; } public void setExpectedStateEvent(ClusterStateEvent expectedStateEvent) { this.expectedStateEvent = expectedStateEvent; } public boolean isBeforeSuccess() { return isBeforeSuccess; } public void setBeforeSuccess(boolean isBeforeSuccess) { this.isBeforeSuccess = isBeforeSuccess; } public boolean isAfterSuccess() { return isAfterSuccess; } public void setAfterSuccess(boolean isAfterSuccess) { this.isAfterSuccess = isAfterSuccess; } public boolean isPreventChange() { return preventChange; } public void setPreventChange(boolean preventChange) { this.preventChange = preventChange; } }