
= Compiling

This document explains how to compile and test Sqoop.

////
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.
////


== Build Dependencies

Compiling Sqoop requires the following tools:

* Apache ant (1.9.7) or Gradle (5.4.1)
* Java JDK 1.8

Additionally, building the documentation requires these tools:

* asciidoc
* make
* python 2.5+
* xmlto
* tar
* gzip

Furthermore, Sqoop's build can be instrumented with the following:

* findbugs (1.3.9) for code quality checks
* cobertura (1.9.4.1) for code coverage
* checkstyle (5.x) for code style checks

== The Basics

Sqoop can be compiled and tested with both Ant and Gradle. Type +ant -p+ or +./gradlew tasks --all+ to see the list of available targets/tasks.

Type +ant+ or +./gradlew jar+ to compile all java sources. You can then run Sqoop with +bin/sqoop+.

If you want to build everything (including the documentation), type
+ant package+ or +./gradlew package+. This will appear in the
+build/sqoop-(version)/+ directory.

== Testing Sqoop

Sqoop supports both Ant and Gradle but the test tasks are a bit different in each build tools.

=== Testing with Ant
The Ant build defines two main test categories: unit and third party tests.

Classes with the +Test+ prefix are unit tests and classes with the +Test+ postfix are third party tests.

Sqoop unit tests can be run with +ant test+. This command
will run all the "basic" checks against an in-memory database, HSQLDB.

Sqoop's third party tests are compatibility tests that check its ability to work with
several third-party databases. To enable these tests, you will need to install
and configure the databases or run them in Docker containers, and download the JDBC drivers for each one.

For more information about how to run this suite see the 'Third party tests' section.

Note that the unit test suite contains several Amazon S3 test classes too which test the "RDBMS to Amazon S3" use case with an in-memory database, HSQLDB.
To enable these tests, you will need to have either permanent or temporary Amazon S3 security credentials.

For more information about how to run this suite see the 'Amazon S3 tests' section.

=== Testing with Gradle

The Gradle build supports JUnit's +@Category+ annotation so we have access to much more fine grained test categories here.
The test categories are defined as marker interfaces under +org.apache.sqoop.testcategories+ package.

The following table shows the currently supported test categories and their hierarchy:

.Available test categories
[width="40%",frame="topbot",options="header"]
|===============================================================
|Category              |Subcategories       |
.3+|+SqoopTest+        |+UnitTest+          |
                       |+IntegrationTest+   |
                       |+ManualTest+        |
.9+|+ThirdPartyTest+   |+CubridTest+        |
                       |+Db2Test+           |
                       |+MainFrameTest+     |
                       |+MysqlTest+         |
                       |+NetezzaTest+       |
                       |+OracleTest+        |+OracleEeTest+
                       |+PostgresqlTest+    |
                       |+SqlServerTest+     |
                       |+S3Test+            |
|+KerberizedTest+      |                    |
|===============================================================

==== SqoopTest
A general category including 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.

==== 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.
The subcategories define what kind of third party dependency is needed by the test.

==== KerberizedTest
A kerberized test shall run in kerberized environment thus it starts mini KDC server.

==== Categorizing tests
Note that if you add a new test you have to make sure that it is categorized otherwise Gradle will not execute it.

The categorizing steps are the following:

* Decide if the test is a unit or an integration test, mark the test class with the +@Category+ annotation and add the
corresponding marker interface to it.
* If the test needs a JDBC driver or an external service then add +ThirdPartyTest+ or one of its subinterfaces to the
+@Category+ annotation. Try to use the most specific interface.
* If the test starts a Mini KDC then add the +KerberizedTest+ interface to the +@Category+ annotation.

==== Available test targets

