Merge ~kevinbecker/+git/autotest-client-tests:kevinbecker/new_cyclictest into ~canonical-kernel-team/+git/autotest-client-tests:master

Proposed by Kevin Becker
Status: Merged
Merged at revision: 0ca0197fa9f5eaf18fd4d41a90d7ecf524290069
Proposed branch: ~kevinbecker/+git/autotest-client-tests:kevinbecker/new_cyclictest
Merge into: ~canonical-kernel-team/+git/autotest-client-tests:master
Diff against target: 113 lines (+101/-0)
2 files modified
rt_tests_cyclictest/control (+22/-0)
rt_tests_cyclictest/rt_tests_cyclictest.py (+79/-0)
Reviewer Review Type Date Requested Status
Francis Ginther Approve
Review via email: mp+460268@code.launchpad.net

Commit message

UBUNTU: SAUCE: Add cyclictest from upstream rt-tests with pass/fail.

Signed-off-by: Kevin Becker <email address hidden>

To post a comment you must log in.
Revision history for this message
Francis Ginther (fginther) wrote :

+1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/rt_tests_cyclictest/control b/rt_tests_cyclictest/control
2new file mode 100644
3index 0000000..c2fa1c9
4--- /dev/null
5+++ b/rt_tests_cyclictest/control
6@@ -0,0 +1,22 @@
7+AUTHOR = '''
8+Clark Williams <williams@redhat.com>
9+John Kacur <jkacur@redhat.com>
10+Clark Williams <williams@redhat.com>
11+Thomas Gleixner <tglx@linutronix.de>
12+ '''
13+NAME = "rt_tests_cyclictest"
14+DOC = '''
15+description rt test utils
16+URL https://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git
17+'''
18+SUITE = "None"
19+TIME = "MEDIUM"
20+TEST_CLASS = 'kernel'
21+TEST_CATEGORY = 'Functional'
22+TEST_TYPE = 'client'
23+
24+result = job.run_test_detail('rt_tests_cyclictest', test_name='setup', tag='setup', timeout=60*5)
25+if result == 'GOOD':
26+ job.run_test('rt_tests_cyclictest', test_name='rt_tests_cyclictest', tag='rt_tests_cyclictest')
27+else:
28+ print("ERROR: test failed to build")
29diff --git a/rt_tests_cyclictest/rt_tests_cyclictest.py b/rt_tests_cyclictest/rt_tests_cyclictest.py
30new file mode 100644
31index 0000000..78b3854
32--- /dev/null
33+++ b/rt_tests_cyclictest/rt_tests_cyclictest.py
34@@ -0,0 +1,79 @@
35+import multiprocessing
36+import os
37+import platform
38+import re
39+import shutil
40+from autotest.client import test, utils
41+from autotest.client.shared import error
42+
43+class rt_tests_cyclictest(test.test):
44+ version = 1
45+
46+ def initialize(self):
47+ self.flavour = re.split('-\d*-', platform.uname()[2])[-1]
48+ self.arch = platform.processor()
49+
50+ def install_required_pkgs(self):
51+ try:
52+ series = platform.dist()[2]
53+ except AttributeError:
54+ import distro
55+ series = distro.codename()
56+
57+ pkgs = [
58+ 'build-essential',
59+ 'git',
60+ 'libnuma-dev',
61+ ]
62+ gcc = 'gcc' if self.arch in ['ppc64le', 'aarch64', 's390x', 'riscv64'] else 'gcc-multilib'
63+ pkgs.append(gcc)
64+
65+ cmd = 'yes "" | DEBIAN_FRONTEND=noninteractive apt-get install --yes --force-yes ' + ' '.join(pkgs)
66+ self.results = utils.system_output(cmd, retain_output=True)
67+
68+ # setup
69+ #
70+ # Automatically run when there is no autotest/client/tmp/<test-suite> directory
71+ #
72+ def setup(self):
73+ self.install_required_pkgs()
74+ self.job.require_gcc()
75+ os.chdir(self.srcdir)
76+ shutil.rmtree('rt-tests', ignore_errors=True)
77+ branch = 'main'
78+ cmd = 'git clone -b {} https://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git'.format(branch)
79+ utils.system_output(cmd, retain_output=True)
80+
81+ # Print test suite HEAD SHA1 commit id for future reference
82+ os.chdir(os.path.join(self.srcdir, 'rt-tests'))
83+ title_local = utils.system_output("git log --oneline -1 | sed 's/(.*)//'", retain_output=False, verbose=False)
84+ title_upstream = utils.system_output("git log --oneline | grep -v SAUCE | head -1", retain_output=False, verbose=False)
85+ print("Latest commit in '{}' branch: {}".format(branch, title_local))
86+ print("Latest upstream commit: {}".format(title_upstream))
87+
88+ try:
89+ nprocs = '-j' + str(multiprocessing.cpu_count())
90+ except:
91+ nprocs = ''
92+ utils.make(nprocs)
93+
94+
95+ # run_once
96+ #
97+ # Driven by the control file for each individual test.
98+ #
99+ # Runs cyclictest with 10 threads, for 100000 loops, priority set to
100+ # 80 and an interval of 200us. It will fail if the max latency goes
101+ # over 100us.
102+ #
103+ def run_once(self, test_name, args='-t 10 -m -l 100000 -p 80 -b 100 -i 200 -d 0', exit_on_error=True):
104+ if test_name == 'setup':
105+ return
106+
107+ self.results = utils.system_output(self.srcdir + '/rt-tests/cyclictest ' + args, retain_output=True)
108+
109+ if "Break" == self.results.splitlines()[-1].split()[1]:
110+ raise error.TestError('FAIL: Max latency over 100us.')
111+
112+ return
113+

Subscribers

People subscribed via source and target branches