package org.zstack.test.aop;
import org.springframework.beans.factory.annotation.Autowired;
import org.zstack.core.cloudbus.CloudBus;
import org.zstack.core.errorcode.ErrorFacade;
import org.zstack.header.AbstractService;
import org.zstack.header.errorcode.ErrorCode;
import org.zstack.header.message.Message;
import org.zstack.utils.Utils;
import org.zstack.utils.logging.CLogger;
public class ManInTheMiddleService extends AbstractService {
private static final CLogger logger = Utils.getLogger(ManInTheMiddleService.class);
public static final String SERVICE_ID = "ManInTheMiddle";
@Autowired
private CloudBus bus;
@Autowired
private ErrorFacade errf;
@Override
public boolean start() {
bus.registerService(this);
return true;
}
@Override
public boolean stop() {
bus.unregisterService(this);
return true;
}
@Override
public void handleMessage(Message msg) {
String behavior = msg.getHeaderEntry(CloudBusAopProxy.MESSAGE_BEHAVIOR);
if (CloudBusAopProxy.Behavior.FAIL.toString().equals(behavior)) {
ErrorCode err = errf.stringToOperationError("unit test asks it to fail");
bus.replyErrorByMessageType(msg, err);
} else if (CloudBusAopProxy.Behavior.TIMEOUT.toString().equals(behavior)) {
logger.debug(String.format("drop message[%s, %s] as unit test ask it to time out", msg.getMessageName(), msg.getId()));
} else {
bus.dealWithUnknownMessage(msg);
}
}
@Override
public String getId() {
return SERVICE_ID;
}
}