2020-09-17 10:54:46 +03:00
|
|
|
# Nominatim Test Suite
|
2016-12-31 00:55:57 +03:00
|
|
|
|
2020-09-17 10:54:46 +03:00
|
|
|
This chapter describes the tests in the `/test` directory, how they are
|
|
|
|
structured and how to extend them. For a quick introduction on how to run
|
|
|
|
the tests, see the [Development setup chapter](Development-Environment.md).
|
2016-12-31 00:55:57 +03:00
|
|
|
|
2020-09-17 10:54:46 +03:00
|
|
|
## Overall structure
|
2016-12-31 00:55:57 +03:00
|
|
|
|
|
|
|
There are two kind of tests in this test suite. There are functional tests
|
|
|
|
which test the API interface using a BDD test framework and there are unit
|
|
|
|
tests for specific PHP functions.
|
|
|
|
|
|
|
|
This test directory is sturctured as follows:
|
|
|
|
|
2017-06-05 22:53:45 +03:00
|
|
|
```
|
2016-12-31 00:55:57 +03:00
|
|
|
-+- bdd Functional API tests
|
|
|
|
| \
|
|
|
|
| +- steps Step implementations for test descriptions
|
|
|
|
| +- osm2pgsql Tests for data import via osm2pgsql
|
|
|
|
| +- db Tests for internal data processing on import and update
|
|
|
|
| +- api Tests for API endpoints (search, reverse, etc.)
|
|
|
|
|
|
|
|
|
+- php PHP unit tests
|
2021-01-15 17:18:45 +03:00
|
|
|
+- python Python unit tests
|
2016-12-31 00:55:57 +03:00
|
|
|
+- testdb Base data for generating API test database
|
2022-06-17 11:06:56 +03:00
|
|
|
+- testdata Additional test data used by unit tests
|
2017-06-05 22:53:45 +03:00
|
|
|
```
|
2016-12-31 00:55:57 +03:00
|
|
|
|
2020-09-17 10:54:46 +03:00
|
|
|
## PHP Unit Tests (`test/php`)
|
2016-12-31 00:55:57 +03:00
|
|
|
|
2021-01-15 17:18:45 +03:00
|
|
|
Unit tests for PHP code can be found in the `php/` directory. They test selected
|
|
|
|
PHP functions. Very low coverage.
|
2016-12-31 00:55:57 +03:00
|
|
|
|
|
|
|
To execute the test suite run
|
|
|
|
|
2017-06-05 23:01:42 +03:00
|
|
|
cd test/php
|
2020-04-13 18:48:20 +03:00
|
|
|
UNIT_TEST_DSN='pgsql:dbname=nominatim_unit_tests' phpunit ../
|
2016-12-31 00:55:57 +03:00
|
|
|
|
|
|
|
It will read phpunit.xml which points to the library, test path, bootstrap
|
2021-01-15 17:18:45 +03:00
|
|
|
strip and sets other parameters.
|
2016-12-31 00:55:57 +03:00
|
|
|
|
2020-04-26 04:33:15 +03:00
|
|
|
It will use (and destroy) a local database 'nominatim_unit_tests'. You can set
|
|
|
|
a different connection string with e.g. UNIT_TEST_DSN='pgsql:dbname=foo_unit_tests'.
|
2016-12-31 00:55:57 +03:00
|
|
|
|
2021-01-15 17:18:45 +03:00
|
|
|
## Python Unit Tests (`test/python`)
|
|
|
|
|
|
|
|
Unit tests for Python code can be found in the `python/` directory. The goal is
|
|
|
|
to have complete coverage of the Python library in `nominatim`.
|
|
|
|
|
|
|
|
To execute the tests run
|
|
|
|
|
2021-01-15 18:45:37 +03:00
|
|
|
py.test-3 test/python
|
|
|
|
|
|
|
|
or
|
|
|
|
|
2021-01-15 17:18:45 +03:00
|
|
|
pytest test/python
|
|
|
|
|
2021-01-15 18:45:37 +03:00
|
|
|
The name of the pytest binary depends on your installation.
|
|
|
|
|
2020-09-17 10:54:46 +03:00
|
|
|
## BDD Functional Tests (`test/bdd`)
|
2016-12-31 00:55:57 +03:00
|
|
|
|
|
|
|
Functional tests are written as BDD instructions. For more information on
|
2020-09-17 10:54:46 +03:00
|
|
|
the philosophy of BDD testing, see the
|
|
|
|
[Behave manual](http://pythonhosted.org/behave/philosophy.html).
|
|
|
|
|
|
|
|
The following explanation assume that the reader is familiar with the BDD
|
|
|
|
notations of features, scenarios and steps.
|
2016-12-31 00:55:57 +03:00
|
|
|
|
2020-09-17 10:54:46 +03:00
|
|
|
All possible steps can be found in the `steps` directory and should ideally
|
|
|
|
be documented.
|
|
|
|
|
|
|
|
### General Usage
|
2016-12-31 00:55:57 +03:00
|
|
|
|
|
|
|
To run the functional tests, do
|
|
|
|
|
|
|
|
cd test/bdd
|
|
|
|
behave
|
|
|
|
|
2019-01-28 21:33:22 +03:00
|
|
|
The tests can be configured with a set of environment variables (`behave -D key=val`):
|
2016-12-31 00:55:57 +03:00
|
|
|
|
2018-11-27 22:17:27 +03:00
|
|
|
* `BUILDDIR` - build directory of Nominatim installation to test
|
2016-12-31 00:55:57 +03:00
|
|
|
* `TEMPLATE_DB` - name of template database used as a skeleton for
|
|
|
|
the test databases (db tests)
|
|
|
|
* `TEST_DB` - name of test database (db tests)
|
2018-09-28 19:05:10 +03:00
|
|
|
* `API_TEST_DB` - name of the database containing the API test data (api tests)
|
2021-01-09 19:54:45 +03:00
|
|
|
* `API_TEST_FILE` - OSM file to be imported into the API test database (api tests)
|
2018-07-18 02:18:33 +03:00
|
|
|
* `DB_HOST` - (optional) hostname of database host
|
2019-01-28 21:33:22 +03:00
|
|
|
* `DB_PORT` - (optional) port of database on host
|
2018-07-18 02:18:33 +03:00
|
|
|
* `DB_USER` - (optional) username of database login
|
|
|
|
* `DB_PASS` - (optional) password for database login
|
|
|
|
* `SERVER_MODULE_PATH` - (optional) path on the Postgres server to Nominatim
|
2018-09-28 19:05:10 +03:00
|
|
|
module shared library file
|
2021-01-09 19:54:45 +03:00
|
|
|
* `REMOVE_TEMPLATE` - if true, the template and API database will not be reused
|
|
|
|
during the next run. Reusing the base templates speeds
|
|
|
|
up tests considerably but might lead to outdated errors
|
|
|
|
for some changes in the database layout.
|
2016-12-31 00:55:57 +03:00
|
|
|
* `KEEP_TEST_DB` - if true, the test database will not be dropped after a test
|
|
|
|
is finished. Should only be used if one single scenario is
|
|
|
|
run, otherwise the result is undefined.
|
|
|
|
|
|
|
|
Logging can be defined through command line parameters of behave itself. Check
|
2020-09-17 10:54:46 +03:00
|
|
|
out `behave --help` for details. Also have a look at the 'work-in-progress'
|
2016-12-31 00:55:57 +03:00
|
|
|
feature of behave which comes in handy when writing new tests.
|
|
|
|
|
|
|
|
### API Tests (`test/bdd/api`)
|
|
|
|
|
|
|
|
These tests are meant to test the different API endpoints and their parameters.
|
2021-01-09 19:54:45 +03:00
|
|
|
They require to import several datasets into a test database. This is normally
|
|
|
|
done automatically during setup of the test. The API test database is then
|
|
|
|
kept around and reused in subsequent runs of behave. Use `behave -DREMOVE_TEMPLATE`
|
|
|
|
to force a reimport of the database.
|
2016-12-31 00:55:57 +03:00
|
|
|
|
2021-01-09 19:54:45 +03:00
|
|
|
The official test dataset is saved in the file `test/testdb/apidb-test-data.pbf`
|
|
|
|
and compromises the following data:
|
2016-12-31 00:55:57 +03:00
|
|
|
|
2021-01-09 19:54:45 +03:00
|
|
|
* Geofabrik extract of Liechtenstein
|
|
|
|
* extract of Autauga country, Alabama, US (for tests against Tiger data)
|
|
|
|
* additional data from `test/testdb/additional_api_test.data.osm`
|
2016-12-31 00:55:57 +03:00
|
|
|
|
2021-01-09 19:54:45 +03:00
|
|
|
API tests should only be testing the functionality of the website PHP code.
|
|
|
|
Most tests should be formulated as BDD DB creation tests (see below) instead.
|
2016-12-31 00:55:57 +03:00
|
|
|
|
2017-07-17 23:59:13 +03:00
|
|
|
#### Code Coverage
|
|
|
|
|
|
|
|
The API tests also support code coverage tests. You need to install
|
2017-09-17 21:23:40 +03:00
|
|
|
[PHP_CodeCoverage](https://github.com/sebastianbergmann/php-code-coverage).
|
|
|
|
On Debian/Ubuntu run:
|
2017-07-17 23:59:13 +03:00
|
|
|
|
2017-09-17 21:23:40 +03:00
|
|
|
apt-get install php-codecoverage php-xdebug
|
2017-07-17 23:59:13 +03:00
|
|
|
|
2020-09-17 10:54:46 +03:00
|
|
|
Then run the API tests as follows:
|
2017-07-17 23:59:13 +03:00
|
|
|
|
|
|
|
behave api -DPHPCOV=<coverage output dir>
|
|
|
|
|
2017-09-17 21:23:40 +03:00
|
|
|
The output directory must be an absolute path. To generate reports, you can use
|
|
|
|
the [phpcov](https://github.com/sebastianbergmann/phpcov) tool:
|
2017-07-17 23:59:13 +03:00
|
|
|
|
|
|
|
phpcov merge --html=<report output dir> <coverage output dir>
|
|
|
|
|
2020-09-17 10:54:46 +03:00
|
|
|
### DB Creation Tests (`test/bdd/db`)
|
2016-12-31 00:55:57 +03:00
|
|
|
|
|
|
|
These tests check the import and update of the Nominatim database. They do not
|
|
|
|
test the correctness of osm2pgsql. Each test will write some data into the `place`
|
2020-12-06 19:28:33 +03:00
|
|
|
table (and optionally the `planet_osm_*` tables if required) and then run
|
2016-12-31 00:55:57 +03:00
|
|
|
Nominatim's processing functions on that.
|
|
|
|
|
|
|
|
These tests need to create their own test databases. By default they will be
|
|
|
|
called `test_template_nominatim` and `test_nominatim`. Names can be changed with
|
|
|
|
the environment variables `TEMPLATE_DB` and `TEST_DB`. The user running the tests
|
|
|
|
needs superuser rights for postgres.
|
|
|
|
|
|
|
|
### Import Tests (`test/bdd/osm2pgsql`)
|
|
|
|
|
|
|
|
These tests check that data is imported correctly into the place table. They
|
2020-12-06 19:28:33 +03:00
|
|
|
use the same template database as the DB Creation tests, so the same remarks apply.
|
2021-01-09 19:54:45 +03:00
|
|
|
|
|
|
|
Note that most testing of the gazetteer output of osm2pgsql is done in the tests
|
|
|
|
of osm2pgsql itself. The BDD tests are just there to ensure compatibility of
|
|
|
|
the osm2pgsql and Nominatim code.
|