You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sentry.apache.org by co...@apache.org on 2017/11/16 09:56:47 UTC
[10/32] sentry git commit: SENTRY-1997 - Bump sqoop dependency
version to 1.99.7. Colm O hEigeartaigh, reviewed by Sergio Pena.
http://git-wip-us.apache.org/repos/asf/sentry/blob/e23fc4ef/sentry-tests/sentry-tests-sqoop/src/test/java/org/apache/sentry/tests/e2e/sqoop/TestServerScopeEndToEnd.java
----------------------------------------------------------------------
diff --git a/sentry-tests/sentry-tests-sqoop/src/test/java/org/apache/sentry/tests/e2e/sqoop/TestServerScopeEndToEnd.java b/sentry-tests/sentry-tests-sqoop/src/test/java/org/apache/sentry/tests/e2e/sqoop/TestServerScopeEndToEnd.java
index 85bae92..55213df 100644
--- a/sentry-tests/sentry-tests-sqoop/src/test/java/org/apache/sentry/tests/e2e/sqoop/TestServerScopeEndToEnd.java
+++ b/sentry-tests/sentry-tests-sqoop/src/test/java/org/apache/sentry/tests/e2e/sqoop/TestServerScopeEndToEnd.java
@@ -40,30 +40,33 @@ public class TestServerScopeEndToEnd extends AbstractSqoopSentryTestBase {
* ADMIN_USER create two links and one job
*/
SqoopClient client = sqoopServerRunner.getSqoopClient(ADMIN_USER);
- MLink rdbmsLink = client.createLink("generic-jdbc-connector");
+ MLink rdbmsLink = client.createLink(JDBC_CONNECTOR_NAME);
sqoopServerRunner.fillRdbmsLinkConfig(rdbmsLink);
+ rdbmsLink.setName("jdbc-link1");
sqoopServerRunner.saveLink(client, rdbmsLink);
- MLink hdfsLink = client.createLink("hdfs-connector");
+ MLink hdfsLink = client.createLink(HDFS_CONNECTOR_NAME);
sqoopServerRunner.fillHdfsLink(hdfsLink);
+ hdfsLink.setName("hdfs-link1");
sqoopServerRunner.saveLink(client, hdfsLink);
- MJob job1 = client.createJob(hdfsLink.getPersistenceId(), rdbmsLink.getPersistenceId());
+ MJob job1 = client.createJob(hdfsLink.getName(), rdbmsLink.getName());
// set HDFS "FROM" config for the job, since the connector test case base class only has utilities for HDFS!
sqoopServerRunner.fillHdfsFromConfig(job1);
// set the RDBM "TO" config here
sqoopServerRunner.fillRdbmsToConfig(job1);
// create job
+ job1.setName("hdfs-jdbc-job1");
sqoopServerRunner.saveJob(client, job1);
- MResource sqoopServer1 = new MResource(SQOOP_SERVER_NAME, MResource.TYPE.SERVER);
+ MResource sqoopServer1 = new MResource(SQOOP_SERVER_NAME, MResource.TYPE.SERVER);
/**
* ADMIN_USER grant read privilege on server SQOOP_SERVER_NAME to role1
*/
MRole role1 = new MRole(ROLE1);
MPrincipal group1 = new MPrincipal(GROUP1, MPrincipal.TYPE.GROUP);
- MPrivilege readPrivilege = new MPrivilege(sqoopServer1,SqoopActionConstant.READ, false);
+ MPrivilege readPrivilege = new MPrivilege(sqoopServer1, SqoopActionConstant.READ, false);
client.createRole(role1);
client.grantRole(Lists.newArrayList(role1), Lists.newArrayList(group1));
client.grantPrivilege(Lists.newArrayList(new MPrincipal(role1.getName(), MPrincipal.TYPE.ROLE)),
@@ -71,29 +74,34 @@ public class TestServerScopeEndToEnd extends AbstractSqoopSentryTestBase {
/**
* ADMIN_USER grant write privilege on server SQOOP_SERVER_NAME to role2
- * ADMIN_USER grant read privilege on connector all to role2 (for update link required)
- * ADMIN_USER grant read privilege on link all to role2 (for update job required)
+ * ADMIN_USER grant read privilege on connector HDFS_CONNECTOR_NAME and JDBC_CONNECTOR_NAME
+ * to role2 (for update link required)
+ * ADMIN_USER grant read privilege on link "jdbc-link1" and "hdfs-link1" to role2 (for update job required)
*/
MRole role2 = new MRole(ROLE2);
MPrincipal group2 = new MPrincipal(GROUP2, MPrincipal.TYPE.GROUP);
MPrivilege writePrivilege = new MPrivilege(sqoopServer1,SqoopActionConstant.WRITE, false);
client.createRole(role2);
- MResource allConnector = new MResource(SqoopActionConstant.ALL, MResource.TYPE.CONNECTOR);
- MResource allLink = new MResource(SqoopActionConstant.ALL, MResource.TYPE.LINK);
- MPrivilege readAllConPriv = new MPrivilege(allConnector,SqoopActionConstant.READ, false);
- MPrivilege readAllLinkPriv = new MPrivilege(allLink,SqoopActionConstant.READ, false);
+ MResource hdfsConnector = new MResource(HDFS_CONNECTOR_NAME, MResource.TYPE.CONNECTOR);
+ MResource jdbcConnector = new MResource(JDBC_CONNECTOR_NAME, MResource.TYPE.CONNECTOR);
+ MResource jdbcLink = new MResource("jdbc-link1", MResource.TYPE.LINK);
+ MResource hdfsLinkResource = new MResource("hdfs-link1", MResource.TYPE.LINK);
+ MPrivilege readHdfsConPriv = new MPrivilege(hdfsConnector, SqoopActionConstant.READ, false);
+ MPrivilege readJdbcConPriv = new MPrivilege(jdbcConnector, SqoopActionConstant.READ, false);
+ MPrivilege readJdbcLinkPriv = new MPrivilege(jdbcLink, SqoopActionConstant.READ, false);
+ MPrivilege readHdfsLinkPriv = new MPrivilege(hdfsLinkResource, SqoopActionConstant.READ, false);
client.grantRole(Lists.newArrayList(role2), Lists.newArrayList(group2));
client.grantPrivilege(Lists.newArrayList(new MPrincipal(role2.getName(), MPrincipal.TYPE.ROLE)),
- Lists.newArrayList(writePrivilege, readAllConPriv, readAllLinkPriv));
+ Lists.newArrayList(writePrivilege, readHdfsConPriv, readJdbcConPriv, readJdbcLinkPriv, readHdfsLinkPriv));
/**
* ADMIN_USER grant all privilege on server SQOOP_SERVER_NAME to role3
*/
MRole role3 = new MRole(ROLE3);
MPrincipal group3 = new MPrincipal(GROUP3, MPrincipal.TYPE.GROUP);
- MPrivilege allPrivilege = new MPrivilege(sqoopServer1,SqoopActionConstant.ALL_NAME, false);
+ MPrivilege allPrivilege = new MPrivilege(sqoopServer1, SqoopActionConstant.ALL_NAME, false);
client.createRole(role3);
client.grantRole(Lists.newArrayList(role3), Lists.newArrayList(group3));
client.grantPrivilege(Lists.newArrayList(new MPrincipal(role3.getName(), MPrincipal.TYPE.ROLE)),
@@ -107,15 +115,15 @@ public class TestServerScopeEndToEnd extends AbstractSqoopSentryTestBase {
client = sqoopServerRunner.getSqoopClient(USER1);
try {
// show connector
- assertTrue(client.getConnector("generic-jdbc-connector") != null);
- assertTrue(client.getConnector("hdfs-connector") != null);
+ assertTrue(client.getConnector(JDBC_CONNECTOR_NAME) != null);
+ assertTrue(client.getConnector(HDFS_CONNECTOR_NAME) != null);
assertTrue(client.getConnectors().size() > 0);
// show link
- assertTrue(client.getLink(hdfsLink.getPersistenceId()) != null);
- assertTrue(client.getLink(rdbmsLink.getPersistenceId()) != null);
+ assertTrue(client.getLink(hdfsLink.getName()) != null);
+ assertTrue(client.getLink(rdbmsLink.getName()) != null);
assertTrue(client.getLinks().size() == 2);
// show job
- assertTrue(client.getJob(job1.getPersistenceId()) != null);
+ assertTrue(client.getJob(job1.getName()) != null);
assertTrue(client.getJobs().size() == 1);
} catch (Exception e) {
fail("unexpected Authorization exception happend");
@@ -123,18 +131,20 @@ public class TestServerScopeEndToEnd extends AbstractSqoopSentryTestBase {
// user1 can't update link and job
try {
hdfsLink.setName("hdfs1_update_user1");
- client.updateLink(hdfsLink);
+ client.updateLink(hdfsLink, "hdfs-link1");
fail("expected Authorization exception happend");
} catch (Exception e) {
assertCausedMessage(e, SecurityError.AUTH_0014.getMessage());
+ hdfsLink.setName("hdfs-link1");
}
try {
job1.setName("job1_update_user1");
- client.updateJob(job1);
+ client.updateJob(job1, "hdfs-jdbc-job1");
fail("expected Authorization exception happend");
} catch (Exception e) {
assertCausedMessage(e, SecurityError.AUTH_0014.getMessage());
+ job1.setName("hdfs-jdbc-job1");
}
/**
@@ -146,9 +156,13 @@ public class TestServerScopeEndToEnd extends AbstractSqoopSentryTestBase {
try {
// update link and job
hdfsLink.setName("hdfs1_update_user2");
- client.updateLink(hdfsLink);
+ client.updateLink(hdfsLink, "hdfs-link1");
+ // Now change it back
+ hdfsLink.setName("hdfs-link1");
+ client.updateLink(hdfsLink, "hdfs1_update_user2");
+
job1.setName("job1_update_user2");
- client.updateJob(job1);
+ client.updateJob(job1, "hdfs-jdbc-job1");
} catch (Exception e) {
fail("unexpected Authorization exception happend");
}
@@ -162,22 +176,25 @@ public class TestServerScopeEndToEnd extends AbstractSqoopSentryTestBase {
client = sqoopServerRunner.getSqoopClient(USER3);
try {
// show connector
- assertTrue(client.getConnector("generic-jdbc-connector") != null);
- assertTrue(client.getConnector("hdfs-connector") != null);
+ assertTrue(client.getConnector(JDBC_CONNECTOR_NAME) != null);
+ assertTrue(client.getConnector(HDFS_CONNECTOR_NAME) != null);
assertTrue(client.getConnectors().size() > 0);
// show link
- assertTrue(client.getLink(hdfsLink.getPersistenceId()) != null);
- assertTrue(client.getLink(rdbmsLink.getPersistenceId()) != null);
+ assertTrue(client.getLink(hdfsLink.getName()) != null);
+ assertTrue(client.getLink(rdbmsLink.getName()) != null);
assertTrue(client.getLinks().size() == 2);
// show job
- assertTrue(client.getJob(job1.getPersistenceId()) != null);
+ assertTrue(client.getJob(job1.getName()) != null);
assertTrue(client.getJobs().size() == 1);
// update link
hdfsLink.setName("hdfs1_update_user3");
- client.updateLink(hdfsLink);
+ client.updateLink(hdfsLink, "hdfs-link1");
+ // Now change it back
+ hdfsLink.setName("hdfs-link1");
+ client.updateLink(hdfsLink, "hdfs1_update_user3");
// update job
job1.setName("job1_update_user3");
- client.updateJob(job1);
+ client.updateJob(job1, "job1_update_user2");
} catch (Exception e) {
fail("unexpected Authorization exception happend");
}
http://git-wip-us.apache.org/repos/asf/sentry/blob/e23fc4ef/sentry-tests/sentry-tests-sqoop/src/test/java/org/apache/sentry/tests/e2e/sqoop/TestShowPrivilege.java
----------------------------------------------------------------------
diff --git a/sentry-tests/sentry-tests-sqoop/src/test/java/org/apache/sentry/tests/e2e/sqoop/TestShowPrivilege.java b/sentry-tests/sentry-tests-sqoop/src/test/java/org/apache/sentry/tests/e2e/sqoop/TestShowPrivilege.java
index 0ccbf5d..8cd8183 100644
--- a/sentry-tests/sentry-tests-sqoop/src/test/java/org/apache/sentry/tests/e2e/sqoop/TestShowPrivilege.java
+++ b/sentry-tests/sentry-tests-sqoop/src/test/java/org/apache/sentry/tests/e2e/sqoop/TestShowPrivilege.java
@@ -36,7 +36,7 @@ public class TestShowPrivilege extends AbstractSqoopSentryTestBase {
public void testNotSupportShowOnUser() throws Exception {
SqoopClient client = sqoopServerRunner.getSqoopClient(ADMIN_USER);
MPrincipal user1 = new MPrincipal("not_support_user1", MPrincipal.TYPE.USER);
- MResource resource1 = new MResource("all", MResource.TYPE.CONNECTOR);
+ MResource resource1 = new MResource(HDFS_CONNECTOR_NAME, MResource.TYPE.CONNECTOR);
try {
client.getPrivilegesByPrincipal(user1, resource1);
fail("expected not support exception happend");
@@ -49,7 +49,7 @@ public class TestShowPrivilege extends AbstractSqoopSentryTestBase {
public void testNotSupportShowOnGroup() throws Exception {
SqoopClient client = sqoopServerRunner.getSqoopClient(ADMIN_USER);
MPrincipal group1 = new MPrincipal("not_support_group1", MPrincipal.TYPE.GROUP);
- MResource resource1 = new MResource("all", MResource.TYPE.CONNECTOR);
+ MResource resource1 = new MResource(HDFS_CONNECTOR_NAME, MResource.TYPE.CONNECTOR);
try {
client.getPrivilegesByPrincipal(group1, resource1);
fail("expected not support exception happend");
@@ -63,26 +63,26 @@ public class TestShowPrivilege extends AbstractSqoopSentryTestBase {
/**
* user1 belongs to group group1
* admin user grant role role1 to group group1
- * admin user grant read privilege on connector all to role role1
+ * admin user grant read privilege on connector HDFS_CONNECTOR_NAME to role role1
*/
SqoopClient client = sqoopServerRunner.getSqoopClient(ADMIN_USER);
MRole role1 = new MRole(ROLE1);
MPrincipal group1Princ = new MPrincipal(GROUP1, MPrincipal.TYPE.GROUP);
MPrincipal role1Princ = new MPrincipal(ROLE1, MPrincipal.TYPE.ROLE);
- MResource allConnector = new MResource(SqoopActionConstant.ALL, MResource.TYPE.CONNECTOR);
- MPrivilege readPriv = new MPrivilege(allConnector, SqoopActionConstant.READ, false);
+ MResource hdfsConnector = new MResource(HDFS_CONNECTOR_NAME, MResource.TYPE.CONNECTOR);
+ MPrivilege readPriv = new MPrivilege(hdfsConnector, SqoopActionConstant.READ, false);
client.createRole(role1);
client.grantRole(Lists.newArrayList(role1), Lists.newArrayList(group1Princ));
client.grantPrivilege(Lists.newArrayList(role1Princ), Lists.newArrayList(readPriv));
// user1 show privilege on role1
client = sqoopServerRunner.getSqoopClient(USER1);
- assertTrue(client.getPrivilegesByPrincipal(role1Princ, allConnector).size() == 1);
+ assertTrue(client.getPrivilegesByPrincipal(role1Princ, hdfsConnector).size() == 1);
// user2 can't show privilege on role1, because user2 doesn't belong to role1
client = sqoopServerRunner.getSqoopClient(USER2);
try {
- client.getPrivilegesByPrincipal(role1Princ, allConnector);
+ client.getPrivilegesByPrincipal(role1Princ, hdfsConnector);
fail("expected SentryAccessDeniedException happend");
} catch (Exception e) {
assertCausedMessage(e, "SentryAccessDeniedException");
http://git-wip-us.apache.org/repos/asf/sentry/blob/e23fc4ef/sentry-tests/sentry-tests-sqoop/src/test/java/org/apache/sentry/tests/e2e/sqoop/TomcatSqoopRunner.java
----------------------------------------------------------------------
diff --git a/sentry-tests/sentry-tests-sqoop/src/test/java/org/apache/sentry/tests/e2e/sqoop/TomcatSqoopRunner.java b/sentry-tests/sentry-tests-sqoop/src/test/java/org/apache/sentry/tests/e2e/sqoop/TomcatSqoopRunner.java
deleted file mode 100644
index 0f0496b..0000000
--- a/sentry-tests/sentry-tests-sqoop/src/test/java/org/apache/sentry/tests/e2e/sqoop/TomcatSqoopRunner.java
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.sentry.tests.e2e.sqoop;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotSame;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.log4j.Logger;
-import org.apache.sqoop.client.SqoopClient;
-import org.apache.sqoop.common.test.db.DatabaseProvider;
-import org.apache.sqoop.common.test.db.DatabaseProviderFactory;
-import org.apache.sqoop.common.test.db.TableName;
-import org.apache.sqoop.common.test.utils.NetworkUtils;
-import org.apache.sqoop.model.MConfigList;
-import org.apache.sqoop.model.MJob;
-import org.apache.sqoop.model.MLink;
-import org.apache.sqoop.model.MPersistableEntity;
-import org.apache.sqoop.test.minicluster.SqoopMiniCluster;
-import org.apache.sqoop.validation.Status;
-import org.codehaus.cargo.container.ContainerType;
-import org.codehaus.cargo.container.InstalledLocalContainer;
-import org.codehaus.cargo.container.configuration.ConfigurationType;
-import org.codehaus.cargo.container.configuration.LocalConfiguration;
-import org.codehaus.cargo.container.deployable.WAR;
-import org.codehaus.cargo.container.installer.Installer;
-import org.codehaus.cargo.container.installer.ZipURLInstaller;
-import org.codehaus.cargo.container.property.ServletPropertySet;
-import org.codehaus.cargo.container.tomcat.TomcatPropertySet;
-import org.codehaus.cargo.generic.DefaultContainerFactory;
-import org.codehaus.cargo.generic.configuration.DefaultConfigurationFactory;
-
-import com.google.common.base.Joiner;
-
-public class TomcatSqoopRunner {
- private static final Logger LOG = Logger.getLogger(TomcatSqoopRunner.class);
- private SqoopServerEnableSentry server;
- private DatabaseProvider provider;
- private String temporaryPath;
-
- public TomcatSqoopRunner(String temporaryPath, String serverName, String sentrySite)
- throws Exception {
- this.temporaryPath = temporaryPath;
- this.server = new SqoopServerEnableSentry(temporaryPath, serverName, sentrySite);
- this.provider = DatabaseProviderFactory.getProvider(System.getProperties());
- }
-
- public void start() throws Exception {
- server.start();
- provider.start();
- }
-
- public void stop() throws Exception {
- server.stop();
- provider.stop();
- }
-
-
- /**
- * create link.
- *
- * With asserts to make sure that it was created correctly.
- * @param sqoopClient
- * @param link
- */
- public void saveLink(SqoopClient client, MLink link) {
- assertEquals(Status.OK, client.saveLink(link));
- assertNotSame(MPersistableEntity.PERSISTANCE_ID_DEFAULT, link.getPersistenceId());
- }
-
- /**
- * create link.
- *
- * With asserts to make sure that it was created correctly.
- * @param sqoopClient
- * @param link
- */
- public void updateLink(SqoopClient client, MLink link) {
- assertEquals(Status.OK, client.updateLink(link));
- assertNotSame(MPersistableEntity.PERSISTANCE_ID_DEFAULT, link.getPersistenceId());
- }
-
- /**
- * Create job.
- *
- * With asserts to make sure that it was created correctly.
- *
- * @param job
- */
- public void saveJob(SqoopClient client, MJob job) {
- assertEquals(Status.OK, client.saveJob(job));
- assertNotSame(MPersistableEntity.PERSISTANCE_ID_DEFAULT, job.getPersistenceId());
- }
-
- /**
- * fill link.
- *
- * With asserts to make sure that it was filled correctly.
- *
- * @param link
- */
- public void fillHdfsLink(MLink link) {
- MConfigList configs = link.getConnectorLinkConfig();
- configs.getStringInput("linkConfig.confDir").setValue(server.getConfigurationPath());
- }
-
- /**
- * Fill link config based on currently active provider.
- *
- * @param link MLink object to fill
- */
- public void fillRdbmsLinkConfig(MLink link) {
- MConfigList configs = link.getConnectorLinkConfig();
- configs.getStringInput("linkConfig.jdbcDriver").setValue(provider.getJdbcDriver());
- configs.getStringInput("linkConfig.connectionString").setValue(provider.getConnectionUrl());
- configs.getStringInput("linkConfig.username").setValue(provider.getConnectionUsername());
- configs.getStringInput("linkConfig.password").setValue(provider.getConnectionPassword());
- }
-
- public void fillHdfsFromConfig(MJob job) {
- MConfigList fromConfig = job.getFromJobConfig();
- fromConfig.getStringInput("fromJobConfig.inputDirectory").setValue(temporaryPath + "/output");
- }
-
- public void fillRdbmsToConfig(MJob job) {
- MConfigList toConfig = job.getToJobConfig();
- toConfig.getStringInput("toJobConfig.tableName").setValue(provider.
- escapeTableName(new TableName(getClass().getSimpleName()).getTableName()));
- }
-
- /**
- * get a sqoopClient for specific user
- * @param user
- */
- public SqoopClient getSqoopClient(String user) {
- setAuthenticationUser(user);
- return new SqoopClient(server.getServerUrl());
- }
-
- /**
- * Set the mock user in the Sqoop simple authentication
- * @param user
- */
- private void setAuthenticationUser(String user) {
- System.setProperty("user.name", user);
- }
-
- private static class SqoopServerEnableSentry extends SqoopMiniCluster {
- private static final String WAR_PATH = "target/thirdparty/sqoop-server.war";
- private static final String TOMCAT_PATH = "target/thirdparty/tomcat.zip";
-
- private InstalledLocalContainer container = null;
- private Integer port;
- private Integer ajpPort;
- private String sentrySite;
- private String serverName;
-
- SqoopServerEnableSentry(String temporaryPath, String serverName, String sentrySite)
- throws Exception {
- super(temporaryPath);
- this.serverName = serverName;
- this.sentrySite = sentrySite;
- // Random port
- this.port = NetworkUtils.findAvailablePort();
- this.ajpPort = NetworkUtils.findAvailablePort();
- }
-
- @Override
- public Map<String, String> getSecurityConfiguration() {
- Map<String, String> properties = new HashMap<String, String>();
- configureAuthentication(properties);
- configureSentryAuthorization(properties);
- return properties;
- }
-
- private void configureAuthentication(Map<String, String> properties) {
- /** Simple Authentication */
- properties.put("org.apache.sqoop.authentication.type", "SIMPLE");
- properties.put("org.apache.sqoop.authentication.handler",
- "org.apache.sqoop.security.SimpleAuthenticationHandler");
- }
-
- private void configureSentryAuthorization(Map<String, String> properties) {
- properties.put("org.apache.sqoop.security.authorization.handler",
- "org.apache.sentry.sqoop.authz.SentryAuthorizationHandler");
- properties.put("org.apache.sqoop.security.authorization.access_controller",
- "org.apache.sentry.sqoop.authz.SentryAccessController");
- properties.put("org.apache.sqoop.security.authorization.validator",
- "org.apache.sentry.sqoop.authz.SentryAuthorizationValidator");
- properties.put("org.apache.sqoop.security.authorization.server_name", serverName);
- properties.put("sentry.sqoop.site.url", sentrySite);
- /** set Sentry related jars into classpath */
- List<String> extraClassPath = new LinkedList<String>();
- for (String jar : System.getProperty("java.class.path").split(":")) {
- if ((jar.contains("sentry") || jar.contains("shiro-core") || jar.contains("libthrift"))
- && jar.endsWith("jar")) {
- extraClassPath.add(jar);
- }
- }
- properties.put("org.apache.sqoop.classpath.extra",Joiner.on(":").join(extraClassPath));
- }
-
- @Override
- public void start() throws Exception {
- // Container has already been started
- if (container != null) {
- return;
- }
- prepareTemporaryPath();
-
- // Source: http://cargo.codehaus.org/Functional+testing
- String tomcatPath = getTemporaryPath() + "/tomcat";
- String extractPath = tomcatPath + "/extract";
- String confPath = tomcatPath + "/conf";
-
- Installer installer = new ZipURLInstaller(new File(TOMCAT_PATH).toURI().toURL(), null, extractPath);
- installer.install();
-
- LocalConfiguration configuration = (LocalConfiguration) new DefaultConfigurationFactory()
- .createConfiguration("tomcat7x", ContainerType.INSTALLED, ConfigurationType.STANDALONE,
- confPath);
- container = (InstalledLocalContainer) new DefaultContainerFactory().createContainer("tomcat7x",
- ContainerType.INSTALLED, configuration);
-
- // Set home to our installed tomcat instance
- container.setHome(installer.getHome());
-
- // Store tomcat logs into file as they are quite handy for debugging
- container.setOutput(getTemporaryPath() + "/log/tomcat.log");
-
- // Propagate system properties to the container
- Map<String, String> map = new HashMap<String, String>((Map) System.getProperties());
- container.setSystemProperties(map);
-
- // Propagate Hadoop jars to the container classpath
- // In real world, they would be installed manually by user
- List<String> extraClassPath = new LinkedList<String>();
- String[] classpath = System.getProperty("java.class.path").split(":");
- for (String jar : classpath) {
- if (jar.contains("hadoop-") || // Hadoop jars
- jar.contains("hive-") || // Hive jars
- jar.contains("commons-") || // Apache Commons libraries
- jar.contains("httpcore-") || // Apache Http Core libraries
- jar.contains("httpclient-") || // Apache Http Client libraries
- jar.contains("htrace-") || // htrace-core libraries, new added in
- // Hadoop 2.6.0
- jar.contains("zookeeper-") || // zookeeper libraries, new added in
- // Hadoop 2.6.0
- jar.contains("curator-") || // curator libraries, new added in Hadoop
- // 2.6.0
- jar.contains("log4j-") || // Log4j
- jar.contains("slf4j-") || // Slf4j
- jar.contains("jackson-") || // Jackson
- jar.contains("derby") || // Derby drivers
- jar.contains("avro-") || // Avro
- jar.contains("parquet-") || // Parquet
- jar.contains("mysql") || // MySQL JDBC driver
- jar.contains("postgre") || // PostgreSQL JDBC driver
- jar.contains("oracle") || // Oracle driver
- jar.contains("terajdbc") || // Teradata driver
- jar.contains("tdgs") || // Teradata driver
- jar.contains("nzjdbc") || // Netezza driver
- jar.contains("sqljdbc") || // Microsoft SQL Server driver
- jar.contains("datanucleus-") || // Data nucleus libs
- jar.contains("google") // Google libraries (guava, ...)
- ) {
- extraClassPath.add(jar);
- }
- }
- container.setExtraClasspath(extraClassPath.toArray(new String[extraClassPath.size()]));
-
- // Finally deploy Sqoop server war file
- configuration.addDeployable(new WAR(WAR_PATH));
- configuration.setProperty(ServletPropertySet.PORT, port.toString());
- configuration.setProperty(TomcatPropertySet.AJP_PORT, ajpPort.toString());
- //configuration.setProperty(GeneralPropertySet.JVMARGS, "\"-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8006\"");
- LOG.info("Tomcat extract path: " + extractPath);
- LOG.info("Tomcat home path: " + installer.getHome());
- LOG.info("Tomcat config home path: " + confPath);
- LOG.info("Starting tomcat server on port " + port);
- container.start();
- }
-
- @Override
- public void stop() throws Exception {
- if (container != null) {
- container.stop();
- }
- }
-
- /**
- * Return server URL.
- */
- public String getServerUrl() {
- // We're not doing any changes, so return default URL
- return "http://localhost:" + port + "/sqoop/";
- }
- }
-}