You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.5 KiB
87 lines
2.5 KiB
""" |
|
Contains functions used to test the ArduPilot examples |
|
|
|
AP_FLAKE8_CLEAN |
|
""" |
|
|
|
from __future__ import print_function |
|
|
|
|
|
import os |
|
import pexpect |
|
import signal |
|
import subprocess |
|
import time |
|
|
|
from pysim import util |
|
|
|
|
|
def run_example(filepath, valgrind=False, gdb=False): |
|
cmd = [] |
|
if valgrind: |
|
cmd.append("valgrind") |
|
if gdb: |
|
cmd.append("gdb") |
|
cmd.append(filepath) |
|
print("Running: (%s)" % str(cmd)) |
|
bob = subprocess.Popen(cmd, stdin=None, close_fds=True) |
|
retcode = bob.poll() |
|
time.sleep(10) |
|
print("pre-kill retcode: %s" % str(retcode)) |
|
if retcode is not None: |
|
raise ValueError("Process exited before I could kill it (%s)" % str(retcode)) |
|
bob.send_signal(signal.SIGTERM) |
|
time.sleep(1) |
|
retcode = bob.poll() |
|
print("retcode: %s" % str(retcode)) |
|
if retcode is None: |
|
# if we get this far then we're not going to get a gcda file |
|
# out of this process for coverage analysis; it has to exit |
|
# normally, and it hasn't responded to a TERM. |
|
bob.kill() |
|
retcode2 = bob.wait() |
|
print("retcode2: %s" % str(retcode2)) |
|
elif retcode == -15: |
|
print("process exited with -15, indicating it didn't catch the TERM signal and exit properly") |
|
elif retcode != 0: |
|
# note that process could exit with code 0 and we couldn't tell... |
|
raise ValueError("Process exitted with non-zero exitcode %s" % str(retcode)) |
|
|
|
print("Ran: (%s)" % str(cmd)) |
|
|
|
|
|
def run_examples(debug=False, valgrind=False, gdb=False): |
|
dirpath = util.reltopdir(os.path.join('build', 'linux', 'examples')) |
|
|
|
print("Running Hello") |
|
# explicitly run helloworld and check for output |
|
hello_path = os.path.join(dirpath, "Hello") |
|
p = pexpect.spawn(hello_path, ["Hello"]) |
|
ex = None |
|
try: |
|
p.expect("hello world", timeout=5) |
|
except pexpect.TIMEOUT as e: |
|
ex = e |
|
print("ran Hello") |
|
|
|
p.close() |
|
|
|
if ex is not None: |
|
raise ex |
|
|
|
skip = { |
|
"BARO_generic": "Most linux computers don't have baros...", |
|
"RCProtocolDecoder": "This assumes specific hardware is connected", |
|
"FlashTest": "https://github.com/ArduPilot/ardupilot/issues/14168", |
|
"UART_chargen": "This nuke the term", |
|
} |
|
for afile in os.listdir(dirpath): |
|
if afile in skip: |
|
print("Skipping %s: %s" % (afile, skip[afile])) |
|
continue |
|
filepath = os.path.join(dirpath, afile) |
|
if not os.path.isfile(filepath): |
|
continue |
|
run_example(filepath, valgrind=valgrind, gdb=gdb) |
|
|
|
return True
|
|
|