/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.gateway.util.urltemplate;
import org.apache.hadoop.test.category.FastTests;
import org.apache.hadoop.test.category.UnitTests;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import java.net.URISyntaxException;
import java.util.Iterator;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.junit.Assert.assertThat;
@Category( { UnitTests.class, FastTests.class } )
public class ParserTest {
private void assertBasics(
Template template,
boolean isAbsolute,
boolean isDirectory,
boolean hasQuery,
int pathSegmentsSize,
int querySegmentsSize ) {
assertThat( "Incorrect isAbsolute value.", template.isAbsolute(), is( isAbsolute ) );
assertThat( "Incorrect isDirectory value.", template.isDirectory(), is( isDirectory ) );
assertThat( "Incorrect hasQuery value.", template.hasQuery(), is( hasQuery ) );
assertThat( "Incorrect path size.", template.getPath().size(), is( pathSegmentsSize ) );
assertThat( "Incorrect query size.", template.getQuery().size(), is( querySegmentsSize ) );
}
public void assertPath(
Template template,
int index,
String paramName,
String valuePattern ) {
Path segment = template.getPath().get( index );
assertThat( "Incorrect template queryParam name.", segment.getParamName(), is( paramName ) );
assertThat( "Incorrect template value pattern.", segment.getFirstValue().getToken().getEffectivePattern(), is( valuePattern ) );
}
public void assertPath(
Template template,
int index,
String paramName,
String valuePattern,
int type,
int minRequired,
int maxAllowed ) {
Path segment = template.getPath().get( index );
assertThat( "Param name wrong.", segment.getParamName(), is( paramName ) );
assertThat( "Value pattern wrong.", segment.getFirstValue().getEffectivePattern(), is( valuePattern ) );
assertThat( "Segment type wrong.", segment.getFirstValue().getType(), is( type ) );
// assertThat( "Segment min required wrong.", segment.getMinRequired(), is( minRequired ) );
// assertThat( "Segment max allowed wrong.", segment.getMaxAllowed(), is( maxAllowed ) );
}
public void assertQuery(
Template template,
String queryName,
String paramName,
String valuePattern ) {
Query segment = template.getQuery().get( queryName );
assertThat( "Query name wrong.", segment.getQueryName(), is( queryName ));
assertThat( "Param name wrong.", segment.getParamName(), is( paramName ));
assertThat( "value pattern wrong.", segment.getFirstValue().getToken().getEffectivePattern(), is( valuePattern ) );
}
public void assertQuery(
Template template,
String queryName,
String paramName,
String valuePattern,
int type,
int minRequired,
int maxAllowed ) {
Query segment = template.getQuery().get( queryName );
assertThat( "Query name wrong.", segment.getQueryName(), is( queryName ));
assertThat( "Param name wrong.", segment.getParamName(), is( paramName ));
assertThat( "value pattern wrong.", segment.getFirstValue().getEffectivePattern(), is( valuePattern ));
assertThat( "Segment type wrong.", segment.getFirstValue().getType(), is( type ) );
// assertThat( "Segment min required wrong.", segment.getMinRequired(), is( minRequired ) );
// assertThat( "Segment max allowed wrong.", segment.getMaxAllowed(), is( maxAllowed ) );
}
@Test
public void testCompleteUrl() throws URISyntaxException {
String text;
Template template;
Parser parser = new Parser();
text = "foo://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose";
template = parser.parseTemplate( text );
assertBasics( template, true, false, true, 3, 2 );
assertThat( template.toString(), is( text ) );
}
// @Test
// public void testInvalidPatterns() {
// //TODO: ? in wrong spot.
// //TODO: & in wrong spots.
// }
// @Ignore( "TODO" )
// @Test
// public void testRegexPatterns() {
// }
@Test
public void testTemplates() throws URISyntaxException {
String text;
Template template;
text = "{path}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, false, 1, 0 );
assertPath( template, 0, "path", "**" );
assertThat( template.toString(), is( text ) );
text = "{pathA}/{pathB}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, false, 2, 0 );
assertPath( template, 0, "pathA", "**" );
assertPath( template, 1, "pathB", "**" );
assertThat( template.toString(), is( text ) );
text = "?paramA={valueA}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 1 );
assertQuery( template, "paramA", "valueA", "**" );
assertThat( template.toString(), is( text ) );
text = "?paramA={valueA}¶mB={valueB}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 2 );
assertQuery( template, "paramA", "valueA", "**" );
assertQuery( template, "paramB", "valueB", "**" );
assertThat( template.toString(), is( text ) );
text = "?paramA={valueA}?paramB={valueB}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 2 );
assertQuery( template, "paramA", "valueA", "**" );
assertQuery( template, "paramB", "valueB", "**" );
//assertThat( template.toString(), is( text ) );
text = "{pathA}?paramA={valueA}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 1, 1 );
assertPath( template, 0, "pathA", "**" );
assertQuery( template, "paramA", "valueA", "**" );
assertThat( template.toString(), is( text ) );
}
@Test
public void testStaticPatterns() throws Exception {
Parser parser = new Parser();
String text;
Template template;
text = "";
template = parser.parseTemplate( text );
assertBasics( template, false, false, false, 0, 0 );
assertThat( template.toString(), is( text ) );
text = "/";
template = parser.parseTemplate( text );
assertBasics( template, true, true, false, 0, 0 );
assertThat( template.toString(), is( text ) );
text = "?";
template = parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 0 );
assertThat( template.toString(), is( text ) );
text = "#";
template = parser.parseTemplate( text );
assertBasics( template, false, false, false, 0, 0 );
assertThat( template.hasFragment(), is( true ) );
assertThat( template.getFragment(), nullValue() );
assertThat( template.toString(), is( text ) );
text = "path";
template = parser.parseTemplate( text );
assertBasics( template, false, false, false, 1, 0 );
assertPath( template, 0, "", "path" );
assertThat( template.toString(), is( text ) );
text = "/path";
template = parser.parseTemplate( text );
assertBasics( template, true, false, false, 1, 0 );
assertPath( template, 0, "", "path" );
assertThat( template.toString(), is( text ) );
// text = "//path";
// template = parser.parseTemplate( text );
// assertBasics( template, true, false, false, 1, 0 );
// assertPath( template, 0, "", "path" );
text = "path/";
template = parser.parseTemplate( text );
assertBasics( template, false, true, false, 1, 0 );
assertPath( template, 0, "", "path" );
assertThat( template.toString(), is( text ) );
text = "path//";
template = parser.parseTemplate( text );
assertBasics( template, false, true, false, 1, 0 );
assertPath( template, 0, "", "path" );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
text = "/path/";
template = parser.parseTemplate( text );
assertBasics( template, true, true, false, 1, 0 );
assertPath( template, 0, "", "path" );
assertThat( template.toString(), is( text ) );
// text = "//path//";
// template = parser.parseTemplate( text );
// assertBasics( template, true, true, false, 1, 0 );
// assertPath( template, 0, "", "path" );
text = "pathA/pathB";
template = parser.parseTemplate( text );
assertBasics( template, false, false, false, 2, 0 );
assertPath( template, 0, "", "pathA" );
assertPath( template, 1, "", "pathB" );
assertThat( template.toString(), is( text ) );
text = "pathA//pathB";
template = parser.parseTemplate( text );
assertBasics( template, false, false, false, 2, 0 );
assertPath( template, 0, "", "pathA" );
assertPath( template, 1, "", "pathB" );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
text = "/pathA/pathB";
template = parser.parseTemplate( text );
assertBasics( template, true, false, false, 2, 0 );
assertPath( template, 0, "", "pathA" );
assertPath( template, 1, "", "pathB" );
assertThat( template.toString(), is( text ) );
text = "/pathA//pathB";
template = parser.parseTemplate( text );
assertBasics( template, true, false, false, 2, 0 );
assertPath( template, 0, "", "pathA" );
assertPath( template, 1, "", "pathB" );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
text = "pathA/pathB/";
template = parser.parseTemplate( text );
assertBasics( template, false, true, false, 2, 0 );
assertPath( template, 0, "", "pathA" );
assertPath( template, 1, "", "pathB" );
assertThat( template.toString(), is( text ) );
text = "pathA//pathB/";
template = parser.parseTemplate( text );
assertBasics( template, false, true, false, 2, 0 );
assertPath( template, 0, "", "pathA" );
assertPath( template, 1, "", "pathB" );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
text = "/pathA/pathB/";
template = parser.parseTemplate( text );
assertBasics( template, true, true, false, 2, 0 );
assertPath( template, 0, "", "pathA" );
assertPath( template, 1, "", "pathB" );
assertThat( template.toString(), is( text ) );
text = "/pathA//pathB/";
template = parser.parseTemplate( text );
assertBasics( template, true, true, false, 2, 0 );
assertPath( template, 0, "", "pathA" );
assertPath( template, 1, "", "pathB" );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
text = "/?";
template = parser.parseTemplate( text );
assertBasics( template, true, true, true, 0, 0 );
assertThat( template.toString(), is( text ) );
// text = "//??";
// template = parser.parseTemplate( text );
// assertBasics( template, true, true, true, 0, 0 );
text = "?name=value";
template = parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 1 );
assertQuery( template, "name", "", "value" );
assertThat( template.toString(), is( text ) );
text = "?name1=value1&name2=value2";
template = parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 2 );
assertQuery( template, "name1", "", "value1" );
assertQuery( template, "name2", "", "value2" );
assertThat( template.toString(), is( text ) );
text = "?name1=value1&&name2=value2";
template = parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 2 );
assertQuery( template, "name1", "", "value1" );
assertQuery( template, "name2", "", "value2" );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
text = "/?name=value";
template = parser.parseTemplate( text );
assertBasics( template, true, true, true, 0, 1 );
assertQuery( template, "name", "", "value" );
assertThat( template.toString(), is( text ) );
text = "/?name1=value1&name2=value2";
template = parser.parseTemplate( text );
assertBasics( template, true, true, true, 0, 2 );
assertQuery( template, "name1", "", "value1" );
assertQuery( template, "name2", "", "value2" );
assertThat( template.toString(), is( text ) );
}
@Test
public void testParameterizedPathTemplatesWithWildcardAndRegex() throws URISyntaxException {
String text;
Template template;
text = "{path}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, false, 1, 0 );
assertPath( template, 0, "path", "**", Segment.GLOB, 1, 1 );
assertThat( template.toString(), is( text ) );
text = "{path=static}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, false, 1, 0 );
assertPath( template, 0, "path", "static", Segment.STATIC, 1, 1 );
assertThat( template.toString(), is( text ) );
text = "{path=*}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, false, 1, 0 );
assertPath( template, 0, "path", "*", Segment.STAR, 1, 1 );
assertThat( template.toString(), is( text ) );
text = "{path=**}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, false, 1, 0 );
assertPath( template, 0, "path", "**", Segment.GLOB, 0, Integer.MAX_VALUE );
assertThat( template.toString(), is( text ) );
text = "{path=wild*card}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, false, 1, 0 );
assertPath( template, 0, "path", "wild*card", Segment.REGEX, 1, 1 );
assertThat( template.toString(), is( text ) );
}
@Test
public void testParameterizedQueryTemplatesWithWildcardAndRegex() throws URISyntaxException {
String text;
Template template;
text = "?query={queryParam}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 1 );
assertQuery( template, "query", "queryParam", "**", Segment.GLOB, 1, 1 );
assertThat( template.toString(), is( text ) );
text = "?query={queryParam=static}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 1 );
assertQuery( template, "query", "queryParam", "static", Segment.STATIC, 1, 1 );
assertThat( template.toString(), is( text ) );
text = "?query={queryParam=*}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 1 );
assertQuery( template, "query", "queryParam", "*", Segment.STAR, 1, 1 );
assertThat( template.toString(), is( text ) );
text = "?query={queryParam=**}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 1 );
assertQuery( template, "query", "queryParam", "**", Segment.GLOB, 0, Integer.MAX_VALUE );
assertThat( template.toString(), is( text ) );
text = "?query={queryParam=wild*card}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 1 );
assertQuery( template, "query", "queryParam", "wild*card", Segment.REGEX, 1, 1 );
assertThat( template.toString(), is( text ) );
}
@Test
public void testGlobPattern() throws URISyntaxException {
String text;
Template template;
text = "**";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, false, 1, 0 );
assertThat( template.toString(), is( text ) );
text = "/**";
template = Parser.parseTemplate( text );
assertBasics( template, true, false, false, 1, 0 );
assertThat( template.toString(), is( text ) );
text = "**/";
template = Parser.parseTemplate( text );
assertBasics( template, false, true, false, 1, 0 );
assertThat( template.toString(), is( text ) );
text = "/**/";
template = Parser.parseTemplate( text );
assertBasics( template, true, true, false, 1, 0 );
assertThat( template.toString(), is( text ) );
text = "/**/path";
template = Parser.parseTemplate( text );
assertBasics( template, true, false, false, 2, 0 );
assertThat( template.toString(), is( text ) );
}
// @Ignore( "TODO" )
// @Test
// public void testPatternsWithSchemeAndAuthority() throws URISyntaxException {
// String text;
// Template template;
//
// text = "http:";
// template = Parser.parse( text );
//
// text = "http:/path";
// template = Parser.parse( text );
//
// text = "http://host";
// template = Parser.parse( text );
//
// text = "http://host/";
// template = Parser.parse( text );
//
// text = "http://host:80";
// template = Parser.parse( text );
//
// text = "http://host:80/";
// template = Parser.parse( text );
//
//
// text = "{scheme}:";
// template = Parser.parse( text );
//
// text = "{scheme}:/{path}";
// template = Parser.parse( text );
//
// text = "{scheme}://{host}";
// template = Parser.parse( text );
//
// text = "{scheme}://{host}/";
// template = Parser.parse( text );
//
// text = "{scheme}://{host}:{port}";
// template = Parser.parse( text );
//
// text = "{scheme}://{host}:{port}/";
// template = Parser.parse( text );
//
//
// text = "{scheme=http}:/{path=index.html}";
// template = Parser.parse( text );
//
// text = "{scheme=http}://{host=*.com}";
// template = Parser.parse( text );
//
// text = "{scheme=https}://{host=*.edu}/";
// template = Parser.parse( text );
//
// text = "{scheme=rmi}://{host=*}:{port=80}";
// template = Parser.parse( text );
//
// text = "{scheme=ftp}://{host=localhost*}:{port=*80}/";
// template = Parser.parse( text );
// }
@Test
public void testAuthority() throws URISyntaxException {
String text;
Template template;
String image;
text = "//";
template = Parser.parseTemplate( text );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template.getUsername(), nullValue() );
assertThat( template.getPassword(), nullValue() );
assertThat( template.getHost(), nullValue() );
assertThat( template.getPort(), nullValue() );
assertThat( template.toString(), is( text ) );
text = "//:@:";
template = Parser.parseTemplate( text );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template.getUsername(), nullValue() );
assertThat( template.getPassword(), nullValue() );
assertThat( template.getHost(), nullValue() );
assertThat( template.getPort(), nullValue() );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
text = "//host";
template = Parser.parseTemplate( text );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template.getUsername(), nullValue() );
assertThat( template.getPassword(), nullValue() );
assertThat( template.getHost().getFirstValue().getOriginalPattern(), is( "host" ) );
assertThat( template.getHost().getFirstValue().getEffectivePattern(), is( "host" ) );
assertThat( template.getPort(), nullValue() );
assertThat( template.toString(), is( text ) );
text = "//@host";
template = Parser.parseTemplate( text );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template.getUsername(), nullValue() );
assertThat( template.getPassword(), nullValue() );
assertThat( template.getHost().getFirstValue().getOriginalPattern(), is( "host" ) );
assertThat( template.getHost().getFirstValue().getEffectivePattern(), is( "host" ) );
assertThat( template.getPort(), nullValue() );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
text = "//@:80";
template = Parser.parseTemplate( text );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template.getUsername(), nullValue() );
assertThat( template.getPassword(), nullValue() );
assertThat( template.getHost(), nullValue() );
assertThat( template.getPort().getFirstValue().getOriginalPattern(), is( "80" ) );
assertThat( template.getPort().getFirstValue().getEffectivePattern(), is( "80" ) );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
text = "//username@";
template = Parser.parseTemplate( text );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template.getUsername().getFirstValue().getOriginalPattern(), is( "username" ) );
assertThat( template.getUsername().getFirstValue().getEffectivePattern(), is( "username" ) );
assertThat( template.getPassword(), nullValue() );
assertThat( template.getHost(), nullValue() );
assertThat( template.getPort(), nullValue() );
assertThat( template.toString(), is( text ) );
text = "//:password@";
template = Parser.parseTemplate( text );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template.getUsername(), nullValue() );
assertThat( template.getPassword().getFirstValue().getOriginalPattern(), is( "password" ) );
assertThat( template.getPassword().getFirstValue().getEffectivePattern(), is( "password" ) );
assertThat( template.getHost(), nullValue() );
assertThat( template.getPort(), nullValue() );
assertThat( template.toString(), is( text ) );
text = "//{host}:{port}";
template = Parser.parseTemplate( text );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template.getUsername(), nullValue() );
assertThat( template.getPassword(), nullValue() );
assertThat( template.getHost().getParamName(), is( "host" ) );
assertThat( template.getHost().getFirstValue().getOriginalPattern(), nullValue() );
assertThat( template.getHost().getFirstValue().getEffectivePattern(), is( "*" ) );
assertThat( template.getPort().getParamName(), is( "port" ) );
assertThat( template.getPort().getFirstValue().getOriginalPattern(), nullValue() );
assertThat( template.getPort().getFirstValue().getEffectivePattern(), is( "*" ) );
image = template.toString();
assertThat( image, is( "//{host}:{port}" ) );
assertThat( template.toString(), is( text ) );
text = "{host}:{port}";
template = Parser.parseTemplate( text );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template.getUsername(), nullValue() );
assertThat( template.getPassword(), nullValue() );
assertThat( template.getHost().getParamName(), is( "host" ) );
assertThat( template.getHost().getFirstValue().getOriginalPattern(), nullValue() );
assertThat( template.getHost().getFirstValue().getEffectivePattern(), is( "*" ) );
assertThat( template.getPort().getParamName(), is( "port" ) );
assertThat( template.getPort().getFirstValue().getOriginalPattern(), nullValue() );
assertThat( template.getPort().getFirstValue().getEffectivePattern(), is( "*" ) );
image = template.toString();
assertThat( image, is( "{host}:{port}" ) );
assertThat( template.toString(), is( text ) );
}
@Test
public void testQuery() throws URISyntaxException {
String text;
Template template;
Query query;
Iterator<Segment.Value> values;
Segment.Value value;
text = "?queryName";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 1 );
query = template.getQuery().get( "queryName" );
assertThat( query, notNullValue() );
assertThat( query.getQueryName(), is( "queryName" ) );
assertThat( query.getParamName(), is( "" ) );
assertThat( query.getFirstValue().getEffectivePattern(), nullValue() ); //is( "*" ) );
assertThat( template.toString(), is( text ) );
text = "?query=value1&query=value2";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 1 );
query = template.getQuery().get( "query" );
assertThat( query, notNullValue() );
assertThat( query.getQueryName(), is( "query" ) );
assertThat( query.getParamName(), is( "" ) );
values = query.getValues().iterator();
value = values.next();
assertThat( value.getOriginalPattern(), is( "value1" ) );
assertThat( value.getEffectivePattern(), is( "value1" ) );
value = values.next();
assertThat( value.getOriginalPattern(), is( "value2" ) );
assertThat( value.getEffectivePattern(), is( "value2" ) );
assertThat( values.hasNext(), is( false ) );
assertThat( template.toString(), is( text ) );
}
@Test
public void testFragment() throws URISyntaxException {
String text;
Template template;
text = "#fragment";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, false, 0, 0 );
assertThat( template.hasFragment(), is( true ) );
assertThat( template.getFragment().getFirstValue().getEffectivePattern(), is( "fragment" ) );
assertThat( template.toString(), is( text ) );
}
@Test
public void testEdgeCases() throws URISyntaxException {
Parser parser = new Parser();
String text;
Template template;
text = "//";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, false, 0, 0 );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template.toString(), is( text ) );
text = "??";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 0 );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
text = "##";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, false, 0, 0 );
assertThat( template.hasFragment(), is( true ) );
assertThat( template.getFragment().getFirstValue().getEffectivePattern(), is( "#" ) );
assertThat( template.toString(), is( text ) );
text = "??name=value";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 1 );
assertQuery( template, "name", "", "value" );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
text = "//?";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 0 );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template.getUsername(), nullValue() );
assertThat( template.getPassword(), nullValue() );
assertThat( template.getHost(), nullValue() );
assertThat( template.getPort(), nullValue() );
assertThat( template.toString(), is( text ) );
text = "//#";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, false, 0, 0 );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template.getUsername(), nullValue() );
assertThat( template.getPassword(), nullValue() );
assertThat( template.getHost(), nullValue() );
assertThat( template.getPort(), nullValue() );
assertThat( template.toString(), is( text ) );
text = ":";
template = parser.parseTemplate( text );
assertBasics( template, false, false, false, 1, 0 );
assertThat( template.hasScheme(), is( false ) );
assertThat( template.getScheme(), nullValue() );
assertThat( template.hasAuthority(), is( false ) );
assertThat( template.getHost(), nullValue() );
assertThat( template.getPort(), nullValue() );
assertThat( template.getPath().get( 0 ).getFirstValue().getOriginalPattern(), is( ":" ) );
assertThat( template.getPath().get( 0 ).getFirstValue().getEffectivePattern(), is( ":" ) );
assertThat( template.toString(), is( ":" ) );
assertThat( template.toString(), is( text ) );
text = ":?";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 1, 0 );
assertThat( template.hasScheme(), is( false ) );
assertThat( template.getScheme(), nullValue() );
assertThat( template.getPath().get( 0 ).getFirstValue().getOriginalPattern(), is( ":" ) );
assertThat( template.getPath().get( 0 ).getFirstValue().getEffectivePattern(), is( ":" ) );
assertThat( template.hasQuery(), is( true ) );
assertThat( template.toString(), is( text ) );
text = ":#";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, false, 1, 0 );
assertThat( template.hasScheme(), is( false ) );
assertThat( template.getScheme(), nullValue() );
assertThat( template.getPath().get( 0 ).getFirstValue().getOriginalPattern(), is( ":" ) );
assertThat( template.getPath().get( 0 ).getFirstValue().getEffectivePattern(), is( ":" ) );
assertThat( template.hasFragment(), is( true ) );
assertThat( template.getFragment(), nullValue() );
assertThat( template.toString(), is( text ) );
text = "http:?";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 0 );
assertThat( template.hasScheme(), is( true ) );
assertThat( template.getScheme().getFirstValue().getOriginalPattern(), is( "http" ) );
assertThat( template.getScheme().getFirstValue().getEffectivePattern(), is( "http" ) );
assertThat( template.hasQuery(), is( true ) );
assertThat( template.toString(), is( text ) );
text = "http:#";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, false, 0, 0 );
assertThat( template.hasScheme(), is( true ) );
assertThat( template.getScheme().getFirstValue().getOriginalPattern(), is( "http" ) );
assertThat( template.getScheme().getFirstValue().getEffectivePattern(), is( "http" ) );
assertThat( template.hasFragment(), is( true ) );
assertThat( template.getFragment(), nullValue() );
assertThat( template.toString(), is( text ) );
text = "scheme:path?";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 1, 0 );
assertThat( template.toString(), is( text ) );
text = "scheme:path#";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, false, 1, 0 );
assertThat( template.hasFragment(), is( true ) );
assertThat( template.getFragment(), nullValue() );
assertThat( template.toString(), is( text ) );
text = "//host/";
template = Parser.parseTemplate( text );
assertBasics( template, true, true, false, 0, 0 );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template.getHost().getFirstValue().getOriginalPattern(), is( "host" ) );
assertThat( template.getHost().getFirstValue().getEffectivePattern(), is( "host" ) );
assertThat( template.toString(), is( text ) );
text = "//host?";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 0 );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template.getHost().getFirstValue().getOriginalPattern(), is( "host" ) );
assertThat( template.getHost().getFirstValue().getEffectivePattern(), is( "host" ) );
assertThat( template.toString(), is( text ) );
text = "//host#";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, false, 0, 0 );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template.hasFragment(), is( true ) );
assertThat( template.getFragment(), nullValue() );
assertThat( template.getHost().getFirstValue().getOriginalPattern(), is( "host" ) );
assertThat( template.getHost().getFirstValue().getEffectivePattern(), is( "host" ) );
assertThat( template.toString(), is( text ) );
text = "///";
template = Parser.parseTemplate( text );
assertBasics( template, true, true, false, 0, 0 );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template.toString(), is( text ) );
text = "//:";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, false, 0, 0 );
assertThat( template.hasAuthority(), is( true ) );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
text = "//?";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 0 );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template.toString(), is( text ) );
text = "//#";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, false, 0, 0 );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template.hasFragment(), is( true ) );
assertThat( template.getFragment(), nullValue() );
assertThat( template.toString(), is( text ) );
text = "//:/";
template = Parser.parseTemplate( text );
assertBasics( template, true, true, false, 0, 0 );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template.getHost(), nullValue() );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
text = "//:?";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 0 );
assertThat( template.getHost(), nullValue() );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
text = "//:#";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, false, 0, 0 );
assertThat( template.hasFragment(), is( true ) );
assertThat( template.getHost(), nullValue() );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
text = "///#";
template = Parser.parseTemplate( text );
assertBasics( template, true, true, false, 0, 0 );
assertThat( template.hasFragment(), is( true ) );
assertThat( template.getHost(), nullValue() );
assertThat( template.getFragment(), nullValue() );
assertThat( template.toString(), is( text ) );
text = "///path#";
template = Parser.parseTemplate( text );
assertBasics( template, true, false, false, 1, 0 );
assertThat( template.hasFragment(), is( true ) );
assertThat( template.getHost(), nullValue() );
assertThat( template.getFragment(), nullValue() );
assertThat( template.toString(), is( text ) );
text = "///?";
template = Parser.parseTemplate( text );
assertBasics( template, true, true, true, 0, 0 );
assertThat( template.getHost(), nullValue() );
assertThat( template.getFragment(), nullValue() );
assertThat( template.toString(), is( text ) );
text = "///path?";
template = Parser.parseTemplate( text );
assertBasics( template, true, false, true, 1, 0 );
assertThat( template.getHost(), nullValue() );
assertThat( template.getFragment(), nullValue() );
assertThat( template.toString(), is( text ) );
}
@Test
public void testQueryRemainder() throws URISyntaxException {
String text;
Template template;
Query query;
text = "?*";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 0 );
query = template.getExtra();
assertThat( query, notNullValue() );
assertThat( query.getQueryName(), is( "*" ) );
assertThat( query.getParamName(), is( "" ) );
assertThat( query.getFirstValue().getOriginalPattern(), nullValue() );
assertThat( query.getFirstValue().getEffectivePattern(), nullValue() ); //is( "*" ) );
assertThat( template.toString(), is( text ) );
text = "?**";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 0 );
query = template.getExtra();
assertThat( query, notNullValue() );
assertThat( query.getQueryName(), is( "**" ) );
assertThat( query.getParamName(), is( "" ) );
assertThat( query.getFirstValue().getOriginalPattern(), nullValue() );
assertThat( query.getFirstValue().getEffectivePattern(), nullValue() ); //is( "*" ) );
assertThat( template.toString(), is( text ) );
text = "?{*}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 0 );
query = template.getExtra();
assertThat( query, notNullValue() );
assertThat( query.getQueryName(), is( "*" ) );
assertThat( query.getParamName(), is( "*" ) );
assertThat( query.getFirstValue().getOriginalPattern(), nullValue() );
assertThat( query.getFirstValue().getEffectivePattern(), is( "**" ) );
assertThat( template.toString(), is( text ) );
text = "?{**}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 0 );
query = template.getExtra();
assertThat( query, notNullValue() );
assertThat( query.getQueryName(), is( "**" ) );
assertThat( query.getParamName(), is( "**" ) );
assertThat( query.getFirstValue().getOriginalPattern(), nullValue() );
assertThat( query.getFirstValue().getEffectivePattern(), is( "**" ) );
assertThat( template.toString(), is( text ) );
text = "?*={*}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 0 );
query = template.getExtra();
assertThat( query, notNullValue() );
assertThat( query.getQueryName(), is( "*" ) );
assertThat( query.getParamName(), is( "*" ) );
assertThat( query.getFirstValue().getOriginalPattern(), nullValue() );
assertThat( query.getFirstValue().getEffectivePattern(), is( "**" ) );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
text = "?**={**}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 0 );
query = template.getExtra();
assertThat( query, notNullValue() );
assertThat( query.getQueryName(), is( "**" ) );
assertThat( query.getParamName(), is( "**" ) );
assertThat( query.getFirstValue().getOriginalPattern(), nullValue() );
assertThat( query.getFirstValue().getEffectivePattern(), is( "**" ) );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
text = "?**={**=**}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 0 );
query = template.getExtra();
assertThat( query, notNullValue() );
assertThat( query.getQueryName(), is( "**" ) );
assertThat( query.getParamName(), is( "**" ) );
assertThat( query.getFirstValue().getOriginalPattern(), is( "**" ) );
assertThat( query.getFirstValue().getEffectivePattern(), is( "**" ) );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
}
@Test
public void testSimplifiedQuerySyntax() throws URISyntaxException {
String text;
Template template;
Query query;
text = "?{queryParam}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 1 );
query = template.getQuery().get( "queryParam" );
assertThat( query, notNullValue() );
assertThat( query.getQueryName(), is( "queryParam" ) );
assertThat( query.getParamName(), is( "queryParam" ) );
assertThat( query.getFirstValue().getOriginalPattern(), nullValue() );
assertThat( query.getFirstValue().getEffectivePattern(), is( "**" ) );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
text = "?{queryParam=value}";
template = Parser.parseTemplate( text );
assertBasics( template, false, false, true, 0, 1 );
query = template.getQuery().get( "queryParam" );
assertThat( query, notNullValue() );
assertThat( query.getQueryName(), is( "queryParam" ) );
assertThat( query.getParamName(), is( "queryParam" ) );
assertThat( query.getFirstValue().getOriginalPattern(), is( "value" ) );
assertThat( query.getFirstValue().getEffectivePattern(), is( "value" ) );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
}
@Test
public void testAllWildcardUseCases() throws URISyntaxException {
String text;
Template template;
text = "*://*:*/**?**";
template = Parser.parseTemplate( text );
assertThat( template, notNullValue() );
assertThat( template.toString(), is( text ) );
text = "*://*:*/**/path?{**}";
template = Parser.parseTemplate( text );
assertThat( template, notNullValue() );
assertThat( template.toString(), is( text ) );
text = "*://*:*/**/webhdfs/v1/?{**}";
template = Parser.parseTemplate( text );
assertThat( template, notNullValue() );
assertThat( template.toString(), is( text ) );
}
@Test
public void testQueryNameWithoutValue() throws URISyntaxException {
Parser parser = new Parser();
String text;
Template template;
String string;
Expander expander = new Expander();
text = "*://*:*/**?X";
template = parser.parseTemplate( text );
assertThat( template.hasScheme(), is( true ) );
assertThat( template.getScheme().getParamName(), is( "" ) );
assertThat( template.getScheme().getFirstValue().getOriginalPattern(), is( "*" ) );
assertThat( template.getScheme().getFirstValue().getEffectivePattern(), is( "*" ) );
assertThat( template.getHost().getParamName(), is( "" ) );
assertThat( template.getHost().getFirstValue().getOriginalPattern(), is( "*" ) );
assertThat( template.getHost().getFirstValue().getEffectivePattern(), is( "*" ) );
assertThat( template.getPort().getParamName(), is( "" ) );
assertThat( template.getPort().getFirstValue().getOriginalPattern(), is( "*" ) );
assertThat( template.getPort().getFirstValue().getEffectivePattern(), is( "*" ) );
assertThat( template.getPath().size(), is( 1 ) );
assertThat( template.getPath().get( 0 ).getParamName(), is( "" ) );
assertThat( template.getPath().get( 0 ).getFirstValue().getOriginalPattern(), is( "**" ) );
assertThat( template.getPath().get( 0 ).getFirstValue().getEffectivePattern(), is( "**" ) );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template, notNullValue() );
assertThat( template.getQuery().get( "X" ), notNullValue() );
string = expander.expandToString( template, null, null );
assertThat( string, is( text ) );
assertThat( template.toString(), is( text ) );
text = "*://*:*/**?X=";
template = Parser.parseTemplate( text );
assertThat( template, notNullValue() );
assertThat( template.getQuery().get( "X" ), notNullValue() );
string = expander.expandToString( template, null, null );
assertThat( string, is( "*://*:*/**?X" ) );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
text = "http://localhost:62142/gateway/cluster/webhdfs/data/v1/tmp/GatewayWebHdfsFuncTest/testBasicHdfsUseCase/dir/file?aG9zdD1sb2NhbGhvc3QmcG9ydD02MjEzOSZvcD1DUkVBVEUmdXNlci5uYW1lPWhkZnM";
template = Parser.parseTemplate( text );
assertThat( template, notNullValue() );
assertThat( template.getQuery().get( "aG9zdD1sb2NhbGhvc3QmcG9ydD02MjEzOSZvcD1DUkVBVEUmdXNlci5uYW1lPWhkZnM" ), notNullValue() );
string = expander.expandToString( template, null, null );
assertThat( string, is( "http://localhost:62142/gateway/cluster/webhdfs/data/v1/tmp/GatewayWebHdfsFuncTest/testBasicHdfsUseCase/dir/file?aG9zdD1sb2NhbGhvc3QmcG9ydD02MjEzOSZvcD1DUkVBVEUmdXNlci5uYW1lPWhkZnM" ) );
assertThat( template.toString(), is( text ) );
text = "http://localhost:62142/gateway/cluster/webhdfs/data/v1/tmp/GatewayWebHdfsFuncTest/testBasicHdfsUseCase/dir/file?aG9zdD1sb2NhbGhvc3QmcG9ydD02MjEzOSZvcD1DUkVBVEUmdXNlci5uYW1lPWhkZnM=";
template = Parser.parseTemplate( text );
assertThat( template, notNullValue() );
assertThat( template.getQuery().get( "aG9zdD1sb2NhbGhvc3QmcG9ydD02MjEzOSZvcD1DUkVBVEUmdXNlci5uYW1lPWhkZnM" ), notNullValue() );
string = expander.expandToString( template, null, null );
assertThat( string, is( "http://localhost:62142/gateway/cluster/webhdfs/data/v1/tmp/GatewayWebHdfsFuncTest/testBasicHdfsUseCase/dir/file?aG9zdD1sb2NhbGhvc3QmcG9ydD02MjEzOSZvcD1DUkVBVEUmdXNlci5uYW1lPWhkZnM" ) );
//IMPROVE assertThat( template.toString(), is( text ) );
assertThat( template.getPattern(), is( text ) );
}
@Test
public void testTemplateWithOnlyAuthority() throws Exception {
String text;
Template template;
Parser parser = new Parser();
text = "test-host:42";
template = parser.parseTemplate( text );
assertThat( template.hasScheme(), is( false ) );
assertThat( template.getHost().getFirstValue().getOriginalPattern(), is( "test-host" ) );
assertThat( template.getHost().getFirstValue().getEffectivePattern(), is( "test-host" ) );
assertThat( template.getPort().getFirstValue().getOriginalPattern(), is( "42" ) );
assertThat( template.getPort().getFirstValue().getEffectivePattern(), is( "42" ) );
assertThat( template.toString(), is( text ) );
text = "{test-host}:{test-port}";
template = parser.parseTemplate( text );
assertThat( template.hasScheme(), is( false ) );
assertThat( template.getHost().getParamName(), is( "test-host" ) );
assertThat( template.getHost().getFirstValue().getToken().getOriginalPattern(), nullValue() );
assertThat( template.getHost().getFirstValue().getToken().getEffectivePattern(), is( "*" ) );
assertThat( template.getPort().getParamName(), is( "test-port" ) );
assertThat( template.getHost().getFirstValue().getToken().getOriginalPattern(), nullValue() );
assertThat( template.getPort().getFirstValue().getToken().getEffectivePattern(), is( "*" ) );
assertThat( template.toString(), is( text ) );
}
@Test
public void testTemplateWithoutAuthority() throws Exception {
String text;
Template template;
Parser parser = new Parser();
text = "test-scheme:/test-path";
template = parser.parseTemplate( text );
assertThat( template.hasScheme(), is( true ) );
assertThat( template.getScheme().getFirstValue().getOriginalPattern(), is( "test-scheme" ) );
assertThat( template.getScheme().getFirstValue().getEffectivePattern(), is( "test-scheme" ) );
assertThat( template.hasAuthority(), is( false ) );
assertThat( template.getPath().size(), is( 1 ) );
assertThat( template.getPath().get( 0 ).getFirstValue().getOriginalPattern(), is( "test-path" ) );
assertThat( template.getPath().get( 0 ).getFirstValue().getEffectivePattern(), is( "test-path" ) );
assertThat( template.hasQuery(), is( false ) );
assertThat( template.toString(), is( text ) );
text = "test-scheme:///test-path";
template = parser.parseTemplate( text );
assertThat( template.hasScheme(), is( true ) );
assertThat( template.getScheme().getFirstValue().getOriginalPattern(), is( "test-scheme" ) );
assertThat( template.getScheme().getFirstValue().getEffectivePattern(), is( "test-scheme" ) );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template.getUsername(), nullValue() );
assertThat( template.getPassword(), nullValue() );
assertThat( template.getHost(), nullValue() );
assertThat( template.getPort(), nullValue() );
assertThat( template.getPath().size(), is( 1 ) );
assertThat( template.getPath().get( 0 ).getFirstValue().getEffectivePattern(), is( "test-path" ) );
assertThat( template.hasQuery(), is( false ) );
assertThat( template.toString(), is( text ) );
text = "{test-scheme}:/{test-path}";
template = parser.parseTemplate( text );
assertThat( template.hasScheme(), is( true ) );
assertThat( template.getScheme().getParamName(), is( "test-scheme" ) );
assertThat( template.getScheme().getFirstValue().getOriginalPattern(), nullValue() );
assertThat( template.getScheme().getFirstValue().getEffectivePattern(), is( "*" ) );
assertThat( template.hasAuthority(), is( false ) );
assertThat( template.getPath().size(), is( 1 ) );
assertThat( template.getPath().get( 0 ).getParamName(), is( "test-path" ) );
assertThat( template.getPath().get( 0 ).getFirstValue().getOriginalPattern(), nullValue() );
assertThat( template.getPath().get( 0 ).getFirstValue().getEffectivePattern(), is( "**" ) );
assertThat( template.hasQuery(), is( false ) );
assertThat( template.toString(), is( text ) );
text = "{test-scheme}:///{test-path}";
template = parser.parseTemplate( text );
assertThat( template.hasScheme(), is( true ) );
assertThat( template.getScheme().getParamName(), is( "test-scheme" ) );
assertThat( template.getScheme().getFirstValue().getOriginalPattern(), nullValue() );
assertThat( template.getScheme().getFirstValue().getEffectivePattern(), is( "*" ) );
assertThat( template.hasAuthority(), is( true ) );
assertThat( template.getUsername(), nullValue() );
assertThat( template.getPassword(), nullValue() );
assertThat( template.getHost(), nullValue() );
assertThat( template.getPort(), nullValue() );
assertThat( template.getPath().size(), is( 1 ) );
assertThat( template.getPath().get( 0 ).getParamName(), is( "test-path" ) );
assertThat( template.getPath().get( 0 ).getFirstValue().getOriginalPattern(), nullValue() );
assertThat( template.getPath().get( 0 ).getFirstValue().getEffectivePattern(), is( "**" ) );
assertThat( template.hasQuery(), is( false ) );
assertThat( template.toString(), is( text ) );
}
@Test
public void testAuthorityWildcards() throws Exception {
String text;
Template template;
text = "*://*:*/";
template = Parser.parseTemplate( text );
assertThat( template.getHost().getFirstValue().getOriginalPattern(), is( "*" ) );
assertThat( template.getHost().getFirstValue().getEffectivePattern(), is( "*" ) );
assertThat( template.getPort().getFirstValue().getOriginalPattern(), is( "*" ) );
assertThat( template.getPort().getFirstValue().getEffectivePattern(), is( "*" ) );
assertThat( template.toString(), is( text ) );
text = "*://**/";
template = Parser.parseTemplate( text );
assertThat( template.getHost().getFirstValue().getOriginalPattern(), is( "**" ) );
assertThat( template.getHost().getFirstValue().getEffectivePattern(), is( "*" ) );
assertThat( template.getPort(), nullValue() );
assertThat( template.toString(), is( text ) );
text = "*://*/";
template = Parser.parseTemplate( text );
assertThat( template.getHost().getFirstValue().getOriginalPattern(), is( "*" ) );
assertThat( template.getHost().getFirstValue().getEffectivePattern(), is( "*" ) );
assertThat( template.getPort(), nullValue() );
assertThat( template.toString(), is( text ) );
text = "*://**:**/";
template = Parser.parseTemplate( text );
assertThat( template.getHost().getFirstValue().getOriginalPattern(), is( "**" ) );
assertThat( template.getHost().getFirstValue().getEffectivePattern(), is( "*" ) );
assertThat( template.getPort().getFirstValue().getOriginalPattern(), is( "**" ) );
assertThat( template.getPort().getFirstValue().getEffectivePattern(), is( "*" ) );
assertThat( template.toString(), is( text ) );
}
@Test
public void testParseTemplateToken() {
Builder builder;
String input;
Token output;
builder = new Builder( "" );
input = "{";
output = Parser.parseTemplateToken( builder, input, "~" );
assertThat( output.getParameterName(), is( "" ) );
assertThat( output.getOriginalPattern(), is( "{" ) );
assertThat( output.getEffectivePattern(), is( "{" ) );
input = "}";
output = Parser.parseTemplateToken( builder, input, "~" );
assertThat( output.getParameterName(), is( "" ) );
assertThat( output.getOriginalPattern(), is( "}" ) );
assertThat( output.getEffectivePattern(), is( "}" ) );
input = "{X";
output = Parser.parseTemplateToken( builder, input, "~" );
assertThat( output.getParameterName(), is( "" ) );
assertThat( output.getOriginalPattern(), is( "{X" ) );
assertThat( output.getEffectivePattern(), is( "{X" ) );
input = "X}";
output = Parser.parseTemplateToken( builder, input, "~" );
assertThat( output.getParameterName(), is( "" ) );
assertThat( output.getOriginalPattern(), is( "X}" ) );
assertThat( output.getEffectivePattern(), is( "X}" ) );
input = "X";
output = Parser.parseTemplateToken( builder, input, "~" );
assertThat( output.getParameterName(), is( "" ) );
assertThat( output.getOriginalPattern(), is( "X" ) );
assertThat( output.getEffectivePattern(), is( "X" ) );
input = "$";
output = Parser.parseTemplateToken( builder, input, "~" );
assertThat( output.getParameterName(), is( "" ) );
assertThat( output.getOriginalPattern(), is( "$" ) );
assertThat( output.getEffectivePattern(), is( "$" ) );
input = "";
output = Parser.parseTemplateToken( builder, input, Segment.GLOB_PATTERN );
assertThat( output.getParameterName(), is( "" ) );
assertThat( output.getOriginalPattern(), is( "" ) );
assertThat( output.getEffectivePattern(), is( "" ) );
}
@Test
public void testBugKnox599() throws Exception {
Template template;
Template input;
Matcher<String> matcher;
matcher = new Matcher<String>();
template = Parser.parseTemplate( "*://*:*/**/webhdfs/v1/{path=**}?{**}" );
matcher.add( template, "test-value" );
input = Parser.parseTemplate( "http://kminder-os-u14-23-knoxha-150922-1352-2.novalocal:1022/gateway/sandbox/webhdfs/v1/user/hrt_qa/knox-ha/knox_webhdfs_client_dir/test_file?op=CREATE&delegation=XXX&namenoderpcaddress=nameservice&createflag=&createparent=true&overwrite=true" );
assertThat( input.getQuery().get( "createflag" ).getFirstValue().getPattern(), is( "" ) );
input = Parser.parseTemplate( "http://kminder-os-u14-23-knoxha-150922-1352-2.novalocal:1022/gateway/sandbox/webhdfs/v1/user/hrt_qa/knox-ha/knox_webhdfs_client_dir/test_file?op=CREATE&delegation=XXX&namenoderpcaddress=nameservice&createflag&createparent=true&overwrite=true" );
assertThat( input.getQuery().get( "createflag" ).getFirstValue().getPattern(), nullValue() );
}
@Test
public void testParserLiteralsWithReservedCharactersBugKnox394() throws Exception {
Template template;
String image;
template = Parser.parseLiteral( "{}" );
image = template.toString();
assertThat( image, is( "{}" ) );
template = Parser.parseLiteral( "{app.path}/child/path" );
image = template.toString();
assertThat( image, is( "{app.path}/child/path" ) );
template = Parser.parseLiteral( "${app.path}/child/path" );
image = template.toString();
assertThat( image, is( "${app.path}/child/path" ) );
}
}