* +unitTest+: Runs unit tests which do not need proprietary JDBC driver.
* +integrationTest+: Runs integration tests which do not need a docker container or an external database/service.
* +kerberizedTest+: Runs kerberized tests.
* +thirdPartyTest+: Runs third-party tests. For more information see the 'Third party tests' section.
* +postgreSqlTest+: Runs PostgreSql third-party tests.
* +mySqlTest+: Runs MySql third-party tests.
* +cubridTest+: Runs Cubrid third-party tests.
* +db2Test+: Runs DB2 third-party tests.
* +oracleTest+: Runs Oracle third-party tests.
* +oracleXeTest+: Run Oracle third party tests which can be run with Oracle Express Edition too.
* +oracleEeTest+: Run Oracle third party tests which require Oracle Enterprise Edition.
* +sqlServerTest+: Runs SqlServer third-party tests.
* +test+: Runs tests that do not need external JDBC driver and/or a docker container.
This the same as running unitTest, integrationTest and kerberizedTest.
* +s3Test+: Runs S3 tests. For more information see the 'Amazon S3 tests' section.
* +allTest+: Runs all Sqoop tests.


The https://docs.gradle.org/current/dsl/org.gradle.api.tasks.testing.Test.html#org.gradle.api.tasks.testing.Test:forkEvery[forkEvery]
parameter of most of the Gradle test tasks is set to +0+ which means that all of the tests run in a single JVM.
The only exception is the +kerberizedTest+ task which requires a new JVM for every test class.
The benefit of this setup is that the test tasks finish much faster since the JVM creation is a slow operation however
the Sqoop test framework seems to consume/leak too much memory which can lead to an +OutOfMemoryError+ during the build.
To prevent the JVM running out of memory you can use the +-DforkEvery.default+ property to set the forkEvery
parameter for all the test tasks except +kerberizedTest+:

----
./gradlew -DforkEvery.default=30 test
----

The https://docs.gradle.org/current/dsl/org.gradle.api.tasks.testing.Test.html#org.gradle.api.tasks.testing.Test:ignoreFailures[ignoreFailures]
parameter of the Gradle test tasks is set to +false+ which means that if a Gradle test task fails the gradle
process returns with non-zero. In some CI tools (e.g. Jenkins) this will make the status of the job red and not yellow
which usually means some more serious issue than a test failure. To change this behavior you can use the
+-DignoreTestFailures+ property to set the +ignoreFailures+ parameter for all the test tasks:

----
./gradlew -DignoreTestFailures=true test
----

=== Third party tests

==== Installing the necessary databases

===== MySQL

Install MySQL server and client 5.0. Download MySQL Connector/J 5.0.8 for
JDBC. Instructions for configuring the MySQL database are in MySQLAuthTest
and DirectMySQLTest.

Use the following system properties to configure connection to the MySQL host used for testing:
+sqoop.test.mysql.connectstring.host_url+, +sqoop.test.mysql.databasename+, +sqoop.test.mysql.username+ and
+sqoop.test.mysql.password+.
Specify these properties on the command line or via the build.properties file. For example:

+sqoop.test.mysql.connectstring.host_url=jdbc:mysql://host.example.com/+
+sqoop.test.mysql.databasename=MYDB+
+sqoop.test.mysql.username=MYUSR+
+sqoop.test.mysql.password=MYPWD+

If not specified, the default value used for this property is:
+jdbc:mysql://127.0.0.1:13306/+

===== Oracle

Install Oracle Enterprise Edition 10.2.0+. Instructions for configuring the
database are in +OracleManagerTest+. Download the ojdbc6_g jar.

If running the tests against Oracle XE (Express Edition) - a lot of them will
fail as it does not include the partitioning feature.

Use the following system properties to configure connection to the Oracle XE host used for testing:
+sqoop.test.oracle.connectstring+, +sqoop.test.oracle.username+ and +sqoop.test.oracle.password+.
You can configure the connection properties separately for tests requiring Oracle EE:
+sqoop.test.oracle-ee.connectstring+, +sqoop.test.oracle-ee.username+ and +sqoop.test.oracle-ee.password+.
Specify these properties on the command line or via the build.properties file. For example:

+sqoop.test.oracle.connectstring=jdbc:oracle:thin:@//host.example.com/xe+
+sqoop.test.oracle.username=MYUSR+
+sqoop.test.oracle.password=MYPWD+

