PortRanges: check range is valid

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

Branch: refs/heads/master
Commit: 0416bd1aa04a01c0985c44d710312ebc711f798d
Parents: e0cc1a6
Author: Aled Sage <[email protected]>
Authored: Wed Feb 18 10:07:32 2015 +0000
Committer: Aled Sage <[email protected]>
Committed: Wed Feb 18 12:06:26 2015 +0000

----------------------------------------------------------------------
 .../brooklyn/location/basic/PortRanges.java     |  7 +++-
 .../brooklyn/location/basic/PortRangesTest.java | 41 +++++++++++++++++++-
 2 files changed, 45 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0416bd1a/core/src/main/java/brooklyn/location/basic/PortRanges.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/basic/PortRanges.java 
b/core/src/main/java/brooklyn/location/basic/PortRanges.java
index 63d9b23..75cd5a5 100644
--- a/core/src/main/java/brooklyn/location/basic/PortRanges.java
+++ b/core/src/main/java/brooklyn/location/basic/PortRanges.java
@@ -18,6 +18,8 @@
  */
 package brooklyn.location.basic;
 
+import static com.google.common.base.Preconditions.checkArgument;
+
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -80,7 +82,10 @@ public class PortRanges {
             this.start = start;
             this.end = end;
             this.delta = delta;
-            assert delta!=0;
+            checkArgument(start > 0 && start <= MAX_PORT, "start port %s out 
of range", start);
+            checkArgument(end > 0 && end <= MAX_PORT, "end port %s out of 
range", end);
+            checkArgument(delta > 0 ? start <= end : start >= end, "start and 
end out of order: %s to %s, delta %s", start, end, delta);
+            checkArgument(delta != 0, "delta must be non-zero");
         }
         public LinearPortRange(int start, int end) {
             this(start, end, (start<=end?1:-1));

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0416bd1a/core/src/test/java/brooklyn/location/basic/PortRangesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/location/basic/PortRangesTest.java 
b/core/src/test/java/brooklyn/location/basic/PortRangesTest.java
index c533490..506628b 100644
--- a/core/src/test/java/brooklyn/location/basic/PortRangesTest.java
+++ b/core/src/test/java/brooklyn/location/basic/PortRangesTest.java
@@ -18,16 +18,20 @@
  */
 package brooklyn.location.basic;
 
+import static org.testng.Assert.assertEquals;
+
 import java.util.Iterator;
 
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import com.google.common.collect.ImmutableList;
-
 import brooklyn.location.PortRange;
+import brooklyn.location.basic.PortRanges.LinearPortRange;
 import brooklyn.util.flags.TypeCoercions;
 
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+
 public class PortRangesTest {
 
     @Test
@@ -65,6 +69,12 @@ public class PortRangesTest {
     }
     
     @Test
+    public void testFromStringThrowsIllegalArgumentException() {
+        assertFromStringThrowsIllegalArgumentException("80-100000");
+        assertFromStringThrowsIllegalArgumentException("0-80");
+    }
+
+    @Test
     public void testCoercion() {
         PortRanges.init();
         PortRange r = TypeCoercions.coerce("80", PortRange.class);
@@ -77,6 +87,33 @@ public class PortRangesTest {
         PortRange r = TypeCoercions.coerce(80, PortRange.class);
         assertContents(r, 80);
     }
+    
+    @Test
+    public void testLinearRangeOfSizeOne() throws Exception {
+        LinearPortRange range = new LinearPortRange(80, 80);
+        assertEquals(Lists.newArrayList(range), ImmutableList.of(80));
+    }
+
+    @Test
+    public void testLinearRangeCountingUpwards() throws Exception {
+        LinearPortRange range = new LinearPortRange(80, 81);
+        assertEquals(Lists.newArrayList(range), ImmutableList.of(80, 81));
+    }
+    
+    @Test
+    public void testLinearRangeCountingDownwards() throws Exception {
+        LinearPortRange range = new LinearPortRange(80, 79);
+        assertEquals(Lists.newArrayList(range), ImmutableList.of(80, 79));
+    }
+    
+    protected void assertFromStringThrowsIllegalArgumentException(String 
range) {
+        try {
+            PortRanges.fromString(range);
+            Assert.fail();
+        } catch (IllegalArgumentException e) {
+            // success
+        }
+    }
 
     private static <T> void assertContents(Iterable<T> actual, T ...expected) {
         Iterator<T> i = actual.iterator();

Reply via email to