package biz.aQute.remote; import java.util.Collections; import java.util.HashMap; import java.util.List; import org.osgi.framework.Constants; import org.osgi.framework.dto.FrameworkDTO; import aQute.lib.io.IO; import aQute.remote.api.Agent; import aQute.remote.main.Main; import aQute.remote.plugin.LauncherSupervisor; import junit.framework.TestCase; /** * Start the main program which will wait for requests to create a framework. */ public class MainTest extends TestCase { private Thread thread; @Override protected void setUp() throws Exception { super.setUp(); thread = new Thread() { @Override public void run() { try { Main.main(new String[] { "-p", Agent.DEFAULT_PORT + 1 + "", "-s", "generated/storage", "-c", "generated/cache", "-n", "*", "-et" }); } catch (Exception e) { e.printStackTrace(); } } }; thread.setDaemon(true); thread.start(); } @Override protected void tearDown() throws Exception { Main.stop(); IO.delete(IO.getFile("generated/cache")); IO.delete(IO.getFile("generated/storage")); super.tearDown(); } public void testRemoteMain() throws Exception { // // Create a framework & start an agent // LauncherSupervisor supervisor = new LauncherSupervisor(); supervisor.connect("localhost", Agent.DEFAULT_PORT + 1); assertEquals("not talking to an envoy", true, supervisor.getAgent().isEnvoy()); HashMap<String,Object> configuration = new HashMap<String,Object>(); configuration.put(Constants.FRAMEWORK_STORAGE_CLEAN, Constants.FRAMEWORK_STORAGE_CLEAN_ONFIRSTINIT); configuration.put(Constants.FRAMEWORK_STORAGE, "generated/storage"); List<String> emptyList = Collections.emptyList(); boolean created = supervisor.getAgent().createFramework("test", emptyList, configuration); assertTrue("there already was a framework, funny, since we created the main in setUp?", created); FrameworkDTO framework = supervisor.getAgent().getFramework(); assertNotNull("just created it, so we should have a framework", framework); // // Create a second supervisor and ensure we do not // kill the primary // LauncherSupervisor sv2 = new LauncherSupervisor(); sv2.connect("localhost", Agent.DEFAULT_PORT + 1); assertTrue("no second framework", supervisor.getAgent().ping()); assertEquals("must be an envoy", true, sv2.getAgent().isEnvoy()); assertFalse("the framework should already exist", sv2.getAgent().createFramework("test", emptyList, configuration)); assertTrue("first framework is gone", supervisor.getAgent().ping()); FrameworkDTO fw2 = sv2.getAgent().getFramework(); assertEquals("we should not have created a new framework", framework.properties.get("org.osgi.framework.uuid"), fw2.properties.get("org.osgi.framework.uuid")); // // Kill the second framework // supervisor.getAgent().abort(); Thread.sleep(500); assertFalse(supervisor.isOpen()); assertTrue("should not have killed sv2", sv2.getAgent().ping()); sv2.abort(); Thread.sleep(500); assertFalse(sv2.isOpen()); } }