5 # Copyright(c) 2010-2013 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.
37 import sys, pexpect, time, os, re
39 # default autotest, used to run most tests
41 def default_autotest(child, test_name):
42 child.sendline(test_name)
43 result = child.expect(["Test OK", "Test Failed",
44 "Command not found", pexpect.TIMEOUT], timeout = 900)
48 return -1, "Fail [Not found]"
50 return -1, "Fail [Timeout]"
53 # autotest used to run dump commands
54 # just fires the command
55 def dump_autotest(child, test_name):
56 child.sendline(test_name)
60 # reads output and waits for Test OK
61 def memory_autotest(child, test_name):
62 child.sendline(test_name)
63 regexp = "phys:0x[0-9a-f]*, len:0x([0-9a-f]*), virt:0x[0-9a-f]*, socket_id:[0-9]*"
64 index = child.expect([regexp, pexpect.TIMEOUT], timeout = 180)
66 return -1, "Fail [Timeout]"
67 size = int(child.match.groups()[0], 16)
69 return -1, "Fail [Bad size]"
70 index = child.expect(["Test OK", "Test Failed",
71 pexpect.TIMEOUT], timeout = 10)
75 return -1, "Fail [Timeout]"
78 def spinlock_autotest(child, test_name):
81 child.sendline(test_name)
83 index = child.expect(["Test OK",
85 "Hello from core ([0-9]*) !",
86 "Hello from within recursive locks from ([0-9]*) !",
87 pexpect.TIMEOUT], timeout = 20)
92 # message, check ordering
94 if int(child.match.groups()[0]) < i:
95 return -1, "Fail [Bad order]"
96 i = int(child.match.groups()[0])
98 if int(child.match.groups()[0]) < ir:
99 return -1, "Fail [Bad order]"
100 ir = int(child.match.groups()[0])
104 return -1, "Fail [Timeout]"
110 def rwlock_autotest(child, test_name):
112 child.sendline(test_name)
114 index = child.expect(["Test OK",
116 "Hello from core ([0-9]*) !",
117 "Global write lock taken on master core ([0-9]*)",
118 pexpect.TIMEOUT], timeout = 10)
122 return -1, "Fail [Message is missing]"
125 # message, check ordering
127 if int(child.match.groups()[0]) < i:
128 return -1, "Fail [Bad order]"
129 i = int(child.match.groups()[0])
131 # must be the last message, check ordering
136 return -1, "Fail [Timeout]"
144 def logs_autotest(child, test_name):
146 child.sendline(test_name)
149 "TESTAPP1: this is a debug level message",
150 "TESTAPP1: this is a info level message",
151 "TESTAPP1: this is a warning level message",
152 "TESTAPP2: this is a info level message",
153 "TESTAPP2: this is a warning level message",
154 "TESTAPP1: this is a debug level message",
155 "TESTAPP1: this is a debug level message",
156 "TESTAPP1: this is a info level message",
157 "TESTAPP1: this is a warning level message",
158 "TESTAPP2: this is a info level message",
159 "TESTAPP2: this is a warning level message",
160 "TESTAPP1: this is a debug level 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)
181 def timer_autotest(child, test_name):
183 child.sendline(test_name)
185 index = child.expect(["Start timer stress tests \(30 seconds\)",
187 pexpect.TIMEOUT], timeout = 10)
192 return -1, "Fail [Timeout]"
194 index = child.expect(["Start timer basic tests \(30 seconds\)",
196 pexpect.TIMEOUT], timeout = 40)
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 = 1500)
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]"