#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2016 Intel Corporation # # SPDX-License-Identifier: GPL-2.0-only # import os from django.test import TestCase from django.core import management from orm.models import signal_runbuilds import threading import time import subprocess import signal class KillRunbuilds(threading.Thread): """ Kill the runbuilds process after an amount of time """ def __init__(self, *args, **kwargs): super(KillRunbuilds, self).__init__(*args, **kwargs) self.setDaemon(True) def run(self): time.sleep(5) signal_runbuilds() time.sleep(1) pidfile_path = os.path.join(os.environ.get("BUILDDIR", "."), ".runbuilds.pid") with open(pidfile_path) as pidfile: pid = pidfile.read() os.kill(int(pid), signal.SIGTERM) class TestCommands(TestCase): """ Sanity test that runbuilds executes OK """ def setUp(self): os.environ.setdefault("DJANGO_SETTINGS_MODULE", "toastermain.settings_test") os.environ.setdefault("BUILDDIR", "/tmp/") # Setup a real database if needed for runbuilds process # to connect to management.call_command('migrate') def test_runbuilds_command(self): kill_runbuilds = KillRunbuilds() kill_runbuilds.start() manage_py = os.path.join( os.path.dirname(os.path.abspath(__file__)), os.pardir, os.pardir, "manage.py") command = "%s runbuilds" % manage_py process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (out, err) = process.communicate() process.wait() self.assertNotEqual(process.returncode, 1, "Runbuilds returned an error %s" % err)