brooklyn-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sjcorb...@apache.org
Subject [1/2] incubator-brooklyn git commit: BindDnsServer strips invalid characters from domain names
Date Wed, 03 Dec 2014 15:55:58 GMT
Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master c2451f3e3 -> 5de642ecf


BindDnsServer strips invalid characters from domain names

As per RFCs 952 and 1123.


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

Branch: refs/heads/master
Commit: e11b8f7bd9f359723dbe332aea8c24706a118dae
Parents: 0f2f632
Author: Sam Corbett <sam.corbett@cloudsoftcorp.com>
Authored: Wed Dec 3 16:45:20 2014 +0100
Committer: Sam Corbett <sam.corbett@cloudsoftcorp.com>
Committed: Wed Dec 3 16:45:20 2014 +0100

----------------------------------------------------------------------
 .../entity/network/bind/BindDnsServerImpl.java  | 26 ++++++++++-
 .../bind/BindDnsServerIntegrationTest.java      | 46 +++++++++++++++-----
 2 files changed, 59 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e11b8f7b/software/network/src/main/java/brooklyn/entity/network/bind/BindDnsServerImpl.java
----------------------------------------------------------------------
diff --git a/software/network/src/main/java/brooklyn/entity/network/bind/BindDnsServerImpl.java
b/software/network/src/main/java/brooklyn/entity/network/bind/BindDnsServerImpl.java
index 5eb12a7..ccdb484 100644
--- a/software/network/src/main/java/brooklyn/entity/network/bind/BindDnsServerImpl.java
+++ b/software/network/src/main/java/brooklyn/entity/network/bind/BindDnsServerImpl.java
@@ -29,6 +29,8 @@ import java.util.Map;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.base.CharMatcher;
+import com.google.common.base.Function;
 import com.google.common.base.Joiner;
 import com.google.common.base.Predicate;
 import com.google.common.base.Splitter;
@@ -50,7 +52,6 @@ import com.google.common.collect.Multimaps;
 import brooklyn.entity.Entity;
 import brooklyn.entity.basic.Attributes;
 import brooklyn.entity.basic.DynamicGroup;
-import brooklyn.entity.basic.EntityFunctions;
 import brooklyn.entity.basic.Lifecycle;
 import brooklyn.entity.basic.SoftwareProcessImpl;
 import brooklyn.entity.group.AbstractMembershipTrackingPolicy;
@@ -73,6 +74,27 @@ public class BindDnsServerImpl extends SoftwareProcessImpl implements BindDnsSer
 
     private static final Logger LOG = LoggerFactory.getLogger(BindDnsServerImpl.class);
 
+    // As per RFC 952 and RFC 1123.
+    private static final CharMatcher DOMAIN_NAME_FIRST_CHAR_MATCHER = CharMatcher.inRange('a',
'z')
+                .or(CharMatcher.inRange('A', 'Z'))
+                .or(CharMatcher.inRange('0', '9'));
+    private static final CharMatcher DOMAIN_NAME_MATCHER = DOMAIN_NAME_FIRST_CHAR_MATCHER
+            .or(CharMatcher.is('-'));
+
+
+    private class HostnameTransformer implements Function<Entity, String> {
+        @Override
+        public String apply(Entity input) {
+            String hostname = input.getAttribute(getConfig(HOSTNAME_SENSOR));
+            hostname = DOMAIN_NAME_FIRST_CHAR_MATCHER.negate().trimFrom(hostname);
+            hostname = DOMAIN_NAME_MATCHER.negate().trimAndCollapseFrom(hostname, '-');
+            if (hostname.length() > 63) {
+                hostname = hostname.substring(0, 63);
+            }
+            return hostname;
+        }
+    }
+
     public BindDnsServerImpl() {
         super();
     }
@@ -222,7 +244,7 @@ public class BindDnsServerImpl extends SoftwareProcessImpl implements
BindDnsSer
                     .filter(new HasHostnameAndValidLifecycle());
             LOG.debug("{} updating with entities: {}", this, Iterables.toString(availableEntities));
             ImmutableListMultimap<String, Entity> hostnameToEntity = Multimaps.index(availableEntities,
-                    EntityFunctions.attribute(getConfig(HOSTNAME_SENSOR)));
+                    new HostnameTransformer());
             Map<String, String> octetToName = Maps.newHashMap();
             BiMap<String, String> ipToARecord = HashBiMap.create();
             Multimap<String, String> aRecordToCnames = MultimapBuilder.hashKeys().arrayListValues().build();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e11b8f7b/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerIntegrationTest.java
