aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Nduli2024-10-01 18:42:35 +0300
committerBonfaceKilz2024-10-02 06:59:11 +0300
commit540300ad13d0d1ced0ea6c9c8efd8272a933dde3 (patch)
treedec60b10edd04baecee589093980df4ce3c5653d
parent9aefe6e8c2e7f21cd512a2c81769ddc4554f6f42 (diff)
downloadgenenetwork3-540300ad13d0d1ced0ea6c9c8efd8272a933dde3.tar.gz
feat: cleaner handling of virtuoso process
-rw-r--r--tests/fixtures/rdf.py52
1 files changed, 15 insertions, 37 deletions
diff --git a/tests/fixtures/rdf.py b/tests/fixtures/rdf.py
index a77df37..19253bd 100644
--- a/tests/fixtures/rdf.py
+++ b/tests/fixtures/rdf.py
@@ -5,7 +5,6 @@ import subprocess
from string import Template
-import psutil # type: ignore
import pytest
import requests
from requests.auth import HTTPDigestAuth
@@ -22,23 +21,6 @@ SPARQL_CONF = {
}
-def get_process_id(name) -> list:
- """Return process ids found by (partial) name or regex.
-
- >>> get_process_id('kthreadd')
- [2]
- >>> get_process_id('watchdog')
- [10, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61] # ymmv
- >>> get_process_id('non-existent process')
- []
- """
- with subprocess.Popen(
- ["pgrep", "-f", name], stdout=subprocess.PIPE, shell=False
- ) as proc:
- response = proc.communicate()[0]
- return [int(pid) for pid in response.split()]
-
-
@pytest.fixture(scope="session")
def rdf_setup():
"""Upload RDF to a Virtuoso named graph"""
@@ -47,30 +29,27 @@ def rdf_setup():
dir_path,
"test_data/ttl-files/test-data.ttl",
)
- # We intentionally use a temporary directory. This way, all the
- # virtuoso database files are properly cleaned up after running
- # tests.
with tempfile.TemporaryDirectory() as tmpdirname:
init_file = os.path.join(tmpdirname, "virtuoso.ini")
- # Create the virtuoso init file which we use when
- # bootstrapping virtuoso.
with open(init_file, "w", encoding="utf-8") as file_:
file_.write(Template(VIRTUOSO_INI_FILE).substitute(
dir_path=tmpdirname))
- # Here we intentionally ignore the "+foreground" option to
- # allow virtuoso to run in the background.
+ # when using shell=True, pass in string as args, ref: https://stackoverflow.com/a/10661488
+ command = f"virtuoso-t +foreground +wait +no-checkpoint +configfile {init_file}"
with subprocess.Popen(
- [
- "virtuoso-t",
- "+wait",
- "+no-checkpoint",
- "+configfile",
- init_file,
- ],
- stdout=subprocess.DEVNULL,
- stderr=subprocess.DEVNULL,
+ command,
+ shell=True,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ text=True,
) as pid:
- pid.wait()
+ while pid.stdout.readable():
+ line = pid.stdout.readline()
+ if not line:
+ raise RuntimeError("Something went wrong running virtuoso")
+ # virtuoso is ready for connections
+ if "server online at" in line.lower():
+ break
# Define the query parameters and authentication
params = {"graph": "http://cd-test.genenetwork.org"}
auth = HTTPDigestAuth("dba", "dba")
@@ -92,5 +71,4 @@ def rdf_setup():
requests.delete(
SPARQL_CONF["sparql_crud_auth_uri"], params=params, auth=auth
)
- for pid_ in get_process_id(init_file):
- psutil.Process(pid_).kill()
+ pid.terminate()