Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
tests: xtimer_usleep: remove timer testing in pexpect
As with #7816: testing timings over the UART doesn't make much sense. This PR removes those timer testing in `pexpect` for `tests/xtimer_usleep` and simplifies and cleans-up a lot of code overall (converting counting while-loops to for-loops, syncing iterations of the test etc.)
- Loading branch information
Showing
2 changed files
with
62 additions
and
51 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,55 +1,56 @@ | ||
#!/usr/bin/env python | ||
# -*- coding: utf-8 -*- | ||
# vim:fenc=utf-8 | ||
|
||
# Copyright (C) 2017 Francisco Acosta <francisco.acosta@inria.fr> | ||
# 2017 Freie Universität Berlin | ||
# | ||
# This file is subject to the terms and conditions of the GNU Lesser | ||
# General Public License v2.1. See the file LICENSE in the top level | ||
# directory for more details. | ||
|
||
import os | ||
import sys | ||
import time | ||
|
||
sys.path.append(os.path.join(os.environ['RIOTBASE'], 'dist/tools/testrunner')) | ||
import testrunner | ||
|
||
from datetime import datetime | ||
US_PER_SEC = 1000000 | ||
INTERNAL_JITTER = 0.05 | ||
EXTERNAL_JITTER = 0.15 | ||
|
||
class InvalidTimeout(Exception): | ||
pass | ||
|
||
def testfunc(child): | ||
exp_diff1 = 1000000 | ||
exp_diff5 = 5000000 | ||
exp_diff10 = 10000000 | ||
child.expect(u"This test will print \"Slept for X sec...\" every 1, 5 and 10 seconds.\r\n") | ||
child.expect(u"\r\n") | ||
child.expect(u"<======== If using pyterm, this is the time when started.") | ||
child.expect(u"\r\n") | ||
m = 9 | ||
while (m): | ||
n = 3 | ||
while (n): | ||
if n == 3: | ||
exp_diff = exp_diff1 | ||
if n == 2: | ||
exp_diff = exp_diff5 | ||
elif n == 1: | ||
exp_diff = exp_diff10 | ||
start = datetime.now() | ||
child.expect(u"Slept for \\d+ sec...", timeout=11) | ||
stop = datetime.now() | ||
diff = (stop - start) | ||
diff = (diff.seconds * 1000000) + diff.microseconds | ||
# fail within 5% of expected | ||
if diff > (exp_diff + (exp_diff1 * 0.05)) or \ | ||
diff < (exp_diff - (exp_diff1 * 0.05)): | ||
raise InvalidTimeout("Invalid timeout %d (expected %d)" % (diff, exp_diff)); | ||
else: | ||
print("Timed out correctly: %d (expected %d)" % (diff, exp_diff)) | ||
n = n - 1 | ||
m = m -1 | ||
|
||
child.expect(u"Test end.", timeout=15) | ||
child.expect(u"Running test (\\d+) times with (\\d+) distinct sleep times") | ||
RUNS = int(child.match.group(1)) | ||
SLEEP_TIMES_NUMOF = int(child.match.group(2)) | ||
try: | ||
child.expect_exact(u"Please hit any key and then ENTER to continue") | ||
child.sendline(u"a") | ||
start_test = time.time() | ||
for m in range(RUNS): | ||
for n in range(SLEEP_TIMES_NUMOF): | ||
child.expect(u"Slept for (\\d+) us \\(expected: (\\d+) us\\)") | ||
sleep_time = int(child.match.group(1)) | ||
exp = int(child.match.group(2)) | ||
lower_bound = exp - (exp * INTERNAL_JITTER) | ||
upper_bound = exp + (exp * INTERNAL_JITTER) | ||
if not (lower_bound < sleep_time < upper_bound): | ||
raise InvalidTimeout("Invalid timeout %d (expected %d)" % (sleep_time, exp)); | ||
testtime = (time.time() - start_test) * US_PER_SEC | ||
child.expect(u"Test ran for (\\d+) us") | ||
exp = int(child.match.group(1)) | ||
lower_bound = exp - (exp * EXTERNAL_JITTER) | ||
upper_bound = exp + (exp * EXTERNAL_JITTER) | ||
if not (lower_bound < testtime < upper_bound): | ||
raise InvalidTimeout("Host timer measured %d us (client measured %d us)" % \ | ||
(testtime, exp)); | ||
except InvalidTimeout as e: | ||
print(e) | ||
sys.exit(1) | ||
|
||
if __name__ == "__main__": | ||
sys.exit(testrunner.run(testfunc)) | ||
sys.exit(testrunner.run(testfunc, echo=True)) |