You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
5.5 KiB
182 lines
5.5 KiB
#!/usr/bin/python2
|
|
|
|
import unittest
|
|
import common
|
|
from autotest_lib.tko import status_lib, parser_lib
|
|
from autotest_lib.client.common_lib import log
|
|
|
|
|
|
class clean_raw_line_test(unittest.TestCase):
|
|
def test_default(self):
|
|
raw_line_temp = 'this \r is a %s line \x00 yeah\n'
|
|
raw_line = raw_line_temp % status_lib.DEFAULT_BLOCKLIST[0]
|
|
cleaned = status_lib.clean_raw_line(raw_line)
|
|
self.assertEquals(cleaned, raw_line_temp % '')
|
|
|
|
|
|
def test_multi(self):
|
|
blocklist = ('\r\x00', 'FOOBAR', 'BLAh')
|
|
raw_line_temp = 'this \x00 FOO is BAR \r a %s line %s BL yeah %s ah\n'
|
|
raw_line = raw_line_temp % blocklist
|
|
cleaned = status_lib.clean_raw_line(raw_line, blocklist)
|
|
self.assertEquals(
|
|
cleaned, raw_line_temp % (('',) * len(blocklist)))
|
|
|
|
|
|
class line_buffer_test(unittest.TestCase):
|
|
def test_get_empty(self):
|
|
buf = status_lib.line_buffer()
|
|
self.assertRaises(IndexError, buf.get)
|
|
|
|
|
|
def test_get_single(self):
|
|
buf = status_lib.line_buffer()
|
|
buf.put("single line")
|
|
self.assertEquals(buf.get(), "single line")
|
|
self.assertRaises(IndexError, buf.get)
|
|
|
|
|
|
def test_is_fifo(self):
|
|
buf = status_lib.line_buffer()
|
|
lines = ["line #%d" for x in xrange(10)]
|
|
for line in lines:
|
|
buf.put(line)
|
|
results = []
|
|
while buf.size():
|
|
results.append(buf.get())
|
|
self.assertEquals(lines, results)
|
|
|
|
|
|
def test_put_multiple_same_as_multiple_puts(self):
|
|
buf_put, buf_multi = [status_lib.line_buffer()
|
|
for x in xrange(2)]
|
|
lines = ["line #%d" % x for x in xrange(10)]
|
|
for line in lines:
|
|
buf_put.put(line)
|
|
buf_multi.put_multiple(lines)
|
|
counter = 0
|
|
while buf_put.size():
|
|
self.assertEquals(buf_put.size(), buf_multi.size())
|
|
line = "line #%d" % counter
|
|
self.assertEquals(buf_put.get(), line)
|
|
self.assertEquals(buf_multi.get(), line)
|
|
counter += 1
|
|
|
|
|
|
def test_put_back_is_lifo(self):
|
|
buf = status_lib.line_buffer()
|
|
lines = ["1", "2", "3"]
|
|
for line in lines:
|
|
buf.put(line)
|
|
results = []
|
|
results.append(buf.get())
|
|
buf.put_back("1")
|
|
buf.put_back("0")
|
|
while buf.size():
|
|
results.append(buf.get())
|
|
self.assertEquals(results, ["1", "0", "1", "2", "3"])
|
|
|
|
|
|
def test_size_increased_by_put(self):
|
|
buf = status_lib.line_buffer()
|
|
self.assertEquals(buf.size(), 0)
|
|
buf.put("1")
|
|
buf.put("2")
|
|
self.assertEquals(buf.size(), 2)
|
|
buf.put("3")
|
|
self.assertEquals(buf.size(), 3)
|
|
|
|
|
|
def test_size_decreased_by_get(self):
|
|
buf = status_lib.line_buffer()
|
|
buf.put("1")
|
|
buf.put("2")
|
|
buf.put("3")
|
|
self.assertEquals(buf.size(), 3)
|
|
buf.get()
|
|
self.assertEquals(buf.size(), 2)
|
|
buf.get()
|
|
buf.get()
|
|
self.assertEquals(buf.size(), 0)
|
|
|
|
|
|
class status_stack_test(unittest.TestCase):
|
|
statuses = log.job_statuses
|
|
|
|
def test_default_to_nostatus(self):
|
|
stack = status_lib.status_stack()
|
|
self.assertEquals(stack.current_status(), "NOSTATUS")
|
|
|
|
|
|
def test_default_on_start_to_nostatus(self):
|
|
stack = status_lib.status_stack()
|
|
stack.update("FAIL")
|
|
stack.start()
|
|
self.assertEquals(stack.current_status(), "NOSTATUS")
|
|
|
|
|
|
def test_size_always_at_least_zero(self):
|
|
stack = status_lib.status_stack()
|
|
self.assertEquals(stack.size(), 0)
|
|
stack.start()
|
|
stack.end()
|
|
self.assertEquals(stack.size(), 0)
|
|
stack.end()
|
|
self.assertEquals(stack.size(), 0)
|
|
|
|
|
|
def test_anything_overrides_nostatus(self):
|
|
for status in self.statuses:
|
|
stack = status_lib.status_stack()
|
|
stack.update(status)
|
|
self.assertEquals(stack.current_status(), status)
|
|
|
|
|
|
def test_worse_overrides_better(self):
|
|
for i in xrange(len(self.statuses)):
|
|
worse_status = self.statuses[i]
|
|
for j in xrange(i + 1, len(self.statuses)):
|
|
stack = status_lib.status_stack()
|
|
better_status = self.statuses[j]
|
|
stack.update(better_status)
|
|
stack.update(worse_status)
|
|
self.assertEquals(stack.current_status(),
|
|
worse_status)
|
|
|
|
|
|
def test_better_never_overrides_better(self):
|
|
for i in xrange(len(self.statuses)):
|
|
better_status = self.statuses[i]
|
|
for j in xrange(i):
|
|
stack = status_lib.status_stack()
|
|
worse_status = self.statuses[j]
|
|
stack.update(worse_status)
|
|
stack.update(better_status)
|
|
self.assertEquals(stack.current_status(),
|
|
worse_status)
|
|
|
|
|
|
def test_stack_is_lifo(self):
|
|
stack = status_lib.status_stack()
|
|
stack.update("GOOD")
|
|
stack.start()
|
|
stack.update("FAIL")
|
|
stack.start()
|
|
stack.update("WARN")
|
|
self.assertEquals(stack.end(), "WARN")
|
|
self.assertEquals(stack.end(), "FAIL")
|
|
self.assertEquals(stack.end(), "GOOD")
|
|
self.assertEquals(stack.end(), "NOSTATUS")
|
|
|
|
|
|
class parser_test(unittest.TestCase):
|
|
available_versions = [0, 1]
|
|
def test_can_import_available_versions(self):
|
|
for version in self.available_versions:
|
|
p = parser_lib.parser(0)
|
|
self.assertNotEqual(p, None)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|