You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by al...@apache.org on 2016/10/11 21:16:56 UTC

[1/4] brooklyn-library git commit: Add more sensors for main.uri, based on the context, i.e public or not

Repository: brooklyn-library
Updated Branches:
  refs/heads/master f1ff64662 -> a9e9c253a


Add more sensors for main.uri, based on the context, i.e public or not


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/313203f0
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/313203f0
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/313203f0

Branch: refs/heads/master
Commit: 313203f0b45d2178fa142167d2b42238544b8dce
Parents: f1ff646
Author: Thomas Bouron <th...@cloudsoftcorp.com>
Authored: Tue Oct 11 16:50:03 2016 +0100
Committer: Thomas Bouron <th...@cloudsoftcorp.com>
Committed: Tue Oct 11 19:53:46 2016 +0100

----------------------------------------------------------------------
 .../entity/proxy/AbstractController.java        |  5 +++
 .../entity/proxy/AbstractControllerImpl.java    | 31 +++++++++++++++++-
 .../entity/proxy/AbstractControllerTest.java    | 34 ++++++++++++++++++++
 3 files changed, 69 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/313203f0/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractController.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractController.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractController.java
index ec3d7a8..e76d89e 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractController.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractController.java
@@ -18,12 +18,14 @@
  */
 package org.apache.brooklyn.entity.proxy;
 
+import java.net.URI;
 import java.util.Set;
 
 import org.apache.brooklyn.api.entity.ImplementedBy;
 import org.apache.brooklyn.api.sensor.AttributeSensor;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
+import org.apache.brooklyn.core.entity.Attributes;
 import org.apache.brooklyn.core.sensor.BasicAttributeSensorAndConfigKey;
 import org.apache.brooklyn.entity.group.Cluster;
 import org.apache.brooklyn.entity.software.base.SoftwareProcess;
