knox-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From kmin...@apache.org
Subject [5/5] knox git commit: KNOX-620: Jenkins Knox-master-verify failing since #725 due to JDK version issues. Renabled remainder of func tests.
Date Mon, 09 Nov 2015 21:10:53 GMT
KNOX-620: Jenkins Knox-master-verify failing since #725 due to JDK version issues. Renabled remainder of func tests.


Project: http://git-wip-us.apache.org/repos/asf/knox/repo
Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/56cedc0a
Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/56cedc0a
Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/56cedc0a

Branch: refs/heads/master
Commit: 56cedc0ae038b1447ae125b4b8d1094bd1db5551
Parents: 2bb8d1e
Author: Kevin Minder <kevin.minder@hortonworks.com>
Authored: Mon Nov 9 16:10:36 2015 -0500
Committer: Kevin Minder <kevin.minder@hortonworks.com>
Committed: Mon Nov 9 16:10:36 2015 -0500

----------------------------------------------------------------------
 .../hadoop/gateway/GatewayAdminFuncTest.java    |  336 ++--
 .../gateway/GatewayAdminTopologyFuncTest.java   | 1512 +++++++++---------
 .../hadoop/gateway/GatewayDeployFuncTest.java   |  576 +++----
 .../GatewayLdapDynamicGroupFuncTest.java        |  534 +++----
 .../gateway/GatewayLdapGroupFuncTest.java       |  536 +++----
 .../gateway/GatewayLocalServiceFuncTest.java    |  330 ++--
 .../apache/hadoop/gateway/Knox242FuncTest.java  |  520 +++---
 .../gateway/KnoxCliLdapFuncTestNegative.java    |  558 +++----
 .../gateway/KnoxCliLdapFuncTestPositive.java    |  564 +++----
 .../hadoop/gateway/KnoxCliSysBindTest.java      |  548 +++----
 .../gateway/OozieServiceDefinitionTest.java     |  322 ++--
 .../hadoop/gateway/WebHdfsHaFuncTest.java       |  862 +++++-----
 .../deploy/DeploymentFactoryFuncTest.java       |  918 +++++------
 13 files changed, 4058 insertions(+), 4058 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/knox/blob/56cedc0a/gateway-test/src/test/java/org/apache/hadoop/gateway/GatewayAdminFuncTest.java
