xref: /aosp_15_r20/external/autotest/tko/status_lib_unittest.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
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