5 # Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
8 # Redistribution and use in source and binary forms, with or without
9 # modification, are permitted provided that the following conditions
12 # * Redistributions of source code must retain the above copyright
13 # notice, this list of conditions and the following disclaimer.
14 # * Redistributions in binary form must reproduce the above copyright
15 # notice, this list of conditions and the following disclaimer in
16 # the documentation and/or other materials provided with the
18 # * Neither the name of Intel Corporation nor the names of its
19 # contributors may be used to endorse or promote products derived
20 # from this software without specific prior written permission.
22 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 import sys, pexpect, time, os, re
38 # 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
54 def dump_autotest(child, test_name):
55 child.sendline(test_name)
59 # reads output and waits for Test OK
60 def memory_autotest(child, test_name):
61 child.sendline(test_name)
62 regexp = "phys:0x[0-9a-f]*, len:([0-9]*), virt:0x[0-9a-f]*, socket_id:[0-9]*"
63 index = child.expect([regexp, pexpect.TIMEOUT], timeout = 180)
65 return -1, "Fail [Timeout]"
66 size = int(child.match.groups()[0], 16)
68 return -1, "Fail [Bad size]"
69 index = child.expect(["Test OK", "Test Failed",
70 pexpect.TIMEOUT], timeout = 10)
74 return -1, "Fail [Timeout]"
77 def spinlock_autotest(child, test_name):
80 child.sendline(test_name)
82 index = child.expect(["Test OK",
84 "Hello from core ([0-9]*) !",
85 "Hello from within recursive locks from ([0-9]*) !",
86 pexpect.TIMEOUT], timeout = 5)
91 # message, check ordering
93 if int(child.match.groups()[0]) < i:
94 return -1, "Fail [Bad order]"
95 i = int(child.match.groups()[0])
97 if int(child.match.groups()[0]) < ir:
98 return -1, "Fail [Bad order]"
99 ir = int(child.match.groups()[0])
103 return -1, "Fail [Timeout]"
109 def rwlock_autotest(child, test_name):
111 child.sendline(test_name)
113 index = child.expect(["Test OK",
115 "Hello from core ([0-9]*) !",
116 "Global write lock taken on master core ([0-9]*)",
117 pexpect.TIMEOUT], timeout = 10)
121 return -1, "Fail [Message is missing]"
124 # message, check ordering
126 if int(child.match.groups()[0]) < i:
127 return -1, "Fail [Bad order]"
128 i = int(child.match.groups()[0])
130 # must be the last message, check ordering
135 return -1, "Fail [Timeout]"
143 def logs_autotest(child, test_name):
145 child.sendline(test_name)
148 "TESTAPP1: error message",
149 "TESTAPP1: critical message",
150 "TESTAPP2: critical message",
151 "TESTAPP1: error message",
154 for log_msg in log_list:
155 index = child.expect([log_msg,
158 pexpect.TIMEOUT], timeout = 10)
161 return -1, "Fail [Timeout]"
166 index = child.expect(["Test OK",
168 pexpect.TIMEOUT], timeout = 10)
172 def timer_autotest(child, test_name):
174 child.sendline(test_name)
176 index = child.expect(["Start timer stress tests",
178 pexpect.TIMEOUT], timeout = 5)
183 return -1, "Fail [Timeout]"
185 index = child.expect(["Start timer stress tests 2",
187 pexpect.TIMEOUT], timeout = 5)
192 return -1, "Fail [Timeout]"
194 index = child.expect(["Start timer basic tests",
196 pexpect.TIMEOUT], timeout = 5)
201 return -1, "Fail [Timeout]"
203 prev_lcore_timer1 = -1
211 index = child.expect(["TESTTIMER: ([0-9]*): callback id=([0-9]*) count=([0-9]*) on core ([0-9]*)",
214 pexpect.TIMEOUT], timeout = 10)
222 return -1, "Fail [Timeout]"
225 t = int(child.match.groups()[0])
226 id = int(child.match.groups()[1])
227 cnt = int(child.match.groups()[2])
228 lcore = int(child.match.groups()[3])
230 return -1, "Fail [Cannot parse]"
232 # timer0 always expires on the same core when cnt < 20
236 elif lcore != lcore_tim0 and cnt < 20:
237 return -1, "Fail [lcore != lcore_tim0 (%d, %d)]"%(lcore, lcore_tim0)
239 return -1, "Fail [tim0 cnt > 21]"
241 # timer1 each time expires on a different core
243 if lcore == lcore_tim1:
244 return -1, "Fail [lcore == lcore_tim1 (%d, %d)]"%(lcore, lcore_tim1)
247 return -1, "Fail [tim1 cnt > 30]"
249 # timer0 always expires on the same core
253 elif lcore != lcore_tim2:
254 return -1, "Fail [lcore != lcore_tim2 (%d, %d)]"%(lcore, lcore_tim2)
256 return -1, "Fail [tim2 cnt > 30]"
258 # timer0 always expires on the same core
262 elif lcore != lcore_tim3:
263 return -1, "Fail [lcore_tim3 changed (%d -> %d)]"%(lcore, lcore_tim3)
265 return -1, "Fail [tim3 cnt > 30]"
267 # must be 2 different cores
268 if lcore_tim0 == lcore_tim3:
269 return -1, "Fail [lcore_tim0 (%d) == lcore_tim3 (%d)]"%(lcore_tim0, lcore_tim3)
273 def ring_autotest(child, test_name):
274 child.sendline(test_name)
275 index = child.expect(["Test OK", "Test Failed",
276 pexpect.TIMEOUT], timeout = 2)
280 return -1, "Fail [Timeout]"
282 child.sendline("set_watermark test 100")
283 child.sendline("dump_ring test")
284 index = child.expect([" watermark=100",
285 pexpect.TIMEOUT], timeout = 1)
287 return -1, "Fail [Bad watermark]"