----------------------------------------------------------------------
diff --git a/gateway-test/src/test/java/org/apache/hadoop/gateway/GatewayAdminFuncTest.java b/gateway-test/src/test/java/org/apache/hadoop/gateway/GatewayAdminFuncTest.java
index 2198de2..91f2162 100644
--- a/gateway-test/src/test/java/org/apache/hadoop/gateway/GatewayAdminFuncTest.java
+++ b/gateway-test/src/test/java/org/apache/hadoop/gateway/GatewayAdminFuncTest.java
@@ -52,173 +52,173 @@ import static org.junit.Assert.assertThat;
 
 public class GatewayAdminFuncTest {
 
-//  private static final long SHORT_TIMEOUT = 1000L;
-//  private static final long MEDIUM_TIMEOUT = 5 * SHORT_TIMEOUT;
-//  private static final long LONG_TIMEOUT = 5 * MEDIUM_TIMEOUT;
-//
-//  private static Class RESOURCE_BASE_CLASS = GatewayAdminFuncTest.class;
-//  private static Logger LOG = LoggerFactory.getLogger( GatewayAdminFuncTest.class );
-//
-//  //public static Enumeration<Appender> appenders;
-//  public static GatewayConfig config;
-//  public static GatewayServer gateway;
-//  public static String gatewayUrl;
-//  public static String clusterUrl;
-//  public static SimpleLdapDirectoryServer ldap;
-//  public static TcpTransport ldapTransport;
-//
-//  @BeforeClass
-//  public static void setupSuite() throws Exception {
-//    TestUtils.LOG_ENTER();
-//    //appenders = NoOpAppender.setUp();
-//    setupLdap();
-//    setupGateway();
-//    TestUtils.LOG_EXIT();
-//  }
-//
-//  @AfterClass
-//  public static void cleanupSuite() throws Exception {
-//    TestUtils.LOG_ENTER();
-//    gateway.stop();
-//    ldap.stop( true );
-//    //FileUtils.deleteQuietly( new File( config.getGatewayHomeDir() ) );
-//    //NoOpAppender.tearDown( appenders );
-//    TestUtils.LOG_EXIT();
-//  }
-//
-//  public static void setupLdap() throws Exception {
-//    URL usersUrl = getResourceUrl( "users.ldif" );
-//    int port = findFreePort();
-//    ldapTransport = new TcpTransport( port );
-//    ldap = new SimpleLdapDirectoryServer( "dc=hadoop,dc=apache,dc=org", new File( usersUrl.toURI() ), ldapTransport );
-//    ldap.start();
-//    LOG.info( "LDAP port = " + ldapTransport.getPort() );
-//  }
-//
-//  public static void setupGateway() throws Exception {
-//
-//    File targetDir = new File( System.getProperty( "user.dir" ), "target" );
-//    File gatewayDir = new File( targetDir, "gateway-home-" + UUID.randomUUID() );
-//    gatewayDir.mkdirs();
-//
-//    GatewayTestConfig testConfig = new GatewayTestConfig();
-//    config = testConfig;
-//    testConfig.setGatewayHomeDir( gatewayDir.getAbsolutePath() );
-//
-//    File topoDir = new File( testConfig.getGatewayTopologyDir() );
-//    topoDir.mkdirs();
-//
-//    File deployDir = new File( testConfig.getGatewayDeploymentDir() );
-//    deployDir.mkdirs();
-//
-//    File descriptor = new File( topoDir, "test-cluster.xml" );
-//    FileOutputStream stream = new FileOutputStream( descriptor );
-//    createTopology().toStream( stream );
-//    stream.close();
-//
-//    DefaultGatewayServices srvcs = new DefaultGatewayServices();
-//    Map<String,String> options = new HashMap<String,String>();
-//    options.put( "persist-master", "false" );
-//    options.put( "master", "password" );
-//    try {
-//      srvcs.init( testConfig, options );
-//    } catch ( ServiceLifecycleException e ) {
-//      e.printStackTrace(); // I18N not required.
-//    }
-//    gateway = GatewayServer.startGateway( testConfig, srvcs );
-//    MatcherAssert.assertThat( "Failed to start gateway.", gateway, notNullValue() );
-//
-//    LOG.info( "Gateway port = " + gateway.getAddresses()[ 0 ].getPort() );
-//
-//    gatewayUrl = "http://localhost:" + gateway.getAddresses()[0].getPort() + "/" + config.getGatewayPath();
-//    clusterUrl = gatewayUrl + "/test-cluster";
-//  }
-//
-//  private static XMLTag createTopology() {
-//    XMLTag xml = XMLDoc.newDocument( true )
-//        .addRoot( "topology" )
-//        .addTag( "gateway" )
-//        .addTag( "provider" )
-//        .addTag( "role" ).addText( "authentication" )
-//        .addTag( "name" ).addText( "ShiroProvider" )
-//        .addTag( "enabled" ).addText( "true" )
-//        .addTag( "param" )
-//        .addTag( "name" ).addText( "main.ldapRealm" )
-//        .addTag( "value" ).addText( "org.apache.hadoop.gateway.shirorealm.KnoxLdapRealm" ).gotoParent()
-//        .addTag( "param" )
-//        .addTag( "name" ).addText( "main.ldapRealm.userDnTemplate" )
-//        .addTag( "value" ).addText( "uid={0},ou=people,dc=hadoop,dc=apache,dc=org" ).gotoParent()
-//        .addTag( "param" )
-//        .addTag( "name" ).addText( "main.ldapRealm.contextFactory.url" )
-//        .addTag( "value" ).addText( "ldap://localhost:" + ldapTransport.getPort() ).gotoParent()
-//        .addTag( "param" )
-//        .addTag( "name" ).addText( "main.ldapRealm.contextFactory.authenticationMechanism" )
-//        .addTag( "value" ).addText( "simple" ).gotoParent()
-//        .addTag( "param" )
-//        .addTag( "name" ).addText( "urls./**" )
-//        .addTag( "value" ).addText( "authcBasic" ).gotoParent().gotoParent()
-//        .addTag( "provider" )
-//        .addTag( "role" ).addText( "identity-assertion" )
-//        .addTag( "enabled" ).addText( "true" )
-//        .addTag( "name" ).addText( "Default" ).gotoParent()
-//        .addTag( "provider" )
-//        .gotoRoot()
-//        .addTag( "service" )
-//        .addTag( "role" ).addText( "KNOX" )
-//        .gotoRoot();
-//    // System.out.println( "GATEWAY=" + xml.toString() );
-//    return xml;
-//  }
-//
-//  private static int findFreePort() throws IOException {
-//    ServerSocket socket = new ServerSocket(0);
-//    int port = socket.getLocalPort();
-//    socket.close();
-//    return port;
-//  }
-//
-//  public static InputStream getResourceStream( String resource ) throws IOException {
-//    return getResourceUrl( resource ).openStream();
-//  }
-//
-//  public static URL getResourceUrl( String resource ) {
-//    URL url = ClassLoader.getSystemResource( getResourceName( resource ) );
-//    assertThat( "Failed to find test resource " + resource, url, Matchers.notNullValue() );
-//    return url;
-//  }
-//
-//  public static String getResourceName( String resource ) {
-//    return getResourceBaseName() + resource;
-//  }
-//
-//  public static String getResourceBaseName() {
-//    return RESOURCE_BASE_CLASS.getName().replaceAll( "\\.", "/" ) + "/";
-//  }
-//
-//  //@Test
-//  public void waitForManualTesting() throws IOException {
-//    System.out.println( clusterUrl );
-//    System.in.read();
-//  }
-//
-//  @Test( timeout = MEDIUM_TIMEOUT )
-//  public void testAdminService() throws ClassNotFoundException {
-//    TestUtils.LOG_ENTER();
-//
-//    String username = "guest";
-//    String password = "guest-password";
-//    String serviceUrl =  clusterUrl + "/api/v1/version";
-//    given()
-//        //.log().all()
-//        .auth().preemptive().basic( username, password )
-//        .header("Accept", MediaType.APPLICATION_JSON)
-//        .expect()
-//        //.log().all()
-//        .statusCode(HttpStatus.SC_OK)
-//        //.body( is( "{\"hash\":\"unknown\",\"version\":\"unknown\"}" ) )
-//        .when().get( serviceUrl );
-//
-//    TestUtils.LOG_EXIT();
-//  }
+  private static final long SHORT_TIMEOUT = 1000L;
+  private static final long MEDIUM_TIMEOUT = 5 * SHORT_TIMEOUT;
+  private static final long LONG_TIMEOUT = 5 * MEDIUM_TIMEOUT;
+
+  private static Class RESOURCE_BASE_CLASS = GatewayAdminFuncTest.class;
+  private static Logger LOG = LoggerFactory.getLogger( GatewayAdminFuncTest.class );
+
+  //public static Enumeration<Appender> appenders;
+  public static GatewayConfig config;
+  public static GatewayServer gateway;
+  public static String gatewayUrl;
+  public static String clusterUrl;
+  public static SimpleLdapDirectoryServer ldap;
+  public static TcpTransport ldapTransport;
+
+  @BeforeClass
+  public static void setupSuite() throws Exception {
+    TestUtils.LOG_ENTER();
+    //appenders = NoOpAppender.setUp();
+    setupLdap();
+    setupGateway();
+    TestUtils.LOG_EXIT();
+  }
+
+  @AfterClass
+  public static void cleanupSuite() throws Exception {
+    TestUtils.LOG_ENTER();
+    gateway.stop();
+    ldap.stop( true );
+    //FileUtils.deleteQuietly( new File( config.getGatewayHomeDir() ) );
+    //NoOpAppender.tearDown( appenders );
+    TestUtils.LOG_EXIT();
+  }
+
+  public static void setupLdap() throws Exception {
+    URL usersUrl = getResourceUrl( "users.ldif" );
+    int port = findFreePort();
+    ldapTransport = new TcpTransport( port );
+    ldap = new SimpleLdapDirectoryServer( "dc=hadoop,dc=apache,dc=org", new File( usersUrl.toURI() ), ldapTransport );
+    ldap.start();
+    LOG.info( "LDAP port = " + ldapTransport.getPort() );
+  }
+
+  public static void setupGateway() throws Exception {
+
+    File targetDir = new File( System.getProperty( "user.dir" ), "target" );
+    File gatewayDir = new File( targetDir, "gateway-home-" + UUID.randomUUID() );
+    gatewayDir.mkdirs();
+
+    GatewayTestConfig testConfig = new GatewayTestConfig();
+    config = testConfig;
+    testConfig.setGatewayHomeDir( gatewayDir.getAbsolutePath() );
+
+    File topoDir = new File( testConfig.getGatewayTopologyDir() );
+    topoDir.mkdirs();
+
+    File deployDir = new File( testConfig.getGatewayDeploymentDir() );
+    deployDir.mkdirs();
+
+    File descriptor = new File( topoDir, "test-cluster.xml" );
+    FileOutputStream stream = new FileOutputStream( descriptor );
+    createTopology().toStream( stream );
+    stream.close();
+
+    DefaultGatewayServices srvcs = new DefaultGatewayServices();
+    Map<String,String> options = new HashMap<String,String>();
+    options.put( "persist-master", "false" );
+    options.put( "master", "password" );
+    try {
+      srvcs.init( testConfig, options );
+    } catch ( ServiceLifecycleException e ) {
+      e.printStackTrace(); // I18N not required.
+    }
+    gateway = GatewayServer.startGateway( testConfig, srvcs );
+    MatcherAssert.assertThat( "Failed to start gateway.", gateway, notNullValue() );
+
+    LOG.info( "Gateway port = " + gateway.getAddresses()[ 0 ].getPort() );
+
+    gatewayUrl = "http://localhost:" + gateway.getAddresses()[0].getPort() + "/" + config.getGatewayPath();
+    clusterUrl = gatewayUrl + "/test-cluster";
+  }
+
+  private static XMLTag createTopology() {
+    XMLTag xml = XMLDoc.newDocument( true )
+        .addRoot( "topology" )
+        .addTag( "gateway" )
+        .addTag( "provider" )
+        .addTag( "role" ).addText( "authentication" )
+        .addTag( "name" ).addText( "ShiroProvider" )
+        .addTag( "enabled" ).addText( "true" )
+        .addTag( "param" )
+        .addTag( "name" ).addText( "main.ldapRealm" )
+        .addTag( "value" ).addText( "org.apache.hadoop.gateway.shirorealm.KnoxLdapRealm" ).gotoParent()
+        .addTag( "param" )
+        .addTag( "name" ).addText( "main.ldapRealm.userDnTemplate" )
+        .addTag( "value" ).addText( "uid={0},ou=people,dc=hadoop,dc=apache,dc=org" ).gotoParent()
+        .addTag( "param" )
+        .addTag( "name" ).addText( "main.ldapRealm.contextFactory.url" )
+        .addTag( "value" ).addText( "ldap://localhost:" + ldapTransport.getPort() ).gotoParent()
+        .addTag( "param" )
+        .addTag( "name" ).addText( "main.ldapRealm.contextFactory.authenticationMechanism" )
+        .addTag( "value" ).addText( "simple" ).gotoParent()
+        .addTag( "param" )
+        .addTag( "name" ).addText( "urls./**" )
+        .addTag( "value" ).addText( "authcBasic" ).gotoParent().gotoParent()
+        .addTag( "provider" )
+        .addTag( "role" ).addText( "identity-assertion" )
+        .addTag( "enabled" ).addText( "true" )
+        .addTag( "name" ).addText( "Default" ).gotoParent()
+        .addTag( "provider" )
+        .gotoRoot()
+        .addTag( "service" )
+        .addTag( "role" ).addText( "KNOX" )
+        .gotoRoot();
+    // System.out.println( "GATEWAY=" + xml.toString() );
+    return xml;
+  }
+
+  private static int findFreePort() throws IOException {
+    ServerSocket socket = new ServerSocket(0);
+    int port = socket.getLocalPort();
+    socket.close();
+    return port;
+  }
+
+  public static InputStream getResourceStream( String resource ) throws IOException {
+    return getResourceUrl( resource ).openStream();
+  }
+
+  public static URL getResourceUrl( String resource ) {
+    URL url = ClassLoader.getSystemResource( getResourceName( resource ) );
+    assertThat( "Failed to find test resource " + resource, url, Matchers.notNullValue() );
+    return url;
+  }
+
+  public static String getResourceName( String resource ) {
+    return getResourceBaseName() + resource;
+  }
+
+  public static String getResourceBaseName() {
+    return RESOURCE_BASE_CLASS.getName().replaceAll( "\\.", "/" ) + "/";
+  }
+
+  //@Test
+  public void waitForManualTesting() throws IOException {
+    System.out.println( clusterUrl );
+    System.in.read();
+  }
+
+  @Test( timeout = MEDIUM_TIMEOUT )
+  public void testAdminService() throws ClassNotFoundException {
+    TestUtils.LOG_ENTER();
+
+    String username = "guest";
+    String password = "guest-password";
+    String serviceUrl =  clusterUrl + "/api/v1/version";
+    given()
+        //.log().all()
+        .auth().preemptive().basic( username, password )
+        .header("Accept", MediaType.APPLICATION_JSON)
+        .expect()
+        //.log().all()
+        .statusCode(HttpStatus.SC_OK)
+        //.body( is( "{\"hash\":\"unknown\",\"version\":\"unknown\"}" ) )
+        .when().get( serviceUrl );
+
+    TestUtils.LOG_EXIT();
+  }
 
 }