If not specified, the default value used for +sqoop.test.oracle.connectstring+ property is:
+jdbc:oracle:thin:@//localhost:1521/xe+

The default value used for +sqoop.test.oracle-ee.connectstring+ property is:
+jdbc:oracle:thin:@//localhost:1522/sqoop+

Users sqooptest and sqooptest2 should be created prior to running the tests.
SQL script is available in src/test/oraoop/create_users.sql

===== PostgreSQL

Install PostgreSQL 8.3.9. Download the postgresql 8.4 jdbc driver. Instructions
for configuring the database are in +PostgresqlTest+.

Use the following system properties to configure connection to the PostgreSQL host used for testing:
+sqoop.test.postgresql.connectstring.host_url+, +sqoop.test.postgresql.database+, +sqoop.test.postgresql.username+ and
+sqoop.test.postgresql.password+.
Specify this property on the
command line or via the build.properties file. For example:

+sqoop.test.postgresql.connectstring.host_url=jdbc:postgresql://sqoop-dbs.sf.cloudera.com/+
+sqoop.test.postgresql.database=MYDB+
+sqoop.test.postgresql.username=MYUSR+
+sqoop.test.postgresql.password=MYPWD+

If not specified, the default value used for this property is:
+jdbc:postgresql://localhost:15432/+

===== SQL Server

Install SQL Server Express 2012 and create a database instance and
download the appropriate JDBC driver. Instructions for configuring the
database can be found in +SQLServerManagerImportManualTest+.

Use the following system properties to configure connection to the SQL Server host used for testing:
+sqoop.test.sqlserver.connectstring.host_url+, +sqoop.test.sqlserver.database+, +ms.sqlserver.username+ and
+ms.sqlserver.password+.
the URL for the SQL Server host used for testing. Specify this property on the
command line or via the build.properties file. For example:

+sqoop.test.sqlserver.connectstring.host_url=jdbc:sqlserver://sqlserverhost:1433+
+sqoop.test.sqlserver.database=MYDB+
+ms.sqlserver.username=MYUSR+
+ms.sqlserver.password=MYPWD+

If not specified, the default value used for this property is:
+jdbc:sqlserver://localhost:1433+

===== Cubrid

Install Cubrid 9.2.2.0003 and create a database instance and download the
appropriate JDBC driver. Instructions for configuring the database are in
+CubridAuthTest+, +CubridCompatTest+, +CubridManagerImportTest+
and +CubridManagerExportTest+.

Use the following system properties to configure connection to the Cubrid host used for testing:
+sqoop.test.cubrid.connectstring.host_url+, +sqoop.test.cubrid.connectstring.database+,
+sqoop.test.cubrid.connectstring.username+ and +sqoop.test.cubrid.connectstring.password+.
Specify this property on the command
line or via the build.properties file. For example:

+sqoop.test.cubrid.connectstring.host_url=jdbc:cubrid:localhost+
+sqoop.test.cubrid.connectstring.database=MYDB+
+sqoop.test.cubrid.connectstring.username=MYUSR+
+sqoop.test.cubrid.connectstring.password=MYPWD+

If not specified, the default value used for this property is:
+jdbc:cubrid:localhost:33000+

===== DB2

Install DB2 9.74 Express C and download the appropriate JDBC driver.
Instructions for configuring the server can be found in
+DB2ManagerImportManualTest+.

Use the following system properties to configure connection to the DB2 host used for testing:
+sqoop.test.db2.connectstring.host_url+, +sqoop.test.db2.connectstring.database+, +sqoop.test.db2.connectstring.username+ and
+sqoop.test.db2.connectstring.password+.
Specify this property on
the command line or via build.properties file. For example:

+sqoop.test.db2.connectstring.host_url=jdbc:db2://db2host:50000+
+sqoop.test.db2.connectstring.database=MYDB+
+sqoop.test.db2.connectstring.username=MYUSR+
+sqoop.test.db2.connectstring.password=MYPWD+

