058d38f0ae
* Use original SSL process and add SSLContext Not going to deprecate and replace with SSLContext. But instead give option for using SSLContext next to the original way of handling SSL.
elasticsearch-py test suite
===========================
Warning - by default the tests will try and connect to ``localhost:9200`` and
will destroy all contents of given cluster! The tests also rely on a checkout
of ``elasticsearch`` repository existing on the same level as the
``elasticsearch-py`` clone. Before running the tests we will, by default, pull
latest changes for that repo and perform ``git reset --hard`` to the exact
version that was used to build the server we are running against.
Running the tests
-----------------
To simply run the tests just execute the ``run_tests.py`` script or invoke
``python setup.py test``. The behavior is driven by environmental variables:
* ``TEST_ES_SERVER`` - can contain "hostname[:port]" of running es cluster
* ``TEST_ES_CONNECTION`` - name of the connection class to use from
``elasticsearch.connection`` module. If you want to run completely with your
own see section on customizing tests.
* ``TEST_ES_YAML_DIR`` - path to the yaml test suite contained in the
elasticsearch repo. Defaults to ``$TEST_ES_REPO/rest-api-spec/test``
* ``TEST_ES_REPO`` - path to the elasticsearch repo, by default it will look in
the same directory as ``elasticsearch-py`` is in. It will not be used if
``TEST_ES_YAML_DIR`` is specified directly.
* ``TEST_ES_NOFETCH`` - controls if we should fetch new updates to elasticsearch
repo and reset it's version to the sha used to build the current es server.
Defaults to ``False`` which means we will fetch the elasticsearch repo and
``git reset --hard`` the sha used to build the server.
Alternatively, if you wish to control what you are doing you have several additional options:
* ``run_tests.py`` will pass any parameters specified to ``nosetests``
* you can just run your favorite runner in the ``test_elasticsearch`` directory
(verified to work with nose and py.test) and bypass the fetch logic entirely.
To install all test dependencies you can also run ``pip install -e .[develop]``.
Run Elasticsearch in a Container
--------------------------------
To run elasticsearch in a container, optionally set the ``ES_VERSION``
environment evariable to either 5.4, 5.3 or 2.4. ``ES_VERSION`` is defaulted to
``latest``. Then run ./start_elasticsearch.sh::
export ES_VERSION=5.4
./start_elasticsearch.sh
This will run a version for Elasticsearch in a Docker container suitable for
running the tests. To check that elasticsearch is running first wait for a
``healthy`` status in ``docker ps``::
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
955e57564e53 7d2ad83f8446 "/docker-entrypoin..." 6 minutes ago Up 6 minutes (healthy) 0.0.0.0:9200->9200/tcp, 9300/tcp trusting_brattain
Then you can navigate to ``locahost:9200`` in your browser.
Customizing the tests
---------------------
You can create a `local.py` file in the `test_elasticsearch` directory which
should contain a `get_client` function.
If this file exists the function will be used instead of
`elasticsearch.helpers.test.get_test_client` to construct the client used for
any integration tests. You can use this to make sure your plugins and
extensions work with `elasticsearch-py`.