1*9c5db199SXin Li#!/usr/bin/python3 2*9c5db199SXin Li 3*9c5db199SXin Lifrom __future__ import absolute_import 4*9c5db199SXin Lifrom __future__ import division 5*9c5db199SXin Lifrom __future__ import print_function 6*9c5db199SXin Liimport unittest 7*9c5db199SXin Liimport common 8*9c5db199SXin Lifrom autotest_lib.tko import status_lib, parser_lib 9*9c5db199SXin Lifrom autotest_lib.client.common_lib import log 10*9c5db199SXin Lifrom six.moves import range 11*9c5db199SXin Li 12*9c5db199SXin Li 13*9c5db199SXin Liclass clean_raw_line_test(unittest.TestCase): 14*9c5db199SXin Li def test_default(self): 15*9c5db199SXin Li raw_line_temp = 'this \r is a %s line \x00 yeah\n' 16*9c5db199SXin Li raw_line = raw_line_temp % status_lib.DEFAULT_BLOCKLIST[0] 17*9c5db199SXin Li cleaned = status_lib.clean_raw_line(raw_line) 18*9c5db199SXin Li self.assertEquals(cleaned, raw_line_temp % '') 19*9c5db199SXin Li 20*9c5db199SXin Li 21*9c5db199SXin Li def test_multi(self): 22*9c5db199SXin Li blocklist = ('\r\x00', 'FOOBAR', 'BLAh') 23*9c5db199SXin Li raw_line_temp = 'this \x00 FOO is BAR \r a %s line %s BL yeah %s ah\n' 24*9c5db199SXin Li raw_line = raw_line_temp % blocklist 25*9c5db199SXin Li cleaned = status_lib.clean_raw_line(raw_line, blocklist) 26*9c5db199SXin Li self.assertEquals( 27*9c5db199SXin Li cleaned, raw_line_temp % (('',) * len(blocklist))) 28*9c5db199SXin Li 29*9c5db199SXin Li 30*9c5db199SXin Liclass line_buffer_test(unittest.TestCase): 31*9c5db199SXin Li def test_get_empty(self): 32*9c5db199SXin Li buf = status_lib.line_buffer() 33*9c5db199SXin Li self.assertRaises(IndexError, buf.get) 34*9c5db199SXin Li 35*9c5db199SXin Li 36*9c5db199SXin Li def test_get_single(self): 37*9c5db199SXin Li buf = status_lib.line_buffer() 38*9c5db199SXin Li buf.put("single line") 39*9c5db199SXin Li self.assertEquals(buf.get(), "single line") 40*9c5db199SXin Li self.assertRaises(IndexError, buf.get) 41*9c5db199SXin Li 42*9c5db199SXin Li 43*9c5db199SXin Li def test_is_fifo(self): 44*9c5db199SXin Li buf = status_lib.line_buffer() 45*9c5db199SXin Li lines = ["line #%d" for x in range(10)] 46*9c5db199SXin Li for line in lines: 47*9c5db199SXin Li buf.put(line) 48*9c5db199SXin Li results = [] 49*9c5db199SXin Li while buf.size(): 50*9c5db199SXin Li results.append(buf.get()) 51*9c5db199SXin Li self.assertEquals(lines, results) 52*9c5db199SXin Li 53*9c5db199SXin Li 54*9c5db199SXin Li def test_put_multiple_same_as_multiple_puts(self): 55*9c5db199SXin Li buf_put, buf_multi = [status_lib.line_buffer() 56*9c5db199SXin Li for x in range(2)] 57*9c5db199SXin Li lines = ["line #%d" % x for x in range(10)] 58*9c5db199SXin Li for line in lines: 59*9c5db199SXin Li buf_put.put(line) 60*9c5db199SXin Li buf_multi.put_multiple(lines) 61*9c5db199SXin Li counter = 0 62*9c5db199SXin Li while buf_put.size(): 63*9c5db199SXin Li self.assertEquals(buf_put.size(), buf_multi.size()) 64*9c5db199SXin Li line = "line #%d" % counter 65*9c5db199SXin Li self.assertEquals(buf_put.get(), line) 66*9c5db199SXin Li self.assertEquals(buf_multi.get(), line) 67*9c5db199SXin Li counter += 1 68*9c5db199SXin Li 69*9c5db199SXin Li 70*9c5db199SXin Li def test_put_back_is_lifo(self): 71*9c5db199SXin Li buf = status_lib.line_buffer() 72*9c5db199SXin Li lines = ["1", "2", "3"] 73*9c5db199SXin Li for line in lines: 74*9c5db199SXin Li buf.put(line) 75*9c5db199SXin Li results = [] 76*9c5db199SXin Li results.append(buf.get()) 77*9c5db199SXin Li buf.put_back("1") 78*9c5db199SXin Li buf.put_back("0") 79*9c5db199SXin Li while buf.size(): 80*9c5db199SXin Li results.append(buf.get()) 81*9c5db199SXin Li self.assertEquals(results, ["1", "0", "1", "2", "3"]) 82*9c5db199SXin Li 83*9c5db199SXin Li 84*9c5db199SXin Li def test_size_increased_by_put(self): 85*9c5db199SXin Li buf = status_lib.line_buffer() 86*9c5db199SXin Li self.assertEquals(buf.size(), 0) 87*9c5db199SXin Li buf.put("1") 88*9c5db199SXin Li buf.put("2") 89*9c5db199SXin Li self.assertEquals(buf.size(), 2) 90*9c5db199SXin Li buf.put("3") 91*9c5db199SXin Li self.assertEquals(buf.size(), 3) 92*9c5db199SXin Li 93*9c5db199SXin Li 94*9c5db199SXin Li def test_size_decreased_by_get(self): 95*9c5db199SXin Li buf = status_lib.line_buffer() 96*9c5db199SXin Li buf.put("1") 97*9c5db199SXin Li buf.put("2") 98*9c5db199SXin Li buf.put("3") 99*9c5db199SXin Li self.assertEquals(buf.size(), 3) 100*9c5db199SXin Li buf.get() 101*9c5db199SXin Li self.assertEquals(buf.size(), 2) 102*9c5db199SXin Li buf.get() 103*9c5db199SXin Li buf.get() 104*9c5db199SXin Li self.assertEquals(buf.size(), 0) 105*9c5db199SXin Li 106*9c5db199SXin Li 107*9c5db199SXin Liclass status_stack_test(unittest.TestCase): 108*9c5db199SXin Li statuses = log.job_statuses 109*9c5db199SXin Li 110*9c5db199SXin Li def test_default_to_nostatus(self): 111*9c5db199SXin Li stack = status_lib.status_stack() 112*9c5db199SXin Li self.assertEquals(stack.current_status(), "NOSTATUS") 113*9c5db199SXin Li 114*9c5db199SXin Li 115*9c5db199SXin Li def test_default_on_start_to_nostatus(self): 116*9c5db199SXin Li stack = status_lib.status_stack() 117*9c5db199SXin Li stack.update("FAIL") 118*9c5db199SXin Li stack.start() 119*9c5db199SXin Li self.assertEquals(stack.current_status(), "NOSTATUS") 120*9c5db199SXin Li 121*9c5db199SXin Li 122*9c5db199SXin Li def test_size_always_at_least_zero(self): 123*9c5db199SXin Li stack = status_lib.status_stack() 124*9c5db199SXin Li self.assertEquals(stack.size(), 0) 125*9c5db199SXin Li stack.start() 126*9c5db199SXin Li stack.end() 127*9c5db199SXin Li self.assertEquals(stack.size(), 0) 128*9c5db199SXin Li stack.end() 129*9c5db199SXin Li self.assertEquals(stack.size(), 0) 130*9c5db199SXin Li 131*9c5db199SXin Li 132*9c5db199SXin Li def test_anything_overrides_nostatus(self): 133*9c5db199SXin Li for status in self.statuses: 134*9c5db199SXin Li stack = status_lib.status_stack() 135*9c5db199SXin Li stack.update(status) 136*9c5db199SXin Li self.assertEquals(stack.current_status(), status) 137*9c5db199SXin Li 138*9c5db199SXin Li 139*9c5db199SXin Li def test_worse_overrides_better(self): 140*9c5db199SXin Li for i in range(len(self.statuses)): 141*9c5db199SXin Li worse_status = self.statuses[i] 142*9c5db199SXin Li for j in range(i + 1, len(self.statuses)): 143*9c5db199SXin Li stack = status_lib.status_stack() 144*9c5db199SXin Li better_status = self.statuses[j] 145*9c5db199SXin Li stack.update(better_status) 146*9c5db199SXin Li stack.update(worse_status) 147*9c5db199SXin Li self.assertEquals(stack.current_status(), 148*9c5db199SXin Li worse_status) 149*9c5db199SXin Li 150*9c5db199SXin Li 151*9c5db199SXin Li def test_better_never_overrides_better(self): 152*9c5db199SXin Li for i in range(len(self.statuses)): 153*9c5db199SXin Li better_status = self.statuses[i] 154*9c5db199SXin Li for j in range(i): 155*9c5db199SXin Li stack = status_lib.status_stack() 156*9c5db199SXin Li worse_status = self.statuses[j] 157*9c5db199SXin Li stack.update(worse_status) 158*9c5db199SXin Li stack.update(better_status) 159*9c5db199SXin Li self.assertEquals(stack.current_status(), 160*9c5db199SXin Li worse_status) 161*9c5db199SXin Li 162*9c5db199SXin Li 163*9c5db199SXin Li def test_stack_is_lifo(self): 164*9c5db199SXin Li stack = status_lib.status_stack() 165*9c5db199SXin Li stack.update("GOOD") 166*9c5db199SXin Li stack.start() 167*9c5db199SXin Li stack.update("FAIL") 168*9c5db199SXin Li stack.start() 169*9c5db199SXin Li stack.update("WARN") 170*9c5db199SXin Li self.assertEquals(stack.end(), "WARN") 171*9c5db199SXin Li self.assertEquals(stack.end(), "FAIL") 172*9c5db199SXin Li self.assertEquals(stack.end(), "GOOD") 173*9c5db199SXin Li self.assertEquals(stack.end(), "NOSTATUS") 174*9c5db199SXin Li 175*9c5db199SXin Li 176*9c5db199SXin Liclass parser_test(unittest.TestCase): 177*9c5db199SXin Li available_versions = [0, 1] 178*9c5db199SXin Li def test_can_import_available_versions(self): 179*9c5db199SXin Li for version in self.available_versions: 180*9c5db199SXin Li p = parser_lib.parser(0) 181*9c5db199SXin Li self.assertNotEqual(p, None) 182*9c5db199SXin Li 183*9c5db199SXin Li 184*9c5db199SXin Liif __name__ == "__main__": 185*9c5db199SXin Li unittest.main() 186