1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #! /usr/bin/env python3
- #
- # Copyright (C) 2020 Joshua Watt <JPEWhacker@gmail.com>
- #
- # SPDX-License-Identifier: MIT
- import argparse
- import os
- import random
- import shutil
- import signal
- import subprocess
- import sys
- import time
- def try_unlink(path):
- try:
- os.unlink(path)
- except:
- pass
- def main():
- def cleanup():
- shutil.rmtree("tmp/cache", ignore_errors=True)
- try_unlink("bitbake-cookerdaemon.log")
- try_unlink("bitbake.sock")
- try_unlink("bitbake.lock")
- parser = argparse.ArgumentParser(
- description="Bitbake parser torture test",
- epilog="""
- A torture test for bitbake's parser. Repeatedly interrupts parsing until
- bitbake decides to deadlock.
- """,
- )
- args = parser.parse_args()
- if not "BUILDDIR" in os.environ:
- print(
- "'BUILDDIR' not found in the environment. Did you initialize the build environment?"
- )
- return 1
- os.chdir(os.environ["BUILDDIR"])
- run_num = 0
- while True:
- if run_num % 100 == 0:
- print("Calibrating wait time...")
- cleanup()
- start_time = time.monotonic()
- r = subprocess.run(["bitbake", "-p"])
- max_wait_time = time.monotonic() - start_time
- if r.returncode != 0:
- print("Calibration run exited with %d" % r.returncode)
- return 1
- print("Maximum wait time is %f seconds" % max_wait_time)
- run_num += 1
- wait_time = random.random() * max_wait_time
- print("Run #%d" % run_num)
- print("Will sleep for %f seconds" % wait_time)
- cleanup()
- with subprocess.Popen(["bitbake", "-p"]) as proc:
- time.sleep(wait_time)
- proc.send_signal(signal.SIGINT)
- try:
- proc.wait(45)
- except subprocess.TimeoutExpired:
- print("Run #%d: Waited too long. Possible deadlock!" % run_num)
- proc.wait()
- return 1
- if proc.returncode == 0:
- print("Exited successfully. Timeout too long?")
- else:
- print("Exited with %d" % proc.returncode)
- if __name__ == "__main__":
- sys.exit(main())
|