## ClickHouse integration tests This directory contains tests that involve several ClickHouse instances, custom configs, ZooKeeper, etc. ### Running Prerequisites: * Ubuntu 14.04 (Trusty). * [docker](https://www.docker.com/community-edition#/download). Minimum required API version: 1.25, check with `docker version`. * [pip](https://pypi.python.org/pypi/pip). To install: `sudo apt-get install python-pip` * [py.test](https://docs.pytest.org/) testing framework. To install: `sudo -H pip install pytest` * [docker-compose](https://docs.docker.com/compose/) and additional python libraries. To install: `sudo -H pip install docker-compose docker dicttoxml` If you want to run the tests under a non-privileged user, you must add this user to `docker` group: `sudo usermod -aG docker $USER` and re-login. Run the tests with the `pytest` command. To select which tests to run, use: `pytest -k ` By default tests are run with system-wide client binary, server binary and base configs. To change that, set the following environment variables: * `CLICKHOUSE_TESTS_SERVER_BIN_PATH` to choose the server binary. * `CLICKHOUSE_TESTS_CLIENT_BIN_PATH` to choose the client binary. * `CLICKHOUSE_TESTS_BASE_CONFIG_DIR` to choose the directory from which base configs (`config.xml` and `users.xml`) are taken. ### Adding new tests To add new test named `foo`, create a directory `test_foo` with an empty `__init__.py` and a file named `test.py` containing tests in it. All functions with names starting with `test` will become test cases. `helpers` directory contains utilities for: * Launching a ClickHouse cluster with or without ZooKeeper indocker containers. * Sending queries to launched instances. * Introducing network failures such as severing network link between two instances. To assert that two TSV files must be equal, wrap them in the `TSV` class and use the regular `assert` statement. Example: `assert TSV(result) == TSV(reference)`. In case the assertion fails, `pytest` will automagically detect the types of variables and only the small diff of two files is printed.