package org.zstack.test.multinodes;
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.cloudbus.EventFacade;
import org.zstack.core.componentloader.ComponentLoader;
import org.zstack.header.managementnode.ManagementNodeInventory;
import org.zstack.test.Api;
import org.zstack.test.ApiSenderException;
import org.zstack.test.BeanConstructor;
import org.zstack.test.core.config.GlobalConfigForTest;
import org.zstack.utils.CollectionUtils;
import org.zstack.utils.Utils;
import org.zstack.utils.function.Function;
import org.zstack.utils.logging.CLogger;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* 1. start 2 nodes
* 2. update global config test
* 3. instruct node1 to report global config test
* <p>
* confirm global config was updated on node1, but other global configs don't change
*/
public class TestMultipleNode13 {
CLogger logger = Utils.getLogger(TestMultipleNode13.class);
ComponentLoader loader;
NodeManager nodeMgr;
CloudBusIN bus;
EventFacade evtf;
Api api;
@Before
public void setUp() throws Exception {
BeanConstructor con = new BeanConstructor();
con.addXml("PortalForUnitTest.xml");
con.addXml("AccountManager.xml");
con.addXml("silentService.xml");
loader = con.build();
bus = loader.getComponent(CloudBusIN.class);
nodeMgr = new NodeManager();
evtf = loader.getComponent(EventFacade.class);
api = new Api();
api.startServer();
api.setTimeout(300);
}
@Test
public void test() throws InterruptedException, ApiSenderException {
nodeMgr.setProperties("-DbFacadeDataSource.maxPoolSize=50")
.createLightWeightNodeWithCore(1, 300, Arrays.asList("silentService.xml"));
List<ManagementNodeInventory> nodes = api.listManagementNodes();
ManagementNodeInventory target = CollectionUtils.find(nodes, new Function<ManagementNodeInventory, ManagementNodeInventory>() {
@Override
public ManagementNodeInventory call(final ManagementNodeInventory arg) {
if (!arg.getUuid().equals(Platform.getManagementServerId())) {
return arg;
}
return null;
}
});
String old = GlobalConfigForTest.TEST2.value();
GlobalConfigForTest.TEST.updateValue(10000);
TimeUnit.SECONDS.sleep(5);
try {
ReportGlobalConfigMsg msg = new ReportGlobalConfigMsg();
bus.makeServiceIdByManagementNodeId(msg, ReportGlobalConfigService.SERVICE_ID, target.getUuid());
ReportGlobalConfigReply reply = (ReportGlobalConfigReply) bus.call(msg);
Assert.assertEquals("10000", reply.getValue());
Assert.assertEquals(old, reply.getValue2());
} finally {
nodeMgr.stopNodes(120);
}
}
}