b/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerIntegrationTest.java
index b6b9aba..d354e6e 100644
--- a/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerIntegrationTest.java
+++ b/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerIntegrationTest.java
@@ -24,26 +24,29 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.Test;
 
+import com.google.common.base.Joiner;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Iterables;
+
+import brooklyn.entity.Entity;
 import brooklyn.entity.basic.ApplicationBuilder;
 import brooklyn.entity.basic.Attributes;
 import brooklyn.entity.basic.EmptySoftwareProcess;
 import brooklyn.entity.basic.Entities;
+import brooklyn.entity.basic.EntityLocal;
+import brooklyn.entity.basic.EntityPredicates;
 import brooklyn.entity.group.DynamicCluster;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.rebind.RebindOptions;
 import brooklyn.entity.rebind.RebindTestFixture;
-import brooklyn.location.LocationSpec;
-import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.policy.EnricherSpec;
 import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 
-import com.google.common.base.Joiner;
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
-
 public class BindDnsServerIntegrationTest extends RebindTestFixture<TestApplication>
{
 
     private static final Logger LOG = LoggerFactory.getLogger(BindDnsServerIntegrationTest.class);
@@ -67,9 +70,30 @@ public class BindDnsServerIntegrationTest extends RebindTestFixture<TestApplicat
     }
 
     @Test(groups = "Integration")
+    public void testStripsInvalidCharactersFromHostname() {
+        origApp.start(ImmutableList.of(origApp.newLocalhostProvisioningLocation()));
+        cluster.resize(1);
+        assertDnsEntityEventuallyHasActiveMembers(1);
+        EntityLocal e = (EntityLocal) Iterables.getOnlyElement(cluster.getMembers());
+        e.setAttribute(PrefixAndIdEnricher.SENSOR, " _-pretend.hostname.10.0.0.7.my-cloud.com");
+        EntityTestUtils.assertAttributeEqualsEventually(dns, BindDnsServer.A_RECORDS,
+                ImmutableMap.of("pretend-hostname-10-0-0-7-my-cloud-com", e.getAttribute(Attributes.ADDRESS)));
+    }
+
+    @Test(groups = "Integration")
+    public void testHostnameTruncatedTo63Characters() {
+        origApp.start(ImmutableList.of(origApp.newLocalhostProvisioningLocation()));
+        cluster.resize(1);
+        assertDnsEntityEventuallyHasActiveMembers(1);
+        EntityLocal e = (EntityLocal) Iterables.getOnlyElement(cluster.getMembers());
+        e.setAttribute(PrefixAndIdEnricher.SENSOR, Strings.repeat("a", 171));
+        EntityTestUtils.assertAttributeEqualsEventually(dns, BindDnsServer.A_RECORDS,
+                ImmutableMap.of(Strings.repeat("a", 63), e.getAttribute(Attributes.ADDRESS)));
+    }
+
+    @Test(groups = "Integration")
     public void testRebindDns() throws Throwable {
-        LocationSpec.create(LocalhostMachineProvisioningLocation.class);
-        origApp.start(ImmutableList.of(new LocalhostMachineProvisioningLocation()));
+        origApp.start(ImmutableList.of(origApp.newLocalhostProvisioningLocation()));
         logDnsMappings();
         assertEquals(dns.getAttribute(BindDnsServer.ADDRESS_MAPPINGS).keySet().size(), 1);
         assertMapSizes(3, 1, 2, 1);
@@ -103,7 +127,7 @@ public class BindDnsServerIntegrationTest extends RebindTestFixture<TestApplicat
 
     @Test(groups = "Integration")
     public void testMapsSeveralEntitiesOnOneMachine() {
-        origApp.start(ImmutableList.of(new LocalhostMachineProvisioningLocation()));
+        origApp.start(ImmutableList.of(origApp.newLocalhostProvisioningLocation()));
         EntityTestUtils.assertAttributeEqualsEventually(dns, Attributes.SERVICE_UP, true);
         logDnsMappings();
 


Mime
View raw message