KNOX-620: Jenkins Knox-master-verify failing since #725 due to JDK version issues. Disable all but sample func test.
Project: http://git-wip-us.apache.org/repos/asf/knox/repo Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/af5d6abe Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/af5d6abe Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/af5d6abe Branch: refs/heads/master Commit: af5d6abeb924fc9233376a899bd482218444b1db Parents: d5a8759 Author: Kevin Minder <[email protected]> Authored: Mon Nov 9 12:01:24 2015 -0500 Committer: Kevin Minder <[email protected]> Committed: Mon Nov 9 12:01:24 2015 -0500 ---------------------------------------------------------------------- .../hadoop/gateway/GatewayAdminFuncTest.java | 337 +- .../gateway/GatewayAdminTopologyFuncTest.java | 1513 ++-- .../hadoop/gateway/GatewayBasicFuncTest.java | 7240 +++++++++--------- .../hadoop/gateway/GatewayDeployFuncTest.java | 576 +- .../GatewayLdapDynamicGroupFuncTest.java | 534 +- .../gateway/GatewayLdapGroupFuncTest.java | 536 +- .../gateway/GatewayLocalServiceFuncTest.java | 330 +- .../gateway/OozieServiceDefinitionTest.java | 322 +- .../hadoop/gateway/WebHdfsHaFuncTest.java | 862 +-- 9 files changed, 6120 insertions(+), 6130 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/knox/blob/af5d6abe/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 a83e62d..2198de2 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 @@ -50,176 +50,175 @@ import static com.jayway.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.notNullValue; import static org.junit.Assert.assertThat; -@Ignore 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/af5d6abe/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 cbb9ff7..bbda477 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 @@ -67,764 +67,763 @@ import static org.hamcrest.CoreMatchers.containsString; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; -@Ignore 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(); }
