You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@knox.apache.org by lm...@apache.org on 2015/08/11 16:12:46 UTC

knox git commit: KNOX-582 Query Parameter rewrite does not honor empty string value (jeffreyr via lmccay)

Repository: knox
Updated Branches:
  refs/heads/master dc86bde75 -> 928b4a27a


KNOX-582 Query Parameter rewrite does not honor empty string value (jeffreyr via lmccay)

Project: http://git-wip-us.apache.org/repos/asf/knox/repo
Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/928b4a27
Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/928b4a27
Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/928b4a27

Branch: refs/heads/master
Commit: 928b4a27a15246fa7901418fe43ee0649adf0c14
Parents: dc86bde
Author: Larry McCay <lm...@hortonworks.com>
Authored: Tue Aug 11 10:11:37 2015 -0400
Committer: Larry McCay <lm...@hortonworks.com>
Committed: Tue Aug 11 10:11:37 2015 -0400

----------------------------------------------------------------------
 .../hadoop/gateway/util/urltemplate/Parser.java |  2 +-
 .../gateway/util/urltemplate/ParserTest.java    |  6 ++++
 .../gateway/util/urltemplate/RewriterTest.java  | 37 +++++++++++++++++++-
 3 files changed, 43 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/knox/blob/928b4a27/gateway-util-urltemplate/src/main/java/org/apache/hadoop/gateway/util/urltemplate/Parser.java
----------------------------------------------------------------------
diff --git a/gateway-util-urltemplate/src/main/java/org/apache/hadoop/gateway/util/urltemplate/Parser.java b/gateway-util-urltemplate/src/main/java/org/apache/hadoop/gateway/util/urltemplate/Parser.java
index 63a2428..99f4806 100644
--- a/gateway-util-urltemplate/src/main/java/org/apache/hadoop/gateway/util/urltemplate/Parser.java
+++ b/gateway-util-urltemplate/src/main/java/org/apache/hadoop/gateway/util/urltemplate/Parser.java
@@ -315,7 +315,7 @@ public class Parser {
     // Otherwise the token has no value.
     } else {
       paramName = Segment.ANONYMOUS_PARAM;
-      actualPattern = null;
+      actualPattern = s;
       effectivePattern = actualPattern;
     }
     Token token = new Token( paramName, actualPattern, effectivePattern );

http://git-wip-us.apache.org/repos/asf/knox/blob/928b4a27/gateway-util-urltemplate/src/test/java/org/apache/hadoop/gateway/util/urltemplate/ParserTest.java
----------------------------------------------------------------------
diff --git a/gateway-util-urltemplate/src/test/java/org/apache/hadoop/gateway/util/urltemplate/ParserTest.java b/gateway-util-urltemplate/src/test/java/org/apache/hadoop/gateway/util/urltemplate/ParserTest.java
index a36ddae..eeabba9 100644
--- a/gateway-util-urltemplate/src/test/java/org/apache/hadoop/gateway/util/urltemplate/ParserTest.java
+++ b/gateway-util-urltemplate/src/test/java/org/apache/hadoop/gateway/util/urltemplate/ParserTest.java
@@ -1253,6 +1253,12 @@ public class ParserTest {
     assertThat( output.getParameterName(), is( "" ) );
     assertThat( output.getOriginalPattern(), is( "$" ) );
     assertThat( output.getEffectivePattern(), is( "$" ) );
+
+    input = "";
+    output = Parser.parseTemplateToken( input, Segment.GLOB_PATTERN );
+    assertThat( output.getParameterName(), is( "" ) );
+    assertThat( output.getOriginalPattern(), is( "" ) );
+    assertThat( output.getEffectivePattern(), is( "" ) );
   }
 
 }

http://git-wip-us.apache.org/repos/asf/knox/blob/928b4a27/gateway-util-urltemplate/src/test/java/org/apache/hadoop/gateway/util/urltemplate/RewriterTest.java
----------------------------------------------------------------------
diff --git a/gateway-util-urltemplate/src/test/java/org/apache/hadoop/gateway/util/urltemplate/RewriterTest.java b/gateway-util-urltemplate/src/test/java/org/apache/hadoop/gateway/util/urltemplate/RewriterTest.java
index 8d031c2..285b025 100644
--- a/gateway-util-urltemplate/src/test/java/org/apache/hadoop/gateway/util/urltemplate/RewriterTest.java
+++ b/gateway-util-urltemplate/src/test/java/org/apache/hadoop/gateway/util/urltemplate/RewriterTest.java
@@ -33,10 +33,16 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.net.URL;
+import java.net.URLDecoder;
+import java.io.UnsupportedEncodingException;
 
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
 
 @Category( { UnitTests.class, FastTests.class } )
 public class RewriterTest {
@@ -326,7 +332,36 @@ public class RewriterTest {
 
     assertThat( actualOutput, is( expectOutput ) );
   }
-  
+
+  @Test
+  public void testRewriteHonorsEmptyParameters() throws Exception {
+    Template inputTemplate, outputTemplate;
+    URI actualInput, actualOutput;
+
+    inputTemplate = Parser.parse( "*://*:*/**/oozie/{**}?{**}");
+    outputTemplate = Parser.parse( "http://localhost:11000/oozie/{**}?{**}");
+
+    actualInput = new URI("https://localhost:8443/gateway/oozieui/oozie/v2/jobs?_dc=1438899557070&filter=&timezone=GMT");
+    actualOutput = Rewriter.rewrite( actualInput, inputTemplate, outputTemplate, null, null );
+
+    Map<String, String> actualInputParameters = this.getParameters( actualInput.toURL());
+    Map<String, String> actualOutputParameters  = this.getParameters( actualOutput.toURL());
+    assertTrue( actualInputParameters.equals(actualOutputParameters));
+
+  }
+
+  private Map<String, String> getParameters(URL url) throws UnsupportedEncodingException {
+    final Map<String, String> parameter_pairs = new LinkedHashMap<String, String>();
+    final String[] pairs = url.getQuery().split("&");
+    for (String pair : pairs) {
+       final int idx = pair.indexOf("=");
+       final String key = idx > 0 ? URLDecoder.decode(pair.substring(0, idx), "UTF-8") : pair;
+       final String value = idx > 0 && pair.length() > idx + 1 ? URLDecoder.decode(pair.substring(idx + 1), "UTF-8") : "";
+       parameter_pairs.put(key, value);
+    }
+    return parameter_pairs;
+    }
+
   private class TestResolver implements Params {
 
     private FilterConfig config;