bdd: move external process execution in separate func

This commit is contained in:
Sarah Hoffmann
2021-01-04 19:58:59 +01:00
parent faa85ded50
commit 72587b08fa
3 changed files with 28 additions and 30 deletions

View File

@@ -1,13 +1,11 @@
import logging
import os
from pathlib import Path
import subprocess
import tempfile
import psycopg2
import psycopg2.extras
LOG = logging.getLogger(__name__)
from steps.utils import run_script
class NominatimEnvironment:
""" Collects all functions for the execution of Nominatim functions.
@@ -216,9 +214,4 @@ class NominatimEnvironment:
else:
cwd = self.build_dir
proc = subprocess.Popen(cmd, cwd=cwd, env=self.test_env,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(outp, outerr) = proc.communicate()
outerr = outerr.decode('utf-8').replace('\\n', '\n')
LOG.debug("run_nominatim_script: %s\n%s\n%s", cmd, outp, outerr)
assert (proc.returncode == 0), "Script '%s' failed:\n%s\n%s\n" % (script, outp, outerr)
run_script(cmd, cwd=cwd, env=self.test_env)

View File

@@ -10,11 +10,11 @@ import io
import re
import logging
import xml.etree.ElementTree as ET
import subprocess
from urllib.parse import urlencode
from collections import OrderedDict
from check_functions import Almost
from utils import run_script
logger = logging.getLogger(__name__)
@@ -277,14 +277,9 @@ def query_cmd(context, query, dups):
if dups:
cmd.extend(('--dedupe', '0'))
proc = subprocess.Popen(cmd, cwd=context.nominatim.build_dir,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(outp, err) = proc.communicate()
outp, err = run_script(cmd, cwd=context.nominatim.build_dir)
assert proc.returncode == 0, "query.php failed with message: %s\noutput: %s" % (err, outp)
logger.debug("run_nominatim_script: %s\n%s\n" % (cmd, outp.decode('utf-8').replace('\\n', '\n')))
context.response = SearchResponse(outp.decode('utf-8'), 'json')
context.response = SearchResponse(outp, 'json')
def send_api_query(endpoint, params, fmt, context):
if fmt is not None:
@@ -326,19 +321,7 @@ def send_api_query(endpoint, params, fmt, context):
for k,v in params.items():
cmd.append("%s=%s" % (k, v))
proc = subprocess.Popen(cmd, cwd=context.nominatim.website_dir.name, env=env,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(outp, err) = proc.communicate()
outp = outp.decode('utf-8')
err = err.decode("utf-8")
logger.debug("Result: \n===============================\n"
+ outp + "\n===============================\n")
assert proc.returncode == 0, \
"%s failed with message: %s" % (
os.path.basename(env['SCRIPT_FILENAME']), err)
outp, err = run_script(cmd, cwd=context.nominatim.website_dir.name, env=env)
assert len(err) == 0, "Unexpected PHP error: %s" % (err)

22
test/bdd/steps/utils.py Normal file
View File

@@ -0,0 +1,22 @@
"""
Various smaller helps for step execution.
"""
import logging
import subprocess
LOG = logging.getLogger(__name__)
def run_script(cmd, **kwargs):
""" Run the given command, check that it is successful and output
when necessary.
"""
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
**kwargs)
(outp, outerr) = proc.communicate()
outp = outp.decode('utf-8')
outerr = outerr.decode('utf-8').replace('\\n', '\n')
LOG.debug("Run command: %s\n%s\n%s", cmd, outp, outerr)
assert proc.returncode == 0, "Script '{}' failed:\n{}\n{}\n".format(cmd[0], outp, outerr)
return outp, outerr