]> git.openstreetmap.org Git - nominatim.git/blob - test/python/tools/test_exec_utils.py
792c24c853ca8d29cae4ab01683b6c92bd8a595a
[nominatim.git] / test / python / tools / test_exec_utils.py
1 # SPDX-License-Identifier: GPL-2.0-only
2 #
3 # This file is part of Nominatim. (https://nominatim.org)
4 #
5 # Copyright (C) 2022 by the Nominatim developer community.
6 # For a full list of authors see the git log.
7 """
8 Tests for tools.exec_utils module.
9 """
10 from pathlib import Path
11 import subprocess
12
13 import pytest
14
15 from nominatim.config import Configuration
16 import nominatim.tools.exec_utils as exec_utils
17 import nominatim.paths
18
19
20 class TestRunApiScript:
21
22     @staticmethod
23     @pytest.fixture(autouse=True)
24     def setup_project_dir(tmp_path):
25         webdir = tmp_path / 'website'
26         webdir.mkdir()
27         (webdir / 'test.php').write_text("<?php\necho 'OK\n';")
28
29
30     @staticmethod
31     def test_run_api(tmp_path):
32         assert exec_utils.run_api_script('test', tmp_path) == 0
33
34     @staticmethod
35     def test_run_api_execution_error(tmp_path):
36         assert exec_utils.run_api_script('badname', tmp_path) != 0
37
38     @staticmethod
39     def test_run_api_with_extra_env(tmp_path):
40         extra_env = dict(SCRIPT_FILENAME=str(tmp_path / 'website' / 'test.php'))
41         assert exec_utils.run_api_script('badname', tmp_path, extra_env=extra_env) == 0
42
43     @staticmethod
44     def test_custom_phpcgi(tmp_path, capfd):
45         assert exec_utils.run_api_script('test', tmp_path, phpcgi_bin='env',
46                                          params={'q' : 'Berlin'}) == 0
47         captured = capfd.readouterr()
48
49         assert '?q=Berlin' in captured.out
50
51     @staticmethod
52     def test_fail_on_error_output(tmp_path):
53         # Starting PHP 8 the PHP CLI no longer has STDERR defined as constant
54         php = """
55         <?php
56         if(!defined('STDERR')) define('STDERR', fopen('php://stderr', 'wb'));
57         fwrite(STDERR, 'WARNING'.PHP_EOL);
58         """
59         (tmp_path / 'website' / 'bad.php').write_text(php)
60
61         assert exec_utils.run_api_script('bad', tmp_path) == 1
62
63 ### run_osm2pgsql
64
65 def test_run_osm2pgsql(osm2pgsql_options):
66     osm2pgsql_options['append'] = False
67     osm2pgsql_options['import_file'] = 'foo.bar'
68     osm2pgsql_options['tablespaces']['slim_data'] = 'extra'
69     exec_utils.run_osm2pgsql(osm2pgsql_options)
70
71
72 def test_run_osm2pgsql_disable_jit(osm2pgsql_options):
73     osm2pgsql_options['append'] = True
74     osm2pgsql_options['import_file'] = 'foo.bar'
75     osm2pgsql_options['disable_jit'] = True
76     exec_utils.run_osm2pgsql(osm2pgsql_options)