http://git-wip-us.apache.org/repos/asf/knox/blob/56cedc0a/gateway-test/src/test/java/org/apache/hadoop/gateway/GatewayAdminTopologyFuncTest.java
----------------------------------------------------------------------
diff --git a/gateway-test/src/test/java/org/apache/hadoop/gateway/GatewayAdminTopologyFuncTest.java b/gateway-test/src/test/java/org/apache/hadoop/gateway/GatewayAdminTopologyFuncTest.java
index bbda477..ef18740 100644
--- a/gateway-test/src/test/java/org/apache/hadoop/gateway/GatewayAdminTopologyFuncTest.java
+++ b/gateway-test/src/test/java/org/apache/hadoop/gateway/GatewayAdminTopologyFuncTest.java
@@ -69,761 +69,761 @@ import static org.junit.Assert.fail;
 
 public class GatewayAdminTopologyFuncTest {
 
-//  private static final long SHORT_TIMEOUT = 1000L;
-//  private static final long MEDIUM_TIMEOUT = 5 * SHORT_TIMEOUT;
-//  private static final long LONG_TIMEOUT = 5 * MEDIUM_TIMEOUT;
-//
-//  private static Class RESOURCE_BASE_CLASS = GatewayAdminTopologyFuncTest.class;
-//  private static Logger LOG = LoggerFactory.getLogger( GatewayAdminTopologyFuncTest.class );
-//
-//  public static Enumeration<Appender> appenders;
-//  public static GatewayConfig config;
-//  public static GatewayServer gateway;
-//  public static String gatewayUrl;
-//  public static String clusterUrl;
-//  public static SimpleLdapDirectoryServer ldap;
-//  public static TcpTransport ldapTransport;
-//
-//  @BeforeClass
-//  public static void setupSuite() throws Exception {
-//    //appenders = NoOpAppender.setUp();
-//    setupLdap();
-//    setupGateway(new GatewayTestConfig());
-//  }
-//
-//  @AfterClass
-//  public static void cleanupSuite() throws Exception {
-//    gateway.stop();
-//    ldap.stop( true );
-//    //FileUtils.deleteQuietly( new File( config.getGatewayHomeDir() ) );
-//    //NoOpAppender.tearDown( appenders );
-//  }
-//
-//  public static void setupLdap() throws Exception {
-//    URL usersUrl = getResourceUrl( "users.ldif" );
-//    int port = findFreePort();
-//    ldapTransport = new TcpTransport( port );
-//    ldap = new SimpleLdapDirectoryServer( "dc=hadoop,dc=apache,dc=org", new File( usersUrl.toURI() ), ldapTransport );
-//    ldap.start();
-//    LOG.info( "LDAP port = " + ldapTransport.getPort() );
-//  }
-//
-//  public static void setupGateway(GatewayTestConfig testConfig) throws Exception {
-//
-//    File targetDir = new File( System.getProperty( "user.dir" ), "target" );
-//    File gatewayDir = new File( targetDir, "gateway-home-" + UUID.randomUUID() );
-//    gatewayDir.mkdirs();
-//
-//    config = testConfig;
-//    testConfig.setGatewayHomeDir( gatewayDir.getAbsolutePath() );
-//
-//    File topoDir = new File( testConfig.getGatewayTopologyDir() );
-//    topoDir.mkdirs();
-//
-//    File deployDir = new File( testConfig.getGatewayDeploymentDir() );
-//    deployDir.mkdirs();
-//
-//    File descriptor = new File( topoDir, "admin.xml" );
-//    FileOutputStream stream = new FileOutputStream( descriptor );
-//    createKnoxTopology().toStream( stream );
-//    stream.close();
-//
-//    File descriptor2 = new File( topoDir, "test-cluster.xml" );
-//    FileOutputStream stream2 = new FileOutputStream( descriptor2 );
-//    createNormalTopology().toStream( stream2 );
-//    stream.close();
-//
-//
-//    DefaultGatewayServices srvcs = new DefaultGatewayServices();
-//    Map<String,String> options = new HashMap<String,String>();
-//    options.put( "persist-master", "false" );
-//    options.put( "master", "password" );
-//
-//    try {
-//      srvcs.init( testConfig, options );
-//    } catch ( ServiceLifecycleException e ) {
-//      e.printStackTrace(); // I18N not required.
-//    }
-//    gateway = GatewayServer.startGateway( testConfig, srvcs );
-//    MatcherAssert.assertThat( "Failed to start gateway.", gateway, notNullValue() );
-//
-//    LOG.info( "Gateway port = " + gateway.getAddresses()[ 0 ].getPort() );
-//
-//    gatewayUrl = "http://localhost:" + gateway.getAddresses()[0].getPort() + "/" + config.getGatewayPath();
-//    clusterUrl = gatewayUrl + "/admin";
-//  }
-//
-//  private static XMLTag createNormalTopology() {
-//    XMLTag xml = XMLDoc.newDocument( true )
-//        .addRoot( "topology" )
-//        .addTag( "gateway" )
-//        .addTag( "provider" )
-//        .addTag( "role" ).addText( "webappsec" )
-//        .addTag( "name" ).addText( "WebAppSec" )
-//        .addTag( "enabled" ).addText( "true" )
-//        .addTag( "param" )
-//        .addTag( "name" ).addText( "csrf.enabled" )
-//        .addTag( "value" ).addText( "true" ).gotoParent().gotoParent()
-//        .addTag( "provider" )
-//        .addTag( "role" ).addText( "authentication" )
-//        .addTag( "name" ).addText( "ShiroProvider" )
-//        .addTag( "enabled" ).addText( "true" )
-//        .addTag( "param" )
-//        .addTag( "name" ).addText( "main.ldapRealm" )
-//        .addTag( "value" ).addText( "org.apache.hadoop.gateway.shirorealm.KnoxLdapRealm" ).gotoParent()
-//        .addTag( "param" )
-//        .addTag( "name" ).addText( "main.ldapRealm.userDnTemplate" )
-//        .addTag( "value" ).addText( "uid={0},ou=people,dc=hadoop,dc=apache,dc=org" ).gotoParent()
-//        .addTag( "param" )
-//        .addTag( "name" ).addText( "main.ldapRealm.contextFactory.url" )
-//        .addTag( "value" ).addText( "ldap://localhost:" + ldapTransport.getPort() ).gotoParent()
-//        .addTag( "param" )
-//        .addTag( "name" ).addText( "main.ldapRealm.contextFactory.authenticationMechanism" )
-//        .addTag( "value" ).addText( "simple" ).gotoParent()
-//        .addTag( "param" )
-//        .addTag( "name" ).addText( "urls./**" )
-//        .addTag( "value" ).addText( "authcBasic" ).gotoParent().gotoParent()
-//        .addTag( "provider" )
-//        .addTag( "role" ).addText( "identity-assertion" )
-//        .addTag( "enabled" ).addText( "true" )
-//        .addTag( "name" ).addText( "Default" ).gotoParent()
-//        .addTag( "provider" )
-//        .addTag( "role" ).addText( "authorization" )
-//        .addTag( "enabled" ).addText( "true" )
-//        .addTag( "name" ).addText( "AclsAuthz" ).gotoParent()
-//        .addTag( "param" )
-//        .addTag( "name" ).addText( "webhdfs-acl" )
-//        .addTag( "value" ).addText( "hdfs;*;*" ).gotoParent()
-//        .gotoRoot()
-//        .addTag( "service" )
-//        .addTag( "role" ).addText( "WEBHDFS" )
-//        .addTag( "url" ).addText( "http://localhost:50070/webhdfs/v1" ).gotoParent()
-//        .gotoRoot();
-////     System.out.println( "GATEWAY=" + xml.toString() );
-//    return xml;
-//  }
-//
-//  private static XMLTag createKnoxTopology() {
-//    XMLTag xml = XMLDoc.newDocument( true )
-//        .addRoot( "topology" )
-//        .addTag( "gateway" )
-//        .addTag( "provider" )
-//        .addTag( "role" ).addText( "authentication" )
-//        .addTag( "name" ).addText( "ShiroProvider" )
-//        .addTag( "enabled" ).addText( "true" )
-//        .addTag( "param" )
-//        .addTag( "name" ).addText( "main.ldapRealm" )
-//        .addTag( "value" ).addText( "org.apache.hadoop.gateway.shirorealm.KnoxLdapRealm" ).gotoParent()
-//        .addTag( "param" )
-//        .addTag( "name" ).addText( "main.ldapRealm.userDnTemplate" )
-//        .addTag( "value" ).addText( "uid={0},ou=people,dc=hadoop,dc=apache,dc=org" ).gotoParent()
-//        .addTag( "param" )
-//        .addTag( "name" ).addText( "main.ldapRealm.contextFactory.url" )
-//        .addTag( "value" ).addText( "ldap://localhost:" + ldapTransport.getPort() ).gotoParent()
-//        .addTag( "param" )
-//        .addTag( "name" ).addText( "main.ldapRealm.contextFactory.authenticationMechanism" )
-//        .addTag( "value" ).addText( "simple" ).gotoParent()
-//        .addTag( "param" )
-//        .addTag( "name" ).addText( "urls./**" )
-//        .addTag( "value" ).addText( "authcBasic" ).gotoParent().gotoParent()
-//        .addTag("provider")
-//        .addTag( "role" ).addText( "authorization" )
-//        .addTag( "name" ).addText( "AclsAuthz" )
-//        .addTag( "enabled" ).addText( "true" )
-//        .addTag("param")
-//        .addTag("name").addText("knox.acl")
-//        .addTag("value").addText("admin;*;*").gotoParent().gotoParent()
-//        .addTag("provider")
-//        .addTag( "role" ).addText( "identity-assertion" )
-//        .addTag( "enabled" ).addText( "true" )
-//        .addTag( "name" ).addText( "Default" ).gotoParent()
-//        .addTag( "provider" )
-//        .gotoRoot()
-//        .addTag( "service" )
-//        .addTag( "role" ).addText( "KNOX" )
-//        .gotoRoot();
-//    // System.out.println( "GATEWAY=" + xml.toString() );
-//    return xml;
-//  }
-//
-//  private static int findFreePort() throws IOException {
-//    ServerSocket socket = new ServerSocket(0);
-//    int port = socket.getLocalPort();
-//    socket.close();
-//    return port;
-//  }
-//
-//  public static InputStream getResourceStream( String resource ) throws IOException {
-//    return getResourceUrl( resource ).openStream();
-//  }
-//
-//  public static URL getResourceUrl( String resource ) {
-//    URL url = ClassLoader.getSystemResource( getResourceName( resource ) );
-//    assertThat( "Failed to find test resource " + resource, url, Matchers.notNullValue() );
-//    return url;
-//  }
-//
-//  public static String getResourceName( String resource ) {
-//    return getResourceBaseName() + resource;
-//  }
-//
-//  public static String getResourceBaseName() {
-//    return RESOURCE_BASE_CLASS.getName().replaceAll( "\\.", "/" ) + "/";
-//  }
-//
-//  //@Test
-//  public void waitForManualTesting() throws IOException {
-//    System.in.read();
-//  }
-//
-//  @Test( timeout = LONG_TIMEOUT )
-//  public void testTopologyCollection() throws ClassNotFoundException {
-//    LOG_ENTER();
-//
-//    String username = "admin";
-//    String password = "admin-password";
-//    String serviceUrl =  clusterUrl + "/api/v1/topologies";
-//    String href1 = given()
-//        //.log().all()
-//        .auth().preemptive().basic(username, password)
-//        .header("Accept", MediaType.APPLICATION_JSON)
-//        .contentType(MediaType.APPLICATION_JSON)
-//        .expect()
-//        //.log().all()
-//        .statusCode(HttpStatus.SC_OK)
-//        .body("topologies.topology[0].name", not(nullValue()))
-//        .body("topologies.topology[1].name", not(nullValue()))
-//        .body("topologies.topology[0].uri", not(nullValue()))
-//        .body("topologies.topology[1].uri", not(nullValue()))
-//        .body("topologies.topology[0].href", not(nullValue()))
-//        .body("topologies.topology[1].href", not(nullValue()))
-//        .body("topologies.topology[0].timestamp", not(nullValue()))
-//        .body("topologies.topology[1].timestamp", not(nullValue()))
-//        .when().get(serviceUrl).thenReturn().getBody().path("topologies.topology.href[1]");
-//
-//       given()
-//        //.log().all()
-//        .auth().preemptive().basic(username, password)
-//        .header("Accept", MediaType.APPLICATION_XML)
-//        .expect()
-//        //.log().all()
-//        .body("topologies.topology.href[1]", equalTo(href1))
-//        .statusCode(HttpStatus.SC_OK)
-//        .when().get(serviceUrl);
-//
-//
-//
-//
-//
-//    given()
-//        //.log().all()
-//        .auth().preemptive().basic(username, password)
-//        .expect()
-//        //.log().all()
-//        .statusCode(HttpStatus.SC_OK)
-//        .contentType(MediaType.APPLICATION_XML)
-//        .get(serviceUrl);
-//
-//
-//    given().auth().preemptive().basic(username, password)
-//        .expect()
-//        //.log().all()
-//        .statusCode(HttpStatus.SC_OK)
-//        .contentType("application/json")
-//        .body("topology.name", equalTo("test-cluster"))
-//        .when().get(href1);
-//
-//  }
-//
-//  @Test( timeout = LONG_TIMEOUT )
-//  public void testTopologyObject() throws ClassNotFoundException {
-//    LOG_ENTER();
-//
-//    String username = "admin";
-//    String password = "admin-password";
-//    String serviceUrl =  clusterUrl + "/api/v1/topologies";
-//    String hrefJson = given()
-//        //.log().all()
-//        .auth().preemptive().basic(username, password)
-//        .header("Accept", MediaType.APPLICATION_JSON)
-//        .expect()
-//        //.log().all()
-//        .statusCode(HttpStatus.SC_OK)
-//        .when().get(serviceUrl).thenReturn().getBody().path("topologies.topology[1].href");
-//
-//    String timestampJson = given()
-//        //.log().all()
-//        .auth().preemptive().basic(username, password)
-//        .header("Accept", MediaType.APPLICATION_JSON)
-//        .expect()
-//        //.log().all()
-//        .statusCode(HttpStatus.SC_OK)
-//        .contentType("application/json")
-//        .when().get(serviceUrl).andReturn()
-//        .getBody().path("topologies.topology[1].timestamp");
-//
-//        given()
-//        //.log().all()
-//        .auth().preemptive().basic(username, password)
-//        .header("Accept", MediaType.APPLICATION_JSON)
-//        .expect()
-//        //.log().all()
-//        .statusCode(HttpStatus.SC_OK)
-//        .body("topology.name", equalTo("test-cluster"))
-//        .body("topology.timestamp", equalTo(Long.parseLong(timestampJson)))
-//        .when()
-//        .get(hrefJson);
-//
-//
-//    String hrefXml = given()
-//        //.log().all()
-//        .auth().preemptive().basic(username, password)
-//        .header("Accept", MediaType.APPLICATION_XML)
-//        .expect()
-//        //.log().all()
-//        .statusCode(HttpStatus.SC_OK)
-//        .when().get(serviceUrl).thenReturn().getBody().path("topologies.topology[1].href");
-//
-//    given()
-//        //.log().all()
-//        .auth().preemptive().basic(username, password)
-//        .header("Accept", MediaType.APPLICATION_XML)
-//        .expect()
-//        //.log().all()
-//        .statusCode(HttpStatus.SC_OK)
-//        .when()
-//        .get(hrefXml);
-//
-//  }
-//
-//  @Test( timeout = LONG_TIMEOUT )
-//  public void testPositiveAuthorization() throws ClassNotFoundException{
-//    LOG_ENTER();
-//
-//    String adminUser = "admin";
-//    String adminPass = "admin-password";
-//    String url =  clusterUrl + "/api/v1/topologies";
-//
-//    given()
-//        //.log().all()
-//        .auth().preemptive().basic(adminUser, adminPass)
-//        .expect()
-//        //.log().all()
-//        .statusCode(HttpStatus.SC_OK)
-//        .contentType(ContentType.JSON)
-//        .body("topologies.topology[0].name", not(nullValue()))
-//        .body("topologies.topology[1].name", not(nullValue()))
-//        .body("topologies.topology[0].uri", not(nullValue()))
-//        .body("topologies.topology[1].uri", not(nullValue()))
-//        .body("topologies.topology[0].href", not(nullValue()))
-//        .body("topologies.topology[1].href", not(nullValue()))
-//        .body("topologies.topology[0].timestamp", not(nullValue()))
-//        .body("topologies.topology[1].timestamp", not(nullValue()))
-//        .get(url);
-//
-//  }
-//
-//  @Test( timeout = LONG_TIMEOUT )
-//  public void testNegativeAuthorization() throws ClassNotFoundException{
-//    LOG_ENTER();
-//
-//    String guestUser = "guest";
-//    String guestPass = "guest-password";
-//    String url =  clusterUrl + "/api/v1/topologies";
-//
-//    given()
-//        //.log().all()
-//        .auth().basic(guestUser, guestPass)
-//        .expect()
-//        //.log().all()
-//        .statusCode(HttpStatus.SC_FORBIDDEN)
-//        .get(url);
-//
-//
-//
-//  }
-//
-//  private Topology createTestTopology(){
-//    Topology topology = new Topology();
-//    topology.setName("test-topology");
-//
-//    try {
-//      topology.setUri(new URI(gatewayUrl + "/" + topology.getName()));
-//    } catch (URISyntaxException ex) {
-//      assertThat(topology.getUri(), not(nullValue()));
-//    }
-//
-//    Provider identityProvider = new Provider();
-//    identityProvider.setName("Default");
-//    identityProvider.setRole("identity-assertion");
-//    identityProvider.setEnabled(true);
-//
-//    Provider AuthenicationProvider = new Provider();
-//    AuthenicationProvider.setName("ShiroProvider");
-//    AuthenicationProvider.setRole("authentication");
-//    AuthenicationProvider.setEnabled(true);
-//
-//    Param ldapMain = new Param();
-//    ldapMain.setName("main.ldapRealm");
-//    ldapMain.setValue("org.apache.hadoop.gateway.shirorealm.KnoxLdapRealm");
-//
-//    Param ldapGroupContextFactory = new Param();
-//    ldapGroupContextFactory.setName("main.ldapGroupContextFactory");
-//    ldapGroupContextFactory.setValue("org.apache.hadoop.gateway.shirorealm.KnoxLdapContextFactory");
-//
-//    Param ldapRealmContext = new Param();
-//    ldapRealmContext.setName("main.ldapRealm.contextFactory");
-//    ldapRealmContext.setValue("$ldapGroupContextFactory");
-//
-//    Param ldapURL = new Param();
-//    ldapURL.setName("main.ldapRealm.contextFactory.url");
-//    ldapURL.setValue("ldap://localhost:" + ldapTransport.getPort());
-//
-//    Param ldapUserTemplate = new Param();
-//    ldapUserTemplate.setName("main.ldapRealm.userDnTemplate");
-//    ldapUserTemplate.setValue("uid={0},ou=people,dc=hadoop,dc=apache,dc=org");
-//
-//    Param authcBasic = new Param();
-//    authcBasic.setName("urls./**");
-//    authcBasic.setValue("authcBasic");
-//
-//    AuthenicationProvider.addParam(ldapGroupContextFactory);
-//    AuthenicationProvider.addParam(ldapMain);
-//    AuthenicationProvider.addParam(ldapRealmContext);
-//    AuthenicationProvider.addParam(ldapURL);
-//    AuthenicationProvider.addParam(ldapUserTemplate);
-//    AuthenicationProvider.addParam(authcBasic);
-//
-//    Service testService = new Service();
-//    testService.setRole("test-service-role");
-//
-//    topology.addProvider(AuthenicationProvider);
-//    topology.addProvider(identityProvider);
-//    topology.addService(testService);
-//    topology.setTimestamp(System.nanoTime());
-//
-//    return topology;
-//  }
-//
-//  @Test( timeout = LONG_TIMEOUT )
-//  public void testDeployTopology() throws ClassNotFoundException {
-//    LOG_ENTER();
-//
-//    Topology testTopology = createTestTopology();
-//
-//    String user = "guest";
-//    String password = "guest-password";
-//
-//    String url = gatewayUrl + "/" + testTopology.getName() + "/test-service-path/test-service-resource";
-//
-//    GatewayServices srvs = GatewayServer.getGatewayServices();
-//
-//    TopologyService ts = srvs.getService(GatewayServices.TOPOLOGY_SERVICE);
-//
-//    assertThat(testTopology, not(nullValue()));
-//    assertThat(testTopology.getName(), is("test-topology"));
-//
-//    given()
-//        //.log().all()
-//        .auth().preemptive().basic(user, password)
-//        .expect()
-//        //.log().all()
-//        .statusCode(HttpStatus.SC_NOT_FOUND)
-//        .when()
-//        .get(url);
-//
-//    ts.deployTopology(testTopology);
-//
-//    given()
-//        //.log().all()
-//        .auth().preemptive().basic(user, password)
-//        .expect()
-//        //.log().all()
-//        .statusCode(HttpStatus.SC_OK)
-//        .contentType("text/plain")
-//        .body(is("test-service-response"))
-//        .when()
-//        .get(url).getBody();
-//
-//    ts.deleteTopology(testTopology);
-//
-//    given()
-//        //.log().all()
-//        .auth().preemptive().basic(user, password)
-//        .expect()
-//        //.log().all()
-//        .statusCode(HttpStatus.SC_NOT_FOUND)
-//        .when()
-//        .get(url);
-//  }
-//
-//  @Test( timeout = LONG_TIMEOUT )
-//  public void testDeleteTopology() throws ClassNotFoundException {
-//    LOG_ENTER();
-//
-//    Topology test = createTestTopology();
-//
-//    String username = "admin";
-//    String password = "admin-password";
-//    String url =  clusterUrl + "/api/v1/topologies/" + test.getName();
-//
-//    GatewayServices gs = GatewayServer.getGatewayServices();
-//
-//    TopologyService ts = gs.getService(GatewayServices.TOPOLOGY_SERVICE);
-//
-//    ts.deployTopology(test);
-//
-//    given()
-//        .auth().preemptive().basic(username, password)
-//        .expect()
-//        //.log().all()
-//        .statusCode(HttpStatus.SC_OK)
-//        .contentType(MediaType.APPLICATION_JSON)
-//        .get(url);
-//
-//    given()
-//        .auth().preemptive().basic(username, password)
-//        .expect()
-//        //.log().all()
-//        .statusCode(HttpStatus.SC_OK)
-//        .contentType(MediaType.APPLICATION_JSON)
-//        .delete(url);
-//
-//    given()
-//        //.log().all()
-//        .auth().preemptive().basic(username, password)
-//        .expect()
-//        //.log().all()
-//        .statusCode(HttpStatus.SC_NO_CONTENT)
-//        .get(url);
-//  }
-//
-//  @Test( timeout = LONG_TIMEOUT )
-//  public void testPutTopology() throws ClassNotFoundException {
-//    LOG_ENTER() ;
-//
-//    String username = "admin";
-//    String password = "admin-password";
-//    String url =  clusterUrl + "/api/v1/topologies/test-put";
-//
-//    String JsonPut =
-//        given()
-//        .auth().preemptive().basic(username, password)
-//        .header("Accept", MediaType.APPLICATION_JSON)
-//        .get(clusterUrl + "/api/v1/topologies/test-cluster")
-//        .getBody().asString();
-//
-//    String XML = given()
-//        //.log().all()
-//        .auth().preemptive().basic(username, password)
-//        .contentType(MediaType.APPLICATION_JSON)
-//        .header("Accept", MediaType.APPLICATION_XML)
-//        .body(JsonPut)
-//        .expect()
-//        .statusCode(HttpStatus.SC_OK)
-//        //.log().all()
-//        .put(url).getBody().asString();
-//
-//
-//        given()
-//            .auth().preemptive().basic(username, password)
-//            .header("Accept", MediaType.APPLICATION_XML)
-//            .expect()
-//            .statusCode(HttpStatus.SC_OK)
-//            .body(equalTo(XML))
-//            .get(url)
-//            .getBody().asString();
-//
-//
-//    String XmlPut =
-//        given()
-//            .auth().preemptive().basic(username, password)
-//            .header("Accept", MediaType.APPLICATION_XML)
-//            .get(clusterUrl + "/api/v1/topologies/test-cluster")
-//            .getBody().asString();
-//
-//    String JSON = given()
-//        //.log().all()
-//        .auth().preemptive().basic(username, password)
-//        .contentType(MediaType.APPLICATION_XML)
-//        .header("Accept", MediaType.APPLICATION_JSON)
-//        .body(XmlPut)
-//        .expect()
-//        .statusCode(HttpStatus.SC_OK)
-//            //.log().all()
-//        .put(url).getBody().asString();
-//
-//    given()
-//        .auth().preemptive().basic(username, password)
-//        .header("Accept", MediaType.APPLICATION_JSON)
-//        .expect()
-//        .statusCode(HttpStatus.SC_OK)
-//        .body(equalTo(JSON))
-//        .get(url)
-//        .getBody().asString();
-//
-//  }
-//
-//  @Test( timeout = LONG_TIMEOUT )
-//  public void testXForwardedHeaders() {
-//    LOG_ENTER();
-//
-//    String username = "admin";
-//    String password = "admin-password";
-//    String url =  clusterUrl + "/api/v1/topologies";
-//
-////    X-Forward header values
-//    String port = String.valueOf(777);
-//    String server = "myserver";
-//    String host = server + ":" + port;
-//    String proto = "protocol";
-//    String context = "/mycontext";
-//    String newUrl = proto + "://" + host + context;
-////    String port = String.valueOf(gateway.getAddresses()[0].getPort());
-//
-////     Case 1: Add in all x-forward headers (host, port, server, context, proto)
-//    given()
-//        .auth().preemptive().basic(username, password)
-//        .header("Accept", MediaType.APPLICATION_XML)
-//        .header("X-Forwarded-Host", host )
-//        .header("X-Forwarded-Port", port )
-//        .header("X-Forwarded-Server", server )
-//        .header("X-Forwarded-Context", context)
-//        .header("X-Forwarded-Proto", proto)
-//        .expect()
-//        .statusCode(HttpStatus.SC_OK)
-//        .body(containsString(newUrl))
-//        .body(containsString("test-cluster"))
-//        .body(containsString("admin"))
-//        .get(url).prettyPrint();
-//
-//
-////     Case 2: add in x-forward headers (host, server, proto, context)
-//    given()
-//        .auth().preemptive().basic(username, password)
-//        .header("Accept", MediaType.APPLICATION_XML)
-//        .header("X-Forwarded-Host", host )
-//        .header("X-Forwarded-Server", server )
-//        .header("X-Forwarded-Context", context )
-//        .header("X-Forwarded-Proto", proto )
-//        .expect()
-//        .statusCode(HttpStatus.SC_OK)
-//        .body(containsString(server))
-//        .body(containsString(context))
-//        .body(containsString(proto))
-//        .body(containsString(host))
-//        .body(containsString("test-cluster"))
-//        .body(containsString("admin"))
-//        .get(url);
-//
-////     Case 3: add in x-forward headers (host, proto, port, context)
-//    given()
-//        .auth().preemptive().basic(username, password)
-//        .header("Accept", MediaType.APPLICATION_XML)
-//        .header("X-Forwarded-Host", host )
-//        .header("X-Forwarded-Port", port )
-//        .header("X-Forwarded-Context", context )
-//        .header("X-Forwarded-Proto", proto)
-//        .expect()
-//        .statusCode(HttpStatus.SC_OK)
-//        .body(containsString(host))
-//        .body(containsString(port))
-//        .body(containsString(context))
-//        .body(containsString(proto))
-//        .body(containsString("test-cluster"))
-//        .body(containsString("admin"))
-//        .get(url);
-//
-////     Case 4: add in x-forward headers (host, proto, port, context) no port in host.
-//    given()
-//        .auth().preemptive().basic(username, password)
-//        .header("Accept", MediaType.APPLICATION_XML)
-//        .header("X-Forwarded-Host", server)
-//        .header("X-Forwarded-Port", port)
-//        .header("X-Forwarded-Context", context)
-//        .header("X-Forwarded-Proto", proto)
-//        .expect()
-//        .statusCode(HttpStatus.SC_OK)
-//        .body(containsString(server))
-//        .body(containsString(port))
-//        .body(containsString(context))
-//        .body(containsString(proto))
-//        .body(containsString("test-cluster"))
-//        .body(containsString("admin"))
-//        .get(url);
-//
-////     Case 5: add in x-forward headers (host, port)
-//    given()
-//        .auth().preemptive().basic(username, password)
-//        .header("Accept", MediaType.APPLICATION_XML)
-//        .header("X-Forwarded-Host", host )
-//        .header("X-Forwarded-Port", port )
-//        .expect()
-//        .statusCode(HttpStatus.SC_OK)
-//        .body(containsString(host))
-//        .body(containsString(port))
-//        .body(containsString("test-cluster"))
-//        .body(containsString("admin"))
-//        .get(url);
-//
-////     Case 6: Normal Request
-//    given()
-//        .auth().preemptive().basic(username, password)
-//        .header("Accept", MediaType.APPLICATION_XML)
-//        .expect()
-//        .statusCode(HttpStatus.SC_OK)
-//        .body(containsString(url))
-//        .body(containsString("test-cluster"))
-//        .body(containsString("admin"))
-//        .get(url);
-//
-//  }
-//
-//  @Test( timeout = LONG_TIMEOUT )
-//  public void testGatewayPathChange() throws Exception {
-//    LOG_ENTER();
-//    String username = "admin";
-//    String password = "admin-password";
-//    String url =  clusterUrl + "/api/v1/topologies";
-//
-////     Case 1: Normal Request (No Change in gateway.path). Ensure HTTP OK resp + valid URL.
-//    given()
-//        .auth().preemptive().basic(username, password)
-//        .header("Accept", MediaType.APPLICATION_XML)
-//        .expect()
-//        .statusCode(HttpStatus.SC_OK)
-//        .body(containsString(url + "/test-cluster"))
-//        .get(url);
-//
-//
-////     Case 2: Change gateway.path to another String. Ensure HTTP OK resp + valid URL.
-//   try {
-//     gateway.stop();
-//
-//     GatewayTestConfig conf = new GatewayTestConfig();
-//     conf.setGatewayPath("new-gateway-path");
-//     setupGateway(conf);
-//
-//     String newUrl = clusterUrl + "/api/v1/topologies";
-//
-//     given()
-//         .auth().preemptive().basic(username, password)
-//         .header("Accept", MediaType.APPLICATION_XML)
-//         .expect()
-//         .statusCode(HttpStatus.SC_OK)
-//         .body(containsString(newUrl + "/test-cluster"))
-//         .get(newUrl);
-//   } catch(Exception e){
-//     fail(e.getMessage());
-//   }
-//    finally {
-////        Restart the gateway with old settings.
-//       gateway.stop();
-//      setupGateway(new GatewayTestConfig());
-//    }
-//
-//  }
-//
-//  private static final String CLASS = GatewayAdminTopologyFuncTest.class.getCanonicalName();
+  private static final long SHORT_TIMEOUT = 1000L;
+  private static final long MEDIUM_TIMEOUT = 5 * SHORT_TIMEOUT;
+  private static final long LONG_TIMEOUT = 5 * MEDIUM_TIMEOUT;
+
+  private static Class RESOURCE_BASE_CLASS = GatewayAdminTopologyFuncTest.class;
+  private static Logger LOG = LoggerFactory.getLogger( GatewayAdminTopologyFuncTest.class );
+
+  public static Enumeration<Appender> appenders;
+  public static GatewayConfig config;
+  public static GatewayServer gateway;
+  public static String gatewayUrl;
+  public static String clusterUrl;
+  public static SimpleLdapDirectoryServer ldap;
+  public static TcpTransport ldapTransport;
+
+  @BeforeClass
+  public static void setupSuite() throws Exception {
+    //appenders = NoOpAppender.setUp();
+    setupLdap();
+    setupGateway(new GatewayTestConfig());
+  }
+
+  @AfterClass
+  public static void cleanupSuite() throws Exception {
+    gateway.stop();
+    ldap.stop( true );
+    //FileUtils.deleteQuietly( new File( config.getGatewayHomeDir() ) );
+    //NoOpAppender.tearDown( appenders );
+  }
+
+  public static void setupLdap() throws Exception {
+    URL usersUrl = getResourceUrl( "users.ldif" );
+    int port = findFreePort();
+    ldapTransport = new TcpTransport( port );
+    ldap = new SimpleLdapDirectoryServer( "dc=hadoop,dc=apache,dc=org", new File( usersUrl.toURI() ), ldapTransport );
+    ldap.start();
+    LOG.info( "LDAP port = " + ldapTransport.getPort() );
+  }
+
+  public static void setupGateway(GatewayTestConfig testConfig) throws Exception {
+
+    File targetDir = new File( System.getProperty( "user.dir" ), "target" );
+    File gatewayDir = new File( targetDir, "gateway-home-" + UUID.randomUUID() );
+    gatewayDir.mkdirs();
+
+    config = testConfig;
+    testConfig.setGatewayHomeDir( gatewayDir.getAbsolutePath() );
+
+    File topoDir = new File( testConfig.getGatewayTopologyDir() );
+    topoDir.mkdirs();
+
+    File deployDir = new File( testConfig.getGatewayDeploymentDir() );
+    deployDir.mkdirs();
+
+    File descriptor = new File( topoDir, "admin.xml" );
+    FileOutputStream stream = new FileOutputStream( descriptor );
+    createKnoxTopology().toStream( stream );
+    stream.close();
+
+    File descriptor2 = new File( topoDir, "test-cluster.xml" );
+    FileOutputStream stream2 = new FileOutputStream( descriptor2 );
+    createNormalTopology().toStream( stream2 );
+    stream.close();
+
+
+    DefaultGatewayServices srvcs = new DefaultGatewayServices();
+    Map<String,String> options = new HashMap<String,String>();
+    options.put( "persist-master", "false" );
+    options.put( "master", "password" );
+
+    try {
+      srvcs.init( testConfig, options );
+    } catch ( ServiceLifecycleException e ) {
+      e.printStackTrace(); // I18N not required.
+    }
+    gateway = GatewayServer.startGateway( testConfig, srvcs );
+    MatcherAssert.assertThat( "Failed to start gateway.", gateway, notNullValue() );
+
+    LOG.info( "Gateway port = " + gateway.getAddresses()[ 0 ].getPort() );
+
+    gatewayUrl = "http://localhost:" + gateway.getAddresses()[0].getPort() + "/" + config.getGatewayPath();
+    clusterUrl = gatewayUrl + "/admin";
+  }
+
+  private static XMLTag createNormalTopology() {
+    XMLTag xml = XMLDoc.newDocument( true )
+        .addRoot( "topology" )
+        .addTag( "gateway" )
+        .addTag( "provider" )
+        .addTag( "role" ).addText( "webappsec" )
+        .addTag( "name" ).addText( "WebAppSec" )
+        .addTag( "enabled" ).addText( "true" )
+        .addTag( "param" )
+        .addTag( "name" ).addText( "csrf.enabled" )
+        .addTag( "value" ).addText( "true" ).gotoParent().gotoParent()
+        .addTag( "provider" )
+        .addTag( "role" ).addText( "authentication" )
+        .addTag( "name" ).addText( "ShiroProvider" )
+        .addTag( "enabled" ).addText( "true" )
+        .addTag( "param" )
+        .addTag( "name" ).addText( "main.ldapRealm" )
+        .addTag( "value" ).addText( "org.apache.hadoop.gateway.shirorealm.KnoxLdapRealm" ).gotoParent()
+        .addTag( "param" )
+        .addTag( "name" ).addText( "main.ldapRealm.userDnTemplate" )
+        .addTag( "value" ).addText( "uid={0},ou=people,dc=hadoop,dc=apache,dc=org" ).gotoParent()
+        .addTag( "param" )
+        .addTag( "name" ).addText( "main.ldapRealm.contextFactory.url" )
+        .addTag( "value" ).addText( "ldap://localhost:" + ldapTransport.getPort() ).gotoParent()
+        .addTag( "param" )
+        .addTag( "name" ).addText( "main.ldapRealm.contextFactory.authenticationMechanism" )
+        .addTag( "value" ).addText( "simple" ).gotoParent()
+        .addTag( "param" )
+        .addTag( "name" ).addText( "urls./**" )
+        .addTag( "value" ).addText( "authcBasic" ).gotoParent().gotoParent()
+        .addTag( "provider" )
+        .addTag( "role" ).addText( "identity-assertion" )
+        .addTag( "enabled" ).addText( "true" )
+        .addTag( "name" ).addText( "Default" ).gotoParent()
+        .addTag( "provider" )
+        .addTag( "role" ).addText( "authorization" )
+        .addTag( "enabled" ).addText( "true" )
+        .addTag( "name" ).addText( "AclsAuthz" ).gotoParent()
+        .addTag( "param" )
+        .addTag( "name" ).addText( "webhdfs-acl" )
+        .addTag( "value" ).addText( "hdfs;*;*" ).gotoParent()
+        .gotoRoot()
+        .addTag( "service" )
+        .addTag( "role" ).addText( "WEBHDFS" )
+        .addTag( "url" ).addText( "http://localhost:50070/webhdfs/v1" ).gotoParent()
+        .gotoRoot();
+//     System.out.println( "GATEWAY=" + xml.toString() );
+    return xml;
+  }
+
+  private static XMLTag createKnoxTopology() {
+    XMLTag xml = XMLDoc.newDocument( true )
+        .addRoot( "topology" )
+        .addTag( "gateway" )
+        .addTag( "provider" )
+        .addTag( "role" ).addText( "authentication" )
+        .addTag( "name" ).addText( "ShiroProvider" )
+        .addTag( "enabled" ).addText( "true" )
+        .addTag( "param" )
+        .addTag( "name" ).addText( "main.ldapRealm" )
+        .addTag( "value" ).addText( "org.apache.hadoop.gateway.shirorealm.KnoxLdapRealm" ).gotoParent()
+        .addTag( "param" )
+        .addTag( "name" ).addText( "main.ldapRealm.userDnTemplate" )
+        .addTag( "value" ).addText( "uid={0},ou=people,dc=hadoop,dc=apache,dc=org" ).gotoParent()
+        .addTag( "param" )
+        .addTag( "name" ).addText( "main.ldapRealm.contextFactory.url" )
+        .addTag( "value" ).addText( "ldap://localhost:" + ldapTransport.getPort() ).gotoParent()
+        .addTag( "param" )
+        .addTag( "name" ).addText( "main.ldapRealm.contextFactory.authenticationMechanism" )
+        .addTag( "value" ).addText( "simple" ).gotoParent()
+        .addTag( "param" )
+        .addTag( "name" ).addText( "urls./**" )
+        .addTag( "value" ).addText( "authcBasic" ).gotoParent().gotoParent()
+        .addTag("provider")
+        .addTag( "role" ).addText( "authorization" )
+        .addTag( "name" ).addText( "AclsAuthz" )
+        .addTag( "enabled" ).addText( "true" )
+        .addTag("param")
+        .addTag("name").addText("knox.acl")
+        .addTag("value").addText("admin;*;*").gotoParent().gotoParent()
+        .addTag("provider")
+        .addTag( "role" ).addText( "identity-assertion" )
+        .addTag( "enabled" ).addText( "true" )
+        .addTag( "name" ).addText( "Default" ).gotoParent()
+        .addTag( "provider" )
+        .gotoRoot()
+        .addTag( "service" )
+        .addTag( "role" ).addText( "KNOX" )
+        .gotoRoot();
+    // System.out.println( "GATEWAY=" + xml.toString() );
+    return xml;
+  }
+
+  private static int findFreePort() throws IOException {
+    ServerSocket socket = new ServerSocket(0);
+    int port = socket.getLocalPort();
+    socket.close();
+    return port;
+  }
+
+  public static InputStream getResourceStream( String resource ) throws IOException {
+    return getResourceUrl( resource ).openStream();
+  }
+
+  public static URL getResourceUrl( String resource ) {
+    URL url = ClassLoader.getSystemResource( getResourceName( resource ) );
+    assertThat( "Failed to find test resource " + resource, url, Matchers.notNullValue() );
+    return url;
+  }
+
+  public static String getResourceName( String resource ) {
+    return getResourceBaseName() + resource;
+  }
+
+  public static String getResourceBaseName() {
+    return RESOURCE_BASE_CLASS.getName().replaceAll( "\\.", "/" ) + "/";
+  }
+
+  //@Test
+  public void waitForManualTesting() throws IOException {
+    System.in.read();
+  }
+
+  @Test( timeout = LONG_TIMEOUT )
+  public void testTopologyCollection() throws ClassNotFoundException {
+    LOG_ENTER();
+
+    String username = "admin";
+    String password = "admin-password";
+    String serviceUrl =  clusterUrl + "/api/v1/topologies";
+    String href1 = given()
+        //.log().all()
+        .auth().preemptive().basic(username, password)
+        .header("Accept", MediaType.APPLICATION_JSON)
+        .contentType(MediaType.APPLICATION_JSON)
+        .expect()
+        //.log().all()
+        .statusCode(HttpStatus.SC_OK)
+        .body("topologies.topology[0].name", not(nullValue()))
+        .body("topologies.topology[1].name", not(nullValue()))
+        .body("topologies.topology[0].uri", not(nullValue()))
+        .body("topologies.topology[1].uri", not(nullValue()))
+        .body("topologies.topology[0].href", not(nullValue()))
+        .body("topologies.topology[1].href", not(nullValue()))
+        .body("topologies.topology[0].timestamp", not(nullValue()))
+        .body("topologies.topology[1].timestamp", not(nullValue()))
+        .when().get(serviceUrl).thenReturn().getBody().path("topologies.topology.href[1]");
+
+       given()
+        //.log().all()
+        .auth().preemptive().basic(username, password)
+        .header("Accept", MediaType.APPLICATION_XML)
+        .expect()
+        //.log().all()
+        .body("topologies.topology.href[1]", equalTo(href1))
+        .statusCode(HttpStatus.SC_OK)
+        .when().get(serviceUrl);
+
+
+
+
+
+    given()
+        //.log().all()
+        .auth().preemptive().basic(username, password)
+        .expect()
+        //.log().all()
+        .statusCode(HttpStatus.SC_OK)
+        .contentType(MediaType.APPLICATION_XML)
+        .get(serviceUrl);
+
+
+    given().auth().preemptive().basic(username, password)
+        .expect()
+        //.log().all()
+        .statusCode(HttpStatus.SC_OK)
+        .contentType("application/json")
+        .body("topology.name", equalTo("test-cluster"))
+        .when().get(href1);
+
+  }
+
+  @Test( timeout = LONG_TIMEOUT )
+  public void testTopologyObject() throws ClassNotFoundException {
+    LOG_ENTER();
+
+    String username = "admin";
+    String password = "admin-password";
+    String serviceUrl =  clusterUrl + "/api/v1/topologies";
+    String hrefJson = given()
+        //.log().all()
+        .auth().preemptive().basic(username, password)
+        .header("Accept", MediaType.APPLICATION_JSON)
+        .expect()
+        //.log().all()
+        .statusCode(HttpStatus.SC_OK)
+        .when().get(serviceUrl).thenReturn().getBody().path("topologies.topology[1].href");
+
+    String timestampJson = given()
+        //.log().all()
+        .auth().preemptive().basic(username, password)
+        .header("Accept", MediaType.APPLICATION_JSON)
+        .expect()
+        //.log().all()
+        .statusCode(HttpStatus.SC_OK)
+        .contentType("application/json")
+        .when().get(serviceUrl).andReturn()
+        .getBody().path("topologies.topology[1].timestamp");
+
+        given()
+        //.log().all()
+        .auth().preemptive().basic(username, password)
+        .header("Accept", MediaType.APPLICATION_JSON)
+        .expect()
+        //.log().all()
+        .statusCode(HttpStatus.SC_OK)
+        .body("topology.name", equalTo("test-cluster"))
+        .body("topology.timestamp", equalTo(Long.parseLong(timestampJson)))
+        .when()
+        .get(hrefJson);
+
+
+    String hrefXml = given()
+        //.log().all()
+        .auth().preemptive().basic(username, password)
+        .header("Accept", MediaType.APPLICATION_XML)
+        .expect()
+        //.log().all()
+        .statusCode(HttpStatus.SC_OK)
+        .when().get(serviceUrl).thenReturn().getBody().path("topologies.topology[1].href");
+
+    given()
+        //.log().all()
+        .auth().preemptive().basic(username, password)
+        .header("Accept", MediaType.APPLICATION_XML)
+        .expect()
+        //.log().all()
+        .statusCode(HttpStatus.SC_OK)
+        .when()
+        .get(hrefXml);
+
+  }
+
+  @Test( timeout = LONG_TIMEOUT )
+  public void testPositiveAuthorization() throws ClassNotFoundException{
+    LOG_ENTER();
+
+    String adminUser = "admin";
+    String adminPass = "admin-password";
+    String url =  clusterUrl + "/api/v1/topologies";
+
+    given()
+        //.log().all()
+        .auth().preemptive().basic(adminUser, adminPass)
+        .expect()
+        //.log().all()
+        .statusCode(HttpStatus.SC_OK)
+        .contentType(ContentType.JSON)
+        .body("topologies.topology[0].name", not(nullValue()))
+        .body("topologies.topology[1].name", not(nullValue()))
+        .body("topologies.topology[0].uri", not(nullValue()))
+        .body("topologies.topology[1].uri", not(nullValue()))
+        .body("topologies.topology[0].href", not(nullValue()))
+        .body("topologies.topology[1].href", not(nullValue()))
+        .body("topologies.topology[0].timestamp", not(nullValue()))
+        .body("topologies.topology[1].timestamp", not(nullValue()))
+        .get(url);
+
+  }
+
+  @Test( timeout = LONG_TIMEOUT )
+  public void testNegativeAuthorization() throws ClassNotFoundException{
+    LOG_ENTER();
+
+    String guestUser = "guest";
+    String guestPass = "guest-password";
+    String url =  clusterUrl + "/api/v1/topologies";
+
+    given()
+        //.log().all()
+        .auth().basic(guestUser, guestPass)
+        .expect()
+        //.log().all()
+        .statusCode(HttpStatus.SC_FORBIDDEN)
+        .get(url);
+
+
+
+  }
+
+  private Topology createTestTopology(){
+    Topology topology = new Topology();
+    topology.setName("test-topology");
+
+    try {
+      topology.setUri(new URI(gatewayUrl + "/" + topology.getName()));
+    } catch (URISyntaxException ex) {
+      assertThat(topology.getUri(), not(nullValue()));
+    }
+
+    Provider identityProvider = new Provider();
+    identityProvider.setName("Default");
+    identityProvider.setRole("identity-assertion");
+    identityProvider.setEnabled(true);
+
+    Provider AuthenicationProvider = new Provider();
+    AuthenicationProvider.setName("ShiroProvider");
+    AuthenicationProvider.setRole("authentication");
+    AuthenicationProvider.setEnabled(true);
+
+    Param ldapMain = new Param();
+    ldapMain.setName("main.ldapRealm");
+    ldapMain.setValue("org.apache.hadoop.gateway.shirorealm.KnoxLdapRealm");
+
+    Param ldapGroupContextFactory = new Param();
+    ldapGroupContextFactory.setName("main.ldapGroupContextFactory");
+    ldapGroupContextFactory.setValue("org.apache.hadoop.gateway.shirorealm.KnoxLdapContextFactory");
+
+    Param ldapRealmContext = new Param();
+    ldapRealmContext.setName("main.ldapRealm.contextFactory");
+    ldapRealmContext.setValue("$ldapGroupContextFactory");
+
+    Param ldapURL = new Param();
+    ldapURL.setName("main.ldapRealm.contextFactory.url");
+    ldapURL.setValue("ldap://localhost:" + ldapTransport.getPort());
+
+    Param ldapUserTemplate = new Param();
+    ldapUserTemplate.setName("main.ldapRealm.userDnTemplate");
+    ldapUserTemplate.setValue("uid={0},ou=people,dc=hadoop,dc=apache,dc=org");
+
+    Param authcBasic = new Param();
+    authcBasic.setName("urls./**");
+    authcBasic.setValue("authcBasic");
+
+    AuthenicationProvider.addParam(ldapGroupContextFactory);
+    AuthenicationProvider.addParam(ldapMain);
+    AuthenicationProvider.addParam(ldapRealmContext);
+    AuthenicationProvider.addParam(ldapURL);
+    AuthenicationProvider.addParam(ldapUserTemplate);
+    AuthenicationProvider.addParam(authcBasic);
+
+    Service testService = new Service();
+    testService.setRole("test-service-role");
+
+    topology.addProvider(AuthenicationProvider);
+    topology.addProvider(identityProvider);
+    topology.addService(testService);
+    topology.setTimestamp(System.nanoTime());
+
+    return topology;
+  }
+
+  @Test( timeout = LONG_TIMEOUT )
+  public void testDeployTopology() throws ClassNotFoundException {
+    LOG_ENTER();
+
+    Topology testTopology = createTestTopology();
+
+    String user = "guest";
+    String password = "guest-password";
+
+    String url = gatewayUrl + "/" + testTopology.getName() + "/test-service-path/test-service-resource";
+
+    GatewayServices srvs = GatewayServer.getGatewayServices();
+
+    TopologyService ts = srvs.getService(GatewayServices.TOPOLOGY_SERVICE);
+
+    assertThat(testTopology, not(nullValue()));
+    assertThat(testTopology.getName(), is("test-topology"));
+
+    given()
+        //.log().all()
+        .auth().preemptive().basic(user, password)
+        .expect()
+        //.log().all()
+        .statusCode(HttpStatus.SC_NOT_FOUND)
+        .when()
+        .get(url);
+
+    ts.deployTopology(testTopology);
+
+    given()
+        //.log().all()
+        .auth().preemptive().basic(user, password)
+        .expect()
+        //.log().all()
+        .statusCode(HttpStatus.SC_OK)
+        .contentType("text/plain")
+        .body(is("test-service-response"))
+        .when()
+        .get(url).getBody();
+
+    ts.deleteTopology(testTopology);
+
+    given()
+        //.log().all()
+        .auth().preemptive().basic(user, password)
+        .expect()
+        //.log().all()
+        .statusCode(HttpStatus.SC_NOT_FOUND)
+        .when()
+        .get(url);
+  }
+
+  @Test( timeout = LONG_TIMEOUT )
+  public void testDeleteTopology() throws ClassNotFoundException {
+    LOG_ENTER();
+
+    Topology test = createTestTopology();
+
+    String username = "admin";
+    String password = "admin-password";
+    String url =  clusterUrl + "/api/v1/topologies/" + test.getName();
+
+    GatewayServices gs = GatewayServer.getGatewayServices();
+
+    TopologyService ts = gs.getService(GatewayServices.TOPOLOGY_SERVICE);
+
+    ts.deployTopology(test);
+
+    given()
+        .auth().preemptive().basic(username, password)
+        .expect()
+        //.log().all()
+        .statusCode(HttpStatus.SC_OK)
+        .contentType(MediaType.APPLICATION_JSON)
+        .get(url);
+
+    given()
+        .auth().preemptive().basic(username, password)
+        .expect()
+        //.log().all()
+        .statusCode(HttpStatus.SC_OK)
+        .contentType(MediaType.APPLICATION_JSON)
+        .delete(url);
+
+    given()
+        //.log().all()
+        .auth().preemptive().basic(username, password)
+        .expect()
+        //.log().all()
+        .statusCode(HttpStatus.SC_NO_CONTENT)
+        .get(url);
+  }
+
+  @Test( timeout = LONG_TIMEOUT )
+  public void testPutTopology() throws ClassNotFoundException {
+    LOG_ENTER() ;
+
+    String username = "admin";
+    String password = "admin-password";
+    String url =  clusterUrl + "/api/v1/topologies/test-put";
+
+    String JsonPut =
+        given()
+        .auth().preemptive().basic(username, password)
+        .header("Accept", MediaType.APPLICATION_JSON)
+        .get(clusterUrl + "/api/v1/topologies/test-cluster")
+        .getBody().asString();
+
+    String XML = given()
+        //.log().all()
+        .auth().preemptive().basic(username, password)
+        .contentType(MediaType.APPLICATION_JSON)
+        .header("Accept", MediaType.APPLICATION_XML)
+        .body(JsonPut)
+        .expect()
+        .statusCode(HttpStatus.SC_OK)
+        //.log().all()
+        .put(url).getBody().asString();
+
+
+        given()
+            .auth().preemptive().basic(username, password)
+            .header("Accept", MediaType.APPLICATION_XML)
+            .expect()
+            .statusCode(HttpStatus.SC_OK)
+            .body(equalTo(XML))
+            .get(url)
+            .getBody().asString();
+
+
+    String XmlPut =
+        given()
+            .auth().preemptive().basic(username, password)
+            .header("Accept", MediaType.APPLICATION_XML)
+            .get(clusterUrl + "/api/v1/topologies/test-cluster")
+            .getBody().asString();
+
+    String JSON = given()
+        //.log().all()
+        .auth().preemptive().basic(username, password)
+        .contentType(MediaType.APPLICATION_XML)
+        .header("Accept", MediaType.APPLICATION_JSON)
+        .body(XmlPut)
+        .expect()
+        .statusCode(HttpStatus.SC_OK)
+            //.log().all()
+        .put(url).getBody().asString();
+
+    given()
+        .auth().preemptive().basic(username, password)
+        .header("Accept", MediaType.APPLICATION_JSON)
+        .expect()
+        .statusCode(HttpStatus.SC_OK)
+        .body(equalTo(JSON))
+        .get(url)
+        .getBody().asString();
+
+  }
+
+  @Test( timeout = LONG_TIMEOUT )
+  public void testXForwardedHeaders() {
+    LOG_ENTER();
+
+    String username = "admin";
+    String password = "admin-password";
+    String url =  clusterUrl + "/api/v1/topologies";
+
+//    X-Forward header values
+    String port = String.valueOf(777);
+    String server = "myserver";
+    String host = server + ":" + port;
+    String proto = "protocol";
+    String context = "/mycontext";
+    String newUrl = proto + "://" + host + context;
+//    String port = String.valueOf(gateway.getAddresses()[0].getPort());
+
+//     Case 1: Add in all x-forward headers (host, port, server, context, proto)
+    given()
+        .auth().preemptive().basic(username, password)
+        .header("Accept", MediaType.APPLICATION_XML)
+        .header("X-Forwarded-Host", host )
+        .header("X-Forwarded-Port", port )
+        .header("X-Forwarded-Server", server )
+        .header("X-Forwarded-Context", context)
+        .header("X-Forwarded-Proto", proto)
+        .expect()
+        .statusCode(HttpStatus.SC_OK)
+        .body(containsString(newUrl))
+        .body(containsString("test-cluster"))
+        .body(containsString("admin"))
+        .get(url).prettyPrint();
+
+
+//     Case 2: add in x-forward headers (host, server, proto, context)
+    given()
+        .auth().preemptive().basic(username, password)
+        .header("Accept", MediaType.APPLICATION_XML)
+        .header("X-Forwarded-Host", host )
+        .header("X-Forwarded-Server", server )
+        .header("X-Forwarded-Context", context )
+        .header("X-Forwarded-Proto", proto )
+        .expect()
+        .statusCode(HttpStatus.SC_OK)
+        .body(containsString(server))
+        .body(containsString(context))
+        .body(containsString(proto))
+        .body(containsString(host))
+        .body(containsString("test-cluster"))
+        .body(containsString("admin"))
+        .get(url);
+
+//     Case 3: add in x-forward headers (host, proto, port, context)
+    given()
+        .auth().preemptive().basic(username, password)
+        .header("Accept", MediaType.APPLICATION_XML)
+        .header("X-Forwarded-Host", host )
+        .header("X-Forwarded-Port", port )
+        .header("X-Forwarded-Context", context )
+        .header("X-Forwarded-Proto", proto)
+        .expect()
+        .statusCode(HttpStatus.SC_OK)
+        .body(containsString(host))
+        .body(containsString(port))
+        .body(containsString(context))
+        .body(containsString(proto))
+        .body(containsString("test-cluster"))
+        .body(containsString("admin"))
+        .get(url);
+
+//     Case 4: add in x-forward headers (host, proto, port, context) no port in host.
+    given()
+        .auth().preemptive().basic(username, password)
+        .header("Accept", MediaType.APPLICATION_XML)
+        .header("X-Forwarded-Host", server)
+        .header("X-Forwarded-Port", port)
+        .header("X-Forwarded-Context", context)
+        .header("X-Forwarded-Proto", proto)
+        .expect()
+        .statusCode(HttpStatus.SC_OK)
+        .body(containsString(server))
+        .body(containsString(port))
+        .body(containsString(context))
+        .body(containsString(proto))
+        .body(containsString("test-cluster"))
+        .body(containsString("admin"))
+        .get(url);
+
+//     Case 5: add in x-forward headers (host, port)
+    given()
+        .auth().preemptive().basic(username, password)
+        .header("Accept", MediaType.APPLICATION_XML)
+        .header("X-Forwarded-Host", host )
+        .header("X-Forwarded-Port", port )
+        .expect()
+        .statusCode(HttpStatus.SC_OK)
+        .body(containsString(host))
+        .body(containsString(port))
+        .body(containsString("test-cluster"))
+        .body(containsString("admin"))
+        .get(url);
+
+//     Case 6: Normal Request
+    given()
+        .auth().preemptive().basic(username, password)
+        .header("Accept", MediaType.APPLICATION_XML)
+        .expect()
+        .statusCode(HttpStatus.SC_OK)
+        .body(containsString(url))
+        .body(containsString("test-cluster"))
+        .body(containsString("admin"))
+        .get(url);
+
+  }
+
+  @Test( timeout = LONG_TIMEOUT )
+  public void testGatewayPathChange() throws Exception {
+    LOG_ENTER();
+    String username = "admin";
+    String password = "admin-password";
+    String url =  clusterUrl + "/api/v1/topologies";
+
+//     Case 1: Normal Request (No Change in gateway.path). Ensure HTTP OK resp + valid URL.
+    given()
+        .auth().preemptive().basic(username, password)
+        .header("Accept", MediaType.APPLICATION_XML)
+        .expect()
+        .statusCode(HttpStatus.SC_OK)
+        .body(containsString(url + "/test-cluster"))
+        .get(url);
+
+
+//     Case 2: Change gateway.path to another String. Ensure HTTP OK resp + valid URL.
+   try {
+     gateway.stop();
+
+     GatewayTestConfig conf = new GatewayTestConfig();
+     conf.setGatewayPath("new-gateway-path");
+     setupGateway(conf);
+
+     String newUrl = clusterUrl + "/api/v1/topologies";
+
+     given()
+         .auth().preemptive().basic(username, password)
+         .header("Accept", MediaType.APPLICATION_XML)
+         .expect()
+         .statusCode(HttpStatus.SC_OK)
+         .body(containsString(newUrl + "/test-cluster"))
+         .get(newUrl);
+   } catch(Exception e){
+     fail(e.getMessage());
+   }
+    finally {
+//        Restart the gateway with old settings.
+       gateway.stop();
+      setupGateway(new GatewayTestConfig());
+    }
+
+  }
+
+  private static final String CLASS = GatewayAdminTopologyFuncTest.class.getCanonicalName();
 
 }


Mime
View raw message