package cloudone.cumulonimbus; import cloudone.ServiceFullName; import cloudone.cumulonimbus.model.RegisteredRuntime; import org.junit.Test; import java.util.HashMap; import java.util.Map; import java.util.Properties; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; /** * @author Martin Mares (martin.mares at oracle.com) */ public class PortServiceTest { @Test public void basicReservations() throws Exception { Properties props = new Properties(); props.setProperty(PortService.KEY_PORT_RANGE, "100-200"); props.setProperty(PortService.KEY_PORT_RANGE_ADMIN, "300-400"); PortService ps = PortService.init(props); assertNotNull(ps); assertEquals(300, ps.reserveAdminPort()); assertEquals(301, ps.reserveAdminPort()); assertEquals(302, ps.reserveAdminPort()); assertEquals(303, ps.reserveAdminPort()); assertEquals(304, ps.reserveAdminPort()); assertEquals(100, ps.reserveApplicationPort()); assertEquals(101, ps.reserveApplicationPort()); assertEquals(102, ps.reserveApplicationPort()); assertEquals(103, ps.reserveApplicationPort()); assertEquals(104, ps.reserveApplicationPort()); } @Test public void basicRegistration() throws Exception { Properties props = new Properties(); props.setProperty(PortService.KEY_PORT_RANGE, "100-200"); props.setProperty(PortService.KEY_PORT_RANGE_ADMIN, "300-400"); PortService ps = PortService.init(props); assertNotNull(ps); ServiceRegistryService.RegistrationListener listener = ps.getNewListener(); assertNotNull(listener); // Register first Map<String, Integer> apps = new HashMap<>(); apps.put("one", ps.reserveApplicationPort()); apps.put("two", ps.reserveApplicationPort()); assertEquals(new Integer(100), apps.get("one")); assertEquals(new Integer(101), apps.get("two")); RegisteredRuntime reg1 = new RegisteredRuntime(new ServiceFullName("a", "b", "1"), "sec1", 1, ps.reserveAdminPort(), apps); listener.register(reg1, null); // Register second apps.put("one", ps.reserveApplicationPort()); apps.put("two", ps.reserveApplicationPort()); assertEquals(new Integer(102), apps.get("one")); assertEquals(new Integer(103), apps.get("two")); RegisteredRuntime reg2 = new RegisteredRuntime(new ServiceFullName("a", "b", "2"), "sec2", 2, ps.reserveAdminPort(), apps); listener.register(reg2, null); //Multi registration try { RegisteredRuntime reg3 = new RegisteredRuntime(reg1.getServiceName(), "secELSE", 1, reg1.getAdminPort(), reg1.getApplicationPorts()); listener.register(reg3, null); //Can not register twice assertTrue("Can not register twice same admin port", false); } catch (Exception e) {} } @Test public void owerReservation() throws Exception { Properties props = new Properties(); props.setProperty(PortService.KEY_PORT_RANGE, "100-105"); props.setProperty(PortService.KEY_PORT_RANGE_ADMIN, "300-305"); PortService ps = PortService.init(props); assertNotNull(ps); assertEquals(100, ps.reserveApplicationPort()); assertEquals(101, ps.reserveApplicationPort()); assertEquals(102, ps.reserveApplicationPort()); assertEquals(103, ps.reserveApplicationPort()); assertEquals(104, ps.reserveApplicationPort()); assertEquals(105, ps.reserveApplicationPort()); try { ps.reserveApplicationPort(); assertTrue("No more ports", false); } catch (Exception exc) {} } }