blob: 9ae5bd01d7a84fa88e74d35447da151dcb8c4c29 [file] [log] [blame]
/**
* 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.filter.rewrite.impl.xml;
import org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteRuleDescriptor;
import org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteRulesDescriptor;
import org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteRulesDescriptorFactory;
import org.apache.hadoop.gateway.filter.rewrite.ext.UrlRewriteActionDescriptor;
import org.apache.hadoop.gateway.filter.rewrite.ext.UrlRewriteActionRewriteDescriptorExt;
import org.apache.hadoop.gateway.filter.rewrite.ext.UrlRewriteCheckDescriptor;
import org.apache.hadoop.gateway.filter.rewrite.ext.UrlRewriteControlDescriptor;
import org.apache.hadoop.gateway.filter.rewrite.ext.UrlRewriteMatchDescriptor;
import org.junit.Test;
import org.xmlmatchers.XmlMatchers;
import org.xmlmatchers.transform.XmlConverters;
import javax.xml.transform.Source;
import java.io.IOException;
import java.io.StringWriter;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
public class XmlUrlRewriteRulesExporterTest {
@Test
public void testEmptyRules() throws IOException {
UrlRewriteRulesDescriptor rules = UrlRewriteRulesDescriptorFactory.create();
StringWriter writer = new StringWriter();
UrlRewriteRulesDescriptorFactory.store( rules, "xml", writer );
String xml = writer.toString();
assertThat( XmlConverters.the( xml ), XmlMatchers.hasXPath( "/rules" ) );
}
@Test
public void testSingleNamedRule() throws IOException {
UrlRewriteRulesDescriptor rules = UrlRewriteRulesDescriptorFactory.create();
rules.addRule( "first" ).scope( "test-scope" );
StringWriter writer = new StringWriter();
UrlRewriteRulesDescriptorFactory.store( rules, "xml", writer );
String str = writer.toString();
//System.out.println( str );
Source xml = XmlConverters.the( str );
assertThat( xml, XmlMatchers.hasXPath( "/rules" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule" ) );
assertThat( xml, XmlMatchers.hasXPath( "count(/rules/rule)", is( "1" ) ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/@name", is( "first" ) ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/@scope", is( "test-scope" ) ) );
}
@Test
public void testMatchStep() throws Exception {
UrlRewriteRulesDescriptor rules = UrlRewriteRulesDescriptorFactory.create();
UrlRewriteRuleDescriptor rule = rules.addRule( "test-rule" ).pattern("test-pattern-rule");
UrlRewriteMatchDescriptor match = rule.addStep( "match" );
match.operation("test-operation").pattern( "test-pattern-step" ).flow( "all" );
StringWriter writer = new StringWriter();
UrlRewriteRulesDescriptorFactory.store( rules, "xml", writer );
String str = writer.toString();
//System.out.println( str );
Source xml = XmlConverters.the( str );
assertThat( xml, XmlMatchers.hasXPath( "/rules" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule" ) );
assertThat( xml, XmlMatchers.hasXPath( "count(/rules/rule)", is( "1" ) ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/@name", is( "test-rule" ) ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/@pattern", is( "test-pattern-rule" ) ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/match" ) );
assertThat( xml, XmlMatchers.hasXPath( "count(/rules/rule/match)", is( "1" ) ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/match/@flow", is( "ALL" ) ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/match/@oper", is( "test-operation" ) ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/match/@pattern", is( "test-pattern-step" ) ) );
}
@Test
public void testControlStep() throws Exception {
UrlRewriteRulesDescriptor rules = UrlRewriteRulesDescriptorFactory.create();
UrlRewriteRuleDescriptor rule = rules.addRule( "test-rule" );
UrlRewriteControlDescriptor control = rule.addStep( "control" );
control.flow( "or" );
StringWriter writer = new StringWriter();
UrlRewriteRulesDescriptorFactory.store( rules, "xml", writer );
String str = writer.toString();
//System.out.println( str );
Source xml = XmlConverters.the( str );
assertThat( xml, XmlMatchers.hasXPath( "/rules" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule" ) );
assertThat( xml, XmlMatchers.hasXPath( "count(/rules/rule)", is( "1" ) ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/@name", is( "test-rule" ) ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/control" ) );
assertThat( xml, XmlMatchers.hasXPath( "count(/rules/rule/control)", is( "1" ) ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/control/@flow", is( "OR" ) ) );
}
@Test
public void testCheckStep() throws Exception {
UrlRewriteRulesDescriptor rules = UrlRewriteRulesDescriptorFactory.create();
UrlRewriteRuleDescriptor rule = rules.addRule( "test-rule" );
UrlRewriteCheckDescriptor step = rule.addStep( "check" );
step.operation("test-operation").input("test-input").value("test-value").flow( "all" );
StringWriter writer = new StringWriter();
UrlRewriteRulesDescriptorFactory.store( rules, "xml", writer );
String str = writer.toString();
//System.out.println( str );
Source xml = XmlConverters.the( str );
assertThat( xml, XmlMatchers.hasXPath( "/rules" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule" ) );
assertThat( xml, XmlMatchers.hasXPath( "count(/rules/rule)", is( "1" ) ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/@name", is( "test-rule" ) ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/check" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/check/@oper", is("test-operation") ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/check/@input", is("test-input") ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/check/@value", is("test-value") ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/check/@flow", is("ALL") ) );
}
@Test
public void testRewriteStep() throws Exception {
UrlRewriteRulesDescriptor rules = UrlRewriteRulesDescriptorFactory.create();
UrlRewriteRuleDescriptor rule = rules.addRule( "test-rule" );
UrlRewriteActionRewriteDescriptorExt step = rule.addStep( "rewrite" );
step.operation("test-operation").parameter( "test-param" );
StringWriter writer = new StringWriter();
UrlRewriteRulesDescriptorFactory.store( rules, "xml", writer );
String str = writer.toString();
//System.out.println( str );
Source xml = XmlConverters.the( str );
assertThat( xml, XmlMatchers.hasXPath( "/rules" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule" ) );
assertThat( xml, XmlMatchers.hasXPath( "count(/rules/rule)", is( "1" ) ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/@name", is( "test-rule" ) ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/rewrite" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/rewrite/@oper", is("test-operation") ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/rewrite/@template", is("test-param") ) );
}
@Test
public void testNestedStep() throws Exception {
UrlRewriteRulesDescriptor rules = UrlRewriteRulesDescriptorFactory.create();
UrlRewriteRuleDescriptor rule = rules.addRule( "test-rule" );
UrlRewriteMatchDescriptor match = rule.addStep( "match" );
UrlRewriteMatchDescriptor matchMatch = match.addStep( "match" );
UrlRewriteCheckDescriptor matchCheck = match.addStep( "check" );
UrlRewriteControlDescriptor matchControl = match.addStep( "control" );
UrlRewriteActionDescriptor matchRewrite = match.addStep( "rewrite" );
UrlRewriteCheckDescriptor check = rule.addStep( "check" );
UrlRewriteMatchDescriptor checkMatch = check.addStep( "match" );
UrlRewriteCheckDescriptor checkCheck = check.addStep( "check" );
UrlRewriteControlDescriptor checkControl = check.addStep( "control" );
UrlRewriteActionDescriptor checkRewrite = check.addStep( "rewrite" );
UrlRewriteControlDescriptor control = rule.addStep( "control" );
UrlRewriteMatchDescriptor controlMatch = control.addStep( "match" );
UrlRewriteCheckDescriptor controlCheck = control.addStep( "check" );
UrlRewriteControlDescriptor controlControl = control.addStep( "control" );
UrlRewriteActionDescriptor controlRewrite = control.addStep( "rewrite" );
UrlRewriteActionDescriptor rewrite = rule.addStep( "rewrite" );
StringWriter writer = new StringWriter();
UrlRewriteRulesDescriptorFactory.store( rules, "xml", writer );
String str = writer.toString();
//System.out.println( str );
Source xml = XmlConverters.the( str );
assertThat( xml, XmlMatchers.hasXPath( "/rules" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule" ) );
assertThat( xml, XmlMatchers.hasXPath( "count(/rules/rule)", is( "1" ) ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/@name", is( "test-rule" ) ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/match" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/match/match" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/match/check" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/match/control" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/match/rewrite" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/check" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/check/match" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/check/check" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/check/control" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/check/rewrite" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/control" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/control/match" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/control/check" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/control/control" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/control/rewrite" ) );
assertThat( xml, XmlMatchers.hasXPath( "/rules/rule/rewrite" ) );
}
}