blob: baf134cdb13e2f162994a29f2de55f95127fc55e [file] [log] [blame]
#!/usr/bin/env python3
"""
This script launches a dbus session, sets the DBUS_SESSION_BUS_ADDRESS
and DBUS_STARTER_BUS_TYPE Eenvironment variables and puts the generated files
in the dbus dir location passed as a parameter. It then runs the unit test
script, and then cleans up the generated dbus files.
"""
import argparse
import os
import re
import sys
import tempfile
from subprocess import check_call, check_output
def launch_session_dbus(dbus_dir, dbus_config_file):
"""
Launches a session debus using a modified config file and
sets the DBUS_SESSION_BUS_ADDRESS environment variable
Parameter descriptions:
dbus_dir Directory location for generated files
dbus_config_file File location of dbus sys config file
"""
dbus_pid = os.path.join(dbus_dir, "pid")
dbus_socket = os.path.join(dbus_dir, "system_bus_socket")
dbus_local_conf = os.path.join(dbus_dir, "system-local.conf")
if os.path.isfile(dbus_pid):
os.remove(dbus_pid)
with open(dbus_config_file) as infile, open(
dbus_local_conf, "w"
) as outfile:
for line in infile:
line = re.sub(
"<type>.*</type>",
"<type>session</type>",
line,
flags=re.DOTALL,
)
line = re.sub(
"<pidfile>.*</pidfile>",
"<pidfile>%s</pidfile>" % dbus_pid,
line,
flags=re.DOTALL,
)
line = re.sub(
"<listen>.*</listen>",
"<listen>unix:path=%s</listen>" % dbus_socket,
line,
flags=re.DOTALL,
)
line = re.sub("<deny", "<allow", line)
outfile.write(line)
infile.close()
outfile.close()
command = [
"dbus-daemon",
"--config-file=%s" % dbus_local_conf,
"--print-address",
]
out = check_output(command).splitlines()
os.environ["DBUS_SESSION_BUS_ADDRESS"] = out[0].decode("utf-8")
os.environ["DBUS_STARTER_BUS_TYPE"] = "session"
def dbus_cleanup(dbus_dir):
"""
Kills the dbus session started by launch_session_dbus
Parameter descriptions:
dbus_dir Directory location of generated files
"""
dbus_pid = os.path.join(dbus_dir, "pid")
if os.path.isfile(dbus_pid):
dbus_pid = open(dbus_pid, "r").read().replace("\n", "")
check_call(["kill", dbus_pid])
if __name__ == "__main__":
# Set command line arguments
parser = argparse.ArgumentParser()
parser.add_argument(
"-f",
"--dbussysconfigfile",
dest="DBUS_SYS_CONFIG_FILE",
required=True,
help="Dbus sys config file location",
)
parser.add_argument(
"-u",
"--unittestandparams",
dest="UNIT_TEST",
required=True,
help=(
"Unit test script and params as comma"
" delimited string"
),
)
args = parser.parse_args(sys.argv[1:])
DBUS_DIR = tempfile.TemporaryDirectory(dir="/tmp/")
DBUS_SYS_CONFIG_FILE = args.DBUS_SYS_CONFIG_FILE
UNIT_TEST = args.UNIT_TEST
launch_session_dbus(DBUS_DIR.name, DBUS_SYS_CONFIG_FILE)
check_call(UNIT_TEST.split(","), env=os.environ)
dbus_cleanup(DBUS_DIR.name)