X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/0d9fe6e49c3cee131d2fd0c2c0ad2e59065621f9..be6262c6cedcba1f4041e66518facfdea79679a0:/test/bdd/steps/nominatim_environment.py diff --git a/test/bdd/steps/nominatim_environment.py b/test/bdd/steps/nominatim_environment.py index 170dd639..f6e3a039 100644 --- a/test/bdd/steps/nominatim_environment.py +++ b/test/bdd/steps/nominatim_environment.py @@ -10,6 +10,7 @@ sys.path.insert(1, str((Path(__file__) / '..' / '..' / '..' / '..').resolve())) from nominatim import cli from nominatim.config import Configuration from nominatim.tools import refresh +from nominatim.tokenizer import factory as tokenizer_factory from steps.utils import run_script class NominatimEnvironment: @@ -106,8 +107,19 @@ class NominatimEnvironment: self.website_dir.cleanup() self.website_dir = tempfile.TemporaryDirectory() - cfg = Configuration(None, self.src_dir / 'settings', environ=self.test_env) - refresh.setup_website(Path(self.website_dir.name) / 'website', self.src_dir / 'lib-php', cfg) + refresh.setup_website(Path(self.website_dir.name) / 'website', + self.get_test_config()) + + + def get_test_config(self): + cfg = Configuration(Path(self.website_dir.name), self.src_dir / 'settings', + environ=self.test_env) + cfg.set_libdirs(module=self.build_dir / 'module', + osm2pgsql=self.build_dir / 'osm2pgsql' / 'osm2pgsql', + php=self.src_dir / 'lib-php', + sql=self.src_dir / 'lib-sql', + data=self.src_dir / 'data') + return cfg def get_libpq_dsn(self): dsn = self.test_env['NOMINATIM_DATABASE_DSN'] @@ -168,33 +180,41 @@ class NominatimEnvironment: """ self.write_nominatim_config(self.api_test_db) - if self.api_db_done: - return + if not self.api_db_done: + self.api_db_done = True - self.api_db_done = True - - if self._reuse_or_drop_db(self.api_test_db): - return + if not self._reuse_or_drop_db(self.api_test_db): + testdata = Path('__file__') / '..' / '..' / 'testdb' + self.test_env['NOMINATIM_WIKIPEDIA_DATA_PATH'] = str(testdata.resolve()) - testdata = Path('__file__') / '..' / '..' / 'testdb' - self.test_env['NOMINATIM_WIKIPEDIA_DATA_PATH'] = str(testdata.resolve()) + try: + self.run_nominatim('import', '--osm-file', str(self.api_test_file)) + self.run_nominatim('add-data', '--tiger-data', str((testdata / 'tiger').resolve())) + self.run_nominatim('freeze') - try: - self.run_nominatim('import', '--osm-file', str(self.api_test_file)) - self.run_nominatim('add-data', '--tiger-data', str((testdata / 'tiger').resolve())) - self.run_nominatim('freeze') + phrase_file = str((testdata / 'specialphrases_testdb.sql').resolve()) + run_script(['psql', '-d', self.api_test_db, '-f', phrase_file]) + except: + self.db_drop_database(self.api_test_db) + raise - phrase_file = str((testdata / 'specialphrases_testdb.sql').resolve()) - run_script(['psql', '-d', self.api_test_db, '-f', phrase_file]) - except: - self.db_drop_database(self.api_test_db) - raise + tokenizer_factory.create_tokenizer(self.get_test_config(), init_db=False) def setup_unknown_db(self): """ Setup a test against a non-existing database. """ - self.write_nominatim_config('UNKNOWN_DATABASE_NAME') + # The tokenizer needs an existing database to function. + # So start with the usual database + class _Context: + db = None + + context = _Context() + self.setup_db(context) + tokenizer_factory.create_tokenizer(self.get_test_config(), init_db=False) + + # Then drop the DB again + self.teardown_db(context, force_drop=True) def setup_db(self, context): """ Setup a test against a fresh, empty test database. @@ -211,13 +231,13 @@ class NominatimEnvironment: context.db.autocommit = True psycopg2.extras.register_hstore(context.db, globally=False) - def teardown_db(self, context): + def teardown_db(self, context, force_drop=False): """ Remove the test database, if it exists. """ - if 'db' in context: + if hasattr(context, 'db'): context.db.close() - if not self.keep_scenario_db: + if force_drop or not self.keep_scenario_db: self.db_drop_database(self.test_db) def _reuse_or_drop_db(self, name):