77 lines
2.0 KiB
Python
77 lines
2.0 KiB
Python
#! /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)
|