This file contains information for developers and testers.

Running unit and checkin tests:
By default only some of the tests in standalone-metastore are run.  This is 
done to keep the runtime of the unit tests under 5 minutes.  These are referred
to as the unit tests.  The remainder of the tests are referred to as checkin
tests and are run by the CI process.  It is also advised that you run the
checkin tests before loading a patch.

To run just the checkin tests:
'mvn test -Dtest.groups=org.apache.hadoop.hive.metastore.annotation.MetastoreCheckinTest'

To run all of the tests (exclusive of the databases tests, see below):
'mvn test -Dtest.groups=""'.  At the moment this takes around 25 minutes.

When adding a test, if you want it to run as part of the unit tests annotate it
with MetastoreUnitTest.  To make it part of the checkin tests annotate it with
MetastoreCheckinTest.  We want to keep the unit test runs as quick as possible.
If you write a test that takes more than 5 seconds to run the whole test class
please put it in the checkin tests.  If it tests something that needs to be 
tested in unit test runs break it into multiple classes so that a
quick test can be done for the unit tests and more in depth testing as part
of the checkin tests.

--------------------------------------------------------------------------------
Testing metastore installation and upgrade against databases beyond Derby:
There are integration tests for testing installation and upgrade of the
metastore on MySQL (actually MariaDB is used), Oracle, Postgres, and SQLServer.
These tests are not run by default because they take several minutes each and
they require the developer to download the JDBC driver for Oracle.
They are run in the integration-test phase.

Each ITest runs two tests, one that installs the latest version of the
database and one that installs the latest version minus one and then upgrades
the database.

To run one of the tests you will need to explicitly turn on integration testing,
in the Oracle case specify the location of the JDBC driver, and optionally
specify which test you want to run.  You'll need to download and start docker.
Make sure docker's memory is set to more than 3.5GB.  To run all of the tests do:

mvn verify -Ditest.jdbc.jars=_oracle_jar_path -DskipITests=false -Dtest=nosuch

To run just one test, do

mvn verify -DskipITests=false -Dit.test=ITestMysql -Dtest=nosuch

You can download the Oracle driver at 
http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html
You should download Oracle 11g Release 1, ojdbc6.jar

Logs for tests are located under standalone-metastore/target/failsafe-reports

If you wish to use one of these containers to run your own tests against a
non-Derby version of the metastore, you can do that as well.  You must specify
that only the install test be run (change -Dit.test=ITestMysql in the example
above to -Dit.test=ITestMysql#install) and tell it to leave the docker container
running by adding -Dmetastore.itest.no.stop.container=true.  You will then need
to stop and remove the container yourself once you have finished.  The container
is recreated for each run of the test, so you cannot rerun the test until you
have stopped and removed it.  You can construct the connection values to put in
metastore-site.xml from the information in the appropriate ITest file (e.g.,
from ITestMysql you can find that the JDBC URL is
"jdbc:mysql://localhost:3306/hivedb", the JDBC driver is
"org.mariadb.jdbc.Driver", and the password is "hivepassword".  The user is
always "hiveuser".

