package org.zstack.test.core.cloudbus; import junit.framework.Assert; import org.junit.Before; import org.junit.Test; import org.zstack.core.Platform; import org.zstack.core.cloudbus.CloudBusIN; import org.zstack.core.componentloader.ComponentLoader; import org.zstack.core.db.DatabaseFacade; import org.zstack.core.thread.AsyncThread; import org.zstack.header.AbstractService; import org.zstack.header.message.Message; import org.zstack.test.Api; import org.zstack.test.ApiSenderException; import org.zstack.test.BeanConstructor; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; public class TestCloudBusSharding { Api api; ComponentLoader loader; DatabaseFacade dbf; CloudBusIN bus; CountDownLatch latch = new CountDownLatch(1); boolean isSuccess = false; String servId = "FakeService"; CountDownLatch startLatch = new CountDownLatch(1); public static class HelloWorldMsg extends Message { } class FakeService extends AbstractService { @Override public boolean start() { bus.registerService(this); bus.activeService(this); startLatch.countDown(); return true; } @Override public boolean stop() { bus.deActiveService(this); bus.unregisterService(this); return true; } @Override public void handleMessage(Message msg) { if (msg.getClass() == HelloWorldMsg.class) { isSuccess = true; } latch.countDown(); } @Override public String getId() { return bus.makeLocalServiceId(servId); } } @AsyncThread private void startFakeService() { FakeService fs = new FakeService(); fs.start(); } @Before public void setUp() throws Exception { BeanConstructor con = new BeanConstructor(); /* This loads spring application context */ loader = con.addXml("PortalForUnitTest.xml").addXml("AccountManager.xml").build(); dbf = loader.getComponent(DatabaseFacade.class); bus = loader.getComponent(CloudBusIN.class); api = new Api(); startFakeService(); startLatch.await(); api.startServer(); } @Test public void test() throws ApiSenderException, InterruptedException { HelloWorldMsg msg = new HelloWorldMsg(); bus.makeTargetServiceIdByResourceUuid(msg, servId, Platform.getUuid()); bus.send(msg); latch.await(10, TimeUnit.SECONDS); Assert.assertEquals(true, isSuccess); } }