3 # Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
10 # * Redistributions of source code must retain the above copyright
11 # notice, this list of conditions and the following disclaimer.
12 # * Redistributions in binary form must reproduce the above copyright
13 # notice, this list of conditions and the following disclaimer in
14 # the documentation and/or other materials provided with the
16 # * Neither the name of Intel Corporation nor the names of its
17 # contributors may be used to endorse or promote products derived
18 # from this software without specific prior written permission.
20 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 # default autotest, used to run most tests
40 def default_autotest(child, test_name):
41 child.sendline(test_name)
42 result = child.expect(["Test OK", "Test Failed",
43 "Command not found", pexpect.TIMEOUT], timeout=900)
47 return -1, "Fail [Not found]"
49 return -1, "Fail [Timeout]"
52 # autotest used to run dump commands
53 # just fires the command
56 def dump_autotest(child, test_name):
57 child.sendline(test_name)
61 # reads output and waits for Test OK
64 def memory_autotest(child, test_name):
65 child.sendline(test_name)
66 regexp = "phys:0x[0-9a-f]*, len:([0-9]*), virt:0x[0-9a-f]*, " \
68 index = child.expect([regexp, pexpect.TIMEOUT], timeout=180)
70 return -1, "Fail [Timeout]"
71 size = int(child.match.groups()[0], 16)
73 return -1, "Fail [Bad size]"
74 index = child.expect(["Test OK", "Test Failed",
75 pexpect.TIMEOUT], timeout=10)
79 return -1, "Fail [Timeout]"
83 def spinlock_autotest(child, test_name):
86 child.sendline(test_name)
88 index = child.expect(["Test OK",
90 "Hello from core ([0-9]*) !",
91 "Hello from within recursive locks "
93 pexpect.TIMEOUT], timeout=5)
98 # message, check ordering
100 if int(child.match.groups()[0]) < i:
101 return -1, "Fail [Bad order]"
102 i = int(child.match.groups()[0])
104 if int(child.match.groups()[0]) < ir:
105 return -1, "Fail [Bad order]"
106 ir = int(child.match.groups()[0])
110 return -1, "Fail [Timeout]"
117 def rwlock_autotest(child, test_name):
119 child.sendline(test_name)
121 index = child.expect(["Test OK",
123 "Hello from core ([0-9]*) !",
124 "Global write lock taken on master "
126 pexpect.TIMEOUT], timeout=10)
130 return -1, "Fail [Message is missing]"
133 # message, check ordering
135 if int(child.match.groups()[0]) < i:
136 return -1, "Fail [Bad order]"
137 i = int(child.match.groups()[0])
139 # must be the last message, check ordering
144 return -1, "Fail [Timeout]"
153 def logs_autotest(child, test_name):
154 child.sendline(test_name)
157 "TESTAPP1: error message",
158 "TESTAPP1: critical message",
159 "TESTAPP2: critical message",
160 "TESTAPP1: error message",
163 for log_msg in log_list:
164 index = child.expect([log_msg,
167 pexpect.TIMEOUT], timeout=10)
170 return -1, "Fail [Timeout]"
175 index = child.expect(["Test OK",
177 pexpect.TIMEOUT], timeout=10)
182 def timer_autotest(child, test_name):
183 child.sendline(test_name)
185 index = child.expect(["Start timer stress tests",
187 pexpect.TIMEOUT], timeout=5)
192 return -1, "Fail [Timeout]"
194 index = child.expect(["Start timer stress tests 2",
196 pexpect.TIMEOUT], timeout=5)
201 return -1, "Fail [Timeout]"
203 index = child.expect(["Start timer basic tests",
205 pexpect.TIMEOUT], timeout=5)
210 return -1, "Fail [Timeout]"
218 index = child.expect(["TESTTIMER: ([0-9]*): callback id=([0-9]*) "
219 "count=([0-9]*) on core ([0-9]*)",
222 pexpect.TIMEOUT], timeout=10)
230 return -1, "Fail [Timeout]"
233 id = int(child.match.groups()[1])
234 cnt = int(child.match.groups()[2])
235 lcore = int(child.match.groups()[3])
237 return -1, "Fail [Cannot parse]"
239 # timer0 always expires on the same core when cnt < 20
243 elif lcore != lcore_tim0 and cnt < 20:
244 return -1, "Fail [lcore != lcore_tim0 (%d, %d)]" \
245 % (lcore, lcore_tim0)
247 return -1, "Fail [tim0 cnt > 21]"
249 # timer1 each time expires on a different core
251 if lcore == lcore_tim1:
252 return -1, "Fail [lcore == lcore_tim1 (%d, %d)]" \
253 % (lcore, lcore_tim1)
256 return -1, "Fail [tim1 cnt > 30]"
258 # timer0 always expires on the same core
262 elif lcore != lcore_tim2:
263 return -1, "Fail [lcore != lcore_tim2 (%d, %d)]" \
264 % (lcore, lcore_tim2)
266 return -1, "Fail [tim2 cnt > 30]"
268 # timer0 always expires on the same core
272 elif lcore != lcore_tim3:
273 return -1, "Fail [lcore_tim3 changed (%d -> %d)]" \
274 % (lcore, lcore_tim3)
276 return -1, "Fail [tim3 cnt > 30]"
278 # must be 2 different cores
279 if lcore_tim0 == lcore_tim3:
280 return -1, "Fail [lcore_tim0 (%d) == lcore_tim3 (%d)]" \
281 % (lcore_tim0, lcore_tim3)
286 def ring_autotest(child, test_name):
287 child.sendline(test_name)
288 index = child.expect(["Test OK", "Test Failed",
289 pexpect.TIMEOUT], timeout=2)
293 return -1, "Fail [Timeout]"