Repository: knox Updated Branches: refs/heads/master af5d6abeb -> 5c4e4d2ec
http://git-wip-us.apache.org/repos/asf/knox/blob/5c4e4d2e/gateway-test/src/test/java/org/apache/hadoop/gateway/KnoxCliSysBindTest.java ---------------------------------------------------------------------- diff --git a/gateway-test/src/test/java/org/apache/hadoop/gateway/KnoxCliSysBindTest.java b/gateway-test/src/test/java/org/apache/hadoop/gateway/KnoxCliSysBindTest.java index 3676fdc..81223ac 100644 --- a/gateway-test/src/test/java/org/apache/hadoop/gateway/KnoxCliSysBindTest.java +++ b/gateway-test/src/test/java/org/apache/hadoop/gateway/KnoxCliSysBindTest.java @@ -52,280 +52,280 @@ import static org.junit.Assert.assertThat; public class KnoxCliSysBindTest { - private static final long SHORT_TIMEOUT = 1000L; - private static final long MEDIUM_TIMEOUT = 5 * SHORT_TIMEOUT; - - private static Class RESOURCE_BASE_CLASS = KnoxCliSysBindTest.class; - private static Logger LOG = LoggerFactory.getLogger( KnoxCliSysBindTest.class ); - - public static Enumeration<Appender> appenders; - public static GatewayTestConfig config; - public static GatewayServer gateway; - public static String gatewayUrl; - public static String clusterUrl; - public static SimpleLdapDirectoryServer ldap; - public static TcpTransport ldapTransport; - - private static final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); - private static final ByteArrayOutputStream errContent = new ByteArrayOutputStream(); - private static final String uuid = UUID.randomUUID().toString(); - - @BeforeClass - public static void setupSuite() throws Exception { - LOG_ENTER(); - System.setOut(new PrintStream(outContent)); - System.setErr(new PrintStream(errContent)); - setupLdap(); - setupGateway(); - LOG_EXIT(); - } - - @AfterClass - public static void cleanupSuite() throws Exception { - LOG_ENTER(); - ldap.stop( true ); - - //FileUtils.deleteQuietly( new File( config.getGatewayHomeDir() ) ); - //NoOpAppender.tearDown( appenders ); - 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 ); - 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(); - - writeTopology(topoDir, "test-cluster-1.xml", "guest", "guest-password", true); - writeTopology(topoDir, "test-cluster-2.xml", "sam", "sam-password", true); - writeTopology(topoDir, "test-cluster-3.xml", "admin", "admin-password", true); - writeTopology(topoDir, "test-cluster-4.xml", "", "", false); - - - 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. - } - } - - private static void writeTopology(File topoDir, String name, String user, String pass, boolean goodTopology) throws Exception { - File descriptor = new File(topoDir, name); - - if(descriptor.exists()){ - descriptor.delete(); - descriptor = new File(topoDir, name); - } - - FileOutputStream stream = new FileOutputStream( descriptor, false ); - - if(goodTopology) { - createTopology(user, pass).toStream( stream ); - } else { - createBadTopology().toStream( stream ); - } - - stream.close(); - - } - - - 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( "\\.", "/" ) + "/"; - } - - private static XMLTag createBadTopology(){ - 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("main.ldapRealm.authorizationEnabled") - .addTag("value").addText("true").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() - .gotoRoot() - .addTag( "service") - .addTag("role").addText( "KNOX" ) - .gotoRoot(); - // System.out.println( "GATEWAY=" + xml.toString() ); - return xml; - } - - private static XMLTag createTopology(String username, String password) { - - 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.ldapGroupContextFactory") - .addTag("value").addText("org.apache.hadoop.gateway.shirorealm.KnoxLdapContextFactory").gotoParent() - .addTag("param") - .addTag("name").addText("main.ldapRealm.searchBase") - .addTag("value").addText("ou=groups,dc=hadoop,dc=apache,dc=org").gotoParent() - .addTag("param") - .addTag("name").addText("main.ldapRealm.groupObjectClass") - .addTag("value").addText("groupOfNames").gotoParent() - .addTag("param") - .addTag("name").addText("main.ldapRealm.memberAttributeValueTemplate") - .addTag("value").addText("uid={0},ou=people,dc=hadoop,dc=apache,dc=org").gotoParent() - .addTag("param" ) - .addTag("name").addText("main.ldapRealm.memberAttribute") - .addTag("value").addText("member").gotoParent() - .addTag("param") - .addTag("name").addText("main.ldapRealm.authorizationEnabled") - .addTag("value").addText("true").gotoParent() - .addTag("param") - .addTag("name").addText("main.ldapRealm.contextFactory.systemUsername") - .addTag("value").addText("uid=" + username + ",ou=people,dc=hadoop,dc=apache,dc=org").gotoParent() - .addTag("param") - .addTag("name").addText("main.ldapRealm.contextFactory.systemPassword") - .addTag( "value").addText(password).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() - .gotoRoot() - .addTag( "service" ) - .addTag( "role" ).addText( "test-service-role" ) - .gotoRoot(); - // System.out.println( "GATEWAY=" + xml.toString() ); - return xml; - } - - @Test( timeout = MEDIUM_TIMEOUT ) - public void testLDAPAuth() throws Exception { - LOG_ENTER(); - -// Test 1: Make sure authentication is successful - outContent.reset(); - String args[] = { "system-user-auth-test", "--master", "knox", "--cluster", "test-cluster-1", "--d" }; - KnoxCLI cli = new KnoxCLI(); - cli.setConf(config); - cli.run(args); - assertThat(outContent.toString(), containsString("System LDAP Bind successful")); - - // Test 2: Make sure authentication fails - outContent.reset(); - String args2[] = { "system-user-auth-test", "--master", "knox", "--cluster", "test-cluster-2", "--d" }; - cli = new KnoxCLI(); - cli.setConf(config); - cli.run(args2); - assertThat(outContent.toString(), containsString("System LDAP Bind successful")); - - - // Test 3: Make sure authentication is successful - outContent.reset(); - String args3[] = { "system-user-auth-test", "--master", "knox", "--cluster", "test-cluster-3", "--d" }; - cli = new KnoxCLI(); - cli.setConf(config); - cli.run(args3); - assertThat(outContent.toString(), containsString("LDAP authentication failed")); - assertThat(outContent.toString(), containsString("Unable to successfully bind to LDAP server with topology credentials")); - - // Test 4: Assert that we get a username/password not present error is printed - outContent.reset(); - String args4[] = { "system-user-auth-test", "--master", "knox", "--cluster", "test-cluster-4" }; - cli = new KnoxCLI(); - cli.setConf(config); - cli.run(args4); - assertThat(outContent.toString(), containsString("Warn: main.ldapRealm.contextFactory.systemUsername is not present")); - assertThat(outContent.toString(), containsString("Warn: main.ldapRealm.contextFactory.systemPassword is not present")); - - - // Test 5: Assert that we get a username/password not present error is printed - outContent.reset(); - String args5[] = { "system-user-auth-test", "--master", "knox", "--cluster", "not-a-cluster" }; - cli = new KnoxCLI(); - cli.setConf(config); - cli.run(args5); - assertThat(outContent.toString(), containsString("Topology not-a-cluster does not exist")); - - LOG_EXIT(); - } +// private static final long SHORT_TIMEOUT = 1000L; +// private static final long MEDIUM_TIMEOUT = 5 * SHORT_TIMEOUT; +// +// private static Class RESOURCE_BASE_CLASS = KnoxCliSysBindTest.class; +// private static Logger LOG = LoggerFactory.getLogger( KnoxCliSysBindTest.class ); +// +// public static Enumeration<Appender> appenders; +// public static GatewayTestConfig config; +// public static GatewayServer gateway; +// public static String gatewayUrl; +// public static String clusterUrl; +// public static SimpleLdapDirectoryServer ldap; +// public static TcpTransport ldapTransport; +// +// private static final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); +// private static final ByteArrayOutputStream errContent = new ByteArrayOutputStream(); +// private static final String uuid = UUID.randomUUID().toString(); +// +// @BeforeClass +// public static void setupSuite() throws Exception { +// LOG_ENTER(); +// System.setOut(new PrintStream(outContent)); +// System.setErr(new PrintStream(errContent)); +// setupLdap(); +// setupGateway(); +// LOG_EXIT(); +// } +// +// @AfterClass +// public static void cleanupSuite() throws Exception { +// LOG_ENTER(); +// ldap.stop( true ); +// +// //FileUtils.deleteQuietly( new File( config.getGatewayHomeDir() ) ); +// //NoOpAppender.tearDown( appenders ); +// 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 ); +// 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(); +// +// writeTopology(topoDir, "test-cluster-1.xml", "guest", "guest-password", true); +// writeTopology(topoDir, "test-cluster-2.xml", "sam", "sam-password", true); +// writeTopology(topoDir, "test-cluster-3.xml", "admin", "admin-password", true); +// writeTopology(topoDir, "test-cluster-4.xml", "", "", false); +// +// +// 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. +// } +// } +// +// private static void writeTopology(File topoDir, String name, String user, String pass, boolean goodTopology) throws Exception { +// File descriptor = new File(topoDir, name); +// +// if(descriptor.exists()){ +// descriptor.delete(); +// descriptor = new File(topoDir, name); +// } +// +// FileOutputStream stream = new FileOutputStream( descriptor, false ); +// +// if(goodTopology) { +// createTopology(user, pass).toStream( stream ); +// } else { +// createBadTopology().toStream( stream ); +// } +// +// stream.close(); +// +// } +// +// +// 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( "\\.", "/" ) + "/"; +// } +// +// private static XMLTag createBadTopology(){ +// 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("main.ldapRealm.authorizationEnabled") +// .addTag("value").addText("true").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() +// .gotoRoot() +// .addTag( "service") +// .addTag("role").addText( "KNOX" ) +// .gotoRoot(); +// // System.out.println( "GATEWAY=" + xml.toString() ); +// return xml; +// } +// +// private static XMLTag createTopology(String username, String password) { +// +// 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.ldapGroupContextFactory") +// .addTag("value").addText("org.apache.hadoop.gateway.shirorealm.KnoxLdapContextFactory").gotoParent() +// .addTag("param") +// .addTag("name").addText("main.ldapRealm.searchBase") +// .addTag("value").addText("ou=groups,dc=hadoop,dc=apache,dc=org").gotoParent() +// .addTag("param") +// .addTag("name").addText("main.ldapRealm.groupObjectClass") +// .addTag("value").addText("groupOfNames").gotoParent() +// .addTag("param") +// .addTag("name").addText("main.ldapRealm.memberAttributeValueTemplate") +// .addTag("value").addText("uid={0},ou=people,dc=hadoop,dc=apache,dc=org").gotoParent() +// .addTag("param" ) +// .addTag("name").addText("main.ldapRealm.memberAttribute") +// .addTag("value").addText("member").gotoParent() +// .addTag("param") +// .addTag("name").addText("main.ldapRealm.authorizationEnabled") +// .addTag("value").addText("true").gotoParent() +// .addTag("param") +// .addTag("name").addText("main.ldapRealm.contextFactory.systemUsername") +// .addTag("value").addText("uid=" + username + ",ou=people,dc=hadoop,dc=apache,dc=org").gotoParent() +// .addTag("param") +// .addTag("name").addText("main.ldapRealm.contextFactory.systemPassword") +// .addTag( "value").addText(password).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() +// .gotoRoot() +// .addTag( "service" ) +// .addTag( "role" ).addText( "test-service-role" ) +// .gotoRoot(); +// // System.out.println( "GATEWAY=" + xml.toString() ); +// return xml; +// } +// +// @Test( timeout = MEDIUM_TIMEOUT ) +// public void testLDAPAuth() throws Exception { +// LOG_ENTER(); +// +//// Test 1: Make sure authentication is successful +// outContent.reset(); +// String args[] = { "system-user-auth-test", "--master", "knox", "--cluster", "test-cluster-1", "--d" }; +// KnoxCLI cli = new KnoxCLI(); +// cli.setConf(config); +// cli.run(args); +// assertThat(outContent.toString(), containsString("System LDAP Bind successful")); +// +// // Test 2: Make sure authentication fails +// outContent.reset(); +// String args2[] = { "system-user-auth-test", "--master", "knox", "--cluster", "test-cluster-2", "--d" }; +// cli = new KnoxCLI(); +// cli.setConf(config); +// cli.run(args2); +// assertThat(outContent.toString(), containsString("System LDAP Bind successful")); +// +// +// // Test 3: Make sure authentication is successful +// outContent.reset(); +// String args3[] = { "system-user-auth-test", "--master", "knox", "--cluster", "test-cluster-3", "--d" }; +// cli = new KnoxCLI(); +// cli.setConf(config); +// cli.run(args3); +// assertThat(outContent.toString(), containsString("LDAP authentication failed")); +// assertThat(outContent.toString(), containsString("Unable to successfully bind to LDAP server with topology credentials")); +// +// // Test 4: Assert that we get a username/password not present error is printed +// outContent.reset(); +// String args4[] = { "system-user-auth-test", "--master", "knox", "--cluster", "test-cluster-4" }; +// cli = new KnoxCLI(); +// cli.setConf(config); +// cli.run(args4); +// assertThat(outContent.toString(), containsString("Warn: main.ldapRealm.contextFactory.systemUsername is not present")); +// assertThat(outContent.toString(), containsString("Warn: main.ldapRealm.contextFactory.systemPassword is not present")); +// +// +// // Test 5: Assert that we get a username/password not present error is printed +// outContent.reset(); +// String args5[] = { "system-user-auth-test", "--master", "knox", "--cluster", "not-a-cluster" }; +// cli = new KnoxCLI(); +// cli.setConf(config); +// cli.run(args5); +// assertThat(outContent.toString(), containsString("Topology not-a-cluster does not exist")); +// +// LOG_EXIT(); +// } } http://git-wip-us.apache.org/repos/asf/knox/blob/5c4e4d2e/gateway-test/src/test/java/org/apache/hadoop/gateway/deploy/DeploymentFactoryFuncTest.java ---------------------------------------------------------------------- diff --git a/gateway-test/src/test/java/org/apache/hadoop/gateway/deploy/DeploymentFactoryFuncTest.java b/gateway-test/src/test/java/org/apache/hadoop/gateway/deploy/DeploymentFactoryFuncTest.java index a23e675..1e5a59a 100644 --- a/gateway-test/src/test/java/org/apache/hadoop/gateway/deploy/DeploymentFactoryFuncTest.java +++ b/gateway-test/src/test/java/org/apache/hadoop/gateway/deploy/DeploymentFactoryFuncTest.java @@ -70,464 +70,464 @@ import static org.junit.Assert.fail; public class DeploymentFactoryFuncTest { - private static final long SHORT_TIMEOUT = 1000L; - private static final long MEDIUM_TIMEOUT = 10 * SHORT_TIMEOUT; - private static final long LONG_TIMEOUT = 10 * MEDIUM_TIMEOUT; - - @Test( timeout = SHORT_TIMEOUT ) - public void testGenericProviderDeploymentContributor() throws ParserConfigurationException, SAXException, IOException, TransformerException { - LOG_ENTER(); - GatewayConfig config = new GatewayTestConfig(); - File targetDir = new File( System.getProperty( "user.dir" ), "target" ); - File gatewayDir = new File( targetDir, "gateway-home-" + UUID.randomUUID() ); - gatewayDir.mkdirs(); - - ((GatewayTestConfig) config).setGatewayHomeDir( gatewayDir.getAbsolutePath() ); - - File deployDir = new File( config.getGatewayDeploymentDir() ); - deployDir.mkdirs(); - -// ((GatewayTestConfig) config).setDeploymentDir( "clusters" ); - - addStacksDir(config, targetDir); - DefaultGatewayServices srvcs = new DefaultGatewayServices(); - Map<String,String> options = new HashMap<String,String>(); - options.put("persist-master", "false"); - options.put("master", "password"); - try { - DeploymentFactory.setGatewayServices(srvcs); - srvcs.init(config, options); - } catch (ServiceLifecycleException e) { - e.printStackTrace(); // I18N not required. - } - - Topology topology = new Topology(); - topology.setName( "test-cluster" ); - Service service = new Service(); - service.setRole( "WEBHDFS" ); - service.addUrl( "http://localhost:50070/test-service-url" ); - topology.addService( service ); - - Provider provider = new Provider(); - provider.setRole( "authentication" ); - provider.setName( "generic" ); - provider.setEnabled( true ); - Param param = new Param(); - param.setName( "filter" ); - param.setValue( "org.opensource.ExistingFilter" ); - provider.addParam( param ); - param = new Param(); - param.setName( "test-param-name" ); - param.setValue( "test-param-value" ); - provider.addParam( param ); - topology.addProvider( provider ); - - WebArchive war = DeploymentFactory.createDeployment( config, topology ); - - Document gateway = parse( war.get( "WEB-INF/gateway.xml" ).getAsset().openStream() ); - //dump( gateway ); - - //by default the first filter will be the X-Forwarded header filter - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[1]/role", equalTo( "xforwardedheaders" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[1]/name", equalTo( "XForwardedHeaderFilter" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[1]/class", equalTo( "org.apache.hadoop.gateway.filter.XForwardedHeaderFilter" ) ) ); - - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[2]/role", equalTo( "authentication" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[2]/name", equalTo( "generic" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[2]/class", equalTo( "org.opensource.ExistingFilter" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[2]/param[1]/name", equalTo( "test-param-name" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[2]/param[1]/value", equalTo( "test-param-value" ) ) ); - LOG_EXIT(); - } - - @Test( timeout = LONG_TIMEOUT ) - public void testInvalidGenericProviderDeploymentContributor() throws ParserConfigurationException, SAXException, IOException, TransformerException { - LOG_ENTER(); - GatewayConfig config = new GatewayTestConfig(); - File targetDir = new File( System.getProperty( "user.dir" ), "target" ); - File gatewayDir = new File( targetDir, "gateway-home-" + UUID.randomUUID() ); - gatewayDir.mkdirs(); - ((GatewayTestConfig) config).setGatewayHomeDir( gatewayDir.getAbsolutePath() ); - File deployDir = new File( config.getGatewayDeploymentDir() ); - deployDir.mkdirs(); - addStacksDir(config, targetDir); - - DefaultGatewayServices srvcs = new DefaultGatewayServices(); - Map<String,String> options = new HashMap<String,String>(); - options.put("persist-master", "false"); - options.put("master", "password"); - try { - DeploymentFactory.setGatewayServices(srvcs); - srvcs.init(config, options); - } catch (ServiceLifecycleException e) { - e.printStackTrace(); // I18N not required. - } - - Topology topology = new Topology(); - topology.setName( "test-cluster" ); - Service service = new Service(); - service.setRole( "WEBHDFS" ); - service.addUrl( "http://localhost:50070/test-service-url" ); - topology.addService( service ); - - Provider provider = new Provider(); - provider.setRole( "authentication" ); - provider.setName( "generic" ); - provider.setEnabled( true ); - Param param; // = new ProviderParam(); - // Missing filter param. - //param.setName( "filter" ); - //param.setValue( "org.opensource.ExistingFilter" ); - //provider.addParam( param ); - param = new Param(); - param.setName( "test-param-name" ); - param.setValue( "test-param-value" ); - provider.addParam( param ); - topology.addProvider( provider ); - - Enumeration<Appender> appenders = NoOpAppender.setUp(); - try { - DeploymentFactory.createDeployment( config, topology ); - fail( "Should have throws IllegalArgumentException" ); - } catch ( DeploymentException e ) { - // Expected. - } finally { - NoOpAppender.tearDown( appenders ); - } - LOG_EXIT(); - } - - @Test( timeout = MEDIUM_TIMEOUT ) - public void testSimpleTopology() throws IOException, SAXException, ParserConfigurationException, URISyntaxException { - LOG_ENTER(); - GatewayConfig config = new GatewayTestConfig(); - //Testing without x-forwarded headers filter - ((GatewayTestConfig)config).setXForwardedEnabled(false); - File targetDir = new File( System.getProperty( "user.dir" ), "target" ); - File gatewayDir = new File( targetDir, "gateway-home-" + UUID.randomUUID() ); - gatewayDir.mkdirs(); - ((GatewayTestConfig) config).setGatewayHomeDir( gatewayDir.getAbsolutePath() ); - File deployDir = new File( config.getGatewayDeploymentDir() ); - deployDir.mkdirs(); - addStacksDir(config, targetDir); - - DefaultGatewayServices srvcs = new DefaultGatewayServices(); - Map<String,String> options = new HashMap<String,String>(); - options.put("persist-master", "false"); - options.put("master", "password"); - try { - DeploymentFactory.setGatewayServices(srvcs); - srvcs.init(config, options); - } catch (ServiceLifecycleException e) { - e.printStackTrace(); // I18N not required. - } - - Topology topology = new Topology(); - topology.setName( "test-cluster" ); - Service service = new Service(); - service.setRole( "WEBHDFS" ); - service.addUrl( "http://localhost:50070/webhdfs" ); - topology.addService( service ); - Provider provider = new Provider(); - provider.setRole( "authentication" ); - provider.setName( "ShiroProvider" ); - provider.setEnabled( true ); - Param param = new Param(); - param.setName( "contextConfigLocation" ); - param.setValue( "classpath:app-context-security.xml" ); - provider.addParam( param ); - topology.addProvider( provider ); - Provider asserter = new Provider(); - asserter.setRole( "identity-assertion" ); - asserter.setName("Default"); - asserter.setEnabled( true ); - topology.addProvider( asserter ); - Provider authorizer = new Provider(); - authorizer.setRole( "authorization" ); - authorizer.setName("AclsAuthz"); - authorizer.setEnabled( true ); - topology.addProvider( authorizer ); - - WebArchive war = DeploymentFactory.createDeployment( config, topology ); -// File dir = new File( System.getProperty( "user.dir" ) ); -// File file = war.as( ExplodedExporter.class ).exportExploded( dir, "test-cluster.war" ); - - Document web = parse( war.get( "WEB-INF/web.xml" ).getAsset().openStream() ); - assertThat( web, hasXPath( "/web-app/servlet/servlet-name", equalTo( "test-cluster" ) ) ); - assertThat( web, hasXPath( "/web-app/servlet/servlet-class", equalTo( "org.apache.hadoop.gateway.GatewayServlet" ) ) ); - assertThat( web, hasXPath( "/web-app/servlet/init-param/param-name", equalTo( "gatewayDescriptorLocation" ) ) ); - assertThat( web, hasXPath( "/web-app/servlet/init-param/param-value", equalTo( "gateway.xml" ) ) ); - assertThat( web, hasXPath( "/web-app/servlet-mapping/servlet-name", equalTo( "test-cluster" ) ) ); - assertThat( web, hasXPath( "/web-app/servlet-mapping/url-pattern", equalTo( "/*" ) ) ); - - Document gateway = parse( war.get( "WEB-INF/gateway.xml" ).getAsset().openStream() ); - - assertThat( gateway, hasXPath( "/gateway/resource[1]/pattern", equalTo( "/webhdfs/v1/?**" ) ) ); - //assertThat( gateway, hasXPath( "/gateway/resource[1]/target", equalTo( "http://localhost:50070/webhdfs/v1/?{**}" ) ) ); - - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[1]/role", equalTo( "authentication" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[1]/class", equalTo( "org.apache.hadoop.gateway.filter.ResponseCookieFilter" ) ) ); - - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[2]/role", equalTo( "authentication" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[2]/class", equalTo( "org.apache.shiro.web.servlet.ShiroFilter" ) ) ); - - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[3]/role", equalTo( "authentication" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[3]/class", equalTo( "org.apache.hadoop.gateway.filter.ShiroSubjectIdentityAdapter" ) ) ); - - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[4]/role", equalTo( "rewrite" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[4]/class", equalTo( "org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteServletFilter" ) ) ); - - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[5]/role", equalTo( "identity-assertion" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[5]/class", equalTo( "org.apache.hadoop.gateway.identityasserter.filter.IdentityAsserterFilter" ) ) ); - - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[6]/role", equalTo( "authorization" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[6]/name", equalTo( "AclsAuthz" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[6]/class", equalTo( "org.apache.hadoop.gateway.filter.AclsAuthorizationFilter" ) ) ); - - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[7]/role", equalTo( "dispatch" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[7]/name", equalTo( "webhdfs" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[7]/class", equalTo( "org.apache.hadoop.gateway.dispatch.GatewayDispatchFilter" ) ) ); - - assertThat( gateway, hasXPath( "/gateway/resource[2]/pattern", equalTo( "/webhdfs/v1/**?**" ) ) ); - //assertThat( gateway, hasXPath( "/gateway/resource[2]/target", equalTo( "http://localhost:50070/webhdfs/v1/{path=**}?{**}" ) ) ); - - assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[1]/role", equalTo( "authentication" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[1]/class", equalTo( "org.apache.hadoop.gateway.filter.ResponseCookieFilter" ) ) ); - - assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[2]/role", equalTo( "authentication" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[2]/class", equalTo( "org.apache.shiro.web.servlet.ShiroFilter" ) ) ); - - assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[3]/role", equalTo( "authentication" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[3]/class", equalTo( "org.apache.hadoop.gateway.filter.ShiroSubjectIdentityAdapter" ) ) ); - - assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[4]/role", equalTo( "rewrite" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[4]/class", equalTo( "org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteServletFilter" ) ) ); - - assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[5]/role", equalTo( "identity-assertion" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[5]/class", equalTo( "org.apache.hadoop.gateway.identityasserter.filter.IdentityAsserterFilter" ) ) ); - - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[6]/role", equalTo( "authorization" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[6]/name", equalTo( "AclsAuthz" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[6]/class", equalTo( "org.apache.hadoop.gateway.filter.AclsAuthorizationFilter" ) ) ); - - assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[7]/role", equalTo( "dispatch" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[7]/name", equalTo( "webhdfs" ) ) ); - assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[7]/class", equalTo( "org.apache.hadoop.gateway.dispatch.GatewayDispatchFilter" ) ) ); - - LOG_EXIT(); - } - - - @Test( timeout = LONG_TIMEOUT ) - public void testWebXmlGeneration() throws IOException, SAXException, ParserConfigurationException, URISyntaxException { - LOG_ENTER(); - GatewayConfig config = new GatewayTestConfig(); - File targetDir = new File(System.getProperty("user.dir"), "target"); - File gatewayDir = new File(targetDir, "gateway-home-" + UUID.randomUUID()); - gatewayDir.mkdirs(); - ((GatewayTestConfig) config).setGatewayHomeDir(gatewayDir.getAbsolutePath()); - File deployDir = new File(config.getGatewayDeploymentDir()); - deployDir.mkdirs(); - - DefaultGatewayServices srvcs = new DefaultGatewayServices(); - Map<String, String> options = new HashMap<String, String>(); - options.put("persist-master", "false"); - options.put("master", "password"); - try { - DeploymentFactory.setGatewayServices(srvcs); - srvcs.init(config, options); - } catch (ServiceLifecycleException e) { - e.printStackTrace(); // I18N not required. - } - - Topology topology = new Topology(); - topology.setName("test-cluster"); - Service service = new Service(); - service.setRole("WEBHDFS"); - service.addUrl("http://localhost:50070/webhdfs"); - topology.addService(service); - Provider provider = new Provider(); - provider.setRole("authentication"); - provider.setName("ShiroProvider"); - provider.setEnabled(true); - Param param = new Param(); - param.setName("contextConfigLocation"); - param.setValue("classpath:app-context-security.xml"); - provider.addParam(param); - topology.addProvider(provider); - Provider asserter = new Provider(); - asserter.setRole("identity-assertion"); - asserter.setName("Default"); - asserter.setEnabled(true); - topology.addProvider(asserter); - Provider authorizer = new Provider(); - authorizer.setRole("authorization"); - authorizer.setName("AclsAuthz"); - authorizer.setEnabled(true); - topology.addProvider(authorizer); - Provider ha = new Provider(); - ha.setRole("ha"); - ha.setName("HaProvider"); - ha.setEnabled(true); - topology.addProvider(ha); - - for (int i = 0; i < 100; i++) { - createAndTestDeployment(config, topology); - } - LOG_EXIT(); - } - - private void createAndTestDeployment(GatewayConfig config, Topology topology) throws IOException, SAXException, ParserConfigurationException { - - WebArchive war = DeploymentFactory.createDeployment(config, topology); -// File dir = new File( System.getProperty( "user.dir" ) ); -// File file = war.as( ExplodedExporter.class ).exportExploded( dir, "test-cluster.war" ); - - Document web = parse(war.get("WEB-INF/web.xml").getAsset().openStream()); - assertThat(web, hasXPath("/web-app/servlet/servlet-class", equalTo("org.apache.hadoop.gateway.GatewayServlet"))); - assertThat(web, hasXPath("/web-app/servlet/init-param/param-name", equalTo("gatewayDescriptorLocation"))); - assertThat(web, hasXPath("/web-app/servlet/init-param/param-value", equalTo("gateway.xml"))); - assertThat(web, hasXPath("/web-app/servlet-mapping/servlet-name", equalTo("test-cluster"))); - assertThat(web, hasXPath("/web-app/servlet-mapping/url-pattern", equalTo("/*"))); - //testing the order of listener classes generated - assertThat(web, hasXPath("/web-app/listener[2]/listener-class", equalTo("org.apache.hadoop.gateway.services.GatewayServicesContextListener"))); - assertThat(web, hasXPath("/web-app/listener[3]/listener-class", equalTo("org.apache.hadoop.gateway.ha.provider.HaServletContextListener"))); - assertThat(web, hasXPath("/web-app/listener[4]/listener-class", equalTo("org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteServletContextListener"))); - } - - @Test( timeout = MEDIUM_TIMEOUT ) - public void testDeploymentWithServiceParams() throws Exception { - LOG_ENTER(); - GatewayConfig config = new GatewayTestConfig(); - File targetDir = new File(System.getProperty("user.dir"), "target"); - File gatewayDir = new File(targetDir, "gateway-home-" + UUID.randomUUID()); - gatewayDir.mkdirs(); - ((GatewayTestConfig) config).setGatewayHomeDir(gatewayDir.getAbsolutePath()); - File deployDir = new File(config.getGatewayDeploymentDir()); - deployDir.mkdirs(); - addStacksDir(config, targetDir); - - DefaultGatewayServices srvcs = new DefaultGatewayServices(); - Map<String, String> options = new HashMap<String, String>(); - options.put("persist-master", "false"); - options.put("master", "password"); - try { - DeploymentFactory.setGatewayServices(srvcs); - srvcs.init(config, options); - } catch (ServiceLifecycleException e) { - e.printStackTrace(); // I18N not required. - } - - Service service; - Param param; - Topology topology = new Topology(); - topology.setName( "test-cluster" ); - - service = new Service(); - service.setRole( "HIVE" ); - service.setUrls( Arrays.asList( new String[]{ "http://hive-host:50001/" } ) ); - param = new Param(); - param.setName( "someparam" ); - param.setValue( "somevalue" ); - service.addParam( param ); - topology.addService( service ); - - service = new Service(); - service.setRole( "WEBHBASE" ); - service.setUrls( Arrays.asList( new String[]{ "http://hbase-host:50002/" } ) ); - param = new Param(); - param.setName( "replayBufferSize" ); - param.setValue( "33" ); - service.addParam( param ); - topology.addService( service ); - - service = new Service(); - service.setRole( "OOZIE" ); - service.setUrls( Arrays.asList( new String[]{ "http://hbase-host:50003/" } ) ); - param = new Param(); - param.setName( "otherparam" ); - param.setValue( "65" ); - service.addParam( param ); - topology.addService( service ); - - WebArchive war = DeploymentFactory.createDeployment( config, topology ); - Document doc = parse( war.get( "WEB-INF/gateway.xml" ).getAsset().openStream() ); -// dump( doc ); - - Node resourceNode, filterNode, paramNode; - String value; - - resourceNode = node( doc, "gateway/resource[role/text()='HIVE']" ); - assertThat( resourceNode, is(not(nullValue()))); - filterNode = node( resourceNode, "filter[role/text()='dispatch']" ); - assertThat( filterNode, is(not(nullValue()))); - paramNode = node( filterNode, "param[name/text()='someparam']" ); - value = value( paramNode, "value/text()" ); - assertThat( value, is( "somevalue" ) ) ; - - resourceNode = node( doc, "gateway/resource[role/text()='WEBHBASE']" ); - assertThat( resourceNode, is(not(nullValue()))); - filterNode = node( resourceNode, "filter[role/text()='dispatch']" ); - assertThat( filterNode, is(not(nullValue()))); - paramNode = node( filterNode, "param[name/text()='replayBufferSize']" ); - value = value( paramNode, "value/text()" ); - assertThat( value, is( "33" ) ) ; - - resourceNode = node( doc, "gateway/resource[role/text()='OOZIE']" ); - assertThat( resourceNode, is(not(nullValue()))); - filterNode = node( resourceNode, "filter[role/text()='dispatch']" ); - assertThat( filterNode, is(not(nullValue()))); - paramNode = node( filterNode, "param[name/text()='otherparam']" ); - value = value( paramNode, "value/text()" ); - assertThat( value, is( "65" ) ) ; - - FileUtils.deleteQuietly( deployDir ); - - LOG_EXIT(); - } - - private Document parse( InputStream stream ) throws IOException, SAXException, ParserConfigurationException { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = factory.newDocumentBuilder(); - InputSource source = new InputSource( stream ); - return builder.parse( source ); - } - - private void addStacksDir(GatewayConfig config, File targetDir) { - File stacksDir = new File( config.getGatewayServicesDir() ); - stacksDir.mkdirs(); - //TODO: [sumit] This is a hack for now, need to find a better way to locate the source resources for 'stacks' to be tested - String pathToStacksSource = "gateway-service-definitions/src/main/resources/services"; - File stacksSourceDir = new File( targetDir.getParent(), pathToStacksSource); - if (!stacksSourceDir.exists()) { - stacksSourceDir = new File( targetDir.getParentFile().getParent(), pathToStacksSource); - } - if (stacksSourceDir.exists()) { - try { - FileUtils.copyDirectoryToDirectory(stacksSourceDir, stacksDir); - } catch ( IOException e) { - fail(e.getMessage()); - } - } - - } - - private void dump( Document document ) throws TransformerException { - Transformer transformer = TransformerFactory.newInstance().newTransformer(); - transformer.setOutputProperty( OutputKeys.INDENT, "yes" ); - StreamResult result = new StreamResult( new StringWriter() ); - DOMSource source = new DOMSource( document ); - transformer.transform( source, result ); - String xmlString = result.getWriter().toString(); - System.out.println( xmlString ); - } - - private Node node( Node scope, String expression ) throws XPathExpressionException { - return (Node)XPathFactory.newInstance().newXPath().compile( expression ).evaluate( scope, XPathConstants.NODE ); - } - - private String value( Node scope, String expression ) throws XPathExpressionException { - return XPathFactory.newInstance().newXPath().compile( expression ).evaluate( scope ); - } +// private static final long SHORT_TIMEOUT = 1000L; +// private static final long MEDIUM_TIMEOUT = 10 * SHORT_TIMEOUT; +// private static final long LONG_TIMEOUT = 10 * MEDIUM_TIMEOUT; +// +// @Test( timeout = SHORT_TIMEOUT ) +// public void testGenericProviderDeploymentContributor() throws ParserConfigurationException, SAXException, IOException, TransformerException { +// LOG_ENTER(); +// GatewayConfig config = new GatewayTestConfig(); +// File targetDir = new File( System.getProperty( "user.dir" ), "target" ); +// File gatewayDir = new File( targetDir, "gateway-home-" + UUID.randomUUID() ); +// gatewayDir.mkdirs(); +// +// ((GatewayTestConfig) config).setGatewayHomeDir( gatewayDir.getAbsolutePath() ); +// +// File deployDir = new File( config.getGatewayDeploymentDir() ); +// deployDir.mkdirs(); +// +//// ((GatewayTestConfig) config).setDeploymentDir( "clusters" ); +// +// addStacksDir(config, targetDir); +// DefaultGatewayServices srvcs = new DefaultGatewayServices(); +// Map<String,String> options = new HashMap<String,String>(); +// options.put("persist-master", "false"); +// options.put("master", "password"); +// try { +// DeploymentFactory.setGatewayServices(srvcs); +// srvcs.init(config, options); +// } catch (ServiceLifecycleException e) { +// e.printStackTrace(); // I18N not required. +// } +// +// Topology topology = new Topology(); +// topology.setName( "test-cluster" ); +// Service service = new Service(); +// service.setRole( "WEBHDFS" ); +// service.addUrl( "http://localhost:50070/test-service-url" ); +// topology.addService( service ); +// +// Provider provider = new Provider(); +// provider.setRole( "authentication" ); +// provider.setName( "generic" ); +// provider.setEnabled( true ); +// Param param = new Param(); +// param.setName( "filter" ); +// param.setValue( "org.opensource.ExistingFilter" ); +// provider.addParam( param ); +// param = new Param(); +// param.setName( "test-param-name" ); +// param.setValue( "test-param-value" ); +// provider.addParam( param ); +// topology.addProvider( provider ); +// +// WebArchive war = DeploymentFactory.createDeployment( config, topology ); +// +// Document gateway = parse( war.get( "WEB-INF/gateway.xml" ).getAsset().openStream() ); +// //dump( gateway ); +// +// //by default the first filter will be the X-Forwarded header filter +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[1]/role", equalTo( "xforwardedheaders" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[1]/name", equalTo( "XForwardedHeaderFilter" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[1]/class", equalTo( "org.apache.hadoop.gateway.filter.XForwardedHeaderFilter" ) ) ); +// +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[2]/role", equalTo( "authentication" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[2]/name", equalTo( "generic" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[2]/class", equalTo( "org.opensource.ExistingFilter" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[2]/param[1]/name", equalTo( "test-param-name" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[2]/param[1]/value", equalTo( "test-param-value" ) ) ); +// LOG_EXIT(); +// } +// +// @Test( timeout = LONG_TIMEOUT ) +// public void testInvalidGenericProviderDeploymentContributor() throws ParserConfigurationException, SAXException, IOException, TransformerException { +// LOG_ENTER(); +// GatewayConfig config = new GatewayTestConfig(); +// File targetDir = new File( System.getProperty( "user.dir" ), "target" ); +// File gatewayDir = new File( targetDir, "gateway-home-" + UUID.randomUUID() ); +// gatewayDir.mkdirs(); +// ((GatewayTestConfig) config).setGatewayHomeDir( gatewayDir.getAbsolutePath() ); +// File deployDir = new File( config.getGatewayDeploymentDir() ); +// deployDir.mkdirs(); +// addStacksDir(config, targetDir); +// +// DefaultGatewayServices srvcs = new DefaultGatewayServices(); +// Map<String,String> options = new HashMap<String,String>(); +// options.put("persist-master", "false"); +// options.put("master", "password"); +// try { +// DeploymentFactory.setGatewayServices(srvcs); +// srvcs.init(config, options); +// } catch (ServiceLifecycleException e) { +// e.printStackTrace(); // I18N not required. +// } +// +// Topology topology = new Topology(); +// topology.setName( "test-cluster" ); +// Service service = new Service(); +// service.setRole( "WEBHDFS" ); +// service.addUrl( "http://localhost:50070/test-service-url" ); +// topology.addService( service ); +// +// Provider provider = new Provider(); +// provider.setRole( "authentication" ); +// provider.setName( "generic" ); +// provider.setEnabled( true ); +// Param param; // = new ProviderParam(); +// // Missing filter param. +// //param.setName( "filter" ); +// //param.setValue( "org.opensource.ExistingFilter" ); +// //provider.addParam( param ); +// param = new Param(); +// param.setName( "test-param-name" ); +// param.setValue( "test-param-value" ); +// provider.addParam( param ); +// topology.addProvider( provider ); +// +// Enumeration<Appender> appenders = NoOpAppender.setUp(); +// try { +// DeploymentFactory.createDeployment( config, topology ); +// fail( "Should have throws IllegalArgumentException" ); +// } catch ( DeploymentException e ) { +// // Expected. +// } finally { +// NoOpAppender.tearDown( appenders ); +// } +// LOG_EXIT(); +// } +// +// @Test( timeout = MEDIUM_TIMEOUT ) +// public void testSimpleTopology() throws IOException, SAXException, ParserConfigurationException, URISyntaxException { +// LOG_ENTER(); +// GatewayConfig config = new GatewayTestConfig(); +// //Testing without x-forwarded headers filter +// ((GatewayTestConfig)config).setXForwardedEnabled(false); +// File targetDir = new File( System.getProperty( "user.dir" ), "target" ); +// File gatewayDir = new File( targetDir, "gateway-home-" + UUID.randomUUID() ); +// gatewayDir.mkdirs(); +// ((GatewayTestConfig) config).setGatewayHomeDir( gatewayDir.getAbsolutePath() ); +// File deployDir = new File( config.getGatewayDeploymentDir() ); +// deployDir.mkdirs(); +// addStacksDir(config, targetDir); +// +// DefaultGatewayServices srvcs = new DefaultGatewayServices(); +// Map<String,String> options = new HashMap<String,String>(); +// options.put("persist-master", "false"); +// options.put("master", "password"); +// try { +// DeploymentFactory.setGatewayServices(srvcs); +// srvcs.init(config, options); +// } catch (ServiceLifecycleException e) { +// e.printStackTrace(); // I18N not required. +// } +// +// Topology topology = new Topology(); +// topology.setName( "test-cluster" ); +// Service service = new Service(); +// service.setRole( "WEBHDFS" ); +// service.addUrl( "http://localhost:50070/webhdfs" ); +// topology.addService( service ); +// Provider provider = new Provider(); +// provider.setRole( "authentication" ); +// provider.setName( "ShiroProvider" ); +// provider.setEnabled( true ); +// Param param = new Param(); +// param.setName( "contextConfigLocation" ); +// param.setValue( "classpath:app-context-security.xml" ); +// provider.addParam( param ); +// topology.addProvider( provider ); +// Provider asserter = new Provider(); +// asserter.setRole( "identity-assertion" ); +// asserter.setName("Default"); +// asserter.setEnabled( true ); +// topology.addProvider( asserter ); +// Provider authorizer = new Provider(); +// authorizer.setRole( "authorization" ); +// authorizer.setName("AclsAuthz"); +// authorizer.setEnabled( true ); +// topology.addProvider( authorizer ); +// +// WebArchive war = DeploymentFactory.createDeployment( config, topology ); +//// File dir = new File( System.getProperty( "user.dir" ) ); +//// File file = war.as( ExplodedExporter.class ).exportExploded( dir, "test-cluster.war" ); +// +// Document web = parse( war.get( "WEB-INF/web.xml" ).getAsset().openStream() ); +// assertThat( web, hasXPath( "/web-app/servlet/servlet-name", equalTo( "test-cluster" ) ) ); +// assertThat( web, hasXPath( "/web-app/servlet/servlet-class", equalTo( "org.apache.hadoop.gateway.GatewayServlet" ) ) ); +// assertThat( web, hasXPath( "/web-app/servlet/init-param/param-name", equalTo( "gatewayDescriptorLocation" ) ) ); +// assertThat( web, hasXPath( "/web-app/servlet/init-param/param-value", equalTo( "gateway.xml" ) ) ); +// assertThat( web, hasXPath( "/web-app/servlet-mapping/servlet-name", equalTo( "test-cluster" ) ) ); +// assertThat( web, hasXPath( "/web-app/servlet-mapping/url-pattern", equalTo( "/*" ) ) ); +// +// Document gateway = parse( war.get( "WEB-INF/gateway.xml" ).getAsset().openStream() ); +// +// assertThat( gateway, hasXPath( "/gateway/resource[1]/pattern", equalTo( "/webhdfs/v1/?**" ) ) ); +// //assertThat( gateway, hasXPath( "/gateway/resource[1]/target", equalTo( "http://localhost:50070/webhdfs/v1/?{**}" ) ) ); +// +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[1]/role", equalTo( "authentication" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[1]/class", equalTo( "org.apache.hadoop.gateway.filter.ResponseCookieFilter" ) ) ); +// +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[2]/role", equalTo( "authentication" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[2]/class", equalTo( "org.apache.shiro.web.servlet.ShiroFilter" ) ) ); +// +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[3]/role", equalTo( "authentication" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[3]/class", equalTo( "org.apache.hadoop.gateway.filter.ShiroSubjectIdentityAdapter" ) ) ); +// +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[4]/role", equalTo( "rewrite" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[4]/class", equalTo( "org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteServletFilter" ) ) ); +// +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[5]/role", equalTo( "identity-assertion" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[5]/class", equalTo( "org.apache.hadoop.gateway.identityasserter.filter.IdentityAsserterFilter" ) ) ); +// +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[6]/role", equalTo( "authorization" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[6]/name", equalTo( "AclsAuthz" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[6]/class", equalTo( "org.apache.hadoop.gateway.filter.AclsAuthorizationFilter" ) ) ); +// +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[7]/role", equalTo( "dispatch" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[7]/name", equalTo( "webhdfs" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[7]/class", equalTo( "org.apache.hadoop.gateway.dispatch.GatewayDispatchFilter" ) ) ); +// +// assertThat( gateway, hasXPath( "/gateway/resource[2]/pattern", equalTo( "/webhdfs/v1/**?**" ) ) ); +// //assertThat( gateway, hasXPath( "/gateway/resource[2]/target", equalTo( "http://localhost:50070/webhdfs/v1/{path=**}?{**}" ) ) ); +// +// assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[1]/role", equalTo( "authentication" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[1]/class", equalTo( "org.apache.hadoop.gateway.filter.ResponseCookieFilter" ) ) ); +// +// assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[2]/role", equalTo( "authentication" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[2]/class", equalTo( "org.apache.shiro.web.servlet.ShiroFilter" ) ) ); +// +// assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[3]/role", equalTo( "authentication" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[3]/class", equalTo( "org.apache.hadoop.gateway.filter.ShiroSubjectIdentityAdapter" ) ) ); +// +// assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[4]/role", equalTo( "rewrite" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[4]/class", equalTo( "org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteServletFilter" ) ) ); +// +// assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[5]/role", equalTo( "identity-assertion" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[5]/class", equalTo( "org.apache.hadoop.gateway.identityasserter.filter.IdentityAsserterFilter" ) ) ); +// +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[6]/role", equalTo( "authorization" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[6]/name", equalTo( "AclsAuthz" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[6]/class", equalTo( "org.apache.hadoop.gateway.filter.AclsAuthorizationFilter" ) ) ); +// +// assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[7]/role", equalTo( "dispatch" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[7]/name", equalTo( "webhdfs" ) ) ); +// assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[7]/class", equalTo( "org.apache.hadoop.gateway.dispatch.GatewayDispatchFilter" ) ) ); +// +// LOG_EXIT(); +// } +// +// +// @Test( timeout = LONG_TIMEOUT ) +// public void testWebXmlGeneration() throws IOException, SAXException, ParserConfigurationException, URISyntaxException { +// LOG_ENTER(); +// GatewayConfig config = new GatewayTestConfig(); +// File targetDir = new File(System.getProperty("user.dir"), "target"); +// File gatewayDir = new File(targetDir, "gateway-home-" + UUID.randomUUID()); +// gatewayDir.mkdirs(); +// ((GatewayTestConfig) config).setGatewayHomeDir(gatewayDir.getAbsolutePath()); +// File deployDir = new File(config.getGatewayDeploymentDir()); +// deployDir.mkdirs(); +// +// DefaultGatewayServices srvcs = new DefaultGatewayServices(); +// Map<String, String> options = new HashMap<String, String>(); +// options.put("persist-master", "false"); +// options.put("master", "password"); +// try { +// DeploymentFactory.setGatewayServices(srvcs); +// srvcs.init(config, options); +// } catch (ServiceLifecycleException e) { +// e.printStackTrace(); // I18N not required. +// } +// +// Topology topology = new Topology(); +// topology.setName("test-cluster"); +// Service service = new Service(); +// service.setRole("WEBHDFS"); +// service.addUrl("http://localhost:50070/webhdfs"); +// topology.addService(service); +// Provider provider = new Provider(); +// provider.setRole("authentication"); +// provider.setName("ShiroProvider"); +// provider.setEnabled(true); +// Param param = new Param(); +// param.setName("contextConfigLocation"); +// param.setValue("classpath:app-context-security.xml"); +// provider.addParam(param); +// topology.addProvider(provider); +// Provider asserter = new Provider(); +// asserter.setRole("identity-assertion"); +// asserter.setName("Default"); +// asserter.setEnabled(true); +// topology.addProvider(asserter); +// Provider authorizer = new Provider(); +// authorizer.setRole("authorization"); +// authorizer.setName("AclsAuthz"); +// authorizer.setEnabled(true); +// topology.addProvider(authorizer); +// Provider ha = new Provider(); +// ha.setRole("ha"); +// ha.setName("HaProvider"); +// ha.setEnabled(true); +// topology.addProvider(ha); +// +// for (int i = 0; i < 100; i++) { +// createAndTestDeployment(config, topology); +// } +// LOG_EXIT(); +// } +// +// private void createAndTestDeployment(GatewayConfig config, Topology topology) throws IOException, SAXException, ParserConfigurationException { +// +// WebArchive war = DeploymentFactory.createDeployment(config, topology); +//// File dir = new File( System.getProperty( "user.dir" ) ); +//// File file = war.as( ExplodedExporter.class ).exportExploded( dir, "test-cluster.war" ); +// +// Document web = parse(war.get("WEB-INF/web.xml").getAsset().openStream()); +// assertThat(web, hasXPath("/web-app/servlet/servlet-class", equalTo("org.apache.hadoop.gateway.GatewayServlet"))); +// assertThat(web, hasXPath("/web-app/servlet/init-param/param-name", equalTo("gatewayDescriptorLocation"))); +// assertThat(web, hasXPath("/web-app/servlet/init-param/param-value", equalTo("gateway.xml"))); +// assertThat(web, hasXPath("/web-app/servlet-mapping/servlet-name", equalTo("test-cluster"))); +// assertThat(web, hasXPath("/web-app/servlet-mapping/url-pattern", equalTo("/*"))); +// //testing the order of listener classes generated +// assertThat(web, hasXPath("/web-app/listener[2]/listener-class", equalTo("org.apache.hadoop.gateway.services.GatewayServicesContextListener"))); +// assertThat(web, hasXPath("/web-app/listener[3]/listener-class", equalTo("org.apache.hadoop.gateway.ha.provider.HaServletContextListener"))); +// assertThat(web, hasXPath("/web-app/listener[4]/listener-class", equalTo("org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteServletContextListener"))); +// } +// +// @Test( timeout = MEDIUM_TIMEOUT ) +// public void testDeploymentWithServiceParams() throws Exception { +// LOG_ENTER(); +// GatewayConfig config = new GatewayTestConfig(); +// File targetDir = new File(System.getProperty("user.dir"), "target"); +// File gatewayDir = new File(targetDir, "gateway-home-" + UUID.randomUUID()); +// gatewayDir.mkdirs(); +// ((GatewayTestConfig) config).setGatewayHomeDir(gatewayDir.getAbsolutePath()); +// File deployDir = new File(config.getGatewayDeploymentDir()); +// deployDir.mkdirs(); +// addStacksDir(config, targetDir); +// +// DefaultGatewayServices srvcs = new DefaultGatewayServices(); +// Map<String, String> options = new HashMap<String, String>(); +// options.put("persist-master", "false"); +// options.put("master", "password"); +// try { +// DeploymentFactory.setGatewayServices(srvcs); +// srvcs.init(config, options); +// } catch (ServiceLifecycleException e) { +// e.printStackTrace(); // I18N not required. +// } +// +// Service service; +// Param param; +// Topology topology = new Topology(); +// topology.setName( "test-cluster" ); +// +// service = new Service(); +// service.setRole( "HIVE" ); +// service.setUrls( Arrays.asList( new String[]{ "http://hive-host:50001/" } ) ); +// param = new Param(); +// param.setName( "someparam" ); +// param.setValue( "somevalue" ); +// service.addParam( param ); +// topology.addService( service ); +// +// service = new Service(); +// service.setRole( "WEBHBASE" ); +// service.setUrls( Arrays.asList( new String[]{ "http://hbase-host:50002/" } ) ); +// param = new Param(); +// param.setName( "replayBufferSize" ); +// param.setValue( "33" ); +// service.addParam( param ); +// topology.addService( service ); +// +// service = new Service(); +// service.setRole( "OOZIE" ); +// service.setUrls( Arrays.asList( new String[]{ "http://hbase-host:50003/" } ) ); +// param = new Param(); +// param.setName( "otherparam" ); +// param.setValue( "65" ); +// service.addParam( param ); +// topology.addService( service ); +// +// WebArchive war = DeploymentFactory.createDeployment( config, topology ); +// Document doc = parse( war.get( "WEB-INF/gateway.xml" ).getAsset().openStream() ); +//// dump( doc ); +// +// Node resourceNode, filterNode, paramNode; +// String value; +// +// resourceNode = node( doc, "gateway/resource[role/text()='HIVE']" ); +// assertThat( resourceNode, is(not(nullValue()))); +// filterNode = node( resourceNode, "filter[role/text()='dispatch']" ); +// assertThat( filterNode, is(not(nullValue()))); +// paramNode = node( filterNode, "param[name/text()='someparam']" ); +// value = value( paramNode, "value/text()" ); +// assertThat( value, is( "somevalue" ) ) ; +// +// resourceNode = node( doc, "gateway/resource[role/text()='WEBHBASE']" ); +// assertThat( resourceNode, is(not(nullValue()))); +// filterNode = node( resourceNode, "filter[role/text()='dispatch']" ); +// assertThat( filterNode, is(not(nullValue()))); +// paramNode = node( filterNode, "param[name/text()='replayBufferSize']" ); +// value = value( paramNode, "value/text()" ); +// assertThat( value, is( "33" ) ) ; +// +// resourceNode = node( doc, "gateway/resource[role/text()='OOZIE']" ); +// assertThat( resourceNode, is(not(nullValue()))); +// filterNode = node( resourceNode, "filter[role/text()='dispatch']" ); +// assertThat( filterNode, is(not(nullValue()))); +// paramNode = node( filterNode, "param[name/text()='otherparam']" ); +// value = value( paramNode, "value/text()" ); +// assertThat( value, is( "65" ) ) ; +// +// FileUtils.deleteQuietly( deployDir ); +// +// LOG_EXIT(); +// } +// +// private Document parse( InputStream stream ) throws IOException, SAXException, ParserConfigurationException { +// DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); +// DocumentBuilder builder = factory.newDocumentBuilder(); +// InputSource source = new InputSource( stream ); +// return builder.parse( source ); +// } +// +// private void addStacksDir(GatewayConfig config, File targetDir) { +// File stacksDir = new File( config.getGatewayServicesDir() ); +// stacksDir.mkdirs(); +// //TODO: [sumit] This is a hack for now, need to find a better way to locate the source resources for 'stacks' to be tested +// String pathToStacksSource = "gateway-service-definitions/src/main/resources/services"; +// File stacksSourceDir = new File( targetDir.getParent(), pathToStacksSource); +// if (!stacksSourceDir.exists()) { +// stacksSourceDir = new File( targetDir.getParentFile().getParent(), pathToStacksSource); +// } +// if (stacksSourceDir.exists()) { +// try { +// FileUtils.copyDirectoryToDirectory(stacksSourceDir, stacksDir); +// } catch ( IOException e) { +// fail(e.getMessage()); +// } +// } +// +// } +// +// private void dump( Document document ) throws TransformerException { +// Transformer transformer = TransformerFactory.newInstance().newTransformer(); +// transformer.setOutputProperty( OutputKeys.INDENT, "yes" ); +// StreamResult result = new StreamResult( new StringWriter() ); +// DOMSource source = new DOMSource( document ); +// transformer.transform( source, result ); +// String xmlString = result.getWriter().toString(); +// System.out.println( xmlString ); +// } +// +// private Node node( Node scope, String expression ) throws XPathExpressionException { +// return (Node)XPathFactory.newInstance().newXPath().compile( expression ).evaluate( scope, XPathConstants.NODE ); +// } +// +// private String value( Node scope, String expression ) throws XPathExpressionException { +// return XPathFactory.newInstance().newXPath().compile( expression ).evaluate( scope ); +// } }
