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();