If not specified, the default value used for this property is:
+jdbc:db2://localhost:50000+

==== Running the Third-party Tests on native database servers

After the third-party databases are installed and configured, run:

----
ant test -Dthirdparty=true -Dsqoop.thirdparty.lib.dir=/path/to/jdbc/drivers/ [-DconnectionProperty1=propertyValue1
-DconnectionProperty2=propertyValue ...]
./gradlew -Dsqoop.thirdparty.lib.dir=/relative/path/to/jdbc/drivers/ thirdPartyTest [-DconnectionProperty1=propertyValue1
-DconnectionProperty2=propertyValue ...]
----

This command will run all thirdparty tests except some DB2 tests.
To run these DB2 test, specify the property "manual" instead of "thirdparty"
as follows:

----
ant test -Dmanual=true -Dsqoop.thirdparty.lib.dir=/path/to/jdbc/drivers/ [-DconnectionProperty1=propertyValue1
-DconnectionProperty2=propertyValue ...]
./gradlew -Dsqoop.thirdparty.lib.dir=/relative/path/to/jdbc/drivers/ manualTest [-DconnectionProperty1=propertyValue1
-DconnectionProperty2=propertyValue ...]
----

Note that +sqoop.thirdparty.lib.dir+ can also be specified in
+build.properties+.

==== Setting up and executing third-party tests with databases running in Docker containers

The easiest way to run the Sqoop third party test pack is to start all the necessary database servers in Docker containers. This eliminates the need of installing and setting up 6 different RDBMSs on the development machines and provides a clean database environment every time the tests are executed.

===== Installing docker

The first step is to install a recent version (1.13.0+) of Docker and Docker Compose on your development machine. Please refer to the Docker documentation for the installation instructions for your OS environment:

https://docs.docker.com/engine/installation/
https://docs.docker.com/compose/install/

===== Downloading docker images

MySQL, PostgreSQL, MSSQL, DB2, Oracle XE and Cubrid images are freely available on Docker Hub so they will be pulled automatically by the startup command specified below however the Oracle EE image has to be built manually. Please refer to the README.md file on the below Github project for building instructions:

https://github.com/oracle/docker-images/tree/master/OracleDatabase

Please note that some Sqoop third party tests require Oracle Enterprise Edition and the startup command assumes version 12.2.0.1.

===== Starting the Docker containers

A startup script has been added to the Sqoop project to make the Docker container initialization easier:

----
<sqoop_workspace>/src/scripts/thirdpartytest/start-thirdpartytest-db-containers.sh
----

If it is executed without parameters it starts the following services:

.Third party test DB docker services
[width="40%",frame="topbot",options="header"]
|======================
|Service name    |Database version
|+mysql+         |MySql 5.7.19
|+postgresql+    |PostgreSQL 9.6.4
|+mssql+         |MSSQL 14.0.1000.169 Developer Edition
|+cubrid+        |Cubrid 10.0
|+oracle-ee+     |Oracle EE 12.2.0.1
|+oracle+        |Oracle XE 11g Release 2
|+db2+           |DB2 Express Edition 10.5.0.5-3.10.0
|======================

The script starts up all the services by default but you can override this behavior by specifying the service names in the parameter list. For example if you want to start up mysql and postgresql services only you can execute the script like this:

----
<sqoop_workspace>/src/scripts/thirdpartytest/start-thirdpartytest-db-containers.sh mysql postgresql
----

After the startup script is executed the containers need some time to initialize the databases. You can follow the status of the containers using the docker ps command. If a service is properly initialized you will see a healthy status in the output of the docker ps command. For example the below output means that Cubrid is started up successfully and it is ready to be used but DB2 is still starting up:

----
61c4ef871cbb        cubrid/cubrid:10.0                    "/entrypoint.sh"         43 seconds ago      Up 38 seconds (healthy)            0.0.0.0:33000->33000/tcp           sqoop_cubrid_container
158e5421d134        ibmcom/db2express-c:10.5.0.5-3.10.0   "/home/db2inst1/db..."   43 seconds ago      Up 40 seconds (health: starting)   22/tcp, 0.0.0.0:50000->50000/tcp   sqoop_db2_container
----

