SQOOP-3104: Create test categories instead of test suites and naming conventions

(Nguyen Truong via Szabolcs Vasas)
diff --git a/build.gradle b/build.gradle
index 2014b5c..cb9eeca 100644
--- a/build.gradle
+++ b/build.gradle
@@ -153,15 +153,30 @@
     testCompile group: 'org.apache.zookeeper', name: 'zookeeper', version: zookeeperVersion, ext: 'jar'
 }
 
-test {
-    include '**/Test*.*'
+task unitTest (type: Test) {
+    description 'Run unit tests'
+    useJUnit {
+        includeCategories 'org.apache.sqoop.testcategories.sqooptest.UnitTest'
+        excludeCategories 'org.apache.sqoop.testcategories.KerberizedTest'
+        excludeCategories 'org.apache.sqoop.testcategories.thirdpartytest.ThirdPartyTest'
+    }
 }
 
-task thirdPartyTest(type: Test) {
-    description 'Run ThirdParty tests - you need to specify -Dsqoop.thirdparty.lib.dir where the Third party driver jars reside (relative to the project directory)'
-    exclude '**/*ManualTest.*'
-    exclude '**/Test*.*'
-    include '**/*Test*.*'
+task allIntegrationTest (type: Test){
+    description 'Run all  integration tests'
+    useJUnit {
+        includeCategories 'org.apache.sqoop.testcategories.sqooptest.IntegrationTest'
+    }
+}
+
+task thirdPartyTest (type: Test) {
+    description 'Run Third-party Tests - you need to specify -Dsqoop.thirdparty.lib.dir where the Third party driver ' +
+            'jars reside (relative to the project directory)'
+    useJUnit {
+        includeCategories 'org.apache.sqoop.testcategories.thirdpartytest.ThirdPartyTest'
+        excludeCategories 'org.apache.sqoop.testcategories.sqooptest.ManualTest'
+        excludeCategories 'org.apache.sqoop.testcategories.KerberizedTest'
+    }
     systemProperty "ms.datatype.test.data.file.export" ,"DatatypeTestData-export-lite.txt"
     systemProperty "ms.datatype.test.data.file.import" ,"DatatypeTestData-import-lite.txt"
     systemProperty "ms.datatype.test.data.file.delim" ,","
@@ -170,9 +185,48 @@
 
 task manualTest(type: Test) {
     description 'Run manual tests'
-    include '**/*ManualTest.*'
+    useJUnit {
+        includeCategories 'org.apache.sqoop.testcategories.sqooptest.ManualTest'
+    }
 }
 
+task integrationPlainTest(type: Test) {
+    description 'Run integration tests which do not need a docker container or an external database'
+    useJUnit {
+        includeCategories 'org.apache.sqoop.testcategories.sqooptest.IntegrationTest'
+        excludeCategories 'org.apache.sqoop.testcategories.sqooptest.ManualTest'
+        excludeCategories 'org.apache.sqoop.testcategories.KerberizedTest'
+        excludeCategories 'org.apache.sqoop.testcategories.thirdpartytest.ThirdPartyTest'
+    }
+}
+
+task kerberizedTest (type: Test){
+    description 'Run Kerberized Test'
+    // A Gradle test task with forkEvery 1 and includeCategories performs poorly because it starts a new JVM even for the filtered tests.
+    // To work around this performance problem we need to add every kerberized test in a separate include field here.
+    include '**/TestKerberosAuthenticator*'
+    include '**/HBaseKerberizedConnectivityTest*'
+    include '**/TestHiveMiniCluster*'
+    include '**/TestHiveServer2TextImport*'
+    useJUnit {
+        includeCategories 'org.apache.sqoop.testcategories.KerberizedTest'
+    }
+    forkEvery 1
+}
+
+test {
+    description 'Run tests that do not need exteral JDBC driver and/or a docker container. ' +
+            'This includes integration plain tests and unit tests'
+    include ''
+}
+test.finalizedBy(integrationPlainTest, unitTest, kerberizedTest)
+
+task sqoopTest (type: Test){
+    description 'Run all Sqoop tests'
+    include ''
+}
+sqoopTest.finalizedBy(test, kerberizedTest, thirdPartyTest)
+
 def testBuildDir = "$buildDir/test/"
 def testBuildDirData ="$testBuildDir/data/"
 
@@ -201,7 +255,6 @@
     minHeapSize = "512m"
     maxHeapSize = "5120m"
     jvmArgs '-Xmx5012m', "-da:org.apache.hadoop.hive.thrift.HadoopThriftAuthBridge"
-    forkEvery 1
 
     dependsOn buildFolder
 
diff --git a/src/test/org/apache/sqoop/TestConnFactory.java b/src/test/org/apache/sqoop/TestConnFactory.java
index fb6c940..595a3c8 100644
--- a/src/test/org/apache/sqoop/TestConnFactory.java
+++ b/src/test/org/apache/sqoop/TestConnFactory.java
@@ -32,19 +32,21 @@
 import org.apache.sqoop.manager.ImportJobContext;
 import org.apache.sqoop.manager.ManagerFactory;
 import org.apache.sqoop.metastore.JobData;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.tool.ImportTool;
 import org.junit.Test;
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import org.junit.Rule;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 /**
  * Test the ConnFactory implementation and its ability to delegate to multiple
  * different ManagerFactory implementations using reflection.
  */
-
+@Category(UnitTest.class)
 public class TestConnFactory {
 
   @Rule
diff --git a/src/test/org/apache/sqoop/TestIncrementalImport.java b/src/test/org/apache/sqoop/TestIncrementalImport.java
index 29c4779..dbdd05c 100644
--- a/src/test/org/apache/sqoop/TestIncrementalImport.java
+++ b/src/test/org/apache/sqoop/TestIncrementalImport.java
@@ -45,6 +45,7 @@
 import org.apache.sqoop.manager.HsqldbManager;
 import org.apache.sqoop.manager.ManagerFactory;
 import org.apache.sqoop.metastore.JobData;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
 import org.apache.sqoop.testutil.BaseSqoopTestCase;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.tool.ImportTool;
@@ -53,6 +54,7 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 
@@ -65,7 +67,7 @@
  * The metastore URL is configured to be in-memory, and drop all
  * state between individual tests.
  */
-
+@Category(IntegrationTest.class)
 public class TestIncrementalImport  {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/TestSqoopOptions.java b/src/test/org/apache/sqoop/TestSqoopOptions.java
index e55682e..39d2d7c 100644
--- a/src/test/org/apache/sqoop/TestSqoopOptions.java
+++ b/src/test/org/apache/sqoop/TestSqoopOptions.java
@@ -33,6 +33,7 @@
 
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.sqoop.manager.oracle.OracleUtils;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.After;
 import org.apache.commons.lang3.reflect.FieldUtils;
 import org.apache.sqoop.tool.ImportAllTablesTool;
@@ -42,6 +43,7 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 import org.apache.sqoop.SqoopOptions;
@@ -63,6 +65,7 @@
 /**
  * Test aspects of the SqoopOptions class.
  */
+@Category(UnitTest.class)
 public class TestSqoopOptions {
 
   private Properties originalSystemProperties;
diff --git a/src/test/org/apache/sqoop/accumulo/TestAccumuloUtil.java b/src/test/org/apache/sqoop/accumulo/TestAccumuloUtil.java
index 631eeff..95657f9 100644
--- a/src/test/org/apache/sqoop/accumulo/TestAccumuloUtil.java
+++ b/src/test/org/apache/sqoop/accumulo/TestAccumuloUtil.java
@@ -18,7 +18,9 @@
 
 package org.apache.sqoop.accumulo;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -28,6 +30,7 @@
  * test cases) and that when in fake not present mode, the method returns
  * false.
  */
+@Category(UnitTest.class)
 public class TestAccumuloUtil {
 
   @Test
diff --git a/src/test/org/apache/sqoop/authentication/TestKerberosAuthenticator.java b/src/test/org/apache/sqoop/authentication/TestKerberosAuthenticator.java
index f5700ce..47f905e 100644
--- a/src/test/org/apache/sqoop/authentication/TestKerberosAuthenticator.java
+++ b/src/test/org/apache/sqoop/authentication/TestKerberosAuthenticator.java
@@ -22,9 +22,12 @@
 import org.apache.hadoop.fs.CommonConfigurationKeys;
 import org.apache.hadoop.security.UserGroupInformation;
 import org.apache.sqoop.infrastructure.kerberos.MiniKdcInfrastructureRule;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
+import org.apache.sqoop.testcategories.KerberizedTest;
 import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 import static org.apache.hadoop.security.UserGroupInformation.AuthenticationMethod.KERBEROS;
@@ -32,6 +35,7 @@
 import static org.junit.Assert.assertNotSame;
 import static org.junit.Assert.assertSame;
 
+@Category({KerberizedTest.class, IntegrationTest.class})
 public class TestKerberosAuthenticator {
 
   private static final String KERBEROS_RULE_TEMPLATE = "RULE:[2:$1@$0](.*@%s)s/@%s//";
diff --git a/src/test/org/apache/sqoop/db/TestDriverManagerJdbcConnectionFactory.java b/src/test/org/apache/sqoop/db/TestDriverManagerJdbcConnectionFactory.java
index 2448316..102e27c 100644
--- a/src/test/org/apache/sqoop/db/TestDriverManagerJdbcConnectionFactory.java
+++ b/src/test/org/apache/sqoop/db/TestDriverManagerJdbcConnectionFactory.java
@@ -18,17 +18,20 @@
 
 package org.apache.sqoop.db;
 
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
 import org.apache.sqoop.testutil.HsqldbTestServer;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 import java.sql.Connection;
 
 import static org.junit.Assert.assertFalse;
 
+@Category(IntegrationTest.class)
 public class TestDriverManagerJdbcConnectionFactory {
 
   private static final String HSQLDB_DRIVER_CLASS = "org.hsqldb.jdbcDriver";
diff --git a/src/test/org/apache/sqoop/db/decorator/TestKerberizedConnectionFactoryDecorator.java b/src/test/org/apache/sqoop/db/decorator/TestKerberizedConnectionFactoryDecorator.java
index d3e3fb2..8206d14 100644
--- a/src/test/org/apache/sqoop/db/decorator/TestKerberizedConnectionFactoryDecorator.java
+++ b/src/test/org/apache/sqoop/db/decorator/TestKerberizedConnectionFactoryDecorator.java
@@ -21,9 +21,11 @@
 import org.apache.hadoop.security.UserGroupInformation;
 import org.apache.sqoop.authentication.KerberosAuthenticator;
 import org.apache.sqoop.db.JdbcConnectionFactory;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
@@ -37,6 +39,7 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+@Category(UnitTest.class)
 public class TestKerberizedConnectionFactoryDecorator {
 
   private KerberizedConnectionFactoryDecorator kerberizedConnectionFactoryDecorator;
diff --git a/src/test/org/apache/sqoop/hbase/HBaseImportAddRowKeyTest.java b/src/test/org/apache/sqoop/hbase/HBaseImportAddRowKeyTest.java
index c4caafb..df1840b 100644
--- a/src/test/org/apache/sqoop/hbase/HBaseImportAddRowKeyTest.java
+++ b/src/test/org/apache/sqoop/hbase/HBaseImportAddRowKeyTest.java
@@ -19,6 +19,7 @@
 package org.apache.sqoop.hbase;
 
 import org.apache.commons.lang.StringUtils;
+import org.apache.sqoop.util.BlockJUnit4ClassRunnerWithParametersFactory;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -33,6 +34,7 @@
 import static org.apache.commons.lang.StringUtils.join;
 
 @RunWith(Parameterized.class)
+@Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class)
 public class HBaseImportAddRowKeyTest extends HBaseTestCase {
 
   @Parameterized.Parameters(name = "bulkLoad = {0}")
diff --git a/src/test/org/apache/sqoop/hbase/HBaseKerberizedConnectivityTest.java b/src/test/org/apache/sqoop/hbase/HBaseKerberizedConnectivityTest.java
index 3bfb391..07b4b54 100644
--- a/src/test/org/apache/sqoop/hbase/HBaseKerberizedConnectivityTest.java
+++ b/src/test/org/apache/sqoop/hbase/HBaseKerberizedConnectivityTest.java
@@ -19,11 +19,14 @@
 package org.apache.sqoop.hbase;
 
 import org.apache.sqoop.infrastructure.kerberos.MiniKdcInfrastructureRule;
+import org.apache.sqoop.testcategories.KerberizedTest;
 import org.junit.ClassRule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.io.IOException;
 
+@Category(KerberizedTest.class)
 public class HBaseKerberizedConnectivityTest extends HBaseTestCase {
 
   private static final String HBASE_TABLE_NAME = "KerberosTest";
diff --git a/src/test/org/apache/sqoop/hbase/HBaseTestCase.java b/src/test/org/apache/sqoop/hbase/HBaseTestCase.java
index 94b71b6..036f79e 100644
--- a/src/test/org/apache/sqoop/hbase/HBaseTestCase.java
+++ b/src/test/org/apache/sqoop/hbase/HBaseTestCase.java
@@ -181,7 +181,7 @@
       // We set the port for the hbase master and regionserver web UI to -1 because we do not want the info server to run.
       hbaseTestUtil.getConfiguration().set(MASTER_INFO_PORT, INFO_PORT_DISABLE_WEB_UI);
       hbaseTestUtil.getConfiguration().set(REGIONSERVER_INFO_PORT, INFO_PORT_DISABLE_WEB_UI);
-
+      hbaseTestUtil.getConfiguration().set("fs.file.impl.disable.cache", "true");
       setupKerberos();
 
       hbaseTestUtil.startMiniCluster();
diff --git a/src/test/org/apache/sqoop/hbase/HBaseUtilTest.java b/src/test/org/apache/sqoop/hbase/HBaseUtilTest.java
index c6a808c..aa9e8e1 100644
--- a/src/test/org/apache/sqoop/hbase/HBaseUtilTest.java
+++ b/src/test/org/apache/sqoop/hbase/HBaseUtilTest.java
@@ -18,7 +18,9 @@
 
 package org.apache.sqoop.hbase;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -28,6 +30,7 @@
  * This tests to verify that HBase is present (default when running test cases)
  * and that when in fake not present mode, the method return false.
  */
+@Category(UnitTest.class)
 public class HBaseUtilTest {
 
   @Test
diff --git a/src/test/org/apache/sqoop/hbase/TestHBasePutProcessor.java b/src/test/org/apache/sqoop/hbase/TestHBasePutProcessor.java
index e78a535..37e0f07 100644
--- a/src/test/org/apache/sqoop/hbase/TestHBasePutProcessor.java
+++ b/src/test/org/apache/sqoop/hbase/TestHBasePutProcessor.java
@@ -24,10 +24,12 @@
 import org.apache.hadoop.hbase.client.Delete;
 import org.apache.hadoop.hbase.client.Mutation;
 import org.apache.hadoop.hbase.client.Put;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.util.ExpectedLogMessage;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.util.Arrays;
 import java.util.List;
@@ -39,6 +41,7 @@
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
+@Category(UnitTest.class)
 public class TestHBasePutProcessor {
 
   @Rule
diff --git a/src/test/org/apache/sqoop/hcat/TestHCatalogBasic.java b/src/test/org/apache/sqoop/hcat/TestHCatalogBasic.java
index ba05cab..d3ab89d 100644
--- a/src/test/org/apache/sqoop/hcat/TestHCatalogBasic.java
+++ b/src/test/org/apache/sqoop/hcat/TestHCatalogBasic.java
@@ -18,6 +18,7 @@
 
 package org.apache.sqoop.hcat;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 
 import org.apache.sqoop.SqoopOptions;
@@ -27,11 +28,13 @@
 import org.junit.Test;
 
 import org.junit.Rule;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 /**
  * Test basic HCatalog related features.
  */
+@Category(UnitTest.class)
 public class TestHCatalogBasic {
 
   private static ImportTool importTool;
diff --git a/src/test/org/apache/sqoop/hive/HiveServer2ConnectionFactoryInitializerTest.java b/src/test/org/apache/sqoop/hive/HiveServer2ConnectionFactoryInitializerTest.java
index 4d2cb2f..544659d 100644
--- a/src/test/org/apache/sqoop/hive/HiveServer2ConnectionFactoryInitializerTest.java
+++ b/src/test/org/apache/sqoop/hive/HiveServer2ConnectionFactoryInitializerTest.java
@@ -23,9 +23,11 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.db.JdbcConnectionFactory;
 import org.apache.sqoop.db.decorator.KerberizedConnectionFactoryDecorator;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.assertj.core.api.SoftAssertions;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.junit.Assert.assertThat;
@@ -33,6 +35,7 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+@Category(UnitTest.class)
 public class HiveServer2ConnectionFactoryInitializerTest {
 
   private static final String TEST_HS2_URL = "jdbc:hive2://myhost:10000/default";
diff --git a/src/test/org/apache/sqoop/hive/TestHiveClientFactory.java b/src/test/org/apache/sqoop/hive/TestHiveClientFactory.java
index a3c2dc9..b095663 100644
--- a/src/test/org/apache/sqoop/hive/TestHiveClientFactory.java
+++ b/src/test/org/apache/sqoop/hive/TestHiveClientFactory.java
@@ -22,15 +22,18 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.db.JdbcConnectionFactory;
 import org.apache.sqoop.manager.ConnManager;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.assertj.core.api.SoftAssertions;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+@Category(UnitTest.class)
 public class TestHiveClientFactory {
 
   private static final String TEST_HS2_URL = "jdbc:hive2://myhost:10000/default";
diff --git a/src/test/org/apache/sqoop/hive/TestHiveMiniCluster.java b/src/test/org/apache/sqoop/hive/TestHiveMiniCluster.java
index 419f888..089b81b 100644
--- a/src/test/org/apache/sqoop/hive/TestHiveMiniCluster.java
+++ b/src/test/org/apache/sqoop/hive/TestHiveMiniCluster.java
@@ -27,10 +27,14 @@
 import org.apache.sqoop.hive.minicluster.NoAuthenticationConfiguration;
 import org.apache.sqoop.hive.minicluster.PasswordAuthenticationConfiguration;
 import org.apache.sqoop.infrastructure.kerberos.MiniKdcInfrastructureRule;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
+import org.apache.sqoop.testcategories.KerberizedTest;
+import org.apache.sqoop.util.BlockJUnit4ClassRunnerWithParametersFactory;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
@@ -43,7 +47,9 @@
 
 import static org.junit.Assert.assertEquals;
 
+@Category({KerberizedTest.class, IntegrationTest.class})
 @RunWith(Parameterized.class)
+@Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class)
 public class TestHiveMiniCluster {
 
   @ClassRule
diff --git a/src/test/org/apache/sqoop/hive/TestHiveServer2Client.java b/src/test/org/apache/sqoop/hive/TestHiveServer2Client.java
index 0261729..d2a4a17 100644
--- a/src/test/org/apache/sqoop/hive/TestHiveServer2Client.java
+++ b/src/test/org/apache/sqoop/hive/TestHiveServer2Client.java
@@ -22,9 +22,11 @@
 import org.apache.hadoop.fs.Path;
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.db.JdbcConnectionFactory;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 import org.mockito.InOrder;
 import org.mockito.Mockito;
@@ -46,6 +48,7 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+@Category(UnitTest.class)
 public class TestHiveServer2Client {
 
   @Rule
diff --git a/src/test/org/apache/sqoop/hive/TestHiveServer2ParquetImport.java b/src/test/org/apache/sqoop/hive/TestHiveServer2ParquetImport.java
index 65f0794..8cfd776 100644
--- a/src/test/org/apache/sqoop/hive/TestHiveServer2ParquetImport.java
+++ b/src/test/org/apache/sqoop/hive/TestHiveServer2ParquetImport.java
@@ -23,15 +23,18 @@
 import org.apache.hadoop.fs.Path;
 import org.apache.sqoop.hive.minicluster.HiveMiniCluster;
 import org.apache.sqoop.hive.minicluster.NoAuthenticationConfiguration;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
 import org.apache.sqoop.testutil.ArgumentArrayBuilder;
 import org.apache.sqoop.testutil.HiveServer2TestUtil;
 import org.apache.sqoop.testutil.ImportJobTestCase;
+import org.apache.sqoop.util.BlockJUnit4ClassRunnerWithParametersFactory;
 import org.apache.sqoop.util.ParquetReader;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.experimental.runners.Enclosed;
 import org.junit.rules.ExpectedException;
 import org.junit.runner.RunWith;
@@ -52,6 +55,7 @@
 import static org.junit.Assert.assertTrue;
 
 @RunWith(Enclosed.class)
+@Category(IntegrationTest.class)
 public class TestHiveServer2ParquetImport {
 
   private static final String[] TEST_COLUMN_NAMES = {"C1_VARCHAR", "C2#INTEGER", "3C_CHAR"};
@@ -75,6 +79,7 @@
   private static HiveServer2TestUtil hiveServer2TestUtil;
 
   @RunWith(Parameterized.class)
+  @Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class)
   public static class ParquetCompressionCodecTestCase extends ImportJobTestCase {
 
     @Parameters(name = "compressionCodec = {0}")
diff --git a/src/test/org/apache/sqoop/hive/TestHiveServer2TextImport.java b/src/test/org/apache/sqoop/hive/TestHiveServer2TextImport.java
index 410724f..e0dd101 100644
--- a/src/test/org/apache/sqoop/hive/TestHiveServer2TextImport.java
+++ b/src/test/org/apache/sqoop/hive/TestHiveServer2TextImport.java
@@ -22,6 +22,7 @@
 import org.apache.sqoop.hive.minicluster.HiveMiniCluster;
 import org.apache.sqoop.hive.minicluster.KerberosAuthenticationConfiguration;
 import org.apache.sqoop.infrastructure.kerberos.MiniKdcInfrastructureRule;
+import org.apache.sqoop.testcategories.KerberizedTest;
 import org.apache.sqoop.testutil.ArgumentArrayBuilder;
 import org.apache.sqoop.testutil.HiveServer2TestUtil;
 import org.apache.sqoop.testutil.ImportJobTestCase;
@@ -29,12 +30,14 @@
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.util.Arrays;
 import java.util.List;
 
 import static org.junit.Assert.assertEquals;
 
+@Category(KerberizedTest.class)
 public class TestHiveServer2TextImport extends ImportJobTestCase {
 
   @ClassRule
diff --git a/src/test/org/apache/sqoop/hive/TestHiveTypesForAvroTypeMapping.java b/src/test/org/apache/sqoop/hive/TestHiveTypesForAvroTypeMapping.java
index 276e9ea..1b65267 100644
--- a/src/test/org/apache/sqoop/hive/TestHiveTypesForAvroTypeMapping.java
+++ b/src/test/org/apache/sqoop/hive/TestHiveTypesForAvroTypeMapping.java
@@ -19,7 +19,10 @@
 package org.apache.sqoop.hive;
 
 import org.apache.avro.Schema;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
+import org.apache.sqoop.util.BlockJUnit4ClassRunnerWithParametersFactory;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
@@ -29,7 +32,9 @@
 import static org.apache.sqoop.hive.HiveTypes.toHiveType;
 import static org.junit.Assert.*;
 
+@Category(UnitTest.class)
 @RunWith(Parameterized.class)
+@Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class)
 public class TestHiveTypesForAvroTypeMapping {
 
   private final String hiveType;
diff --git a/src/test/org/apache/sqoop/hive/TestTableDefWriter.java b/src/test/org/apache/sqoop/hive/TestTableDefWriter.java
index 626ad22..b89ab0d 100644
--- a/src/test/org/apache/sqoop/hive/TestTableDefWriter.java
+++ b/src/test/org/apache/sqoop/hive/TestTableDefWriter.java
@@ -24,6 +24,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.sqoop.manager.ConnManager;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.util.SqlTypeMap;
 
 import org.apache.sqoop.SqoopOptions;
@@ -32,6 +33,7 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 import java.sql.Types;
@@ -51,6 +53,7 @@
 /**
  * Test Hive DDL statement generation.
  */
+@Category(UnitTest.class)
 public class TestTableDefWriter {
 
   private static final String TEST_AVRO_SCHEMA = "{\"type\":\"record\",\"name\":\"IMPORT_TABLE_1\",\"fields\":[{\"name\":\"C1_VARCHAR\",\"type\":[\"null\",\"string\"]},{\"name\":\"C2_INTEGER\",\"type\":[\"null\",\"int\"]},{\"name\":\"_3C_CHAR\",\"type\":[\"null\",\"string\"]}]}";
diff --git a/src/test/org/apache/sqoop/hive/TestTableDefWriterForExternalTable.java b/src/test/org/apache/sqoop/hive/TestTableDefWriterForExternalTable.java
index f1768ee..978432c 100644
--- a/src/test/org/apache/sqoop/hive/TestTableDefWriterForExternalTable.java
+++ b/src/test/org/apache/sqoop/hive/TestTableDefWriterForExternalTable.java
@@ -25,14 +25,17 @@
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.mockito.Mockito;
 
 import java.sql.*;
 import java.util.HashMap;
 import java.io.IOException;
 
+@Category(UnitTest.class)
 public class TestTableDefWriterForExternalTable {
   static String inputTableName = "genres";
   static String outputTableName = "genres";
diff --git a/src/test/org/apache/sqoop/importjob/NumericTypesImportTest.java b/src/test/org/apache/sqoop/importjob/NumericTypesImportTest.java
index 0714441..af310cb 100644
--- a/src/test/org/apache/sqoop/importjob/NumericTypesImportTest.java
+++ b/src/test/org/apache/sqoop/importjob/NumericTypesImportTest.java
@@ -31,6 +31,7 @@
 import org.apache.sqoop.importjob.configuration.OracleImportJobTestConfiguration;
 import org.apache.sqoop.importjob.configuration.ParquetTestConfiguration;
 import org.apache.sqoop.importjob.configuration.PostgresqlImportJobTestConfigurationForNumeric;
+import org.apache.sqoop.testcategories.thirdpartytest.ThirdPartyTest;
 import org.apache.sqoop.testutil.ArgumentArrayBuilder;
 import org.apache.sqoop.testutil.AvroTestUtils;
 import org.apache.sqoop.testutil.ImportJobTestCase;
@@ -42,10 +43,12 @@
 import org.apache.sqoop.importjob.configuration.OracleImportJobTestConfigurationForNumber;
 import org.apache.sqoop.importjob.configuration.PostgresqlImportJobTestConfigurationPaddingShouldSucceed;
 import org.apache.sqoop.util.ParquetReader;
+import org.apache.sqoop.util.BlockJUnit4ClassRunnerWithParametersFactory;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -61,6 +64,8 @@
 import static org.apache.sqoop.SqoopOptions.FileLayout.ParquetFile;
 
 @RunWith(Parameterized.class)
+@Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class)
+@Category(ThirdPartyTest.class)
 /**
  * This test covers the behavior of the Avro import for fixed point decimal types, i.e. NUMBER, NUMERIC
  * and DECIMAL.
diff --git a/src/test/org/apache/sqoop/io/TestCodecMap.java b/src/test/org/apache/sqoop/io/TestCodecMap.java
index e719218..7a30a06 100644
--- a/src/test/org/apache/sqoop/io/TestCodecMap.java
+++ b/src/test/org/apache/sqoop/io/TestCodecMap.java
@@ -24,6 +24,7 @@
 import org.apache.hadoop.io.compress.CompressionCodec;
 import org.apache.hadoop.io.compress.GzipCodec;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
@@ -31,11 +32,13 @@
 
 import org.junit.Rule;
 
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 /**
  * Test looking up codecs by name.
  */
+@Category(UnitTest.class)
 public class TestCodecMap  {
 
 
diff --git a/src/test/org/apache/sqoop/io/TestLobFile.java b/src/test/org/apache/sqoop/io/TestLobFile.java
index 2bc95f2..bd9d510 100644
--- a/src/test/org/apache/sqoop/io/TestLobFile.java
+++ b/src/test/org/apache/sqoop/io/TestLobFile.java
@@ -36,6 +36,7 @@
 import org.apache.hadoop.fs.FSDataOutputStream;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 
 import org.junit.Test;
@@ -51,11 +52,13 @@
 import static org.mockito.Mockito.withSettings;
 
 import org.junit.Rule;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 /**
  * Test the LobFile reader/writer implementation.
  */
+@Category(UnitTest.class)
 public class TestLobFile {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/io/TestNamedFifo.java b/src/test/org/apache/sqoop/io/TestNamedFifo.java
index a93784e..6cbefdb 100644
--- a/src/test/org/apache/sqoop/io/TestNamedFifo.java
+++ b/src/test/org/apache/sqoop/io/TestNamedFifo.java
@@ -35,8 +35,10 @@
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.util.Shell;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
@@ -44,6 +46,7 @@
 /**
  * Test the named fifo utility.
  */
+@Category(UnitTest.class)
 public class TestNamedFifo {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/io/TestSplittableBufferedWriter.java b/src/test/org/apache/sqoop/io/TestSplittableBufferedWriter.java
index c59aa26..71d6971 100644
--- a/src/test/org/apache/sqoop/io/TestSplittableBufferedWriter.java
+++ b/src/test/org/apache/sqoop/io/TestSplittableBufferedWriter.java
@@ -35,10 +35,12 @@
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.io.compress.GzipCodec;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -50,6 +52,7 @@
 /**
  * Test that the splittable buffered writer system works.
  */
+@Category(UnitTest.class)
 public class TestSplittableBufferedWriter {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/lib/TestBlobRef.java b/src/test/org/apache/sqoop/lib/TestBlobRef.java
index b271d3c..74aa205 100644
--- a/src/test/org/apache/sqoop/lib/TestBlobRef.java
+++ b/src/test/org/apache/sqoop/lib/TestBlobRef.java
@@ -20,6 +20,7 @@
 
 import java.io.*;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.testutil.BaseSqoopTestCase;
 import org.apache.sqoop.testutil.CommonArgs;
 
@@ -28,6 +29,7 @@
 import org.apache.hadoop.fs.Path;
 import org.apache.sqoop.io.LobFile;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -39,6 +41,7 @@
  * Note that we don't support inline parsing here; we only expect this to
  * really work for external BLOBs.
  */
+@Category(UnitTest.class)
 public class TestBlobRef {
 
   @Test
diff --git a/src/test/org/apache/sqoop/lib/TestBooleanParser.java b/src/test/org/apache/sqoop/lib/TestBooleanParser.java
index 914ab37..9f95c9d 100644
--- a/src/test/org/apache/sqoop/lib/TestBooleanParser.java
+++ b/src/test/org/apache/sqoop/lib/TestBooleanParser.java
@@ -19,7 +19,9 @@
 package org.apache.sqoop.lib;
 
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -27,6 +29,7 @@
 /**
  * Test the boolean parser.
  */
+@Category(UnitTest.class)
 public class TestBooleanParser {
 
   @Test
diff --git a/src/test/org/apache/sqoop/lib/TestClobRef.java b/src/test/org/apache/sqoop/lib/TestClobRef.java
index f94d1a8..d65c36f 100644
--- a/src/test/org/apache/sqoop/lib/TestClobRef.java
+++ b/src/test/org/apache/sqoop/lib/TestClobRef.java
@@ -20,6 +20,7 @@
 
 import java.io.*;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.testutil.BaseSqoopTestCase;
 import org.apache.sqoop.testutil.CommonArgs;
 
@@ -28,6 +29,7 @@
 import org.apache.hadoop.fs.Path;
 import org.apache.sqoop.io.LobFile;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -37,6 +39,7 @@
 /**
  * Test parsing of ClobRef objects.
  */
+@Category(UnitTest.class)
 public class TestClobRef {
 
   @Test
diff --git a/src/test/org/apache/sqoop/lib/TestFieldFormatter.java b/src/test/org/apache/sqoop/lib/TestFieldFormatter.java
index 9ac55e7..c7ffb10 100644
--- a/src/test/org/apache/sqoop/lib/TestFieldFormatter.java
+++ b/src/test/org/apache/sqoop/lib/TestFieldFormatter.java
@@ -18,7 +18,9 @@
 
 package org.apache.sqoop.lib;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
@@ -27,6 +29,7 @@
 /**
  * Test that the field formatter works in a variety of configurations.
  */
+@Category(UnitTest.class)
 public class TestFieldFormatter {
 
   @Test
diff --git a/src/test/org/apache/sqoop/lib/TestLargeObjectLoader.java b/src/test/org/apache/sqoop/lib/TestLargeObjectLoader.java
index 1e07d71..c5aabcc 100644
--- a/src/test/org/apache/sqoop/lib/TestLargeObjectLoader.java
+++ b/src/test/org/apache/sqoop/lib/TestLargeObjectLoader.java
@@ -24,6 +24,7 @@
 import java.sql.ResultSet;
 import java.sql.SQLException;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.testutil.BaseSqoopTestCase;
 import org.apache.sqoop.testutil.CommonArgs;
 
@@ -33,6 +34,7 @@
 import org.apache.sqoop.testutil.MockResultSet;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -42,6 +44,7 @@
 /**
  * Test deserialization of ClobRef and BlobRef fields.
  */
+@Category(UnitTest.class)
 public class TestLargeObjectLoader {
 
   protected Configuration conf;
diff --git a/src/test/org/apache/sqoop/lib/TestRecordParser.java b/src/test/org/apache/sqoop/lib/TestRecordParser.java
index d6844c1..dd8619a 100644
--- a/src/test/org/apache/sqoop/lib/TestRecordParser.java
+++ b/src/test/org/apache/sqoop/lib/TestRecordParser.java
@@ -21,8 +21,10 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 import static org.junit.Assert.fail;
@@ -31,6 +33,7 @@
 /**
  * Test that the record parser works in a variety of configurations.
  */
+@Category(UnitTest.class)
 public class TestRecordParser {
 
   @Rule
diff --git a/src/test/org/apache/sqoop/manager/TestDefaultManagerFactory.java b/src/test/org/apache/sqoop/manager/TestDefaultManagerFactory.java
index 8e16324..0f5d75e 100644
--- a/src/test/org/apache/sqoop/manager/TestDefaultManagerFactory.java
+++ b/src/test/org/apache/sqoop/manager/TestDefaultManagerFactory.java
@@ -22,7 +22,9 @@
 import org.apache.sqoop.metastore.JobData;
 import org.apache.commons.lang.RandomStringUtils;
 import org.apache.hadoop.conf.Configuration;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.hamcrest.core.IsInstanceOf.instanceOf;
 import static org.junit.Assert.assertThat;
@@ -32,7 +34,7 @@
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
-
+@Category(UnitTest.class)
 public class TestDefaultManagerFactory {
 
     DefaultManagerFactory mf = new DefaultManagerFactory();
diff --git a/src/test/org/apache/sqoop/manager/TestSqlManager.java b/src/test/org/apache/sqoop/manager/TestSqlManager.java
index 185f5a7..6bb5479 100644
--- a/src/test/org/apache/sqoop/manager/TestSqlManager.java
+++ b/src/test/org/apache/sqoop/manager/TestSqlManager.java
@@ -29,11 +29,13 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
 import org.apache.sqoop.testutil.HsqldbTestServer;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -44,6 +46,7 @@
 /**
  * Test methods of the generic SqlManager implementation.
  */
+@Category(IntegrationTest.class)
 public class TestSqlManager {
 
   public static final Log LOG = LogFactory.getLog(TestSqlManager.class.getName());
diff --git a/src/test/org/apache/sqoop/manager/cubrid/CubridAuthTest.java b/src/test/org/apache/sqoop/manager/cubrid/CubridAuthTest.java
index 82fac12..c19385b 100644
--- a/src/test/org/apache/sqoop/manager/cubrid/CubridAuthTest.java
+++ b/src/test/org/apache/sqoop/manager/cubrid/CubridAuthTest.java
@@ -28,6 +28,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.sqoop.manager.CubridManager;
+import org.apache.sqoop.testcategories.thirdpartytest.CubridTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -35,6 +36,7 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.manager.ConnManager;
 import org.apache.sqoop.testutil.ImportJobTestCase;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
@@ -62,6 +64,7 @@
  *   $csql -u dba SQOOPCUBRIDTEST
  *   csql>CREATE USER SQOOPUSER password 'PASSWORD';
  */
+@Category(CubridTest.class)
 public class CubridAuthTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(CubridAuthTest.class
diff --git a/src/test/org/apache/sqoop/manager/cubrid/CubridCompatTest.java b/src/test/org/apache/sqoop/manager/cubrid/CubridCompatTest.java
index 8a075e8..e47f8d1 100644
--- a/src/test/org/apache/sqoop/manager/cubrid/CubridCompatTest.java
+++ b/src/test/org/apache/sqoop/manager/cubrid/CubridCompatTest.java
@@ -28,7 +28,9 @@
 import org.apache.hadoop.conf.Configuration;
 
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.thirdpartytest.CubridTest;
 import org.apache.sqoop.testutil.ManagerCompatTestCase;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test the basic Cubrid connection manager with the various column types.
@@ -53,6 +55,7 @@
  *   $csql -u dba SQOOPCUBRIDTEST
  *   csql>CREATE USER SQOOPUSER password 'PASSWORD';
  */
+@Category(CubridTest.class)
 public class CubridCompatTest extends ManagerCompatTestCase {
 
   public static final Log LOG = LogFactory.getLog(CubridCompatTest.class
diff --git a/src/test/org/apache/sqoop/manager/cubrid/CubridManagerExportTest.java b/src/test/org/apache/sqoop/manager/cubrid/CubridManagerExportTest.java
index 4de8e40..aaacfe8 100644
--- a/src/test/org/apache/sqoop/manager/cubrid/CubridManagerExportTest.java
+++ b/src/test/org/apache/sqoop/manager/cubrid/CubridManagerExportTest.java
@@ -32,12 +32,14 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.util.StringUtils;
 import org.apache.sqoop.manager.CubridManager;
+import org.apache.sqoop.testcategories.thirdpartytest.CubridTest;
 import org.junit.After;
 import org.junit.Before;
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.TestExport;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -67,6 +69,7 @@
  *   $csql -u dba SQOOPCUBRIDTEST
  *   csql>CREATE USER SQOOPUSER password 'PASSWORD';
  */
+@Category(CubridTest.class)
 public class CubridManagerExportTest extends TestExport {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/cubrid/CubridManagerImportTest.java b/src/test/org/apache/sqoop/manager/cubrid/CubridManagerImportTest.java
index addf1ae..88230e9 100644
--- a/src/test/org/apache/sqoop/manager/cubrid/CubridManagerImportTest.java
+++ b/src/test/org/apache/sqoop/manager/cubrid/CubridManagerImportTest.java
@@ -36,6 +36,7 @@
 import org.apache.hadoop.io.IOUtils;
 import org.apache.sqoop.manager.ConnManager;
 import org.apache.sqoop.manager.CubridManager;
+import org.apache.sqoop.testcategories.thirdpartytest.CubridTest;
 import org.apache.sqoop.util.FileListing;
 
 import org.junit.After;
@@ -45,6 +46,7 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -75,6 +77,7 @@
  *   $csql -u dba SQOOPCUBRIDTEST
  *   csql>CREATE USER SQOOPUSER password 'PASSWORD';
  */
+@Category(CubridTest.class)
 public class CubridManagerImportTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/db2/DB2ImportAllTableWithSchemaManualTest.java b/src/test/org/apache/sqoop/manager/db2/DB2ImportAllTableWithSchemaManualTest.java
index d1a6d69..ed949b9 100644
--- a/src/test/org/apache/sqoop/manager/db2/DB2ImportAllTableWithSchemaManualTest.java
+++ b/src/test/org/apache/sqoop/manager/db2/DB2ImportAllTableWithSchemaManualTest.java
@@ -34,6 +34,8 @@
 import org.apache.hadoop.io.IOUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.sqoop.manager.Db2Manager;
+import org.apache.sqoop.testcategories.thirdpartytest.Db2Test;
+import org.apache.sqoop.testcategories.sqooptest.ManualTest;
 import org.apache.sqoop.tool.ImportAllTablesTool;
 import org.apache.sqoop.Sqoop;
 import org.junit.After;
@@ -47,6 +49,7 @@
 import org.apache.sqoop.tool.SqoopTool;
 import org.apache.sqoop.util.FileListing;
 import org.apache.sqoop.util.LoggingUtils;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -72,6 +75,7 @@
  *   Create a login SQOOP with password PASSWORD and grant all
  *   access for database SQOOP to user SQOOP.
  */
+@Category({ManualTest.class, Db2Test.class})
 public class DB2ImportAllTableWithSchemaManualTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/db2/DB2ManagerImportManualTest.java b/src/test/org/apache/sqoop/manager/db2/DB2ManagerImportManualTest.java
index b5d47f2..32dfc5e 100644
--- a/src/test/org/apache/sqoop/manager/db2/DB2ManagerImportManualTest.java
+++ b/src/test/org/apache/sqoop/manager/db2/DB2ManagerImportManualTest.java
@@ -32,6 +32,8 @@
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.io.IOUtils;
 import org.apache.sqoop.manager.Db2Manager;
+import org.apache.sqoop.testcategories.thirdpartytest.Db2Test;
+import org.apache.sqoop.testcategories.sqooptest.ManualTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -40,6 +42,7 @@
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.util.FileListing;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -65,6 +68,7 @@
  *   Create a login SQOOP with password PASSWORD and grant all
  *   access for database SQOOP to user SQOOP.
  */
+@Category({ManualTest.class, Db2Test.class})
 public class DB2ManagerImportManualTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/db2/DB2XmlTypeImportManualTest.java b/src/test/org/apache/sqoop/manager/db2/DB2XmlTypeImportManualTest.java
index 393a110..494c75b 100644
--- a/src/test/org/apache/sqoop/manager/db2/DB2XmlTypeImportManualTest.java
+++ b/src/test/org/apache/sqoop/manager/db2/DB2XmlTypeImportManualTest.java
@@ -32,6 +32,8 @@
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.io.IOUtils;
 import org.apache.sqoop.manager.Db2Manager;
+import org.apache.sqoop.testcategories.thirdpartytest.Db2Test;
+import org.apache.sqoop.testcategories.sqooptest.ManualTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -40,6 +42,7 @@
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.util.FileListing;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -65,6 +68,7 @@
  *   Create a login SQOOP with password PASSWORD and grant all
  *   access for database SQOOP to user SQOOP.
  */
+@Category({ManualTest.class, Db2Test.class})
 public class DB2XmlTypeImportManualTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/hsqldb/TestHsqldbManager.java b/src/test/org/apache/sqoop/manager/hsqldb/TestHsqldbManager.java
index 745a812..0faabdc 100644
--- a/src/test/org/apache/sqoop/manager/hsqldb/TestHsqldbManager.java
+++ b/src/test/org/apache/sqoop/manager/hsqldb/TestHsqldbManager.java
@@ -23,11 +23,13 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.sqoop.manager.ConnManager;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
 import org.apache.sqoop.testutil.HsqldbTestServer;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -37,6 +39,7 @@
  * Test HsqldbManager-specific functionality that overrides SqlManager
  * behavior.
  */
+@Category(IntegrationTest.class)
 public class TestHsqldbManager {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/mainframe/MainframeManagerImportTest.java b/src/test/org/apache/sqoop/manager/mainframe/MainframeManagerImportTest.java
index af5c754..38f7c06 100644
--- a/src/test/org/apache/sqoop/manager/mainframe/MainframeManagerImportTest.java
+++ b/src/test/org/apache/sqoop/manager/mainframe/MainframeManagerImportTest.java
@@ -30,12 +30,14 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.fs.Path;
 import org.apache.sqoop.mapreduce.mainframe.MainframeConfiguration;
+import org.apache.sqoop.testcategories.thirdpartytest.MainFrameTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.tool.MainframeImportTool;
 import org.apache.sqoop.util.FileListing;
 import org.apache.commons.lang3.StringUtils;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertTrue;
 
@@ -56,7 +58,7 @@
  * <property name="sqoop.test.mainframe.ftp.dataset.gdg.filename" value="G0001V43" />
  * <property name="sqoop.test.mainframe.ftp.dataset.gdg.md5" value="43eefbe34e466dd3f65a3e867a60809a" />
  */
-
+@Category(MainFrameTest.class)
 public class MainframeManagerImportTest extends ImportJobTestCase {
   private static final Log LOG = LogFactory.getLog(
       MainframeManagerImportTest.class.getName());
diff --git a/src/test/org/apache/sqoop/manager/mysql/DirectMySQLExportTest.java b/src/test/org/apache/sqoop/manager/mysql/DirectMySQLExportTest.java
index b3570ff..8ac0aa3 100644
--- a/src/test/org/apache/sqoop/manager/mysql/DirectMySQLExportTest.java
+++ b/src/test/org/apache/sqoop/manager/mysql/DirectMySQLExportTest.java
@@ -33,6 +33,7 @@
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.sqoop.manager.DirectMySQLManager;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
 import org.junit.After;
 import org.junit.Before;
 
@@ -41,6 +42,7 @@
 import org.apache.sqoop.mapreduce.MySQLExportMapper;
 import org.junit.Ignore;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -49,6 +51,7 @@
 /**
  * Test the DirectMySQLManager implementation's exportJob() functionality.
  */
+@Category( MysqlTest.class)
 public class DirectMySQLExportTest extends TestExport {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/mysql/DirectMySQLTest.java b/src/test/org/apache/sqoop/manager/mysql/DirectMySQLTest.java
index 89a7fec..b34894e 100644
--- a/src/test/org/apache/sqoop/manager/mysql/DirectMySQLTest.java
+++ b/src/test/org/apache/sqoop/manager/mysql/DirectMySQLTest.java
@@ -30,6 +30,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -43,6 +44,7 @@
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.util.FileListing;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -69,6 +71,7 @@
  * flush privileges;
  *
  */
+@Category(MysqlTest.class)
 public class DirectMySQLTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/mysql/JdbcMySQLExportTest.java b/src/test/org/apache/sqoop/manager/mysql/JdbcMySQLExportTest.java
index f655bcc..076c65a 100644
--- a/src/test/org/apache/sqoop/manager/mysql/JdbcMySQLExportTest.java
+++ b/src/test/org/apache/sqoop/manager/mysql/JdbcMySQLExportTest.java
@@ -27,12 +27,14 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.util.StringUtils;
 import org.apache.sqoop.manager.MySQLManager;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
 import org.junit.After;
 import org.junit.Before;
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.TestExport;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.fail;
 
@@ -41,6 +43,7 @@
  * This does a better test of ExportOutputFormat than TestExport does,
  * because it supports multi-row INSERT statements.
  */
+@Category(MysqlTest.class)
 public class JdbcMySQLExportTest extends TestExport {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/mysql/MySQLAllTablesTest.java b/src/test/org/apache/sqoop/manager/mysql/MySQLAllTablesTest.java
index baf0e2a..65cd529 100644
--- a/src/test/org/apache/sqoop/manager/mysql/MySQLAllTablesTest.java
+++ b/src/test/org/apache/sqoop/manager/mysql/MySQLAllTablesTest.java
@@ -27,10 +27,13 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.TestAllTables;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test the --all-tables functionality with MySQL.
  */
+@Category(MysqlTest.class)
 public class MySQLAllTablesTest extends TestAllTables {
 
   private MySQLTestUtils mySQLTestUtils = new MySQLTestUtils();
diff --git a/src/test/org/apache/sqoop/manager/mysql/MySQLAuthTest.java b/src/test/org/apache/sqoop/manager/mysql/MySQLAuthTest.java
index 1e2f70d..88b0448 100644
--- a/src/test/org/apache/sqoop/manager/mysql/MySQLAuthTest.java
+++ b/src/test/org/apache/sqoop/manager/mysql/MySQLAuthTest.java
@@ -29,6 +29,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -39,6 +40,7 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -77,6 +79,7 @@
  * -Dtestcase=MySQLAuthTest
  *
  */
+@Category(MysqlTest.class)
 public class MySQLAuthTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/mysql/MySQLCompatTest.java b/src/test/org/apache/sqoop/manager/mysql/MySQLCompatTest.java
index 7e822e6..45f6f4c 100644
--- a/src/test/org/apache/sqoop/manager/mysql/MySQLCompatTest.java
+++ b/src/test/org/apache/sqoop/manager/mysql/MySQLCompatTest.java
@@ -27,14 +27,17 @@
 import org.apache.commons.logging.LogFactory;
 
 import org.apache.hadoop.conf.Configuration;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
 import org.junit.Test;
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.testutil.ManagerCompatTestCase;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test the basic mysql connection manager with the various column types.
  */
+@Category(MysqlTest.class)
 public class MySQLCompatTest extends ManagerCompatTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/mysql/MySQLFreeFormQueryTest.java b/src/test/org/apache/sqoop/manager/mysql/MySQLFreeFormQueryTest.java
index f4f0b74..b4ba86b 100644
--- a/src/test/org/apache/sqoop/manager/mysql/MySQLFreeFormQueryTest.java
+++ b/src/test/org/apache/sqoop/manager/mysql/MySQLFreeFormQueryTest.java
@@ -29,10 +29,13 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.TestFreeFormQueryImport;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test free form query import with the MySQL db.
  */
+@Category(MysqlTest.class)
 public class MySQLFreeFormQueryTest extends TestFreeFormQueryImport {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/mysql/MySQLLobAvroImportTest.java b/src/test/org/apache/sqoop/manager/mysql/MySQLLobAvroImportTest.java
index 6208975..ca8958a 100644
--- a/src/test/org/apache/sqoop/manager/mysql/MySQLLobAvroImportTest.java
+++ b/src/test/org/apache/sqoop/manager/mysql/MySQLLobAvroImportTest.java
@@ -25,11 +25,14 @@
 import org.apache.hadoop.conf.Configuration;
 
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
 import org.apache.sqoop.testutil.LobAvroImportTestCase;
+import org.junit.experimental.categories.Category;
 
 /**
  * Tests BLOB/CLOB import for Avro with MySQL Db.
  */
+@Category(MysqlTest.class)
 public class MySQLLobAvroImportTest extends LobAvroImportTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/mysql/MySqlCallExportTest.java b/src/test/org/apache/sqoop/manager/mysql/MySqlCallExportTest.java
index 22a6676..060e03e 100644
--- a/src/test/org/apache/sqoop/manager/mysql/MySqlCallExportTest.java
+++ b/src/test/org/apache/sqoop/manager/mysql/MySqlCallExportTest.java
@@ -35,15 +35,18 @@
 import org.apache.hadoop.conf.Configuration;
 
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ExportJobTestCase;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test free form query import with the MySQL db.
  */
+@Category(MysqlTest.class)
 public class MySqlCallExportTest extends ExportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/mysql/MySqlColumnEscapeImportTest.java b/src/test/org/apache/sqoop/manager/mysql/MySqlColumnEscapeImportTest.java
index eaab8c5..837d580 100644
--- a/src/test/org/apache/sqoop/manager/mysql/MySqlColumnEscapeImportTest.java
+++ b/src/test/org/apache/sqoop/manager/mysql/MySqlColumnEscapeImportTest.java
@@ -19,6 +19,7 @@
 package org.apache.sqoop.manager.mysql;
 
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import com.google.common.base.Charsets;
@@ -29,6 +30,7 @@
 import org.apache.hadoop.fs.Path;
 import org.junit.After;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.io.File;
 import java.io.IOException;
@@ -37,6 +39,7 @@
 
 import static org.junit.Assert.assertEquals;
 
+@Category(MysqlTest.class)
 public class MySqlColumnEscapeImportTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaExportManualTest.java b/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaExportManualTest.java
index 0a6997f..09daceb 100644
--- a/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaExportManualTest.java
+++ b/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaExportManualTest.java
@@ -25,15 +25,19 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.sqoop.manager.DirectNetezzaManager;
+import org.apache.sqoop.testcategories.sqooptest.ManualTest;
+import org.apache.sqoop.testcategories.thirdpartytest.NetezzaTest;
 import org.junit.Test;
 
 import org.apache.sqoop.SqoopOptions;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.fail;
 
 /**
  * Test the DirectNetezzaManager implementation's exportJob() functionality.
  */
+@Category({ManualTest.class, NetezzaTest.class})
 public class DirectNetezzaExportManualTest extends NetezzaExportManualTest {
 
   public static final Log LOG = LogFactory
diff --git a/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaHCatExportManualTest.java b/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaHCatExportManualTest.java
index 9365ba0..9988a57 100644
--- a/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaHCatExportManualTest.java
+++ b/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaHCatExportManualTest.java
@@ -31,14 +31,18 @@
 import org.apache.sqoop.hcat.HCatalogTestUtils.ColumnGenerator;
 import org.apache.sqoop.hcat.HCatalogTestUtils.KeyType;
 import org.apache.sqoop.manager.NetezzaManager;
+import org.apache.sqoop.testcategories.sqooptest.ManualTest;
+import org.apache.sqoop.testcategories.thirdpartytest.NetezzaTest;
 import org.junit.Before;
 
 import org.apache.sqoop.SqoopOptions;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test the DirectNetezzaManager implementation's hcatalog export functionality.
  */
+@Category({ManualTest.class, NetezzaTest.class})
 public class DirectNetezzaHCatExportManualTest extends HCatalogExportTest {
   // instance variables populated during setUp, used during tests
   private NetezzaManager manager;
diff --git a/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaHCatImportManualTest.java b/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaHCatImportManualTest.java
index c05b733..97af830 100644
--- a/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaHCatImportManualTest.java
+++ b/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaHCatImportManualTest.java
@@ -31,14 +31,18 @@
 import org.apache.sqoop.hcat.HCatalogTestUtils.ColumnGenerator;
 import org.apache.sqoop.hcat.HCatalogTestUtils.KeyType;
 import org.apache.sqoop.manager.NetezzaManager;
+import org.apache.sqoop.testcategories.sqooptest.ManualTest;
+import org.apache.sqoop.testcategories.thirdpartytest.NetezzaTest;
 import org.junit.Before;
 
 import org.apache.sqoop.SqoopOptions;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test the DirectNetezzaManager implementation's hcatalog import functionality.
  */
+@Category({ManualTest.class, NetezzaTest.class})
 public class DirectNetezzaHCatImportManualTest extends HCatalogImportTest {
   // instance variables populated during setUp, used during tests
   private NetezzaManager manager;
diff --git a/src/test/org/apache/sqoop/manager/netezza/NetezzaExportManualTest.java b/src/test/org/apache/sqoop/manager/netezza/NetezzaExportManualTest.java
index 95abe7a..2ca9853 100644
--- a/src/test/org/apache/sqoop/manager/netezza/NetezzaExportManualTest.java
+++ b/src/test/org/apache/sqoop/manager/netezza/NetezzaExportManualTest.java
@@ -31,12 +31,15 @@
 import org.apache.hadoop.fs.Path;
 import org.apache.sqoop.manager.DirectNetezzaManager;
 import org.apache.sqoop.manager.NetezzaManager;
+import org.apache.sqoop.testcategories.sqooptest.ManualTest;
+import org.apache.sqoop.testcategories.thirdpartytest.NetezzaTest;
 import org.junit.Before;
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.TestExport;
 import org.apache.sqoop.testutil.BaseSqoopTestCase;
 import org.apache.sqoop.testutil.CommonArgs;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.fail;
 
@@ -51,6 +54,7 @@
  * this manually with -Dtestcase=NetezzaExportManualTest.
  *
  */
+@Category({ManualTest.class, NetezzaTest.class})
 public class NetezzaExportManualTest extends TestExport {
   public static final Log LOG = LogFactory.getLog(NetezzaExportManualTest.class
     .getName());
diff --git a/src/test/org/apache/sqoop/manager/netezza/NetezzaImportManualTest.java b/src/test/org/apache/sqoop/manager/netezza/NetezzaImportManualTest.java
index 4002c64..84fc7fc 100644
--- a/src/test/org/apache/sqoop/manager/netezza/NetezzaImportManualTest.java
+++ b/src/test/org/apache/sqoop/manager/netezza/NetezzaImportManualTest.java
@@ -35,6 +35,8 @@
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.io.IOUtils;
 import org.apache.sqoop.manager.NetezzaManager;
+import org.apache.sqoop.testcategories.sqooptest.ManualTest;
+import org.apache.sqoop.testcategories.thirdpartytest.NetezzaTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -44,6 +46,7 @@
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.util.FileListing;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -60,6 +63,7 @@
  * this manually with -Dtestcase=NetezzaImportManualTest.
  *
  */
+@Category({ManualTest.class, NetezzaTest.class})
 public class NetezzaImportManualTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.
diff --git a/src/test/org/apache/sqoop/manager/oracle/OraOopDataDrivenDBInputFormatConnectionCloseTest.java b/src/test/org/apache/sqoop/manager/oracle/OraOopDataDrivenDBInputFormatConnectionCloseTest.java
index bb33c35..c20b8b6 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OraOopDataDrivenDBInputFormatConnectionCloseTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OraOopDataDrivenDBInputFormatConnectionCloseTest.java
@@ -21,8 +21,11 @@
 import org.apache.sqoop.mapreduce.db.DBConfiguration;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.mapreduce.JobContext;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.io.IOException;
 import java.sql.Connection;
@@ -37,6 +40,7 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+@Category({UnitTest.class, OracleTest.class})
 public class OraOopDataDrivenDBInputFormatConnectionCloseTest {
 
   private static final OraOopLog LOG = OraOopLogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/oracle/OraOopTestCase.java b/src/test/org/apache/sqoop/manager/oracle/OraOopTestCase.java
index 1bae71c..1598813 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OraOopTestCase.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OraOopTestCase.java
@@ -44,12 +44,16 @@
 
 import org.apache.sqoop.Sqoop;
 import org.apache.sqoop.manager.oracle.util.OracleUtils;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 
 /**
  * Base test case for OraOop to handle common functions.
  */
+@Category({IntegrationTest.class, OracleTest.class})
 public abstract class OraOopTestCase {
 
   private static final OraOopLog LOG = OraOopLogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/oracle/OracleCallExportTest.java b/src/test/org/apache/sqoop/manager/oracle/OracleCallExportTest.java
index 6d6602a..bc93ebf 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OracleCallExportTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OracleCallExportTest.java
@@ -36,13 +36,16 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.manager.oracle.util.OracleUtils;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ExportJobTestCase;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test free form query import with the MySQL db.
  */
+@Category(OracleTest.class)
 public class OracleCallExportTest extends ExportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/oracle/OracleColumnEscapeImportTest.java b/src/test/org/apache/sqoop/manager/oracle/OracleColumnEscapeImportTest.java
index 684586c..6a26a6e 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OracleColumnEscapeImportTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OracleColumnEscapeImportTest.java
@@ -20,6 +20,7 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.manager.oracle.util.OracleUtils;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import com.google.common.base.Charsets;
@@ -30,6 +31,7 @@
 import org.apache.hadoop.fs.Path;
 import org.junit.After;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.io.File;
 import java.io.IOException;
@@ -38,6 +40,7 @@
 
 import static org.junit.Assert.assertEquals;
 
+@Category(OracleTest.class)
 public class OracleColumnEscapeImportTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/oracle/OracleCompatTest.java b/src/test/org/apache/sqoop/manager/oracle/OracleCompatTest.java
index 553096a..3878fc8 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OracleCompatTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OracleCompatTest.java
@@ -28,14 +28,17 @@
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
 import org.apache.sqoop.testutil.ManagerCompatTestCase;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.fail;
 
 /**
  * Test the basic Oracle connection manager with the various column types.
  */
+@Category(OracleTest.class)
 public class OracleCompatTest extends ManagerCompatTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/oracle/OracleExportTest.java b/src/test/org/apache/sqoop/manager/oracle/OracleExportTest.java
index a880af3..c096fe4 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OracleExportTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OracleExportTest.java
@@ -27,12 +27,14 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.util.StringUtils;
 import org.apache.sqoop.manager.OracleManager;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
 import org.junit.After;
 import org.junit.Before;
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.TestExport;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.fail;
 
@@ -41,6 +43,7 @@
  * This tests the OracleExportOutputFormat (which subclasses
  * ExportOutputFormat with Oracle-specific SQL statements).
  */
+@Category(OracleTest.class)
 public class OracleExportTest extends TestExport {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/oracle/OracleFreeFormQueryTest.java b/src/test/org/apache/sqoop/manager/oracle/OracleFreeFormQueryTest.java
index bb3e7c4..0efcb1b 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OracleFreeFormQueryTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OracleFreeFormQueryTest.java
@@ -27,10 +27,13 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.TestFreeFormQueryImport;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test free form query import with the Oracle db.
  */
+@Category(OracleTest.class)
 public class OracleFreeFormQueryTest extends TestFreeFormQueryImport {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/oracle/OracleIncrementalImportTest.java b/src/test/org/apache/sqoop/manager/oracle/OracleIncrementalImportTest.java
index 8e6ccc9..86505d2 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OracleIncrementalImportTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OracleIncrementalImportTest.java
@@ -20,6 +20,7 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.manager.oracle.util.OracleUtils;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.commons.logging.Log;
@@ -31,6 +32,7 @@
 import org.apache.hadoop.io.IOUtils;
 import org.junit.After;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
@@ -49,6 +51,7 @@
 /**
  * Test free form query import with the Oracle db.
  */
+@Category(OracleTest.class)
 public class OracleIncrementalImportTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/oracle/OracleLobAvroImportTest.java b/src/test/org/apache/sqoop/manager/oracle/OracleLobAvroImportTest.java
index 525ccf4..95b2396 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OracleLobAvroImportTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OracleLobAvroImportTest.java
@@ -28,13 +28,16 @@
 import org.apache.hadoop.conf.Configuration;
 
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
 import org.apache.sqoop.testutil.LobAvroImportTestCase;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.fail;
 
 /**
  * Tests BLOB/CLOB import for Avro with Oracle Db.
  */
+@Category(OracleTest.class)
 public class OracleLobAvroImportTest extends LobAvroImportTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/oracle/OracleManagerTest.java b/src/test/org/apache/sqoop/manager/oracle/OracleManagerTest.java
index 9251f02..8a5b3cc 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OracleManagerTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OracleManagerTest.java
@@ -39,6 +39,7 @@
 import org.apache.sqoop.manager.oracle.util.OracleUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -52,6 +53,7 @@
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.util.FileListing;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -101,6 +103,7 @@
  * ALTER SYSTEM SET processes=200 scope=spfile;
  * ... then restart your database.
  */
+@Category(OracleTest.class)
 public class OracleManagerTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/oracle/OracleSpecialCharacterTableImportTest.java b/src/test/org/apache/sqoop/manager/oracle/OracleSpecialCharacterTableImportTest.java
index 6539e5a..ef09a2e 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OracleSpecialCharacterTableImportTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OracleSpecialCharacterTableImportTest.java
@@ -20,6 +20,7 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.manager.oracle.util.OracleUtils;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import com.google.common.base.Charsets;
@@ -28,8 +29,10 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.Path;
+import org.apache.sqoop.util.BlockJUnit4ClassRunnerWithParametersFactory;
 import org.junit.After;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
@@ -42,6 +45,8 @@
 import static org.junit.Assert.assertEquals;
 
 @RunWith(Parameterized.class)
+@Category(OracleTest.class)
+@Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class)
 public class OracleSpecialCharacterTableImportTest extends ImportJobTestCase {
 
   @Parameterized.Parameters(name = "tableName = {0}")
diff --git a/src/test/org/apache/sqoop/manager/oracle/OracleSplitterTest.java b/src/test/org/apache/sqoop/manager/oracle/OracleSplitterTest.java
index c2f9532..6d749d4 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OracleSplitterTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OracleSplitterTest.java
@@ -20,6 +20,7 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.manager.oracle.util.OracleUtils;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.commons.logging.Log;
@@ -27,6 +28,7 @@
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.io.File;
 import java.io.IOException;
@@ -39,6 +41,7 @@
 /**
  * Test various custom splitters for Oracle.
  */
+@Category(OracleTest.class)
 public class OracleSplitterTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/postgresql/DirectPostgreSQLExportManualTest.java b/src/test/org/apache/sqoop/manager/postgresql/DirectPostgreSQLExportManualTest.java
index 22b202a..7dd6efc 100644
--- a/src/test/org/apache/sqoop/manager/postgresql/DirectPostgreSQLExportManualTest.java
+++ b/src/test/org/apache/sqoop/manager/postgresql/DirectPostgreSQLExportManualTest.java
@@ -29,8 +29,11 @@
 import org.apache.hadoop.mapred.JobConf;
 import org.apache.sqoop.TestExport;
 import org.apache.sqoop.mapreduce.db.DBConfiguration;
+import org.apache.sqoop.testcategories.sqooptest.ManualTest;
+import org.apache.sqoop.testcategories.thirdpartytest.PostgresqlTest;
 import org.junit.Ignore;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 
 /**
@@ -53,6 +56,7 @@
  * $ psql -U sqooptest sqooptest
  *
  */
+@Category({ManualTest.class, PostgresqlTest.class})
 public class DirectPostgreSQLExportManualTest extends TestExport {
 
   public static final Log LOG =
diff --git a/src/test/org/apache/sqoop/manager/postgresql/PGBulkloadManagerManualTest.java b/src/test/org/apache/sqoop/manager/postgresql/PGBulkloadManagerManualTest.java
index 8855316..1fe2644 100644
--- a/src/test/org/apache/sqoop/manager/postgresql/PGBulkloadManagerManualTest.java
+++ b/src/test/org/apache/sqoop/manager/postgresql/PGBulkloadManagerManualTest.java
@@ -28,10 +28,13 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.mapred.JobConf;
+import org.apache.sqoop.testcategories.sqooptest.ManualTest;
+import org.apache.sqoop.testcategories.thirdpartytest.PostgresqlTest;
 import org.junit.Test;
 
 import org.apache.sqoop.TestExport;
 import org.apache.sqoop.mapreduce.db.DBConfiguration;
+import org.junit.experimental.categories.Category;
 
 
 /**
@@ -62,6 +65,7 @@
  * sqooptest=# \q
  *
  */
+@Category({ManualTest.class, PostgresqlTest.class})
 public class PGBulkloadManagerManualTest extends TestExport {
 
   public static final Log LOG =
diff --git a/src/test/org/apache/sqoop/manager/postgresql/PostgresqlExportTest.java b/src/test/org/apache/sqoop/manager/postgresql/PostgresqlExportTest.java
index f86b119..eb798fa 100644
--- a/src/test/org/apache/sqoop/manager/postgresql/PostgresqlExportTest.java
+++ b/src/test/org/apache/sqoop/manager/postgresql/PostgresqlExportTest.java
@@ -18,6 +18,7 @@
 package org.apache.sqoop.manager.postgresql;
 
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.thirdpartytest.PostgresqlTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ExportJobTestCase;
 import org.apache.commons.logging.Log;
@@ -26,6 +27,7 @@
 import org.apache.sqoop.manager.PostgresqlManager;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.io.BufferedWriter;
 import java.io.File;
@@ -45,6 +47,7 @@
 /**
  *
  */
+@Category(PostgresqlTest.class)
 public class PostgresqlExportTest extends ExportJobTestCase {
   public static final Log LOG = LogFactory.getLog(
       PostgresqlExportTest.class.getName());
diff --git a/src/test/org/apache/sqoop/manager/postgresql/PostgresqlExternalTableImportTest.java b/src/test/org/apache/sqoop/manager/postgresql/PostgresqlExternalTableImportTest.java
index dd4cfb4..8c3d2fd 100644
--- a/src/test/org/apache/sqoop/manager/postgresql/PostgresqlExternalTableImportTest.java
+++ b/src/test/org/apache/sqoop/manager/postgresql/PostgresqlExternalTableImportTest.java
@@ -38,6 +38,7 @@
 import org.apache.hadoop.io.IOUtils;
 import org.apache.sqoop.manager.ConnManager;
 import org.apache.sqoop.manager.PostgresqlManager;
+import org.apache.sqoop.testcategories.thirdpartytest.PostgresqlTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -46,7 +47,9 @@
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.util.FileListing;
+import org.junit.experimental.categories.Category;
 
+@Category(PostgresqlTest.class)
 public class PostgresqlExternalTableImportTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory
diff --git a/src/test/org/apache/sqoop/manager/postgresql/PostgresqlImportTest.java b/src/test/org/apache/sqoop/manager/postgresql/PostgresqlImportTest.java
index b8aa17b..64d4089 100644
--- a/src/test/org/apache/sqoop/manager/postgresql/PostgresqlImportTest.java
+++ b/src/test/org/apache/sqoop/manager/postgresql/PostgresqlImportTest.java
@@ -31,6 +31,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.sqoop.testcategories.thirdpartytest.PostgresqlTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -44,6 +45,7 @@
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.util.FileListing;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -87,6 +89,7 @@
  * template1=&gt; \q
  *
  */
+@Category(PostgresqlTest.class)
 public class PostgresqlImportTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeExportDelimitedFileTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeExportDelimitedFileTest.java
index 9b70af1..e1a91e6 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeExportDelimitedFileTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeExportDelimitedFileTest.java
@@ -23,6 +23,8 @@
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.sqoop.manager.sqlserver.MSSQLTestDataFileParser.DATATYPES;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
+import org.junit.experimental.categories.Category;
 
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
@@ -50,6 +52,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerDatatypeExportDelimitedFileTest
     extends ManagerCompatExport {
 
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeExportSequenceFileTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeExportSequenceFileTest.java
index 293da00..9820346 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeExportSequenceFileTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeExportSequenceFileTest.java
@@ -34,8 +34,10 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.lib.RecordParser;
 import org.apache.sqoop.lib.SqoopRecord;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.apache.sqoop.tool.CodeGenTool;
 import org.apache.sqoop.util.ClassLoaderStack;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -63,6 +65,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerDatatypeExportSequenceFileTest
     extends ManagerCompatExport {
 
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeImportDelimitedFileTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeImportDelimitedFileTest.java
index 520c4ac..225f6a0 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeImportDelimitedFileTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeImportDelimitedFileTest.java
@@ -34,11 +34,13 @@
 import org.apache.sqoop.Sqoop;
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.orm.CompilationManager;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.tool.ImportTool;
 import org.apache.sqoop.util.ClassLoaderStack;
 import org.junit.Ignore;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -65,6 +67,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerDatatypeImportDelimitedFileTest
   extends SQLServerDatatypeImportSequenceFileTest {
 
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeImportSequenceFileTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeImportSequenceFileTest.java
index 592a78f..5745664 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeImportSequenceFileTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeImportSequenceFileTest.java
@@ -30,6 +30,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.util.StringUtils;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -37,6 +38,7 @@
 import org.apache.sqoop.testutil.ManagerCompatTestCase;
 import org.apache.sqoop.manager.sqlserver.MSSQLTestDataFileParser.DATATYPES;
 import org.apache.sqoop.manager.sqlserver.MSSQLTestData.KEY_STRINGS;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
@@ -63,6 +65,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerDatatypeImportSequenceFileTest extends
     ManagerCompatTestCase {
 
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerHiveImportTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerHiveImportTest.java
index e6b0865..3c6aad6 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerHiveImportTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerHiveImportTest.java
@@ -28,10 +28,12 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.hive.TestHiveImport;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.tool.SqoopTool;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.fail;
 
@@ -57,6 +59,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerHiveImportTest extends TestHiveImport {
 
   @Before
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerExportTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerExportTest.java
index b7c2b75..ab1e8ff 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerExportTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerExportTest.java
@@ -19,6 +19,7 @@
 
 import org.apache.sqoop.ConnFactory;
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -28,6 +29,7 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.io.BufferedWriter;
 import java.io.File;
@@ -46,6 +48,7 @@
 /**
  * Please see instructions in SQLServerManagerImportTest.
  */
+@Category(SqlServerTest.class)
 public class SQLServerManagerExportTest extends ExportJobTestCase {
 
     public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerImportTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerImportTest.java
index 79e37f0..ea7942f 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerImportTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerImportTest.java
@@ -26,14 +26,17 @@
 import org.apache.sqoop.ConnFactory;
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.manager.SQLServerManager;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.apache.sqoop.testutil.ArgumentArrayBuilder;
 import org.apache.sqoop.testutil.ImportJobTestCase;
+import org.apache.sqoop.util.BlockJUnit4ClassRunnerWithParametersFactory;
 import org.apache.sqoop.util.ExpectedLogMessage;
 import org.apache.sqoop.util.FileListing;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
@@ -53,6 +56,7 @@
 import static org.junit.Assert.fail;
 
 @RunWith(Parameterized.class)
+@Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class)
 /**
  * Test the SQLServerManager implementation.
  *
@@ -75,6 +79,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerManagerImportTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerTest.java
index fdf856b..04403bc 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerTest.java
@@ -30,6 +30,8 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.util.StringUtils;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -40,6 +42,7 @@
 import org.apache.sqoop.testutil.HsqldbTestServer;
 import org.apache.sqoop.tool.ImportTool;
 import org.apache.sqoop.tool.SqoopTool;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -68,6 +71,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category({IntegrationTest.class, SqlServerTest.class})
 public class SQLServerManagerTest {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerMultiColsTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerMultiColsTest.java
index fb765fb..26f966b 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerMultiColsTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerMultiColsTest.java
@@ -25,8 +25,10 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.TestMultiCols;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.junit.After;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test multiple columns in SQL Server.
@@ -50,6 +52,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerMultiColsTest extends TestMultiCols {
 
   protected boolean useHsqldbTestServer() {
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerMultiMapsTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerMultiMapsTest.java
index 5e89cc9..a1da99f 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerMultiMapsTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerMultiMapsTest.java
@@ -39,6 +39,7 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.SqoopOptions.InvalidOptionsException;
 import org.apache.sqoop.orm.CompilationManager;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.testutil.SeqFileReader;
@@ -48,6 +49,7 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -74,6 +76,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerMultiMapsTest extends ImportJobTestCase {
 
   @Before
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerParseMethodsTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerParseMethodsTest.java
index fbd8d96..94bbcc0 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerParseMethodsTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerParseMethodsTest.java
@@ -40,6 +40,7 @@
 import org.apache.sqoop.SqoopOptions.InvalidOptionsException;
 import org.apache.sqoop.config.ConfigurationHelper;
 import org.apache.sqoop.orm.CompilationManager;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.testutil.ReparseMapper;
@@ -48,6 +49,7 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.fail;
 
@@ -74,6 +76,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerParseMethodsTest extends ImportJobTestCase {
 
   @Before
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerQueryTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerQueryTest.java
index e0c8d67..d929a4c 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerQueryTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerQueryTest.java
@@ -34,6 +34,7 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.SqoopOptions.InvalidOptionsException;
 import org.apache.sqoop.orm.CompilationManager;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.testutil.SeqFileReader;
@@ -42,6 +43,7 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -68,6 +70,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerQueryTest extends ImportJobTestCase {
 
   @Before
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerSplitByTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerSplitByTest.java
index a1c2201..eb83e8e 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerSplitByTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerSplitByTest.java
@@ -34,6 +34,7 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.SqoopOptions.InvalidOptionsException;
 import org.apache.sqoop.orm.CompilationManager;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.testutil.SeqFileReader;
@@ -42,6 +43,7 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -68,6 +70,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerSplitByTest extends ImportJobTestCase {
 
   @Before
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerWhereTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerWhereTest.java
index 11d0963..e6cb7f8 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerWhereTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerWhereTest.java
@@ -34,6 +34,7 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.SqoopOptions.InvalidOptionsException;
 import org.apache.sqoop.orm.CompilationManager;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.testutil.SeqFileReader;
@@ -42,6 +43,7 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -68,6 +70,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerWhereTest extends ImportJobTestCase {
 
  @Before
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/TestSqlServerManagerContextConfigurator.java b/src/test/org/apache/sqoop/manager/sqlserver/TestSqlServerManagerContextConfigurator.java
index c0d0a24..7087d19 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/TestSqlServerManagerContextConfigurator.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/TestSqlServerManagerContextConfigurator.java
@@ -31,14 +31,17 @@
 import org.apache.sqoop.mapreduce.db.DataDrivenDBInputFormat;
 import org.apache.sqoop.mapreduce.db.SQLServerDBInputFormat;
 import org.apache.sqoop.mapreduce.sqlserver.SqlServerExportBatchOutputFormat;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
 /**
  * Test methods in the configuration utilities.
  */
+@Category(UnitTest.class)
 public class TestSqlServerManagerContextConfigurator {
 
   public static final Log LOG = LogFactory.getLog(TestSqlServerManagerContextConfigurator.class.getName());
diff --git a/src/test/org/apache/sqoop/mapreduce/TestJdbcExportJob.java b/src/test/org/apache/sqoop/mapreduce/TestJdbcExportJob.java
index 81ab677..f849548 100644
--- a/src/test/org/apache/sqoop/mapreduce/TestJdbcExportJob.java
+++ b/src/test/org/apache/sqoop/mapreduce/TestJdbcExportJob.java
@@ -37,16 +37,19 @@
 import org.apache.hadoop.mapreduce.Job;
 import org.apache.sqoop.mapreduce.ExportJobBase.FileType;
 import org.apache.sqoop.mapreduce.parquet.ParquetExportJobConfigurator;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.manager.ConnManager;
 import org.apache.sqoop.manager.ExportJobContext;
+import org.junit.experimental.categories.Category;
 
 
 /**
  * Test methods of the JdbcExportJob implementation.
  */
+@Category(UnitTest.class)
 public class TestJdbcExportJob {
 
   @Test
diff --git a/src/test/org/apache/sqoop/mapreduce/TestJobBase.java b/src/test/org/apache/sqoop/mapreduce/TestJobBase.java
index e1781bb..7b5684d 100644
--- a/src/test/org/apache/sqoop/mapreduce/TestJobBase.java
+++ b/src/test/org/apache/sqoop/mapreduce/TestJobBase.java
@@ -28,11 +28,14 @@
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.mapreduce.Job;
 import org.apache.sqoop.config.ConfigurationConstants;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Test;
 
 import org.apache.sqoop.SqoopOptions;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class TestJobBase {
 
   SqoopOptions options;
diff --git a/src/test/org/apache/sqoop/mapreduce/db/TestBigDecimalSplitter.java b/src/test/org/apache/sqoop/mapreduce/db/TestBigDecimalSplitter.java
index 951a3dc..bf90166 100644
--- a/src/test/org/apache/sqoop/mapreduce/db/TestBigDecimalSplitter.java
+++ b/src/test/org/apache/sqoop/mapreduce/db/TestBigDecimalSplitter.java
@@ -20,10 +20,13 @@
 
 import java.math.BigDecimal;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 
+@Category(UnitTest.class)
 public class TestBigDecimalSplitter {
 
   /* Test if the decimal split sizes are generated as expected */
diff --git a/src/test/org/apache/sqoop/mapreduce/db/TestDBConfiguration.java b/src/test/org/apache/sqoop/mapreduce/db/TestDBConfiguration.java
index 3160db9..c45786c 100644
--- a/src/test/org/apache/sqoop/mapreduce/db/TestDBConfiguration.java
+++ b/src/test/org/apache/sqoop/mapreduce/db/TestDBConfiguration.java
@@ -20,13 +20,16 @@
 
 import java.util.Properties;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 
 /**
  * Test aspects of DBConfiguration.
  */
+@Category(UnitTest.class)
 public class TestDBConfiguration {
 
   @Test
diff --git a/src/test/org/apache/sqoop/mapreduce/db/TestDataDrivenDBInputFormat.java b/src/test/org/apache/sqoop/mapreduce/db/TestDataDrivenDBInputFormat.java
index 9e538fd..3214491 100644
--- a/src/test/org/apache/sqoop/mapreduce/db/TestDataDrivenDBInputFormat.java
+++ b/src/test/org/apache/sqoop/mapreduce/db/TestDataDrivenDBInputFormat.java
@@ -35,11 +35,13 @@
 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
 import org.apache.hadoop.util.StringUtils;
 import org.apache.sqoop.mapreduce.DBWritable;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
 import org.apache.sqoop.mapreduce.db.DataDrivenDBInputFormat;
 import org.apache.sqoop.mapreduce.db.DBConfiguration;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -47,6 +49,7 @@
 /**
  * Test aspects of DataDrivenDBInputFormat.
  */
+@Category(IntegrationTest.class)
 public class TestDataDrivenDBInputFormat {
 
   private static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/mapreduce/db/TestIntegerSplitter.java b/src/test/org/apache/sqoop/mapreduce/db/TestIntegerSplitter.java
index b43fc41..8e82862 100644
--- a/src/test/org/apache/sqoop/mapreduce/db/TestIntegerSplitter.java
+++ b/src/test/org/apache/sqoop/mapreduce/db/TestIntegerSplitter.java
@@ -20,7 +20,9 @@
 import java.sql.SQLException;
 import java.util.List;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -28,6 +30,7 @@
 /**
  * Test that the IntegerSplitter generates sane splits.
  */
+@Category(UnitTest.class)
 public class TestIntegerSplitter {
   private long [] toLongArray(List<Long> in) {
     long [] out = new long[in.size()];
diff --git a/src/test/org/apache/sqoop/mapreduce/db/TestSQLServerDBRecordReader.java b/src/test/org/apache/sqoop/mapreduce/db/TestSQLServerDBRecordReader.java
index 70187b1..ebbd276 100644
--- a/src/test/org/apache/sqoop/mapreduce/db/TestSQLServerDBRecordReader.java
+++ b/src/test/org/apache/sqoop/mapreduce/db/TestSQLServerDBRecordReader.java
@@ -27,8 +27,10 @@
 import org.apache.hadoop.mapreduce.InputSplit;
 import org.apache.hadoop.mapreduce.TaskAttemptContext;
 import org.apache.sqoop.lib.SqoopRecord;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 
@@ -51,6 +53,7 @@
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
+@Category(UnitTest.class)
 public class TestSQLServerDBRecordReader {
 
   private static final String SPLIT_BY_COLUMN = "myCol";
diff --git a/src/test/org/apache/sqoop/mapreduce/db/TestTextSplitter.java b/src/test/org/apache/sqoop/mapreduce/db/TestTextSplitter.java
index 5d9cdf0..bb92540 100644
--- a/src/test/org/apache/sqoop/mapreduce/db/TestTextSplitter.java
+++ b/src/test/org/apache/sqoop/mapreduce/db/TestTextSplitter.java
@@ -21,6 +21,7 @@
 import java.sql.SQLException;
 import java.util.List;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.validation.ValidationException;
 import org.junit.Test;
 
@@ -28,12 +29,14 @@
 import static org.junit.Assert.fail;
 import org.junit.Rule;
 
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 
 /**
  * Test that the TextSplitter implementation creates a sane set of splits.
  */
+@Category(UnitTest.class)
 public class TestTextSplitter {
 
   @Rule
diff --git a/src/test/org/apache/sqoop/mapreduce/db/TextSplitterHadoopConfIntegrationTest.java b/src/test/org/apache/sqoop/mapreduce/db/TextSplitterHadoopConfIntegrationTest.java
index 9eb8922..8b326a6 100644
--- a/src/test/org/apache/sqoop/mapreduce/db/TextSplitterHadoopConfIntegrationTest.java
+++ b/src/test/org/apache/sqoop/mapreduce/db/TextSplitterHadoopConfIntegrationTest.java
@@ -23,16 +23,19 @@
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.mapreduce.InputSplit;
 import org.apache.hadoop.mapreduce.Job;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.validation.ValidationException;
 
 import org.apache.sqoop.testutil.MockResultSet;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 import static org.junit.Assert.assertFalse;
 
+@Category(UnitTest.class)
 public class TextSplitterHadoopConfIntegrationTest {
   private static final String TEXT_COL_NAME = "text_col_name";
 
diff --git a/src/test/org/apache/sqoop/mapreduce/hcat/TestSqoopHCatImportHelper.java b/src/test/org/apache/sqoop/mapreduce/hcat/TestSqoopHCatImportHelper.java
index 3f734ea..0bc32c0 100644
--- a/src/test/org/apache/sqoop/mapreduce/hcat/TestSqoopHCatImportHelper.java
+++ b/src/test/org/apache/sqoop/mapreduce/hcat/TestSqoopHCatImportHelper.java
@@ -19,13 +19,16 @@
 package org.apache.sqoop.mapreduce.hcat;
 
 import org.apache.hadoop.hive.common.type.HiveDecimal;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.math.BigDecimal;
 
 import static org.junit.Assert.assertEquals;
 
+@Category(UnitTest.class)
 public class TestSqoopHCatImportHelper {
 
   private SqoopHCatImportHelper importHelper;
diff --git a/src/test/org/apache/sqoop/mapreduce/hcat/TestSqoopHCatUtilities.java b/src/test/org/apache/sqoop/mapreduce/hcat/TestSqoopHCatUtilities.java
index dff11f1..3980155 100644
--- a/src/test/org/apache/sqoop/mapreduce/hcat/TestSqoopHCatUtilities.java
+++ b/src/test/org/apache/sqoop/mapreduce/hcat/TestSqoopHCatUtilities.java
@@ -23,9 +23,12 @@
 
 import java.io.IOException;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class TestSqoopHCatUtilities {
 
   private static final String[] VALID_HCAT_ARGS = new String[] {"-h"};
diff --git a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetFTPRecordReader.java b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetFTPRecordReader.java
index 3547294..502e633 100644
--- a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetFTPRecordReader.java
+++ b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetFTPRecordReader.java
@@ -45,6 +45,7 @@
 import org.apache.sqoop.lib.SqoopRecord;
 import org.apache.sqoop.mapreduce.DBWritable;
 import org.apache.sqoop.mapreduce.db.DBConfiguration;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.util.MainframeFTPClientUtils;
 import org.junit.After;
 import org.junit.Assert;
@@ -53,7 +54,9 @@
 
 import org.apache.sqoop.lib.DelimiterSet;
 import org.apache.sqoop.lib.LargeObjectLoader;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class TestMainframeDatasetFTPRecordReader {
 
   private MainframeImportJob mfImportJob;
diff --git a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetInputFormat.java b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetInputFormat.java
index efef056..ed61f91 100644
--- a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetInputFormat.java
+++ b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetInputFormat.java
@@ -37,6 +37,7 @@
 import org.apache.sqoop.lib.SqoopRecord;
 import org.apache.sqoop.mapreduce.db.DBConfiguration;
 import org.apache.sqoop.mapreduce.mainframe.MainframeConfiguration;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.util.MainframeFTPClientUtils;
 import org.junit.After;
 import org.junit.Assert;
@@ -44,7 +45,9 @@
 import org.junit.Test;
 
 import org.apache.sqoop.config.ConfigurationHelper;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class TestMainframeDatasetInputFormat {
 
   private MainframeDatasetInputFormat<SqoopRecord> format;
diff --git a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetInputSplit.java b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetInputSplit.java
index 5d92f6d..174cbaa 100644
--- a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetInputSplit.java
+++ b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetInputSplit.java
@@ -22,10 +22,13 @@
 
 import org.apache.hadoop.io.DataInputBuffer;
 import org.apache.hadoop.io.DataOutputBuffer;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class TestMainframeDatasetInputSplit {
 
   private MainframeDatasetInputSplit mfDatasetInputSplit;
diff --git a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetPath.java b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetPath.java
index 9b277b2..91bc8f7 100644
--- a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetPath.java
+++ b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetPath.java
@@ -24,8 +24,11 @@
 import java.text.ParseException;
 
 import org.apache.hadoop.conf.Configuration;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class TestMainframeDatasetPath {
 
 	@Test
diff --git a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeFTPFileEntryParser.java b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeFTPFileEntryParser.java
index 26ed961..35fcca3 100644
--- a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeFTPFileEntryParser.java
+++ b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeFTPFileEntryParser.java
@@ -22,12 +22,15 @@
 import java.util.List;
 
 import org.apache.commons.net.ftp.FTPFile;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class TestMainframeFTPFileEntryParser {
 	static List<String> listing;
 	static MainframeFTPFileEntryParser parser2;
diff --git a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeImportJob.java b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeImportJob.java
index be62efd..ad90cbe 100644
--- a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeImportJob.java
+++ b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeImportJob.java
@@ -29,12 +29,15 @@
 import org.apache.hadoop.mapreduce.Job;
 import org.apache.hadoop.mapreduce.Mapper;
 import org.apache.sqoop.mapreduce.parquet.ParquetImportJobConfigurator;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Test;
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.manager.ImportJobContext;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class TestMainframeImportJob {
 
   private MainframeImportJob mfImportJob;
diff --git a/src/test/org/apache/sqoop/mapreduce/sqlserver/SqlServerUpsertOutputFormatTest.java b/src/test/org/apache/sqoop/mapreduce/sqlserver/SqlServerUpsertOutputFormatTest.java
index a89e800..7b0482a 100644
--- a/src/test/org/apache/sqoop/mapreduce/sqlserver/SqlServerUpsertOutputFormatTest.java
+++ b/src/test/org/apache/sqoop/mapreduce/sqlserver/SqlServerUpsertOutputFormatTest.java
@@ -31,8 +31,11 @@
 import org.apache.sqoop.manager.SQLServerManager;
 import org.apache.sqoop.mapreduce.ExportJobBase;
 import org.apache.sqoop.mapreduce.sqlserver.SqlServerUpsertOutputFormat.SqlServerUpsertRecordWriter;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class SqlServerUpsertOutputFormatTest {
 
   @SuppressWarnings("unchecked")
diff --git a/src/test/org/apache/sqoop/metastore/PasswordRedactorTest.java b/src/test/org/apache/sqoop/metastore/PasswordRedactorTest.java
index a2dbc71..35616ce 100644
--- a/src/test/org/apache/sqoop/metastore/PasswordRedactorTest.java
+++ b/src/test/org/apache/sqoop/metastore/PasswordRedactorTest.java
@@ -17,7 +17,9 @@
  */
 package org.apache.sqoop.metastore;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -26,6 +28,7 @@
 import static org.apache.sqoop.metastore.PasswordRedactor.REDACTED_PASSWORD_STRING;
 import static org.junit.Assert.assertEquals;
 
+@Category(UnitTest.class)
 public class PasswordRedactorTest {
 
     @Test
diff --git a/src/test/org/apache/sqoop/metastore/SavedJobsTestBase.java b/src/test/org/apache/sqoop/metastore/SavedJobsTestBase.java
index 9c9b2f4..0bd9ef3 100644
--- a/src/test/org/apache/sqoop/metastore/SavedJobsTestBase.java
+++ b/src/test/org/apache/sqoop/metastore/SavedJobsTestBase.java
@@ -28,6 +28,7 @@
 
 import org.apache.sqoop.manager.ConnManager;
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
 import org.apache.sqoop.tool.VersionTool;
 
 import org.apache.hadoop.conf.Configuration;
@@ -40,6 +41,7 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 import java.io.IOException;
@@ -56,6 +58,7 @@
  * Test the metastore and job-handling features,
  * implemented for specific database services in sub-classes.
  */
+@Category(IntegrationTest.class)
 public abstract class SavedJobsTestBase {
 
   public static final String TEST_JOB = "testJob";
diff --git a/src/test/org/apache/sqoop/metastore/TestAutoGenericJobStorage.java b/src/test/org/apache/sqoop/metastore/TestAutoGenericJobStorage.java
index d5424c6..ac67ee5 100644
--- a/src/test/org/apache/sqoop/metastore/TestAutoGenericJobStorage.java
+++ b/src/test/org/apache/sqoop/metastore/TestAutoGenericJobStorage.java
@@ -19,8 +19,10 @@
 package org.apache.sqoop.metastore;
 
 import org.apache.hadoop.conf.Configuration;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -29,6 +31,7 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
+@Category(UnitTest.class)
 public class TestAutoGenericJobStorage {
 
   private AutoGenericJobStorage jobStorage;
diff --git a/src/test/org/apache/sqoop/metastore/TestGenericJobStorage.java b/src/test/org/apache/sqoop/metastore/TestGenericJobStorage.java
index 026fbde..e61fe56 100644
--- a/src/test/org/apache/sqoop/metastore/TestGenericJobStorage.java
+++ b/src/test/org/apache/sqoop/metastore/TestGenericJobStorage.java
@@ -18,9 +18,11 @@
 
 package org.apache.sqoop.metastore;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 import java.io.IOException;
@@ -31,6 +33,7 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
+@Category(UnitTest.class)
 public class TestGenericJobStorage {
 
   @Rule
diff --git a/src/test/org/apache/sqoop/metastore/TestGenericJobStorageValidate.java b/src/test/org/apache/sqoop/metastore/TestGenericJobStorageValidate.java
index 9995a42..3cfbc0b 100644
--- a/src/test/org/apache/sqoop/metastore/TestGenericJobStorageValidate.java
+++ b/src/test/org/apache/sqoop/metastore/TestGenericJobStorageValidate.java
@@ -18,9 +18,12 @@
 
 package org.apache.sqoop.metastore;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
+import org.apache.sqoop.util.BlockJUnit4ClassRunnerWithParametersFactory;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -29,6 +32,8 @@
 import java.util.Arrays;
 
 @RunWith(Parameterized.class)
+@Category(UnitTest.class)
+@Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class)
 public class TestGenericJobStorageValidate {
 
   @Parameters(name = "metastoreConnectionString = {0}, validationShouldFail = {1}")
diff --git a/src/test/org/apache/sqoop/metastore/TestMetastoreConfigurationParameters.java b/src/test/org/apache/sqoop/metastore/TestMetastoreConfigurationParameters.java
index 5a6fac5..bf75289 100644
--- a/src/test/org/apache/sqoop/metastore/TestMetastoreConfigurationParameters.java
+++ b/src/test/org/apache/sqoop/metastore/TestMetastoreConfigurationParameters.java
@@ -18,6 +18,7 @@
 
 package org.apache.sqoop.metastore;
 
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
 import org.apache.sqoop.testutil.ArgumentArrayBuilder;
 import org.apache.sqoop.testutil.HsqldbTestServer;
 import org.apache.sqoop.Sqoop;
@@ -26,6 +27,7 @@
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.io.IOException;
 import java.sql.Connection;
@@ -36,7 +38,7 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
-
+@Category(IntegrationTest.class)
 public class TestMetastoreConfigurationParameters {
 
     private static final int STATUS_FAILURE = 1;
diff --git a/src/test/org/apache/sqoop/metastore/db2/DB2JobToolTest.java b/src/test/org/apache/sqoop/metastore/db2/DB2JobToolTest.java
index b2b1fb6..81ef5fc 100644
--- a/src/test/org/apache/sqoop/metastore/db2/DB2JobToolTest.java
+++ b/src/test/org/apache/sqoop/metastore/db2/DB2JobToolTest.java
@@ -19,6 +19,8 @@
 package org.apache.sqoop.metastore.db2;
 
 import org.apache.sqoop.metastore.JobToolTestBase;
+import org.apache.sqoop.testcategories.thirdpartytest.Db2Test;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test that the Job Tool works in DB2
@@ -39,7 +41,7 @@
  *   -Dsqoop.test.db2.connectstring.host_url, -Dsqoop.test.db2.connectstring.database,
  *   -Dsqoop.test.db2.connectstring.username and -Dsqoop.test.db2.connectstring.password respectively
  */
-
+@Category(Db2Test.class)
 public class DB2JobToolTest extends JobToolTestBase {
 
     private static final String HOST_URL = System.getProperty(
diff --git a/src/test/org/apache/sqoop/metastore/db2/DB2MetaConnectIncrementalImportTest.java b/src/test/org/apache/sqoop/metastore/db2/DB2MetaConnectIncrementalImportTest.java
index e7969fa..5403908 100644
--- a/src/test/org/apache/sqoop/metastore/db2/DB2MetaConnectIncrementalImportTest.java
+++ b/src/test/org/apache/sqoop/metastore/db2/DB2MetaConnectIncrementalImportTest.java
@@ -19,6 +19,8 @@
 package org.apache.sqoop.metastore.db2;
 
 import org.apache.sqoop.metastore.MetaConnectIncrementalImportTestBase;
+import org.apache.sqoop.testcategories.thirdpartytest.Db2Test;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test that Incremental-Import values are stored correctly in DB2
@@ -39,7 +41,7 @@
  *   -Dsqoop.test.db2.connectstring.host_url, -Dsqoop.test.db2.connectstring.database,
  *   -Dsqoop.test.db2.connectstring.username and -Dsqoop.test.db2.connectstring.password respectively
  */
-
+@Category(Db2Test.class)
 public class DB2MetaConnectIncrementalImportTest extends MetaConnectIncrementalImportTestBase {
 
     private static final String HOST_URL = System.getProperty(
diff --git a/src/test/org/apache/sqoop/metastore/db2/DB2SavedJobsTest.java b/src/test/org/apache/sqoop/metastore/db2/DB2SavedJobsTest.java
index caf753c..b41eda1 100644
--- a/src/test/org/apache/sqoop/metastore/db2/DB2SavedJobsTest.java
+++ b/src/test/org/apache/sqoop/metastore/db2/DB2SavedJobsTest.java
@@ -20,6 +20,8 @@
 
 import org.apache.sqoop.metastore.SavedJobsTestBase;
 import org.apache.sqoop.manager.JdbcDrivers;
+import org.apache.sqoop.testcategories.thirdpartytest.Db2Test;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test of GenericJobStorage compatibility with DB2
@@ -40,7 +42,7 @@
  *   -Dsqoop.test.db2.connectstring.host_url, -Dsqoop.test.db2.connectstring.database,
  *   -Dsqoop.test.db2.connectstring.username and -Dsqoop.test.db2.connectstring.password respectively
  */
-
+@Category(Db2Test.class)
 public class DB2SavedJobsTest extends SavedJobsTestBase {
 
     private static final String HOST_URL = System.getProperty(
diff --git a/src/test/org/apache/sqoop/metastore/mysql/MySqlJobToolTest.java b/src/test/org/apache/sqoop/metastore/mysql/MySqlJobToolTest.java
index 2ec9648..6ec57f6 100644
--- a/src/test/org/apache/sqoop/metastore/mysql/MySqlJobToolTest.java
+++ b/src/test/org/apache/sqoop/metastore/mysql/MySqlJobToolTest.java
@@ -20,6 +20,8 @@
 
 import org.apache.sqoop.manager.mysql.MySQLTestUtils;
 import org.apache.sqoop.metastore.JobToolTestBase;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test that the Job Tool works in MySql
@@ -40,7 +42,7 @@
  *   -Dsqoop.test.mysql.connectstring.host_url, -Dsqoop.test.mysql.databasename,
  *   -Dsqoop.test.mysql.username and -Dsqoop.test.mysql.password respectively
  */
-
+@Category(MysqlTest.class)
 public class MySqlJobToolTest extends JobToolTestBase {
 
     private static MySQLTestUtils mySQLTestUtils = new MySQLTestUtils();
diff --git a/src/test/org/apache/sqoop/metastore/mysql/MySqlMetaConnectIncrementalImportTest.java b/src/test/org/apache/sqoop/metastore/mysql/MySqlMetaConnectIncrementalImportTest.java
index e19bbc8..5e548cf 100644
--- a/src/test/org/apache/sqoop/metastore/mysql/MySqlMetaConnectIncrementalImportTest.java
+++ b/src/test/org/apache/sqoop/metastore/mysql/MySqlMetaConnectIncrementalImportTest.java
@@ -21,6 +21,8 @@
 
 import org.apache.sqoop.manager.mysql.MySQLTestUtils;
 import org.apache.sqoop.metastore.MetaConnectIncrementalImportTestBase;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test that Incremental-Import values are stored correctly in MySql
@@ -41,7 +43,7 @@
  *   -Dsqoop.test.mysql.connectstring.host_url, -Dsqoop.test.mysql.databasename,
  *   -Dsqoop.test.mysql.username and -Dsqoop.test.mysql.password respectively
  */
-
+@Category(MysqlTest.class)
 public class MySqlMetaConnectIncrementalImportTest extends MetaConnectIncrementalImportTestBase {
 
     private static MySQLTestUtils mySQLTestUtils = new MySQLTestUtils();
diff --git a/src/test/org/apache/sqoop/metastore/mysql/MySqlSavedJobsTest.java b/src/test/org/apache/sqoop/metastore/mysql/MySqlSavedJobsTest.java
index e15c322..9a66165 100644
--- a/src/test/org/apache/sqoop/metastore/mysql/MySqlSavedJobsTest.java
+++ b/src/test/org/apache/sqoop/metastore/mysql/MySqlSavedJobsTest.java
@@ -21,6 +21,8 @@
 import org.apache.sqoop.manager.mysql.MySQLTestUtils;
 import org.apache.sqoop.metastore.SavedJobsTestBase;
 import org.apache.sqoop.manager.JdbcDrivers;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test of GenericJobStorage compatibility with MySql
@@ -41,7 +43,7 @@
  *   -Dsqoop.test.mysql.connectstring.host_url, -Dsqoop.test.mysql.databasename,
  *   -Dsqoop.test.mysql.username and -Dsqoop.test.mysql.password respectively
  */
-
+@Category(MysqlTest.class)
 public class MySqlSavedJobsTest extends SavedJobsTestBase {
 
     private static MySQLTestUtils mySQLTestUtils = new MySQLTestUtils();
diff --git a/src/test/org/apache/sqoop/metastore/oracle/OracleJobToolTest.java b/src/test/org/apache/sqoop/metastore/oracle/OracleJobToolTest.java
index a3e61e9..0869ec0 100644
--- a/src/test/org/apache/sqoop/metastore/oracle/OracleJobToolTest.java
+++ b/src/test/org/apache/sqoop/metastore/oracle/OracleJobToolTest.java
@@ -20,6 +20,8 @@
 
 import org.apache.sqoop.manager.oracle.util.OracleUtils;
 import org.apache.sqoop.metastore.JobToolTestBase;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test that the Job Tool works in Oracle
@@ -40,7 +42,7 @@
  *   -Dsqoop.test.oracle.connectstring, -Dsqoop.test.oracle.username
  *   and -Dsqoop.test.oracle.password respectively
  */
-
+@Category(OracleTest.class)
 public class OracleJobToolTest extends JobToolTestBase {
 
     public OracleJobToolTest() {
diff --git a/src/test/org/apache/sqoop/metastore/oracle/OracleMetaConnectIncrementalImportTest.java b/src/test/org/apache/sqoop/metastore/oracle/OracleMetaConnectIncrementalImportTest.java
index 37beaa4..8b92ef4 100644
--- a/src/test/org/apache/sqoop/metastore/oracle/OracleMetaConnectIncrementalImportTest.java
+++ b/src/test/org/apache/sqoop/metastore/oracle/OracleMetaConnectIncrementalImportTest.java
@@ -20,6 +20,8 @@
 
 import org.apache.sqoop.manager.oracle.util.OracleUtils;
 import org.apache.sqoop.metastore.MetaConnectIncrementalImportTestBase;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test that Incremental-Import values are stored correctly in Oracle
@@ -40,7 +42,7 @@
  *   -Dsqoop.test.oracle.connectstring, -Dsqoop.test.oracle.username
  *   and -Dsqoop.test.oracle.password respectively
  */
-
+@Category(OracleTest.class)
 public class OracleMetaConnectIncrementalImportTest extends MetaConnectIncrementalImportTestBase {
 
     public OracleMetaConnectIncrementalImportTest() {
diff --git a/src/test/org/apache/sqoop/metastore/oracle/OracleSavedJobsTest.java b/src/test/org/apache/sqoop/metastore/oracle/OracleSavedJobsTest.java
index 4691530..8e6e6c4 100644
--- a/src/test/org/apache/sqoop/metastore/oracle/OracleSavedJobsTest.java
+++ b/src/test/org/apache/sqoop/metastore/oracle/OracleSavedJobsTest.java
@@ -21,6 +21,8 @@
 import org.apache.sqoop.manager.oracle.util.OracleUtils;
 import org.apache.sqoop.metastore.SavedJobsTestBase;
 import org.apache.sqoop.manager.JdbcDrivers;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test of GenericJobStorage compatibility with Oracle
@@ -41,7 +43,7 @@
  *   -Dsqoop.test.oracle.connectstring, -Dsqoop.test.oracle.username
  *   and -Dsqoop.test.oracle.password respectively
  */
-
+@Category(OracleTest.class)
 public class OracleSavedJobsTest extends SavedJobsTestBase {
 
     public OracleSavedJobsTest() {
diff --git a/src/test/org/apache/sqoop/metastore/postgres/PostgresJobToolTest.java b/src/test/org/apache/sqoop/metastore/postgres/PostgresJobToolTest.java
index 065e1bb..59ea151 100644
--- a/src/test/org/apache/sqoop/metastore/postgres/PostgresJobToolTest.java
+++ b/src/test/org/apache/sqoop/metastore/postgres/PostgresJobToolTest.java
@@ -19,6 +19,8 @@
 package org.apache.sqoop.metastore.postgres;
 
 import org.apache.sqoop.metastore.JobToolTestBase;
+import org.apache.sqoop.testcategories.thirdpartytest.PostgresqlTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test that the Job Tool works in PostgreSQL
@@ -35,7 +37,7 @@
  *   -Dsqoop.test.postgresql.connectstring.host_url, -Dsqoop.test.postgresql.database,
  *   -Dsqoop.test.postgresql.username and -Dsqoop.test.postgresql.password respectively
  */
-
+@Category(PostgresqlTest.class)
 public class PostgresJobToolTest extends JobToolTestBase {
 
     private static final String HOST_URL = System.getProperty("sqoop.test.postgresql.connectstring.host_url",
diff --git a/src/test/org/apache/sqoop/metastore/postgres/PostgresMetaConnectIncrementalImportTest.java b/src/test/org/apache/sqoop/metastore/postgres/PostgresMetaConnectIncrementalImportTest.java
index 0ffbf5a..afc6bd2 100644
--- a/src/test/org/apache/sqoop/metastore/postgres/PostgresMetaConnectIncrementalImportTest.java
+++ b/src/test/org/apache/sqoop/metastore/postgres/PostgresMetaConnectIncrementalImportTest.java
@@ -19,6 +19,8 @@
 package org.apache.sqoop.metastore.postgres;
 
 import org.apache.sqoop.metastore.MetaConnectIncrementalImportTestBase;
+import org.apache.sqoop.testcategories.thirdpartytest.PostgresqlTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test that Incremental-Import values are stored correctly in PostgreSQL
@@ -35,7 +37,7 @@
  *   -Dsqoop.test.postgresql.connectstring.host_url, -Dsqoop.test.postgresql.database,
  *   -Dsqoop.test.postgresql.username and -Dsqoop.test.postgresql.password respectively
  */
-
+@Category(PostgresqlTest.class)
 public class PostgresMetaConnectIncrementalImportTest extends MetaConnectIncrementalImportTestBase {
 
     private static final String HOST_URL = System.getProperty("sqoop.test.postgresql.connectstring.host_url",
diff --git a/src/test/org/apache/sqoop/metastore/postgres/PostgresSavedJobsTest.java b/src/test/org/apache/sqoop/metastore/postgres/PostgresSavedJobsTest.java
index ee3f005..9f9e865 100644
--- a/src/test/org/apache/sqoop/metastore/postgres/PostgresSavedJobsTest.java
+++ b/src/test/org/apache/sqoop/metastore/postgres/PostgresSavedJobsTest.java
@@ -20,6 +20,8 @@
 
 import org.apache.sqoop.metastore.SavedJobsTestBase;
 import org.apache.sqoop.manager.JdbcDrivers;
+import org.apache.sqoop.testcategories.thirdpartytest.PostgresqlTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test of GenericJobStorage compatibility with PostgreSQL
@@ -36,7 +38,7 @@
  *   -Dsqoop.test.postgresql.connectstring.host_url, -Dsqoop.test.postgresql.database,
  *   -Dsqoop.test.postgresql.username and -Dsqoop.test.postgresql.password respectively
  */
-
+@Category(PostgresqlTest.class)
 public class PostgresSavedJobsTest extends SavedJobsTestBase {
 
     private static final String HOST_URL = System.getProperty("sqoop.test.postgresql.connectstring.host_url",
diff --git a/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerJobToolTest.java b/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerJobToolTest.java
index 87d7b34..8a27b0d 100644
--- a/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerJobToolTest.java
+++ b/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerJobToolTest.java
@@ -20,6 +20,8 @@
 
 import org.apache.sqoop.metastore.JobToolTestBase;
 import org.apache.sqoop.manager.sqlserver.MSSQLTestUtils;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test that the Job Tool works in SQLServer
@@ -40,7 +42,7 @@
  *   -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database,
  *   -Dms.sqlserver.username and -Dms.sqlserver.password respectively
  */
-
+@Category(SqlServerTest.class)
 public class SqlServerJobToolTest extends JobToolTestBase {
 
     private static MSSQLTestUtils msSQLTestUtils = new MSSQLTestUtils();
diff --git a/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerMetaConnectIncrementalImportTest.java b/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerMetaConnectIncrementalImportTest.java
index f1a2a66..87028a4 100644
--- a/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerMetaConnectIncrementalImportTest.java
+++ b/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerMetaConnectIncrementalImportTest.java
@@ -20,6 +20,8 @@
 
 import org.apache.sqoop.metastore.MetaConnectIncrementalImportTestBase;
 import org.apache.sqoop.manager.sqlserver.MSSQLTestUtils;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test that Incremental-Import values are stored correctly in SQLServer
@@ -40,7 +42,7 @@
  *   -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database,
  *   -Dms.sqlserver.username and -Dms.sqlserver.password respectively
  */
-
+@Category(SqlServerTest.class)
 public class SqlServerMetaConnectIncrementalImportTest extends MetaConnectIncrementalImportTestBase {
 
     private static MSSQLTestUtils msSQLTestUtils = new MSSQLTestUtils();
diff --git a/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerSavedJobsTest.java b/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerSavedJobsTest.java
index b37623b..34987b6 100644
--- a/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerSavedJobsTest.java
+++ b/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerSavedJobsTest.java
@@ -21,6 +21,8 @@
 import org.apache.sqoop.metastore.SavedJobsTestBase;
 import org.apache.sqoop.manager.JdbcDrivers;
 import org.apache.sqoop.manager.sqlserver.MSSQLTestUtils;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test of GenericJobStorage compatibility with SQLServer
@@ -41,7 +43,7 @@
  *   -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database,
  *   -Dms.sqlserver.username and -Dms.sqlserver.password respectively
  */
-
+@Category(SqlServerTest.class)
 public class SqlServerSavedJobsTest extends SavedJobsTestBase {
 
     private static MSSQLTestUtils msSQLTestUtils = new MSSQLTestUtils();
diff --git a/src/test/org/apache/sqoop/orm/TestClassWriter.java b/src/test/org/apache/sqoop/orm/TestClassWriter.java
index 0cc07cf..59a8908 100644
--- a/src/test/org/apache/sqoop/orm/TestClassWriter.java
+++ b/src/test/org/apache/sqoop/orm/TestClassWriter.java
@@ -34,6 +34,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.util.Shell;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
@@ -47,6 +48,7 @@
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.tool.ImportTool;
 import org.apache.sqoop.util.ClassLoaderStack;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 import java.lang.reflect.Field;
@@ -61,6 +63,7 @@
  * Test that the ClassWriter generates Java classes based on the given table,
  * which compile.
  */
+@Category(IntegrationTest.class)
 public class TestClassWriter {
 
   public static final Log LOG =
diff --git a/src/test/org/apache/sqoop/orm/TestCompilationManager.java b/src/test/org/apache/sqoop/orm/TestCompilationManager.java
index abd72d8..fb39f29 100644
--- a/src/test/org/apache/sqoop/orm/TestCompilationManager.java
+++ b/src/test/org/apache/sqoop/orm/TestCompilationManager.java
@@ -18,12 +18,15 @@
 package org.apache.sqoop.orm;
 
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.mock;
 
+@Category(UnitTest.class)
 public class TestCompilationManager {
 
   private CompilationManager compilationManager;
diff --git a/src/test/org/apache/sqoop/testcategories/KerberizedTest.java b/src/test/org/apache/sqoop/testcategories/KerberizedTest.java
new file mode 100644
index 0000000..2a1bd7c
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/KerberizedTest.java
@@ -0,0 +1,24 @@
+/**
+ * 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.sqoop.testcategories;
+
+/**
+ * A kerberized test shall run in kerberized environment thus it starts mini KDC server.
+ */
+public interface KerberizedTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/sqooptest/IntegrationTest.java b/src/test/org/apache/sqoop/testcategories/sqooptest/IntegrationTest.java
new file mode 100644
index 0000000..aa3fa97
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/sqooptest/IntegrationTest.java
@@ -0,0 +1,26 @@
+/**
+ * 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.sqoop.testcategories.sqooptest;
+
+/**
+ * An integration test shall test if independently developed classes work together correctly.
+ * An integration test checks a whole scenario and thus may start mini clusters or embedded databases and may connect to
+ * external resources like RDBMS instances.
+ */
+public interface IntegrationTest extends SqoopTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/sqooptest/ManualTest.java b/src/test/org/apache/sqoop/testcategories/sqooptest/ManualTest.java
new file mode 100644
index 0000000..e349117
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/sqooptest/ManualTest.java
@@ -0,0 +1,24 @@
+/**
+ * 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.sqoop.testcategories.sqooptest;
+
+/**
+ * Deprecated category, shall not be used nor extended.
+ */
+public interface ManualTest extends IntegrationTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/sqooptest/SqoopTest.java b/src/test/org/apache/sqoop/testcategories/sqooptest/SqoopTest.java
new file mode 100644
index 0000000..c1dc529
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/sqooptest/SqoopTest.java
@@ -0,0 +1,35 @@
+/**
+ * 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.sqoop.testcategories.sqooptest;
+
+/**
+ * SqoopTest includes UnitTest, IntegrationTest and ManualTest.
+ *
+ * UnitTest:
+ * A unit test shall test one class at a time having it's dependencies mocked.
+ * A unit test shall not start a mini cluster nor an embedded database and it shall not use a JDBC driver.
+ *
+ * IntegrationTest:
+ * An integration test shall test if independently developed classes work together correctly.
+ * An integration test checks a whole scenario and thus may start mini clusters or embedded databases and may connect to external resources like RDBMS instances.
+ *
+ * ManualTest:
+ * Deprecated category, shall not be used nor extended.
+ */
+public interface SqoopTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/sqooptest/UnitTest.java b/src/test/org/apache/sqoop/testcategories/sqooptest/UnitTest.java
new file mode 100644
index 0000000..b6afac6
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/sqooptest/UnitTest.java
@@ -0,0 +1,25 @@
+/**
+ * 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.sqoop.testcategories.sqooptest;
+
+/**
+ * A unit test shall test one class at a time having it's dependencies mocked.
+ * A unit test shall not start a mini cluster nor an embedded database and it shall not use a JDBC driver.
+ */
+public interface UnitTest extends SqoopTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/thirdpartytest/CubridTest.java b/src/test/org/apache/sqoop/testcategories/thirdpartytest/CubridTest.java
new file mode 100644
index 0000000..4efc262
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/thirdpartytest/CubridTest.java
@@ -0,0 +1,24 @@
+/**
+ * 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.sqoop.testcategories.thirdpartytest;
+
+/**
+ * A CubridTest shall test scenarios where a Cubrid driver and/or external instance is required.
+ */
+public interface CubridTest extends ThirdPartyTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/thirdpartytest/Db2Test.java b/src/test/org/apache/sqoop/testcategories/thirdpartytest/Db2Test.java
new file mode 100644
index 0000000..e33aa81
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/thirdpartytest/Db2Test.java
@@ -0,0 +1,24 @@
+/**
+ * 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.sqoop.testcategories.thirdpartytest;
+
+/**
+ * A DB2 test shall test scenarios where a DB2 driver and/or external instance is required.
+ */
+public interface Db2Test extends ThirdPartyTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/thirdpartytest/MainFrameTest.java b/src/test/org/apache/sqoop/testcategories/thirdpartytest/MainFrameTest.java
new file mode 100644
index 0000000..8f3ed36
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/thirdpartytest/MainFrameTest.java
@@ -0,0 +1,24 @@
+/**
+ * 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.sqoop.testcategories.thirdpartytest;
+
+/**
+ * A MainFrame test shall test scenarios where a MainFrame external instance is required.
+ */
+public interface MainFrameTest extends ThirdPartyTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/thirdpartytest/MysqlTest.java b/src/test/org/apache/sqoop/testcategories/thirdpartytest/MysqlTest.java
new file mode 100644
index 0000000..db9fc69
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/thirdpartytest/MysqlTest.java
@@ -0,0 +1,24 @@
+/**
+ * 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.sqoop.testcategories.thirdpartytest;
+
+/**
+ * A MySql test shall test scenarios where a MySql driver and/or external instance is required.
+ */
+public interface MysqlTest extends ThirdPartyTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/thirdpartytest/NetezzaTest.java b/src/test/org/apache/sqoop/testcategories/thirdpartytest/NetezzaTest.java
new file mode 100644
index 0000000..7ea2768
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/thirdpartytest/NetezzaTest.java
@@ -0,0 +1,24 @@
+/**
+ * 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.sqoop.testcategories.thirdpartytest;
+
+/**
+ * A Netezza test shall test scenarios where a Netezza driver and/or external instance is required.
+ */
+public interface NetezzaTest extends ThirdPartyTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/thirdpartytest/OracleTest.java b/src/test/org/apache/sqoop/testcategories/thirdpartytest/OracleTest.java
new file mode 100644
index 0000000..045f545
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/thirdpartytest/OracleTest.java
@@ -0,0 +1,24 @@
+/**
+ * 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.sqoop.testcategories.thirdpartytest;
+
+/**
+ * An Oracle test shall test scenarios where a Oracle driver and/or external instance is required.
+ */
+public interface OracleTest extends ThirdPartyTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/thirdpartytest/PostgresqlTest.java b/src/test/org/apache/sqoop/testcategories/thirdpartytest/PostgresqlTest.java
new file mode 100644
index 0000000..663e668
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/thirdpartytest/PostgresqlTest.java
@@ -0,0 +1,24 @@
+/**
+ * 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.sqoop.testcategories.thirdpartytest;
+
+/**
+ * A PostgreSql test shall test scenarios where a PostgreSql driver and/or external instance is required.
+ */
+public interface PostgresqlTest extends ThirdPartyTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/thirdpartytest/SqlServerTest.java b/src/test/org/apache/sqoop/testcategories/thirdpartytest/SqlServerTest.java
new file mode 100644
index 0000000..7832017
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/thirdpartytest/SqlServerTest.java
@@ -0,0 +1,24 @@
+/**
+ * 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.sqoop.testcategories.thirdpartytest;
+
+/**
+ * An SqlServer test shall test scenarios where a SqlServer driver and/or external instance is required.
+ */
+public interface SqlServerTest extends ThirdPartyTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/thirdpartytest/ThirdPartyTest.java b/src/test/org/apache/sqoop/testcategories/thirdpartytest/ThirdPartyTest.java
new file mode 100644
index 0000000..d2dd29a
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/thirdpartytest/ThirdPartyTest.java
@@ -0,0 +1,25 @@
+/**
+ * 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.sqoop.testcategories.thirdpartytest;
+
+/**
+ * A third party test shall test a scenario where a third party side is required such as a JDBC driver or an external
+ * RDBMS instance.
+ */
+public interface ThirdPartyTest {
+}
diff --git a/src/test/org/apache/sqoop/testutil/BaseSqoopTestCase.java b/src/test/org/apache/sqoop/testutil/BaseSqoopTestCase.java
index fe6ba83..e23aad3 100644
--- a/src/test/org/apache/sqoop/testutil/BaseSqoopTestCase.java
+++ b/src/test/org/apache/sqoop/testutil/BaseSqoopTestCase.java
@@ -22,6 +22,7 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.manager.ConnManager;
 import org.apache.sqoop.metastore.JobData;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
 import org.apache.sqoop.tool.ImportTool;
 import com.google.common.collect.ObjectArrays;
 import org.apache.commons.logging.Log;
@@ -34,6 +35,7 @@
 import org.apache.sqoop.SqoopJobDataPublisher;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.experimental.categories.Category;
 
 import java.io.File;
 import java.io.IOException;
@@ -53,6 +55,7 @@
 /**
  * Class that implements common methods required for tests.
  */
+@Category(IntegrationTest.class)
 public abstract class BaseSqoopTestCase {
 
   public static class DummyDataPublisher extends SqoopJobDataPublisher {
diff --git a/src/test/org/apache/sqoop/testutil/TestArgumentArrayBuilder.java b/src/test/org/apache/sqoop/testutil/TestArgumentArrayBuilder.java
index 6d701ab..0c38eac 100644
--- a/src/test/org/apache/sqoop/testutil/TestArgumentArrayBuilder.java
+++ b/src/test/org/apache/sqoop/testutil/TestArgumentArrayBuilder.java
@@ -18,10 +18,13 @@
 
 package org.apache.sqoop.testutil;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertArrayEquals;
 
+@Category(UnitTest.class)
 public class TestArgumentArrayBuilder {
 
   @Test
diff --git a/src/test/org/apache/sqoop/tool/ImportToolValidateOptionsTest.java b/src/test/org/apache/sqoop/tool/ImportToolValidateOptionsTest.java
index bdac437..b192415 100644
--- a/src/test/org/apache/sqoop/tool/ImportToolValidateOptionsTest.java
+++ b/src/test/org/apache/sqoop/tool/ImportToolValidateOptionsTest.java
@@ -19,9 +19,12 @@
 package org.apache.sqoop.tool;
 
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
+import org.apache.sqoop.util.BlockJUnit4ClassRunnerWithParametersFactory;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -34,7 +37,9 @@
 import static org.apache.sqoop.SqoopOptions.FileLayout.ParquetFile;
 import static org.apache.sqoop.SqoopOptions.FileLayout.TextFile;
 
+@Category(UnitTest.class)
 @RunWith(Parameterized.class)
+@Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class)
 public class ImportToolValidateOptionsTest {
 
   @Parameters(name = "fileLayout = {0}, validationMessage = {1}")
diff --git a/src/test/org/apache/sqoop/tool/TestBaseSqoopTool.java b/src/test/org/apache/sqoop/tool/TestBaseSqoopTool.java
index aecfa8b..5767e0a 100644
--- a/src/test/org/apache/sqoop/tool/TestBaseSqoopTool.java
+++ b/src/test/org/apache/sqoop/tool/TestBaseSqoopTool.java
@@ -23,9 +23,11 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.cli.RelatedOptions;
 import org.apache.sqoop.mapreduce.parquet.ParquetJobConfiguratorImplementation;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 import org.mockito.Mockito;
 
@@ -36,6 +38,7 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+@Category(UnitTest.class)
 public class TestBaseSqoopTool {
 
   private static final String PARQUET_CONFIGURATOR_IMPLEMENTATION = "parquet-configurator-implementation";
diff --git a/src/test/org/apache/sqoop/tool/TestExportToolValidateOptions.java b/src/test/org/apache/sqoop/tool/TestExportToolValidateOptions.java
index f16d187..6a5184a 100644
--- a/src/test/org/apache/sqoop/tool/TestExportToolValidateOptions.java
+++ b/src/test/org/apache/sqoop/tool/TestExportToolValidateOptions.java
@@ -21,7 +21,9 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.sqoop.manager.SupportedManagers;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
@@ -44,6 +46,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+@Category(UnitTest.class)
 public class TestExportToolValidateOptions {
   ExportTool exportTool = new ExportTool();
 
diff --git a/src/test/org/apache/sqoop/tool/TestHiveServer2OptionValidations.java b/src/test/org/apache/sqoop/tool/TestHiveServer2OptionValidations.java
index ed4b5a4..926d2fc 100644
--- a/src/test/org/apache/sqoop/tool/TestHiveServer2OptionValidations.java
+++ b/src/test/org/apache/sqoop/tool/TestHiveServer2OptionValidations.java
@@ -19,9 +19,12 @@
 package org.apache.sqoop.tool;
 
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
+import org.apache.sqoop.util.BlockJUnit4ClassRunnerWithParametersFactory;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -30,7 +33,6 @@
 import java.util.Arrays;
 import java.util.Properties;
 
-import static org.apache.sqoop.SqoopOptions.FileLayout.ParquetFile;
 import static org.apache.sqoop.SqoopOptions.IncrementalMode.None;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.doReturn;
@@ -39,6 +41,8 @@
 import static org.mockito.Mockito.when;
 
 @RunWith(Parameterized.class)
+@Category(UnitTest.class)
+@Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class)
 public class TestHiveServer2OptionValidations {
 
   @Parameters(name = "sqoopTool = {0}")
diff --git a/src/test/org/apache/sqoop/tool/TestImportTool.java b/src/test/org/apache/sqoop/tool/TestImportTool.java
index 8c2be3b..9f7c50c 100644
--- a/src/test/org/apache/sqoop/tool/TestImportTool.java
+++ b/src/test/org/apache/sqoop/tool/TestImportTool.java
@@ -38,17 +38,20 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.avro.AvroSchemaMismatchException;
 import org.apache.sqoop.hive.HiveClientFactory;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.util.ExpectedLogMessage;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.experimental.theories.DataPoints;
 import org.junit.experimental.theories.Theories;
 import org.junit.experimental.theories.Theory;
 import org.junit.runner.RunWith;
 
 @RunWith(Theories.class)
+@Category(UnitTest.class)
 public class TestImportTool {
   @DataPoints
   public static final Object[][] TRANSACTION_ISOLATION_LEVEL_NAMES_AND_VALUES = {
diff --git a/src/test/org/apache/sqoop/tool/TestToolPlugin.java b/src/test/org/apache/sqoop/tool/TestToolPlugin.java
index 19dea22..70d13dd 100644
--- a/src/test/org/apache/sqoop/tool/TestToolPlugin.java
+++ b/src/test/org/apache/sqoop/tool/TestToolPlugin.java
@@ -38,7 +38,9 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -46,6 +48,7 @@
 /**
  * Test that tool plugins work.
  */
+@Category(UnitTest.class)
 public class TestToolPlugin {
 
   public static final Log LOG = LogFactory
diff --git a/src/test/org/apache/sqoop/tool/TestValidateImportOptions.java b/src/test/org/apache/sqoop/tool/TestValidateImportOptions.java
index 9b61bd5..99814b4 100644
--- a/src/test/org/apache/sqoop/tool/TestValidateImportOptions.java
+++ b/src/test/org/apache/sqoop/tool/TestValidateImportOptions.java
@@ -22,7 +22,9 @@
 import org.apache.hadoop.conf.Configuration;
 import org.apache.sqoop.manager.SupportedManagers;
 import org.apache.commons.lang.RandomStringUtils;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
@@ -30,6 +32,7 @@
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
+@Category(UnitTest.class)
 public class TestValidateImportOptions {
 
     ImportTool importTool = new ImportTool();
diff --git a/src/test/org/apache/sqoop/util/BlockJUnit4ClassRunnerWithParameters.java b/src/test/org/apache/sqoop/util/BlockJUnit4ClassRunnerWithParameters.java
new file mode 100644
index 0000000..2bb2a09
--- /dev/null
+++ b/src/test/org/apache/sqoop/util/BlockJUnit4ClassRunnerWithParameters.java
@@ -0,0 +1,45 @@
+/**
+ * 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.sqoop.util;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.model.InitializationError;
+import org.junit.runners.parameterized.TestWithParameters;
+
+import java.lang.annotation.Annotation;
+
+public class BlockJUnit4ClassRunnerWithParameters extends org.junit.runners.parameterized.BlockJUnit4ClassRunnerWithParameters {
+  public BlockJUnit4ClassRunnerWithParameters(TestWithParameters test) throws InitializationError {
+    super(test);
+  }
+
+  @Override
+  protected Annotation[] getRunnerAnnotations() {
+    Annotation[] allAnnotations = getTestClass().getAnnotations();
+    Annotation[] annotationsWithoutRunWith = new Annotation[allAnnotations.length - 1];
+    int i = 0;
+    for (Annotation annotation: allAnnotations) {
+      if (!annotation.annotationType().equals(RunWith.class)) {
+        annotationsWithoutRunWith[i] = annotation;
+        ++i;
+      }
+    }
+    return annotationsWithoutRunWith;
+  }
+}
diff --git a/src/test/org/apache/sqoop/util/BlockJUnit4ClassRunnerWithParametersFactory.java b/src/test/org/apache/sqoop/util/BlockJUnit4ClassRunnerWithParametersFactory.java
new file mode 100644
index 0000000..2e9d330
--- /dev/null
+++ b/src/test/org/apache/sqoop/util/BlockJUnit4ClassRunnerWithParametersFactory.java
@@ -0,0 +1,37 @@
+/**
+ * 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.sqoop.util;
+
+import org.junit.runner.Runner;
+import org.junit.runners.model.InitializationError;
+import org.junit.runners.parameterized.ParametersRunnerFactory;
+import org.junit.runners.parameterized.TestWithParameters;
+
+/**
+ * Due to an issue in JUnit Gradle does not execute categorized tests which are parameterized too.
+ * The issue is already reported(https://github.com/junit-team/junit4/issues/751) but its fix will be released in JUnit 4.13.
+ * This factory returns a custom BlockJUnit4ClassRunnerWithParameters instance which contains the fix for this issue so
+ * we have to use @Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class) annotation
+ * on parameterized test classes until JUnit 4.13 is released and we migrate to it.
+ */
+public class BlockJUnit4ClassRunnerWithParametersFactory implements ParametersRunnerFactory {
+  @Override
+  public Runner createRunnerForTestWithParameters(TestWithParameters test) throws InitializationError {
+    return new BlockJUnit4ClassRunnerWithParameters(test);
+  }
+}
diff --git a/src/test/org/apache/sqoop/util/TestDirCleanupHook.java b/src/test/org/apache/sqoop/util/TestDirCleanupHook.java
index 41146fd..1af5033 100644
--- a/src/test/org/apache/sqoop/util/TestDirCleanupHook.java
+++ b/src/test/org/apache/sqoop/util/TestDirCleanupHook.java
@@ -18,13 +18,16 @@
 
 package org.apache.sqoop.util;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.TemporaryFolder;
 
 import static org.junit.Assert.assertFalse;
 
+@Category(UnitTest.class)
 public class TestDirCleanupHook {
   @Rule
   public TemporaryFolder tmpFolder = new TemporaryFolder();
diff --git a/src/test/org/apache/sqoop/util/TestFileSystemUtil.java b/src/test/org/apache/sqoop/util/TestFileSystemUtil.java
index 28fb58c..961c8fa 100644
--- a/src/test/org/apache/sqoop/util/TestFileSystemUtil.java
+++ b/src/test/org/apache/sqoop/util/TestFileSystemUtil.java
@@ -23,10 +23,14 @@
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.fs.RawLocalFileSystem;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
 import org.junit.Before;
+import org.junit.experimental.categories.Category;
+
 import static org.junit.Assert.*;
 
+@Category(UnitTest.class)
 public class TestFileSystemUtil {
   private Configuration conf;
 
diff --git a/src/test/org/apache/sqoop/util/TestMainframeFTPClientUtils.java b/src/test/org/apache/sqoop/util/TestMainframeFTPClientUtils.java
index 0714bdc..fc6e56d 100644
--- a/src/test/org/apache/sqoop/util/TestMainframeFTPClientUtils.java
+++ b/src/test/org/apache/sqoop/util/TestMainframeFTPClientUtils.java
@@ -34,11 +34,14 @@
 import org.apache.sqoop.mapreduce.JobBase;
 import org.apache.sqoop.mapreduce.db.DBConfiguration;
 import org.apache.sqoop.mapreduce.mainframe.MainframeConfiguration;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class TestMainframeFTPClientUtils {
 
   private JobConf conf;
diff --git a/src/test/org/apache/sqoop/util/TestOptionsFileExpansion.java b/src/test/org/apache/sqoop/util/TestOptionsFileExpansion.java
index 3fc9e60..98e2bde 100644
--- a/src/test/org/apache/sqoop/util/TestOptionsFileExpansion.java
+++ b/src/test/org/apache/sqoop/util/TestOptionsFileExpansion.java
@@ -22,15 +22,18 @@
 import java.io.FileWriter;
 import java.io.IOException;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.util.OptionsFileUtil;
 import org.junit.Assert;
 
 import org.apache.sqoop.Sqoop;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 /**
  * Tests various options file loading scenarios.
  */
+@Category(UnitTest.class)
 public class TestOptionsFileExpansion {
 
   /**
diff --git a/src/test/org/apache/sqoop/util/TestSqoopJsonUtil.java b/src/test/org/apache/sqoop/util/TestSqoopJsonUtil.java
index fdf972c..a19b955 100644
--- a/src/test/org/apache/sqoop/util/TestSqoopJsonUtil.java
+++ b/src/test/org/apache/sqoop/util/TestSqoopJsonUtil.java
@@ -23,9 +23,12 @@
 
 import java.util.HashMap;
 import java.util.Map;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class TestSqoopJsonUtil {
 
   private static Map<String, String> paramMap;
diff --git a/src/test/org/apache/sqoop/util/TestSubstitutionUtils.java b/src/test/org/apache/sqoop/util/TestSubstitutionUtils.java
index a2ac341..53e790a 100644
--- a/src/test/org/apache/sqoop/util/TestSubstitutionUtils.java
+++ b/src/test/org/apache/sqoop/util/TestSubstitutionUtils.java
@@ -17,14 +17,17 @@
  */
 package org.apache.sqoop.util;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.util.SubstitutionUtils;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 
 /**
  *
  */
+@Category(UnitTest.class)
 public class TestSubstitutionUtils {
 
   @Test
diff --git a/src/test/org/apache/sqoop/validation/AbortOnFailureHandlerTest.java b/src/test/org/apache/sqoop/validation/AbortOnFailureHandlerTest.java
index ee04563..6bc0d44 100644
--- a/src/test/org/apache/sqoop/validation/AbortOnFailureHandlerTest.java
+++ b/src/test/org/apache/sqoop/validation/AbortOnFailureHandlerTest.java
@@ -20,7 +20,9 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.hadoop.conf.Configuration;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -28,6 +30,7 @@
 /**
  * Tests for AbortOnFailureHandler.
  */
+@Category(UnitTest.class)
 public class AbortOnFailureHandlerTest {
 
   @Test
diff --git a/src/test/org/apache/sqoop/validation/AbsoluteValidationThresholdTest.java b/src/test/org/apache/sqoop/validation/AbsoluteValidationThresholdTest.java
index 86a99c4..2c44349 100644
--- a/src/test/org/apache/sqoop/validation/AbsoluteValidationThresholdTest.java
+++ b/src/test/org/apache/sqoop/validation/AbsoluteValidationThresholdTest.java
@@ -18,7 +18,9 @@
 
 package org.apache.sqoop.validation;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -26,6 +28,7 @@
 /**
  * Tests for AbsoluteValidationThreshold.
  */
+@Category(UnitTest.class)
 public class AbsoluteValidationThresholdTest {
 
   /**