/**
* 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;
import org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteEnvironment;
import org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteFlowDescriptor;
import org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteStepDescriptor;
import org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteStepFlow;
import org.apache.hadoop.gateway.filter.rewrite.spi.UrlRewriteContext;
import org.apache.hadoop.gateway.filter.rewrite.spi.UrlRewriteStepProcessor;
import org.apache.hadoop.gateway.filter.rewrite.spi.UrlRewriteStepStatus;
import org.junit.Test;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.MatcherAssert.assertThat;
public class UrlRewriteStepProcessorStateTest {
@Test
public void testEmpty() {
List<UrlRewriteStepProcessorHolder> steps = new ArrayList<UrlRewriteStepProcessorHolder>();
UrlRewriteStepProcessorState state = new UrlRewriteStepProcessorState( steps.iterator() );
assertThat( state.status(), is( UrlRewriteStepStatus.SUCCESS ) );
assertThat( state.hasNext(), is( false ) );
assertThat( state.hasNextAction(), is( false ) );
assertThat( state.hasNextCondition(), is( false ) );
assertThat( state.nextAction( UrlRewriteStepStatus.SUCCESS ), nullValue() );
assertThat( state.nextCondition( UrlRewriteStepStatus.SUCCESS ), nullValue() );
}
@Test
public void testNextAction() throws Exception {
UrlRewriteStepProcessorHolder holder;
List<UrlRewriteStepProcessorHolder> steps = new ArrayList<UrlRewriteStepProcessorHolder>();
holder = new UrlRewriteStepProcessorHolder();
holder.initialize( new FakeEnvironment(), new FakeActionDescriptor( "one" ), new FakeActionProcessor( "one" ) );
steps.add( holder );
holder = new UrlRewriteStepProcessorHolder();
holder.initialize( new FakeEnvironment(), new FakeActionDescriptor( "two" ), new FakeActionProcessor( "two" ) );
steps.add( holder );
UrlRewriteStepProcessorState state = new UrlRewriteStepProcessorState( steps.iterator() );
assertThat( state.hasNext(), is( true ) );
assertThat( state.hasNextAction(), is( true ) );
assertThat( state.hasNextCondition(), is( false ) );
assertThat( state.nextCondition( UrlRewriteStepStatus.SUCCESS ), nullValue() );
holder = state.nextAction( UrlRewriteStepStatus.SUCCESS );
assertThat( ((FakeActionDescriptor)holder.getDescriptor()).name, is( "one" ) );
assertThat( state.hasNext(), is( true ) );
assertThat( state.hasNextAction(), is( true ) );
assertThat( state.hasNextCondition(), is( false ) );
assertThat( state.nextCondition( UrlRewriteStepStatus.SUCCESS ), nullValue() );
holder = state.nextAction( UrlRewriteStepStatus.SUCCESS );
assertThat( ((FakeActionDescriptor)holder.getDescriptor()).name, is( "two" ) );
assertThat( state.hasNext(), is( false ) );
assertThat( state.hasNextAction(), is( false ) );
assertThat( state.hasNextCondition(), is( false ) );
assertThat( state.nextAction( UrlRewriteStepStatus.SUCCESS ), nullValue() );
assertThat( state.nextCondition( UrlRewriteStepStatus.SUCCESS ), nullValue() );
}
@Test
public void testNextCondition() throws Exception {
UrlRewriteStepProcessorHolder holder;
List<UrlRewriteStepProcessorHolder> steps = new ArrayList<UrlRewriteStepProcessorHolder>();
holder = new UrlRewriteStepProcessorHolder();
holder.initialize( new FakeEnvironment(), new FakeConditionDescriptor( "one" ), new FakeConditionProcessor( "one" ) );
steps.add( holder );
holder = new UrlRewriteStepProcessorHolder();
holder.initialize( new FakeEnvironment(), new FakeConditionDescriptor( "two" ), new FakeConditionProcessor( "two" ) );
steps.add( holder );
UrlRewriteStepProcessorState state = new UrlRewriteStepProcessorState( steps.iterator() );
assertThat( state.hasNext(), is( true ) );
assertThat( state.hasNextAction(), is( false ) );
assertThat( state.hasNextCondition(), is( true ) );
assertThat( state.nextAction( UrlRewriteStepStatus.SUCCESS ), nullValue() );
holder = state.nextCondition( UrlRewriteStepStatus.SUCCESS );
assertThat( ((FakeConditionDescriptor)holder.getDescriptor()).name, is( "one" ) );
assertThat( state.hasNext(), is( true ) );
assertThat( state.hasNextAction(), is( false ) );
assertThat( state.hasNextCondition(), is( true ) );
assertThat( state.nextAction( UrlRewriteStepStatus.SUCCESS ), nullValue() );
holder = state.nextCondition( UrlRewriteStepStatus.SUCCESS );
assertThat( ((FakeConditionDescriptor)holder.getDescriptor()).name, is( "two" ) );
assertThat( state.hasNext(), is( false ) );
assertThat( state.hasNextAction(), is( false ) );
assertThat( state.hasNextCondition(), is( false ) );
assertThat( state.nextAction( UrlRewriteStepStatus.SUCCESS ), nullValue() );
assertThat( state.nextCondition( UrlRewriteStepStatus.SUCCESS ), nullValue() );
}
public class FakeActionDescriptor implements UrlRewriteStepDescriptor<FakeActionDescriptor> {
public String name;
public FakeActionDescriptor( String name ) {
this.name = name;
}
@Override
public String type() {
return "fake-action";
}
@Override
public FakeActionDescriptor type( String type ) {
return null;
}
}
public class FakeActionProcessor implements UrlRewriteStepProcessor<UrlRewriteStepDescriptor<FakeActionDescriptor>> {
public String name;
public FakeActionProcessor( String name ) {
this.name = name;
}
@Override
public String getType() {
return "fake-action";
}
@Override
public void initialize( UrlRewriteEnvironment environment, UrlRewriteStepDescriptor<FakeActionDescriptor> descriptor ) throws Exception {
}
@Override
public UrlRewriteStepStatus process( UrlRewriteContext context ) throws Exception {
return null;
}
@Override
public void destroy() throws Exception {
}
}
public class FakeConditionDescriptor implements UrlRewriteFlowDescriptor<FakeConditionDescriptor> {
public String name;
public FakeConditionDescriptor( String name ) {
this.name = name;
}
@Override
public UrlRewriteStepFlow flow() {
return null;
}
@Override
public FakeConditionDescriptor flow( String flow ) {
return null;
}
@Override
public FakeConditionDescriptor flow( UrlRewriteStepFlow flow ) {
return null;
}
@Override
public List<UrlRewriteStepDescriptor> steps() {
return null;
}
@Override
public <T extends UrlRewriteStepDescriptor<?>> T addStep( String type ) {
return null;
}
@Override
public String type() {
return "fake-condition";
}
@Override
public FakeConditionDescriptor type( String type ) {
return null;
}
}
public class FakeConditionProcessor implements UrlRewriteStepProcessor<FakeConditionDescriptor> {
public String name;
public FakeConditionProcessor( String name ) {
this.name = name;
}
@Override
public String getType() {
return "fake-condition";
}
@Override
public void initialize( UrlRewriteEnvironment environment, FakeConditionDescriptor descriptor ) throws Exception {
}
@Override
public UrlRewriteStepStatus process( UrlRewriteContext context ) throws Exception {
return null;
}
@Override
public void destroy() throws Exception {
}
}
private class FakeEnvironment implements UrlRewriteEnvironment {
@Override
public URL getResource( String name ) throws IOException {
return null;
}
@Override
public <T> T getAttribute( String name ) {
return null;
}
@Override
public List<String> resolve( String name ) {
return null;
}
}
}