package org.zstack.test.aop; import junit.framework.Assert; import org.junit.Before; import org.junit.Test; import org.zstack.core.cloudbus.CloudBus; import org.zstack.core.cloudbus.CloudBusCallBack; import org.zstack.core.componentloader.ComponentLoader; import org.zstack.header.message.MessageReply; import org.zstack.header.message.NeedReplyMessage; import org.zstack.test.Api; import org.zstack.test.BeanConstructor; import org.zstack.test.core.cloudbus.FakeNeedReplyMessage; import org.zstack.utils.Utils; import org.zstack.utils.logging.CLogger; import java.util.ArrayList; import java.util.List; public class TestCloudBusProxy { CLogger logger = Utils.getLogger(TestCloudBusProxy.class); Api api; ComponentLoader loader; CloudBus bus; CloudBusAopProxy aop; boolean isSuccess = false; @Before public void setUp() throws Exception { BeanConstructor con = new BeanConstructor(); loader = con.addXml("PortalForUnitTest.xml").addXml("ZoneManager.xml").addXml("ClusterManager.xml").addXml("CloudBusAopProxy.xml").addXml("AccountManager.xml").build(); aop = loader.getComponent(CloudBusAopProxy.class); bus = loader.getComponent(CloudBus.class); api = new Api(); api.startServer(); } @Test public void test() throws InterruptedException { aop.addMessage(NeedReplyMessage.class, CloudBusAopProxy.Behavior.FAIL); List<FakeNeedReplyMessage> msgs = new ArrayList<FakeNeedReplyMessage>(2); FakeNeedReplyMessage msg = new FakeNeedReplyMessage(); msg.setServiceId("A fake service id not needed"); msgs.add(msg); msg = new FakeNeedReplyMessage(); msg.setServiceId("A fake service id not needed"); msgs.add(msg); bus.send(msgs); msg = new FakeNeedReplyMessage(); msg.setServiceId("A fake service id not needed"); bus.send(msg, new CloudBusCallBack(null) { @Override public void run(MessageReply reply) { if (!reply.isSuccess()) { isSuccess = true; } } }); msg = new FakeNeedReplyMessage(); msg.setServiceId("A fake service id not needed"); MessageReply reply = bus.call(msg); Assert.assertFalse(reply.isSuccess()); logger.debug(reply.getError().toString()); Assert.assertTrue(isSuccess); aop.addMessage(NeedReplyMessage.class, CloudBusAopProxy.Behavior.TIMEOUT); msgs.clear(); msg = new FakeNeedReplyMessage(); msg.setServiceId("A fake service id not needed"); msg.setTimeout(1); msgs.add(msg); msg = new FakeNeedReplyMessage(); msg.setServiceId("A fake service id not needed"); msg.setTimeout(1); msgs.add(msg); List<MessageReply> replies = bus.call(msgs); for (MessageReply r : replies) { Assert.assertFalse(r.isSuccess()); } } }