Most of the containers need less than 1 minute to start up but DB2 needs \~5 minutes and Oracle EE needs \~15 minutes.
The Docker images need \~17GB free disk space and Docker requires ~5GB of memory to start all of them at the same time.

===== Stopping the Docker containers

You can stop and remove the Docker containers using the following command:

----
<sqoop_workspace>/src/scripts/thirdpartytest/stop-thirdpartytest-db-containers.sh
----

===== Running the third party tests using docker containers

You can execute the third party tests against the DBs running in Docker containers using the following command (replace <path_to_thirdparty_lib_directory> with the path you have the necessary JDBC drivers,
<your-bucket-url> and <your-credential-generator-command> with the values described in the 'Amazon S3 tests' section):

----
ant clean test -Dthirdparty=true -Dsqoop.thirdparty.lib.dir=<path_to_thirdparty_lib_directory> \
    -Ds3.bucket.url=<your-bucket-url> \
    -Ds3.generator.command=<your-credential-generator-command>
----

or

----
./gradlew -Dsqoop.thirdparty.lib.dir=<path_to_thirdparty_lib_directory> \
    -Ds3.bucket.url=<your-bucket-url> \
    -Ds3.generator.command=<your-credential-generator-command> \
    thirdPartyTest
----

Gradle is able download all of the necessary drivers but the Ant build has to be provided
with the drivers for all the databases.

Please note that even if you do not need to install RDBMSs to run Sqoop third party tests against the Docker containers you still need to install the following tools:

* mysqldump
* mysqlimport
* psql

=== Amazon S3 tests

To enable Amazon S3 tests you need to have Amazon S3 security credentials. To pass these credentials to Sqoop during
test execution you need to have a generator command that writes Amazon S3 credentials to the first
line of standard output in the following order: access key, secret key and session token (the latter one only in case
of temporary credentials) having them separated by spaces.

You can then pass the bucket URL and the generator command to the tests via system properties as follows:

----
ant clean test -Ds3.bucket.url=<your-bucket-url> -Ds3.generator.command=<your-credential-generator-command>
----

or

----
./gradlew s3Test -Ds3.bucket.url=<your-bucket-url> -Ds3.generator.command=<your-credential-generator-command>
----


== Code Quality Analysis

We have three tools which can be used to analyze Sqoop's code quality.

=== Findbugs

Findbugs detects common errors in programming. New patches should not
trigger additional warnings in Findbugs.

Install findbugs (1.3.9) according to its instructions. To use it,
run:

----
ant findbugs -Dfindbugs.home=/path/to/findbugs/
----

or

----
./gradlew findbugsMain
----

A report will be generated in +build/findbugs/+

=== Code Coverage reports

For ant Cobertura runs code coverage checks. It instruments the build and
checks that each line and conditional expression is evaluated along
all possible paths.

Install Cobertura according to its instructions. Then run a test with:

----
ant clean
ant cobertura -Dcobertura.home=/path/to/cobertura
ant cobertura -Dcobertura.home=/path/to/cobertura \
    -Dthirdparty=true -Dsqoop.thirdparty.lib.dir=/path/to/thirdparty
----

For Gradle we run Jacoco for code coverage checks. You can create single reports or composite reports,
where you can check the combined coverage of unit and thirdparty tests.

----
./gradlew clean
./gradlew test
./gradlew jacocoTestReport

./gradlew -Dsqoop.thirdparty.lib.dir=<path_to_thirdparty_lib_directory> thirdPartyTest
./gradlew jacocoThirdPartyReport
----

or generate the composite report after running test and thirdPartyTest

----
./gradlew jacocoCompositeReport
----

(You'll need to run the cobertura target twice; once against the regular
test targets, and once against the thirdparty targets.)

When complete, the report will be placed in +build/cobertura/+

