mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-16 15:47:58 +00:00
bdd tests: get rid of dependency on build path
BDD tests will now use whatever osm2pgsql they find in the PATH. For testing against legacy tokenizer, use -DSERVER_MODULE_PATH to point to the module. This will no longer work out of the box.
This commit is contained in:
@@ -50,6 +50,10 @@ The documentation is built with mkdocs:
|
|||||||
* [mkdocstrings](https://mkdocstrings.github.io/) >= 0.25
|
* [mkdocstrings](https://mkdocstrings.github.io/) >= 0.25
|
||||||
* [mkdocs-material](https://squidfunk.github.io/mkdocs-material/)
|
* [mkdocs-material](https://squidfunk.github.io/mkdocs-material/)
|
||||||
|
|
||||||
|
Please be aware that tests always run against the globally installed
|
||||||
|
osm2pgsql, so you need to have this set up. If you want to test against
|
||||||
|
the vendored version of osm2pgsql, you need to set the PATH accordingly.
|
||||||
|
|
||||||
### Installing prerequisites on Ubuntu/Debian
|
### Installing prerequisites on Ubuntu/Debian
|
||||||
|
|
||||||
The Python tools should always be run with the most recent version.
|
The Python tools should always be run with the most recent version.
|
||||||
|
|||||||
@@ -78,7 +78,6 @@ To run the functional tests, do
|
|||||||
|
|
||||||
The tests can be configured with a set of environment variables (`behave -D key=val`):
|
The tests can be configured with a set of environment variables (`behave -D key=val`):
|
||||||
|
|
||||||
* `BUILDDIR` - build directory of Nominatim installation to test
|
|
||||||
* `TEMPLATE_DB` - name of template database used as a skeleton for
|
* `TEMPLATE_DB` - name of template database used as a skeleton for
|
||||||
the test databases (db tests)
|
the test databases (db tests)
|
||||||
* `TEST_DB` - name of test database (db tests)
|
* `TEST_DB` - name of test database (db tests)
|
||||||
@@ -91,7 +90,7 @@ The tests can be configured with a set of environment variables (`behave -D key=
|
|||||||
* `DB_USER` - (optional) username of database login
|
* `DB_USER` - (optional) username of database login
|
||||||
* `DB_PASS` - (optional) password for database login
|
* `DB_PASS` - (optional) password for database login
|
||||||
* `SERVER_MODULE_PATH` - (optional) path on the Postgres server to Nominatim
|
* `SERVER_MODULE_PATH` - (optional) path on the Postgres server to Nominatim
|
||||||
module shared library file
|
module shared library file (only needed for legacy tokenizer)
|
||||||
* `REMOVE_TEMPLATE` - if true, the template and API database will not be reused
|
* `REMOVE_TEMPLATE` - if true, the template and API database will not be reused
|
||||||
during the next run. Reusing the base templates speeds
|
during the next run. Reusing the base templates speeds
|
||||||
up tests considerably but might lead to outdated errors
|
up tests considerably but might lead to outdated errors
|
||||||
|
|||||||
@@ -5,16 +5,18 @@
|
|||||||
# Copyright (C) 2024 by the Nominatim developer community.
|
# Copyright (C) 2024 by the Nominatim developer community.
|
||||||
# For a full list of authors see the git log.
|
# For a full list of authors see the git log.
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
import sys
|
||||||
|
|
||||||
from behave import *
|
from behave import *
|
||||||
|
|
||||||
|
sys.path.insert(1, str(Path(__file__, '..', '..', '..', 'src').resolve()))
|
||||||
|
|
||||||
from steps.geometry_factory import GeometryFactory
|
from steps.geometry_factory import GeometryFactory
|
||||||
from steps.nominatim_environment import NominatimEnvironment
|
from steps.nominatim_environment import NominatimEnvironment
|
||||||
|
|
||||||
TEST_BASE_DIR = Path(__file__) / '..' / '..'
|
TEST_BASE_DIR = Path(__file__, '..', '..').resolve()
|
||||||
|
|
||||||
userconfig = {
|
userconfig = {
|
||||||
'BUILDDIR' : (TEST_BASE_DIR / '..' / 'build').resolve(),
|
|
||||||
'REMOVE_TEMPLATE' : False,
|
'REMOVE_TEMPLATE' : False,
|
||||||
'KEEP_TEST_DB' : False,
|
'KEEP_TEST_DB' : False,
|
||||||
'DB_HOST' : None,
|
'DB_HOST' : None,
|
||||||
@@ -24,7 +26,7 @@ userconfig = {
|
|||||||
'TEMPLATE_DB' : 'test_template_nominatim',
|
'TEMPLATE_DB' : 'test_template_nominatim',
|
||||||
'TEST_DB' : 'test_nominatim',
|
'TEST_DB' : 'test_nominatim',
|
||||||
'API_TEST_DB' : 'test_api_nominatim',
|
'API_TEST_DB' : 'test_api_nominatim',
|
||||||
'API_TEST_FILE' : (TEST_BASE_DIR / 'testdb' / 'apidb-test-data.pbf').resolve(),
|
'API_TEST_FILE' : TEST_BASE_DIR / 'testdb' / 'apidb-test-data.pbf',
|
||||||
'SERVER_MODULE_PATH' : None,
|
'SERVER_MODULE_PATH' : None,
|
||||||
'TOKENIZER' : None, # Test with a custom tokenizer
|
'TOKENIZER' : None, # Test with a custom tokenizer
|
||||||
'STYLE' : 'extratags',
|
'STYLE' : 'extratags',
|
||||||
|
|||||||
@@ -6,14 +6,11 @@
|
|||||||
# For a full list of authors see the git log.
|
# For a full list of authors see the git log.
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import importlib
|
import importlib
|
||||||
import sys
|
|
||||||
import tempfile
|
import tempfile
|
||||||
|
|
||||||
import psycopg
|
import psycopg
|
||||||
from psycopg import sql as pysql
|
from psycopg import sql as pysql
|
||||||
|
|
||||||
sys.path.insert(1, str((Path(__file__) / '..' / '..' / '..' / '..'/ 'src').resolve()))
|
|
||||||
|
|
||||||
from nominatim_db import cli
|
from nominatim_db import cli
|
||||||
from nominatim_db.config import Configuration
|
from nominatim_db.config import Configuration
|
||||||
from nominatim_db.db.connection import Connection, register_hstore, execute_scalar
|
from nominatim_db.db.connection import Connection, register_hstore, execute_scalar
|
||||||
@@ -26,7 +23,6 @@ class NominatimEnvironment:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, config):
|
def __init__(self, config):
|
||||||
self.build_dir = Path(config['BUILDDIR']).resolve()
|
|
||||||
self.src_dir = (Path(__file__) / '..' / '..' / '..' / '..').resolve()
|
self.src_dir = (Path(__file__) / '..' / '..' / '..' / '..').resolve()
|
||||||
self.db_host = config['DB_HOST']
|
self.db_host = config['DB_HOST']
|
||||||
self.db_port = config['DB_PORT']
|
self.db_port = config['DB_PORT']
|
||||||
@@ -56,6 +52,9 @@ class NominatimEnvironment:
|
|||||||
raise RuntimeError(f"Unknown API engine '{config['API_ENGINE']}'")
|
raise RuntimeError(f"Unknown API engine '{config['API_ENGINE']}'")
|
||||||
self.api_engine = getattr(self, f"create_api_request_func_{config['API_ENGINE']}")()
|
self.api_engine = getattr(self, f"create_api_request_func_{config['API_ENGINE']}")()
|
||||||
|
|
||||||
|
if self.tokenizer == 'legacy' and self.server_module_path is None:
|
||||||
|
raise RuntimeError("You must set -DSERVER_MODULE_PATH when testing the legacy tokenizer.")
|
||||||
|
|
||||||
def connect_database(self, dbname):
|
def connect_database(self, dbname):
|
||||||
""" Return a connection to the database with the given name.
|
""" Return a connection to the database with the given name.
|
||||||
Uses configured host, user and port.
|
Uses configured host, user and port.
|
||||||
@@ -107,8 +106,6 @@ class NominatimEnvironment:
|
|||||||
self.test_env['NOMINATIM_DATADIR'] = str((self.src_dir / 'data').resolve())
|
self.test_env['NOMINATIM_DATADIR'] = str((self.src_dir / 'data').resolve())
|
||||||
self.test_env['NOMINATIM_SQLDIR'] = str((self.src_dir / 'lib-sql').resolve())
|
self.test_env['NOMINATIM_SQLDIR'] = str((self.src_dir / 'lib-sql').resolve())
|
||||||
self.test_env['NOMINATIM_CONFIGDIR'] = str((self.src_dir / 'settings').resolve())
|
self.test_env['NOMINATIM_CONFIGDIR'] = str((self.src_dir / 'settings').resolve())
|
||||||
self.test_env['NOMINATIM_DATABASE_MODULE_SRC_PATH'] = str((self.build_dir / 'module').resolve())
|
|
||||||
self.test_env['NOMINATIM_OSM2PGSQL_BINARY'] = str((self.build_dir / 'osm2pgsql' / 'osm2pgsql').resolve())
|
|
||||||
if self.tokenizer is not None:
|
if self.tokenizer is not None:
|
||||||
self.test_env['NOMINATIM_TOKENIZER'] = self.tokenizer
|
self.test_env['NOMINATIM_TOKENIZER'] = self.tokenizer
|
||||||
if self.import_style is not None:
|
if self.import_style is not None:
|
||||||
@@ -116,9 +113,6 @@ class NominatimEnvironment:
|
|||||||
|
|
||||||
if self.server_module_path:
|
if self.server_module_path:
|
||||||
self.test_env['NOMINATIM_DATABASE_MODULE_PATH'] = self.server_module_path
|
self.test_env['NOMINATIM_DATABASE_MODULE_PATH'] = self.server_module_path
|
||||||
else:
|
|
||||||
# avoid module being copied into the temporary environment
|
|
||||||
self.test_env['NOMINATIM_DATABASE_MODULE_PATH'] = str((self.build_dir / 'module').resolve())
|
|
||||||
|
|
||||||
if self.website_dir is not None:
|
if self.website_dir is not None:
|
||||||
self.website_dir.cleanup()
|
self.website_dir.cleanup()
|
||||||
@@ -137,8 +131,7 @@ class NominatimEnvironment:
|
|||||||
|
|
||||||
def get_test_config(self):
|
def get_test_config(self):
|
||||||
cfg = Configuration(Path(self.website_dir.name), environ=self.test_env)
|
cfg = Configuration(Path(self.website_dir.name), environ=self.test_env)
|
||||||
cfg.set_libdirs(module=self.build_dir / 'module',
|
cfg.set_libdirs(module=self.server_module_path)
|
||||||
osm2pgsql=self.build_dir / 'osm2pgsql' / 'osm2pgsql')
|
|
||||||
return cfg
|
return cfg
|
||||||
|
|
||||||
def get_libpq_dsn(self):
|
def get_libpq_dsn(self):
|
||||||
@@ -305,8 +298,8 @@ class NominatimEnvironment:
|
|||||||
if self.website_dir is not None:
|
if self.website_dir is not None:
|
||||||
cmdline = list(cmdline) + ['--project-dir', self.website_dir.name]
|
cmdline = list(cmdline) + ['--project-dir', self.website_dir.name]
|
||||||
|
|
||||||
cli.nominatim(module_dir='',
|
cli.nominatim(module_dir=self.server_module_path,
|
||||||
osm2pgsql_path=str(self.build_dir / 'osm2pgsql' / 'osm2pgsql'),
|
osm2pgsql_path=None,
|
||||||
cli_args=cmdline,
|
cli_args=cmdline,
|
||||||
environ=self.test_env)
|
environ=self.test_env)
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ from geometry_alias import ALIASES
|
|||||||
|
|
||||||
def get_osm2pgsql_options(nominatim_env, fname, append):
|
def get_osm2pgsql_options(nominatim_env, fname, append):
|
||||||
return dict(import_file=fname,
|
return dict(import_file=fname,
|
||||||
osm2pgsql=str(nominatim_env.build_dir / 'osm2pgsql' / 'osm2pgsql'),
|
osm2pgsql='osm2pgsql',
|
||||||
osm2pgsql_cache=50,
|
osm2pgsql_cache=50,
|
||||||
osm2pgsql_style=str(nominatim_env.get_test_config().get_import_style_file()),
|
osm2pgsql_style=str(nominatim_env.get_test_config().get_import_style_file()),
|
||||||
osm2pgsql_style_path=nominatim_env.get_test_config().config_dir,
|
osm2pgsql_style_path=nominatim_env.get_test_config().config_dir,
|
||||||
|
|||||||
Reference in New Issue
Block a user