@@ -48,6 +50,9 @@ public interface AbstractController extends SoftwareProcess, LoadBalancer {
     ConfigKey<String> SERVICE_UP_URL_PATH = ConfigKeys.newStringConfigKey(
             "controller.config.serviceUpUrlPath", "The path that will be appended to the root URL to determine SERVICE_UP", "");
 
+    AttributeSensor<URI> MAIN_URI_MAPPED_SUBNET = Attributes.MAIN_URI_MAPPED_SUBNET;
+    AttributeSensor<URI> MAIN_URI_MAPPED_PUBLIC = Attributes.MAIN_URI_MAPPED_PUBLIC;
+
     boolean isActive();
 
     ProxySslConfig getSslConfig();

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/313203f0/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractControllerImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractControllerImpl.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractControllerImpl.java
index 257882d..be60cf2 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractControllerImpl.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractControllerImpl.java
@@ -33,6 +33,7 @@ import org.apache.brooklyn.api.mgmt.Task;
 import org.apache.brooklyn.api.policy.Policy;
 import org.apache.brooklyn.api.policy.PolicySpec;
 import org.apache.brooklyn.api.sensor.AttributeSensor;
+import org.apache.brooklyn.core.entity.Attributes;
 import org.apache.brooklyn.core.entity.Entities;
 import org.apache.brooklyn.core.entity.EntityInternal;
 import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
@@ -265,7 +266,33 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
     protected String inferProtocol() {
         return isSsl() ? "https" : "http";
     }
-    
+
+    protected String inferUrlSubnet() {
+        String protocol = checkNotNull(getProtocol(), "no protocol configured");
+        String domain = getDomain();
+        if (domain != null && domain.startsWith("*.")) {
+            domain = domain.replace("*.", ""); // Strip wildcard
+        }
+        Integer port = checkNotNull(getPort(), "no port configured (the requested port may be in use)");
+
+        if (domain==null) domain = getAttribute(Attributes.SUBNET_ADDRESS);
+        if (domain==null) return null;
+        return protocol+"://"+domain+":"+port+"/"+getConfig(SERVICE_UP_URL_PATH);
+    }
+
+    protected String inferUrlPublic() {
+        String protocol = checkNotNull(getProtocol(), "no protocol configured");
+        String domain = getDomain();
+        if (domain != null && domain.startsWith("*.")) {
+            domain = domain.replace("*.", ""); // Strip wildcard
+        }
+        Integer port = checkNotNull(getPort(), "no port configured (the requested port may be in use)");
+
+        if (domain==null) domain = getAttribute(Attributes.ADDRESS);
+        if (domain==null) return null;
+        return protocol+"://"+domain+":"+port+"/"+getConfig(SERVICE_UP_URL_PATH);
+    }
+
     /** returns URL, if it can be inferred; null otherwise */
     protected String inferUrl(boolean requireManagementAccessible) {
         String protocol = checkNotNull(getProtocol(), "no protocol configured");
@@ -317,6 +344,8 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
 
         sensors().set(PROTOCOL, inferProtocol());
         sensors().set(MAIN_URI, URI.create(inferUrl()));
+        sensors().set(MAIN_URI_MAPPED_SUBNET, URI.create(inferUrlSubnet()));
+        sensors().set(MAIN_URI_MAPPED_PUBLIC, URI.create(inferUrlPublic()));
         sensors().set(ROOT_URL, inferUrl());
  
         checkNotNull(getPortNumberSensor(), "no sensor configured to infer port number");

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/313203f0/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/AbstractControllerTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/AbstractControllerTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/AbstractControllerTest.java
index 6daae33..45397be 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/AbstractControllerTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/AbstractControllerTest.java
@@ -22,6 +22,7 @@ import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
 
 import java.net.Inet4Address;
+import java.net.URI;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -39,8 +40,10 @@ import org.apache.brooklyn.api.location.MachineProvisioningLocation;
 import org.apache.brooklyn.api.location.NoMachinesAvailableException;
 import org.apache.brooklyn.api.sensor.AttributeSensor;
 import org.apache.brooklyn.core.entity.Attributes;
+import org.apache.brooklyn.core.entity.EntityAsserts;
 import org.apache.brooklyn.core.entity.factory.EntityFactory;
 import org.apache.brooklyn.core.entity.trait.Startable;
+import org.apache.brooklyn.core.location.PortRanges;
 import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
 import org.apache.brooklyn.core.test.entity.TestEntity;
 import org.apache.brooklyn.core.test.entity.TestEntityImpl;
@@ -300,6 +303,35 @@ public class AbstractControllerTest extends BrooklynAppUnitTestSupport {
         assertTrue(u.isEmpty(), "expected no updates, but got "+u);
     }
 
+    @Test
+    public void testMainUriSensorsCorrectlyComputedWithDomain() throws Exception {
+        URI expected = URI.create("http://mydomain:8000/");
+
+        EntityAsserts.assertAttributeEquals(controller, TrackingAbstractController.MAIN_URI, expected);
+        EntityAsserts.assertAttributeEquals(controller, TrackingAbstractController.MAIN_URI_MAPPED_SUBNET, expected);
+        EntityAsserts.assertAttributeEquals(controller, TrackingAbstractController.MAIN_URI_MAPPED_PUBLIC, expected);
+    }
+
+    @Test
+    public void testMainUriSensorsCorrectlyComputedWithoutDomain() throws Exception {
+        TrackingAbstractController controller2 = app.addChild(EntitySpec.create(TrackingAbstractController.class)
+                .configure(TrackingAbstractController.SERVER_POOL, cluster)
+                .configure(TrackingAbstractController.PROXY_HTTP_PORT, PortRanges.fromInteger(8081))
+                .location(LocationSpec.create(SshMachineLocation.class)
+                        .configure("address", Inet4Address.getByName("1.1.1.1"))
+                        .configure(SshMachineLocation.PRIVATE_ADDRESSES, ImmutableList.of("2.2.2.2"))));
+        controller2.start(ImmutableList.<Location>of());
+
+        // Unfortunately the Attributes.SUBNET_HOSTNAME is 1.1.1.1, because SshMachineLocation does not implement
+        // HasSubnetHostname (see Machines.getSubnetHostname). It falls back to using the machine.getAddress().
+        // Hence the MAIN_URI uses 1.1.1.1.
+        EntityAsserts.assertAttributeEquals(controller2, Attributes.ADDRESS, "1.1.1.1");
+        EntityAsserts.assertAttributeEquals(controller2, Attributes.SUBNET_ADDRESS, "2.2.2.2");
+        EntityAsserts.assertAttributeEquals(controller2, Attributes.MAIN_URI, URI.create("http://1.1.1.1:8081/"));
+        EntityAsserts.assertAttributeEquals(controller2, Attributes.MAIN_URI_MAPPED_PUBLIC, URI.create("http://1.1.1.1:8081/"));
+        EntityAsserts.assertAttributeEquals(controller2, Attributes.MAIN_URI_MAPPED_SUBNET, URI.create("http://2.2.2.2:8081/"));
+    }
+
     private void assertEventuallyAddressesMatchCluster() {
         assertEventuallyAddressesMatch(cluster.getMembers());
     }
@@ -369,6 +401,8 @@ public class AbstractControllerTest extends BrooklynAppUnitTestSupport {
             addLocations(Arrays.asList(machine));
             sensors().set(HOSTNAME, machine.getAddress().getHostName());
             sensors().set(Attributes.SUBNET_HOSTNAME, machine.getAddress().getHostName());
+            sensors().set(Attributes.MAIN_URI_MAPPED_SUBNET, URI.create(machine.getAddress().getHostName()));
+            sensors().set(Attributes.MAIN_URI_MAPPED_PUBLIC, URI.create("http://8.8.8.8:" + sensors().get(HTTP_PORT)));
         }
         public void stop() {
             if (provisioner!=null) provisioner.release((MachineLocation) firstLocation());


[3/4] brooklyn-library git commit: Merge pull request #1 from aledsage/tbouron-aled2/fix/main-uri

Posted by al...@apache.org.
Merge pull request #1 from aledsage/tbouron-aled2/fix/main-uri

Improvements for PR #66

Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/99a69715
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/99a69715
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/99a69715

Branch: refs/heads/master
Commit: 99a697159d6f573b00b6337068785bed02bdc3dc
Parents: 313203f 023e492
Author: Thomas Bouron <tb...@gmail.com>
Authored: Tue Oct 11 21:03:43 2016 +0100
Committer: GitHub <no...@github.com>
Committed: Tue Oct 11 21:03:43 2016 +0100

----------------------------------------------------------------------
 .../entity/proxy/AbstractControllerImpl.java    | 72 +++++++++++---------
 .../entity/proxy/AbstractControllerTest.java    | 46 ++++++++-----
 2 files changed, 69 insertions(+), 49 deletions(-)
----------------------------------------------------------------------



[2/4] brooklyn-library git commit: Improvements for PR #66

Posted by al...@apache.org.
Improvements for PR #66

* Avoid NPE in in AbstractController.computePortsAndUrls() if inferUrl
  returns null.
* Remove some duplication from inferUrl*()
* Renames inferUrlPublic() to inferUrlForPublic() - and same for subnet
* testMainUriSensorsCorrectlyComputedWithoutDomain to use machineLocation
  extending HasSubnetHostname, so subnet address set as expected.
* Tidy deprecated code and generics in test.

Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/023e4928
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/023e4928
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/023e4928

Branch: refs/heads/master
Commit: 023e49287c8acdb6daf3af171e7e7277b145f63a
Parents: 313203f
Author: Aled Sage <al...@gmail.com>
Authored: Tue Oct 11 20:16:47 2016 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Tue Oct 11 20:16:47 2016 +0100

----------------------------------------------------------------------
 .../entity/proxy/AbstractControllerImpl.java    | 72 +++++++++++---------
 .../entity/proxy/AbstractControllerTest.java    | 46 ++++++++-----
 2 files changed, 69 insertions(+), 49 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/023e4928/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractControllerImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractControllerImpl.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractControllerImpl.java
index be60cf2..3277e38 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractControllerImpl.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractControllerImpl.java
@@ -54,6 +54,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Objects;
+import com.google.common.base.Optional;
 import com.google.common.base.Predicates;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
@@ -230,7 +231,15 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
     public String getDomain() {
         return getAttribute(DOMAIN_NAME);
     }
-    
+
+    protected String getDomainWithoutWildcard() {
+        String domain = getDomain();
+        if (domain != null && domain.startsWith("*.")) {
+            domain = domain.replace("*.", ""); // Strip wildcard
+        }
+        return domain;
+    }
+
     @Override
     public Integer getPort() {
         if (isSsl())
@@ -267,39 +276,21 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
         return isSsl() ? "https" : "http";
     }
 
-    protected String inferUrlSubnet() {
-        String protocol = checkNotNull(getProtocol(), "no protocol configured");
-        String domain = getDomain();
-        if (domain != null && domain.startsWith("*.")) {
-            domain = domain.replace("*.", ""); // Strip wildcard
-        }
-        Integer port = checkNotNull(getPort(), "no port configured (the requested port may be in use)");
-
+    protected String inferUrlForSubnet() {
+        String domain = getDomainWithoutWildcard();
         if (domain==null) domain = getAttribute(Attributes.SUBNET_ADDRESS);
-        if (domain==null) return null;
-        return protocol+"://"+domain+":"+port+"/"+getConfig(SERVICE_UP_URL_PATH);
+        return inferUrl(domain, Optional.<Integer>absent());
     }
 
-    protected String inferUrlPublic() {
-        String protocol = checkNotNull(getProtocol(), "no protocol configured");
-        String domain = getDomain();
-        if (domain != null && domain.startsWith("*.")) {
-            domain = domain.replace("*.", ""); // Strip wildcard
-        }
-        Integer port = checkNotNull(getPort(), "no port configured (the requested port may be in use)");
-
+    protected String inferUrlForPublic() {
+        String domain = getDomainWithoutWildcard();
         if (domain==null) domain = getAttribute(Attributes.ADDRESS);
-        if (domain==null) return null;
-        return protocol+"://"+domain+":"+port+"/"+getConfig(SERVICE_UP_URL_PATH);
+        return inferUrl(domain, Optional.<Integer>absent());
     }
 
     /** returns URL, if it can be inferred; null otherwise */
     protected String inferUrl(boolean requireManagementAccessible) {
-        String protocol = checkNotNull(getProtocol(), "no protocol configured");
-        String domain = getDomain();
-        if (domain != null && domain.startsWith("*.")) {
-            domain = domain.replace("*.", ""); // Strip wildcard
-        }
+        String domain = getDomainWithoutWildcard();
         Integer port = checkNotNull(getPort(), "no port configured (the requested port may be in use)");
         if (requireManagementAccessible) {
             HostAndPort accessible = BrooklynAccessUtils.getBrooklynAccessibleAddress(this, port);
@@ -309,8 +300,15 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
             }
         }
         if (domain==null) domain = Machines.findSubnetHostname(this).orNull();
-        if (domain==null) return null;
-        return protocol+"://"+domain+":"+port+"/"+getConfig(SERVICE_UP_URL_PATH);
+        return inferUrl(domain, Optional.of(port));
+    }
+
+    protected String inferUrl(String host, Optional<Integer> portOverride) {
+        if (host == null) return null;
+        String protocol = checkNotNull(getProtocol(), "no protocol configured");
+        int port = portOverride.isPresent() ? portOverride.get() : checkNotNull(getPort(), "no port configured (the requested port may be in use)");
+        String path = getConfig(SERVICE_UP_URL_PATH);
+        return protocol+"://"+host+":"+port+"/"+path;
     }
 
     protected String inferUrl() {
@@ -343,14 +341,26 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
         ConfigToAttributes.apply(this);
 
         sensors().set(PROTOCOL, inferProtocol());
-        sensors().set(MAIN_URI, URI.create(inferUrl()));
-        sensors().set(MAIN_URI_MAPPED_SUBNET, URI.create(inferUrlSubnet()));
-        sensors().set(MAIN_URI_MAPPED_PUBLIC, URI.create(inferUrlPublic()));
+        sensors().set(MAIN_URI, createUriOrNull(inferUrl()));
+        sensors().set(MAIN_URI_MAPPED_SUBNET, createUriOrNull(inferUrlForSubnet()));
+        sensors().set(MAIN_URI_MAPPED_PUBLIC, createUriOrNull(inferUrlForPublic()));
         sensors().set(ROOT_URL, inferUrl());
  
         checkNotNull(getPortNumberSensor(), "no sensor configured to infer port number");
     }
     
+    private URI createUriOrNull(String val) {
+        if (val == null) {
+            return null;
+        }
+        try {
+            return URI.create(val);
+        } catch (IllegalArgumentException e) {
+            LOG.warn("Invalid URI for {}: {}", this, val);
+            return null;
+        }
+    }
+    
     @Override
     protected void connectSensors() {
         super.connectSensors();

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/023e4928/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/AbstractControllerTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/AbstractControllerTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/AbstractControllerTest.java
index 45397be..831df4c 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/AbstractControllerTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/AbstractControllerTest.java
@@ -31,7 +31,6 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntityLocal;
 import org.apache.brooklyn.api.entity.EntitySpec;
 import org.apache.brooklyn.api.location.Location;
 import org.apache.brooklyn.api.location.LocationSpec;
@@ -43,6 +42,7 @@ import org.apache.brooklyn.core.entity.Attributes;
 import org.apache.brooklyn.core.entity.EntityAsserts;
 import org.apache.brooklyn.core.entity.factory.EntityFactory;
 import org.apache.brooklyn.core.entity.trait.Startable;
+import org.apache.brooklyn.core.location.HasSubnetHostname;
 import org.apache.brooklyn.core.location.PortRanges;
 import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
 import org.apache.brooklyn.core.test.entity.TestEntity;
@@ -155,7 +155,7 @@ public class AbstractControllerTest extends BrooklynAppUnitTestSupport {
     public void testUpdateCalledWithAddressesOfNewChildren() {
         // First child
         cluster.resize(1);
-        EntityLocal child = (EntityLocal) Iterables.getOnlyElement(cluster.getMembers());
+        Entity child = Iterables.getOnlyElement(cluster.getMembers());
         
         List<Collection<String>> u = Lists.newArrayList(controller.getUpdates());
         assertTrue(u.isEmpty(), "expected empty list but got "+u);
@@ -171,7 +171,7 @@ public class AbstractControllerTest extends BrooklynAppUnitTestSupport {
             public void run() {
                 assertEquals(cluster.getMembers().size(), 2);
             }});
-        EntityLocal child2 = (EntityLocal) Iterables.getOnlyElement(MutableSet.builder().addAll(cluster.getMembers()).remove(child).build());
+        Entity child2 = Iterables.getOnlyElement(MutableSet.<Entity>builder().addAll(cluster.getMembers()).remove(child).build());
         
         child2.sensors().set(ClusteredEntity.HTTP_PORT, 1234);
         child2.sensors().set(Startable.SERVICE_UP, true);
@@ -192,8 +192,8 @@ public class AbstractControllerTest extends BrooklynAppUnitTestSupport {
         // Get some children, so we can remove one...
         cluster.resize(2);
         for (Entity it: cluster.getMembers()) { 
-            ((EntityLocal)it).sensors().set(ClusteredEntity.HTTP_PORT, 1234);
-            ((EntityLocal)it).sensors().set(Startable.SERVICE_UP, true);
+            it.sensors().set(ClusteredEntity.HTTP_PORT, 1234);
+            it.sensors().set(Startable.SERVICE_UP, true);
         }
         assertEventuallyAddressesMatchCluster();
 
@@ -208,17 +208,17 @@ public class AbstractControllerTest extends BrooklynAppUnitTestSupport {
         // Get some children, so we can remove one...
         cluster.resize(2);
         for (Entity it: cluster.getMembers()) { 
-            ((EntityLocal)it).sensors().set(ClusteredEntity.HTTP_PORT, 1234);
-            ((EntityLocal)it).sensors().set(Startable.SERVICE_UP, true);
+            it.sensors().set(ClusteredEntity.HTTP_PORT, 1234);
+            it.sensors().set(Startable.SERVICE_UP, true);
         }
         assertEventuallyAddressesMatchCluster();
 
         // Now unset host/port, and remove children
         // Note the unsetting of hostname is done in SoftwareProcessImpl.stop(), so this is realistic
         for (Entity it : cluster.getMembers()) {
-            ((EntityLocal)it).sensors().set(ClusteredEntity.HTTP_PORT, null);
-            ((EntityLocal)it).sensors().set(ClusteredEntity.HOSTNAME, null);
-            ((EntityLocal)it).sensors().set(Startable.SERVICE_UP, false);
+            it.sensors().set(ClusteredEntity.HTTP_PORT, null);
+            it.sensors().set(ClusteredEntity.HOSTNAME, null);
+            it.sensors().set(Startable.SERVICE_UP, false);
         }
         assertEventuallyAddressesMatch(ImmutableList.<Entity>of());
     }
@@ -314,24 +314,34 @@ public class AbstractControllerTest extends BrooklynAppUnitTestSupport {
 
     @Test
     public void testMainUriSensorsCorrectlyComputedWithoutDomain() throws Exception {
+        // The MachineLocation needs to implement HasSubnetHostname for the Attributes.SUBNET_HOSTNAME 
+        // to be set with the subnet addresss (otherwise it will fall back to using machine.getAddress()).
+        // See Machines.getSubnetHostname. 
+        
         TrackingAbstractController controller2 = app.addChild(EntitySpec.create(TrackingAbstractController.class)
                 .configure(TrackingAbstractController.SERVER_POOL, cluster)
                 .configure(TrackingAbstractController.PROXY_HTTP_PORT, PortRanges.fromInteger(8081))
-                .location(LocationSpec.create(SshMachineLocation.class)
+                .location(LocationSpec.create(SshMachineLocationWithSubnetHostname.class)
                         .configure("address", Inet4Address.getByName("1.1.1.1"))
                         .configure(SshMachineLocation.PRIVATE_ADDRESSES, ImmutableList.of("2.2.2.2"))));
         controller2.start(ImmutableList.<Location>of());
 
-        // Unfortunately the Attributes.SUBNET_HOSTNAME is 1.1.1.1, because SshMachineLocation does not implement
-        // HasSubnetHostname (see Machines.getSubnetHostname). It falls back to using the machine.getAddress().
-        // Hence the MAIN_URI uses 1.1.1.1.
         EntityAsserts.assertAttributeEquals(controller2, Attributes.ADDRESS, "1.1.1.1");
         EntityAsserts.assertAttributeEquals(controller2, Attributes.SUBNET_ADDRESS, "2.2.2.2");
-        EntityAsserts.assertAttributeEquals(controller2, Attributes.MAIN_URI, URI.create("http://1.1.1.1:8081/"));
+        EntityAsserts.assertAttributeEquals(controller2, Attributes.MAIN_URI, URI.create("http://2.2.2.2:8081/"));
         EntityAsserts.assertAttributeEquals(controller2, Attributes.MAIN_URI_MAPPED_PUBLIC, URI.create("http://1.1.1.1:8081/"));
         EntityAsserts.assertAttributeEquals(controller2, Attributes.MAIN_URI_MAPPED_SUBNET, URI.create("http://2.2.2.2:8081/"));
     }
-
+    public static class SshMachineLocationWithSubnetHostname extends SshMachineLocation implements HasSubnetHostname {
+        @Override public String getSubnetHostname() {
+            return getSubnetIp();
+        }
+        @Override public String getSubnetIp() {
+            Set<String> addrs = getPrivateAddresses();
+            return (addrs.isEmpty()) ? getAddress().getHostAddress() : Iterables.get(addrs, 0);
+        }
+    }
+    
     private void assertEventuallyAddressesMatchCluster() {
         assertEventuallyAddressesMatch(cluster.getMembers());
     }
@@ -388,10 +398,10 @@ public class AbstractControllerTest extends BrooklynAppUnitTestSupport {
         @SetFromFlag("hostAndPort")
         public static final AttributeSensor<String> HOST_AND_PORT = Attributes.HOST_AND_PORT;
         
-        MachineProvisioningLocation provisioner;
+        MachineProvisioningLocation<MachineLocation> provisioner;
         
         public void start(Collection<? extends Location> locs) {
-            provisioner = (MachineProvisioningLocation) locs.iterator().next();
+            provisioner = (MachineProvisioningLocation<MachineLocation>) locs.iterator().next();
             MachineLocation machine;
             try {
                 machine = provisioner.obtain(MutableMap.of());


[4/4] brooklyn-library git commit: This closes #66

Posted by al...@apache.org.
This closes #66


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/a9e9c253
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/a9e9c253
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/a9e9c253

Branch: refs/heads/master
Commit: a9e9c253acd3e039b529a60c692bc9511436d3f5
Parents: f1ff646 99a6971
Author: Aled Sage <al...@gmail.com>
Authored: Tue Oct 11 22:16:15 2016 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Tue Oct 11 22:16:15 2016 +0100

----------------------------------------------------------------------
 .../entity/proxy/AbstractController.java        |  5 ++
 .../entity/proxy/AbstractControllerImpl.java    | 59 ++++++++++++++---
 .../entity/proxy/AbstractControllerTest.java    | 68 ++++++++++++++++----
 3 files changed, 110 insertions(+), 22 deletions(-)
----------------------------------------------------------------------