/** * 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" ) ); } }