diff --git a/src/main/java/com/marathon/hazelcast/servicediscovery/MarathonDiscoveryConfiguration.java b/src/main/java/com/marathon/hazelcast/servicediscovery/MarathonDiscoveryConfiguration.java index 9e55462..1226640 100644 --- a/src/main/java/com/marathon/hazelcast/servicediscovery/MarathonDiscoveryConfiguration.java +++ b/src/main/java/com/marathon/hazelcast/servicediscovery/MarathonDiscoveryConfiguration.java @@ -28,4 +28,8 @@ public interface MarathonDiscoveryConfiguration { PropertyDefinition PORT_INDEX = new SimplePropertyDefinition("port-index", PropertyTypeConverter.STRING); + PropertyDefinition MARATHON_USERNAME = new SimplePropertyDefinition("marathon-username", true, PropertyTypeConverter.STRING); + + PropertyDefinition MARATHON_PASSWORD = new SimplePropertyDefinition("marathon-password", true, PropertyTypeConverter.STRING); + } diff --git a/src/main/java/com/marathon/hazelcast/servicediscovery/MarathonDiscoveryStrategy.java b/src/main/java/com/marathon/hazelcast/servicediscovery/MarathonDiscoveryStrategy.java index 918353a..0dcfca9 100644 --- a/src/main/java/com/marathon/hazelcast/servicediscovery/MarathonDiscoveryStrategy.java +++ b/src/main/java/com/marathon/hazelcast/servicediscovery/MarathonDiscoveryStrategy.java @@ -38,6 +38,10 @@ public class MarathonDiscoveryStrategy extends AbstractDiscoveryStrategy { private int port; + private String marathonUsername; + + private String marathonPassword; + private ILogger logger; public MarathonDiscoveryStrategy(final ILogger logger, Map properties) { @@ -45,9 +49,12 @@ public MarathonDiscoveryStrategy(final ILogger logger, Map p this.marathonEndpoint = getOrNull("discovery.marathon", MarathonDiscoveryConfiguration.MARATHON_ENDPOINT); this.appId = getOrNull("discovery.marathon", MarathonDiscoveryConfiguration.APP_ID); this.port = Integer.parseInt(getOrNull("discovery.marathon", MarathonDiscoveryConfiguration.PORT_INDEX)); + this.marathonUsername = getOrNull("discovery.marathon", MarathonDiscoveryConfiguration.MARATHON_USERNAME); + this.marathonPassword = getOrNull("discovery.marathon", MarathonDiscoveryConfiguration.MARATHON_PASSWORD); this.logger = logger; try { - MarathonServiceDiscoveryHelper.start(marathonEndpoint, appId, port, logger); + MarathonServiceDiscoveryHelper.start(marathonEndpoint, appId, port, marathonUsername, marathonPassword, + logger); } catch (Exception e) { logger.severe("Failed to start service discovery!", e); } diff --git a/src/main/java/com/marathon/hazelcast/servicediscovery/MarathonDiscoveryStrategyFactory.java b/src/main/java/com/marathon/hazelcast/servicediscovery/MarathonDiscoveryStrategyFactory.java index a7ce0e6..6f5161c 100644 --- a/src/main/java/com/marathon/hazelcast/servicediscovery/MarathonDiscoveryStrategyFactory.java +++ b/src/main/java/com/marathon/hazelcast/servicediscovery/MarathonDiscoveryStrategyFactory.java @@ -38,6 +38,8 @@ public MarathonDiscoveryStrategyFactory() { properties.add(MarathonDiscoveryConfiguration.APP_ID); properties.add(MarathonDiscoveryConfiguration.PORT_INDEX); properties.add(MarathonDiscoveryConfiguration.MARATHON_ENDPOINT); + properties.add(MarathonDiscoveryConfiguration.MARATHON_USERNAME); + properties.add(MarathonDiscoveryConfiguration.MARATHON_PASSWORD); } @Override diff --git a/src/main/java/com/marathon/hazelcast/servicediscovery/MarathonServiceDiscoveryHelper.java b/src/main/java/com/marathon/hazelcast/servicediscovery/MarathonServiceDiscoveryHelper.java index a035e74..49b789f 100644 --- a/src/main/java/com/marathon/hazelcast/servicediscovery/MarathonServiceDiscoveryHelper.java +++ b/src/main/java/com/marathon/hazelcast/servicediscovery/MarathonServiceDiscoveryHelper.java @@ -92,8 +92,14 @@ public int getPort() { } } - public static void start(final String marathonEndpoint, final String appId, final int portIndex, final ILogger logger) throws Exception { - marathon = MarathonClient.getInstance(marathonEndpoint); + public static void start(final String marathonEndpoint, final String appId, final int portIndex, + final String marathonUsername, final String marathonPassword, final ILogger logger) throws Exception { + if (marathonUsername == null || marathonUsername.isEmpty() || + marathonPassword == null || marathonPassword.isEmpty()) { + marathon = MarathonClient.getInstance(marathonEndpoint); + } else { + marathon = MarathonClient.getInstanceWithBasicAuth(marathonEndpoint, marathonUsername, marathonPassword); + } log = logger; MarathonPoller marathonPoller = new MarathonPoller(marathon, appId, portIndex); scheduledExecutorService.scheduleAtFixedRate(marathonPoller, 0, 10, TimeUnit.SECONDS); diff --git a/src/test/java/com/marathon/hazelcast/servicediscovery/DiscoveryTest.java b/src/test/java/com/marathon/hazelcast/servicediscovery/DiscoveryTest.java index 558f5ac..4dbb25d 100644 --- a/src/test/java/com/marathon/hazelcast/servicediscovery/DiscoveryTest.java +++ b/src/test/java/com/marathon/hazelcast/servicediscovery/DiscoveryTest.java @@ -57,7 +57,7 @@ public void testSingleMemberDiscovery() throws IOException, InterruptedException .withStatus(200) .withHeader("Content-Type", "application/json") .withBody(mapper.writeValueAsBytes(response)))); - HazelcastInstance hazelcast = getHazelcastInstance(5701); + HazelcastInstance hazelcast = getHazelcastInstanceWithoutBasicAuth(5701); assertTrue(hazelcast.getCluster().getMembers().size() > 0); hazelcast.shutdown(); } @@ -84,9 +84,9 @@ public void testMultiMemberDiscovery() throws UnknownHostException, InterruptedE .withHeader("Content-Type", "application/json") .withBody(mapper.writeValueAsBytes(response)))); - HazelcastInstance hazelcast1 = getHazelcastInstance(5701); - HazelcastInstance hazelcast2 = getHazelcastInstance(5702); - HazelcastInstance hazelcast3 = getHazelcastInstance(5703); + HazelcastInstance hazelcast1 = getHazelcastInstanceWithoutBasicAuth(5701); + HazelcastInstance hazelcast2 = getHazelcastInstanceWithoutBasicAuth(5702); + HazelcastInstance hazelcast3 = getHazelcastInstanceWithBasicAuth(5703); assertTrue(hazelcast3.getCluster().getMembers().size() > 0); assertTrue(hazelcast3.getCluster().getMembers().size() == 3); hazelcast1.shutdown(); @@ -94,7 +94,18 @@ public void testMultiMemberDiscovery() throws UnknownHostException, InterruptedE hazelcast3.shutdown(); } - private HazelcastInstance getHazelcastInstance(int port) throws UnknownHostException, InterruptedException { + private HazelcastInstance getHazelcastInstanceWithoutBasicAuth(int port) + throws UnknownHostException, InterruptedException { + return getHazelcastInstance(port, false); + } + + private HazelcastInstance getHazelcastInstanceWithBasicAuth(int port) + throws UnknownHostException, InterruptedException { + return getHazelcastInstance(port, true); + } + + private HazelcastInstance getHazelcastInstance(int port, boolean withBasicAuthMarathon) + throws UnknownHostException, InterruptedException { Config config = new Config(); config.setProperty("hazelcast.discovery.enabled", "true"); config.setProperty("hazelcast.discovery.public.ip.enabled", "true"); @@ -112,6 +123,10 @@ private HazelcastInstance getHazelcastInstance(int port) throws UnknownHostExcep discoveryStrategyConfig.addProperty("marathon-endpoint", "http://localhost:8080"); discoveryStrategyConfig.addProperty("app-id", "test_app"); discoveryStrategyConfig.addProperty("port-index", "0"); + if (withBasicAuthMarathon) { + discoveryStrategyConfig.addProperty("marathon-username", "username"); + discoveryStrategyConfig.addProperty("marathon-password", "password"); + } discoveryConfig.addDiscoveryStrategyConfig(discoveryStrategyConfig); Thread.sleep(2000); return Hazelcast.newHazelcastInstance(config);