/**
* 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.descriptor.xml;
import org.apache.hadoop.gateway.descriptor.FilterDescriptor;
import org.apache.hadoop.gateway.descriptor.FilterParamDescriptor;
import org.apache.hadoop.gateway.descriptor.GatewayDescriptor;
import org.apache.hadoop.gateway.descriptor.GatewayDescriptorFactory;
import org.apache.hadoop.gateway.descriptor.ResourceDescriptor;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.junit.Test;
import java.io.IOException;
import java.io.PrintStream;
import java.io.Reader;
import java.io.StringReader;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.core.IsNull.notNullValue;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
public class XmlGatewayDescriptorImporterTest {
@Test
public void testFormat() {
XmlGatewayDescriptorImporter importer = new XmlGatewayDescriptorImporter();
assertThat( importer.getFormat(), is( "xml" ) );
}
@Test
public void testXmlGatewayDescriptorLoad() throws IOException {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
"<gateway>\n" +
" <resource>\n" +
" <pattern>resource1-source</pattern>\n" +
// " <target>resource1-target</target>\n" +
" <filter>\n" +
" <role>resource1-filter1-role</role>\n" +
" <class>resource1-filter1-impl</class>\n" +
" <param>\n" +
" <name>resource1-filter1-param1-name</name>\n" +
" <value>resource1-filter1-param1-value</value>\n" +
" </param>\n" +
" <param>\n" +
" <name>resource1-filter1-param2-name</name>\n" +
" <value>resource1-filter1-param2-value</value>\n" +
" </param>\n" +
" </filter>\n" +
" <filter>\n" +
" <role>resource1-filter2-role</role>\n" +
" <class>resource1-filter2-impl</class>\n" +
" </filter>\n" +
" </resource>\n" +
" <resource>\n" +
" <pattern>resource2-source</pattern>\n" +
// " <target>resource2-target</target>\n" +
" </resource>\n" +
"</gateway>";
Reader reader = new StringReader( xml );
GatewayDescriptor descriptor = GatewayDescriptorFactory.load( "xml", reader );
assertThat( descriptor, notNullValue() );
assertThat( descriptor.resources().size(), is( 2 ) );
ResourceDescriptor resource1 = descriptor.resources().get( 0 );
assertThat( resource1, notNullValue() );
assertThat( resource1.pattern(), is( "resource1-source" ) );
assertThat( resource1.filters().size(), is( 2 ) );
FilterDescriptor filter1 = resource1.filters().get( 0 );
assertThat( filter1, notNullValue() );
assertThat( filter1.role(), is( "resource1-filter1-role" ) );
assertThat( filter1.impl(), is( "resource1-filter1-impl" ) );
assertThat( filter1.params().size(), is( 2 ) );
FilterParamDescriptor param1 = filter1.params().get( 0 );
assertThat( param1, notNullValue() );
assertThat( param1.name(), is( "resource1-filter1-param1-name" ) );
assertThat( param1.value(), is( "resource1-filter1-param1-value" ) );
FilterParamDescriptor param2 = filter1.params().get( 1 );
assertThat( param2, notNullValue() );
assertThat( param2.name(), is( "resource1-filter1-param2-name" ) );
assertThat( param2.value(), is( "resource1-filter1-param2-value" ) );
FilterDescriptor filter2 = resource1.filters().get( 1 );
assertThat( filter2, notNullValue() );
assertThat( filter2.role(), is( "resource1-filter2-role" ) );
assertThat( filter2.impl(), is( "resource1-filter2-impl" ) );
ResourceDescriptor resource2 = descriptor.resources().get( 1 );
assertThat( resource2, notNullValue() );
assertThat( resource2.pattern(), is( "resource2-source" ) );
}
@Test
public void testXmlGatewayDescriptorLoadEmpty() throws IOException {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
"<gateway>\n" +
" <resource>\n" +
" <filter>\n" +
" <param>\n" +
" </param>\n" +
" </filter>\n" +
" </resource>\n" +
"</gateway>";
Reader reader = new StringReader( xml );
GatewayDescriptor descriptor = GatewayDescriptorFactory.load( "xml", reader );
assertThat( descriptor, notNullValue() );
assertThat( descriptor.resources().size(), is( 1 ) );
ResourceDescriptor resource1 = descriptor.resources().get( 0 );
assertThat( resource1, notNullValue() );
assertThat( resource1.filters().size(), is( 1 ) );
FilterDescriptor filter1 = resource1.filters().get( 0 );
assertThat( filter1, notNullValue() );
assertThat( filter1.params().size(), is( 1 ) );
FilterParamDescriptor param1 = filter1.params().get( 0 );
assertThat( param1, notNullValue() );
}
@Test
public void testXmlGatewayDescriptorLoadInvalid() throws IOException {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
"<gateway>\n" +
" <resource>\n" +
" <filter>\n" +
" <param>";
Reader reader = new StringReader( xml );
// Keep the tests quiet. Ignore the stack trace that ends up being written to System.out.
Logger logger = Logger.getLogger( "org.apache.commons.digester3.Digester" );
Level level = logger.getLevel();
logger.setLevel( Level.OFF );
PrintStream out = System.out;
System.setOut( null );
try {
GatewayDescriptorFactory.load( "xml", reader );
fail( "Should have thrown IOException" );
} catch( IOException e ) {
assertThat( e.getMessage(), containsString( "org.xml.sax.SAXParseException" ) );
} finally {
System.setOut( out );
logger.setLevel( level );
}
}
}