# Revised Integration Tests This directory builds a Docker image for Druid, then uses that image, along with test configuration to run tests. This version greatly evolves the integration tests from the earlier form. See the [History](docs/history.md) section for details. ## Shortcuts List of the most common commands once you're familiar with the framework. If you are new to the framework, see [Quickstart](docs/quickstart.md) for an explanation. ### Build Druid ```bash ./it.sh build ``` ### Build the Test Image ```bash ./it.sh image ``` Note: If you are running it on Apple Silicon processors, you would also need to uncomment all occurrences of `platform: linux/x86_64` in [dependencies.yaml](https://github.com/apache/druid/blob/master/integration-tests-ex/cases/cluster/Common/dependencies.yaml). ### Run an IT from the Command Line ```bash ./it.sh test ``` Where `` is one of the test categories. You can see the list of test categories at [`src/test/java/org/apache/druid/testsEx/categories`](https://github.com/apache/druid/tree/master/integration-tests-ex/cases/src/test/java/org/apache/druid/testsEx/categories). The corresponding test classes are also annotated with `@Category` like `@Category(HighAvailability.class)`. For example, a sample command for running IT for `@Category(HighAvailability.class)` would be: ```bash ./it.sh test HighAvailability ``` ### Run an IT from the IDE Start the cluster: ```bash ./it.sh up ``` Where `` is one of the test categories. Then launch the test as a JUnit test. ## Contents * [Goals](#Goals) * [Quickstart](docs/quickstart.md) * [Create a new test](docs/guide.md) * [Maven configuration](docs/maven.md) * [Docker image](docs/docker.md) * [Druid configuration](docs/druid-config.md) * [Docker Compose configuration](docs/compose.md) * [Test configuration](docs/test-config.md) * [Test structure](docs/tests.md) * [Test runtime semantics](docs/runtime.md) * [Scripts](docs/scripts.md) * [Dependencies](docs/dependencies.md) * [Debugging](docs/debugging.md) Background information * [Next steps](docs/next-steps.md) * [Test conversion](docs/conversion.md) - How to convert existing tests. * [History](docs/history.md) - Comparison with prior integration tests. ## Goals The goal of the present version is to simplify development. * Speed up the Druid test image build by avoiding download of dependencies. (Instead, any such dependencies are managed by Maven and reside in the local build cache.) * Use official images for dependencies to avoid the need to download, install, and manage those dependencies. * Make it is easy to manually build the image, launch a cluster, and run a test against the cluster. * Convert tests to JUnit so that they will easily run in your favorite IDE, just like other Druid tests. * Use the actual Druid build from `distribution` so we know what is tested. * Leverage, don't fight, Maven. * Run the integration tests easily on a typical development machine. By meeting these goals, you can quickly: * Build the Druid distribution. * Build the Druid image. (< 1 minute) * Launch the cluster for the particular test. (a few seconds) * Run the test any number of times in your debugger. * Clean up the test artifacts. The result is that the fastest path to develop a Druid patch or feature is: * Create a normal unit test and run it to verify your code. * Create an integration test that double-checks the code in a live cluster.