You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@slider.apache.org by bi...@apache.org on 2016/05/23 17:04:27 UTC
incubator-slider git commit: SLIDER-1124 throw exception if bad port
range is specified
Repository: incubator-slider
Updated Branches:
refs/heads/develop cfb516bd9 -> 5c391cc6c
SLIDER-1124 throw exception if bad port range is specified
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/5c391cc6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/5c391cc6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/5c391cc6
Branch: refs/heads/develop
Commit: 5c391cc6caaf772f8aa4296d3444c19c6c8ed534
Parents: cfb516b
Author: Billie Rinaldi <bi...@gmail.com>
Authored: Mon May 23 10:04:03 2016 -0700
Committer: Billie Rinaldi <bi...@gmail.com>
Committed: Mon May 23 10:04:03 2016 -0700
----------------------------------------------------------------------
.../apache/slider/common/tools/PortScanner.java | 34 ++++++++++-----
.../server/appmaster/SliderAppMaster.java | 3 +-
.../slider/common/tools/TestPortScan.groovy | 44 ++++++++++++++++++++
3 files changed, 70 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5c391cc6/slider-core/src/main/java/org/apache/slider/common/tools/PortScanner.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/common/tools/PortScanner.java b/slider-core/src/main/java/org/apache/slider/common/tools/PortScanner.java
index 5b80f9f..64783b6 100644
--- a/slider-core/src/main/java/org/apache/slider/common/tools/PortScanner.java
+++ b/slider-core/src/main/java/org/apache/slider/common/tools/PortScanner.java
@@ -17,6 +17,7 @@
package org.apache.slider.common.tools;
import org.apache.slider.common.SliderExitCodes;
+import org.apache.slider.core.exceptions.BadConfigException;
import org.apache.slider.core.exceptions.SliderException;
import java.io.IOException;
@@ -40,25 +41,38 @@ public class PortScanner {
public PortScanner() {
}
- public void setPortRange(String input) {
+ public void setPortRange(String input) throws BadConfigException {
// first split based on commas
Set<Integer> inputPorts= new TreeSet<Integer>();
String[] ranges = input.split(",");
for ( String range : ranges ) {
+ if (range.trim().isEmpty()) {
+ continue;
+ }
Matcher m = SINGLE_NUMBER.matcher(range.trim());
if (m.find()) {
inputPorts.add(Integer.parseInt(m.group()));
- } else {
- m = NUMBER_RANGE.matcher(range.trim());
- if (m.find()) {
- String[] boundaryValues = m.group(0).split("-");
- int start = Integer.parseInt(boundaryValues[0].trim());
- int end = Integer.parseInt(boundaryValues[1].trim());
- for (int i = start; i < end + 1; i++) {
- inputPorts.add(i);
- }
+ continue;
+ }
+ m = NUMBER_RANGE.matcher(range.trim());
+ if (m.find()) {
+ String[] boundaryValues = m.group(0).split("-");
+ int start = Integer.parseInt(boundaryValues[0].trim());
+ int end = Integer.parseInt(boundaryValues[1].trim());
+ if (end < start) {
+ throw new BadConfigException("End of port range is before start: "
+ + range + " in input: " + input);
}
+ for (int i = start; i < end + 1; i++) {
+ inputPorts.add(i);
+ }
+ continue;
}
+ throw new BadConfigException("Bad port range: " + range + " in input: "
+ + input);
+ }
+ if (inputPorts.size() == 0) {
+ throw new BadConfigException("No ports found in range: " + input);
}
this.remainingPortsToCheck = new ArrayList<Integer>(inputPorts);
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5c391cc6/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
index 0776a6c..b767059 100644
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
@@ -1137,7 +1137,8 @@ public class SliderAppMaster extends AbstractSliderLaunchedService
/**
* Build up the port scanner. This may include setting a port range.
*/
- private void buildPortScanner(AggregateConf instanceDefinition) {
+ private void buildPortScanner(AggregateConf instanceDefinition)
+ throws BadConfigException {
portScanner = new PortScanner();
String portRange = instanceDefinition.
getAppConfOperations().getGlobalOptions().
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5c391cc6/slider-core/src/test/groovy/org/apache/slider/common/tools/TestPortScan.groovy
----------------------------------------------------------------------
diff --git a/slider-core/src/test/groovy/org/apache/slider/common/tools/TestPortScan.groovy b/slider-core/src/test/groovy/org/apache/slider/common/tools/TestPortScan.groovy
index f009e25..4d87c75 100644
--- a/slider-core/src/test/groovy/org/apache/slider/common/tools/TestPortScan.groovy
+++ b/slider-core/src/test/groovy/org/apache/slider/common/tools/TestPortScan.groovy
@@ -18,6 +18,7 @@
package org.apache.slider.common.tools
+import org.apache.slider.core.exceptions.BadConfigException
import org.apache.slider.core.exceptions.SliderException
import org.junit.Test
@@ -125,4 +126,47 @@ class TestPortScan {
server.close()
}
}
+
+ @Test(expected = BadConfigException.class)
+ public void testBadRange() {
+ PortScanner portScanner = new PortScanner()
+ // note the em dash
+ portScanner.setPortRange("2000\u20132010")
+ }
+
+ @Test(expected = BadConfigException.class)
+ public void testEndBeforeStart() {
+ PortScanner portScanner = new PortScanner()
+ portScanner.setPortRange("2001-2000")
+ }
+
+ @Test(expected = BadConfigException.class)
+ public void testEmptyRange() {
+ PortScanner portScanner = new PortScanner()
+ portScanner.setPortRange("")
+ }
+
+ @Test(expected = BadConfigException.class)
+ public void testBlankRange() {
+ PortScanner portScanner = new PortScanner()
+ portScanner.setPortRange(" ")
+ }
+
+ @Test
+ public void testExtraComma() {
+ PortScanner portScanner = new PortScanner()
+ portScanner.setPortRange("2000-2001, ")
+ List<Integer> ports = portScanner.remainingPortsToCheck
+ def expectedPorts = [2000, 2001]
+ assert ports == expectedPorts
+ }
+
+ @Test
+ public void testExtraCommas() {
+ PortScanner portScanner = new PortScanner()
+ portScanner.setPortRange("2000-2001,, ,2003,")
+ List<Integer> ports = portScanner.remainingPortsToCheck
+ def expectedPorts = [2000, 2001, 2003]
+ assert ports == expectedPorts
+ }
}