New patches should come with sufficient tests for their functionality
as well as their error recovery code paths. Cobertura can help assess
whether your tests are thorough enough, or where gaps lie.

=== Checkstyle

Checkstyle enforces our style guide. There are currently a very small
number of violations of this style in the source code, but hopefully this
will remain the case. New code should not trigger additional checkstyle
warnings.

Checkstyle does not need to be installed manually; it will be retrieved via
Ivy when necessary.

To run checkstyle, execute:

----
ant checkstyle
----

or

----
./gradlew checkStyleMain
----

A report will be generated as +build/checkstyle-errors.html+


== Deploying to Maven

To use Sqoop as a dependency in other projects, you can pull Sqoop into your
dependency management system through Maven.

To install Sqoop in your local +.m2+ cache, run:

----
ant mvn-install
----

or

----
./gradlew publishToMavenLocal
----

This will install a pom and the Sqoop jar.

To deploy Sqoop to a public repository, use:

----
ant mvn-deploy
----

or

----
./gradlew publishSqoopPublicationToCloudera.snapshot.repoRepository
./gradlew -DmvnRepo=x publishSqoopPublicationToCloudera.x.repoRepository
----

By default, this deploys to +repository.cloudera.com+. You can choose
the complete URL to deploy to with the +mvn.deploy.url+ property.
By default, this deploys to the "snapshots" repository. To deploy to
"staging" or "releases" on repository.cloudera.com, set the
+mvn.repo+ property accordingly.

== Releasing Sqoop

To build a full release of Sqoop, run +ant release -Dversion=(somever)+.
This will build a binary release tarball and the web-based documentation
as well as run a release audit which flags any source files which may
be missing license headers.

(The release audit can be run standalone with the +ant releaseaudit+ (+./gradlew rat+)
target.)

You must set the +version+ property explicitly; you cannot release a
snapshot. To simultaneously deploy this to a maven repository, include
the +mvn-install+ or +mvn-deploy+ targets as well.


== Using Eclipse

Running +ant eclipse+ will generate +.project+ and +.classpath+ files that
will allow you to edit Sqoop sources in Eclipse with all the library
dependencies correctly resolved. To compile the jars, you should still
use Ant or Gradle.

== Building the documentation

Building the documentation requires that you have toxml installed.
Also, one needs to set the XML_CATALOG_FILES environment variable.

----
export XML_CATALOG_FILES=/usr/local/etc/xml/catalog
ant docs
----

or

----
export XML_CATALOG_FILES=/usr/local/etc/xml/catalog
./gradlew docs
----

== Other important Gradle commands

* +./gradlew wrapper+ to generate gradle wrapper (to ensure you are using the correct, compatible version of gradle)
* +./gradlew tasks+ to list all top-level gradle tasks or run +./gradlew tasks --all+ to show all tasks and subtasks
* +./gradlew compileJava+ to compile the main Java source
* +./gradlew test --debug-jvm+ to run remote debug on port 5005
* +./gradlew test --tests TestSqoopOptions+, +./gradlew thirdPartyTest --tests TestS3*+ to run one or more tests matching a pattern (use with test or thirdPartyTest)
* +./gradlew build --refresh-dependencies+ to refresh dependencies for a build
* +./gradle build -x test+ for skipping a single test or a set of tests
* +./gradlew dependencyInsight --configuration optionalConfiguration --dependency searchedForDependency+ to get a dependency tree
* +./gradlew dependencies+ to get the list of the dependencies of the selected project, broken down by configuration

== Setting up Travis CI
You can now set up a Travis CI job for your own Sqoop fork so you can easily test your patches before uploading them for review.
The steps for setting up the CI job are the following:

- Go to https://github.com/apache/sqoop and fork the project if it is not already forked for your GitHub account.
- Go to https://travis-ci.com and Sign up with GitHub.
- Accept the Authorization of Travis CI. You’ll be redirected to GitHub.
- Click the green Activate button, and select the Sqoop repository.

The Travis CI job uses Gradle to build and test the project and it is able to execute all of the tests except the
ones requiring an Oracle EE database.
