package org.zstack.test.storage.primary;
import org.zstack.header.storage.primary.*;
import org.zstack.utils.Utils;
import org.zstack.utils.logging.CLogger;
public class PrimaryStorageChangeStateExtension implements PrimaryStorageChangeStateExtensionPoint {
CLogger logger = Utils.getLogger(PrimaryStorageChangeStateExtension.class);
boolean beforeCalled = false;
boolean afterCalled = false;
boolean preventChange = false;
PrimaryStorageState expectedCurrent;
PrimaryStorageState expectedNext;
PrimaryStorageStateEvent expectedStateEvent;
@Override
public void preChangePrimaryStorageState(PrimaryStorageInventory inv, PrimaryStorageStateEvent evt, PrimaryStorageState nextState) throws PrimaryStorageException {
if (this.isPreventChange()) {
throw new PrimaryStorageException("Prevent changing primary storage state on purpose");
}
}
@Override
public void beforeChangePrimaryStorageState(PrimaryStorageInventory inv, PrimaryStorageStateEvent evt, PrimaryStorageState nextState) {
if (inv.getState().equals(this.expectedCurrent.toString()) && evt == this.expectedStateEvent && nextState == this.expectedNext) {
this.beforeCalled = true;
} else {
String err = String.format("beforeChangePrimaryStorageState: expected current state: %s state event: %s next state: %s but got current: %s event: %s next: %s", this.expectedCurrent, this.expectedStateEvent, this.expectedNext, inv.getState(), evt, nextState);
logger.warn(err);
}
}
@Override
public void afterChangePrimaryStorageState(PrimaryStorageInventory inv, PrimaryStorageStateEvent evt, PrimaryStorageState previousState) {
if (inv.getState().equals(this.expectedNext.toString()) && evt == this.expectedStateEvent && previousState == this.expectedCurrent) {
this.afterCalled = true;
} else {
String err = String.format("afterChangePrimaryStorageState: expected current state: %s state event: %s previous state: %s but got current: %s event: %s previous: %s", this.expectedNext, this.expectedStateEvent, this.expectedCurrent, inv.getState(), evt, previousState);
logger.warn(err);
}
}
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;
}
public PrimaryStorageState getExpectedCurrent() {
return expectedCurrent;
}
public void setExpectedCurrent(PrimaryStorageState expectedCurrent) {
this.expectedCurrent = expectedCurrent;
}
public PrimaryStorageState getExpectedNext() {
return expectedNext;
}
public void setExpectedNext(PrimaryStorageState expectedNext) {
this.expectedNext = expectedNext;
}
public PrimaryStorageStateEvent getExpectedStateEvent() {
return expectedStateEvent;
}
public void setExpectedStateEvent(PrimaryStorageStateEvent expectedStateEvent) {
this.expectedStateEvent = expectedStateEvent;
}
}