blob: f25de27d18f2c3c5f765765f045ddfce990050f1 [file] [log] [blame]
mbligh2895ce52008-04-17 15:40:51 +00001#!/usr/bin/python
2
3import unittest
mbligh2895ce52008-04-17 15:40:51 +00004import common
5from autotest_lib.tko import status_lib
mbligh302482e2008-05-01 20:06:16 +00006from autotest_lib.client.common_lib import logging
mbligh2895ce52008-04-17 15:40:51 +00007
8
9class line_buffer_test(unittest.TestCase):
jadmanski0afbb632008-06-06 21:10:57 +000010 def test_get_empty(self):
11 buf = status_lib.line_buffer()
12 self.assertRaises(IndexError, buf.get)
mbligh2895ce52008-04-17 15:40:51 +000013
14
jadmanski0afbb632008-06-06 21:10:57 +000015 def test_get_single(self):
16 buf = status_lib.line_buffer()
17 buf.put("single line")
18 self.assertEquals(buf.get(), "single line")
19 self.assertRaises(IndexError, buf.get)
mbligh2895ce52008-04-17 15:40:51 +000020
21
jadmanski0afbb632008-06-06 21:10:57 +000022 def test_is_fifo(self):
23 buf = status_lib.line_buffer()
24 lines = ["line #%d" for x in xrange(10)]
25 for line in lines:
26 buf.put(line)
27 results = []
28 while buf.size():
29 results.append(buf.get())
30 self.assertEquals(lines, results)
mbligh2895ce52008-04-17 15:40:51 +000031
32
jadmanski0afbb632008-06-06 21:10:57 +000033 def test_put_multiple_same_as_multiple_puts(self):
34 buf_put, buf_multi = [status_lib.line_buffer()
35 for x in xrange(2)]
36 lines = ["line #%d" % x for x in xrange(10)]
37 for line in lines:
38 buf_put.put(line)
39 buf_multi.put_multiple(lines)
40 counter = 0
41 while buf_put.size():
42 self.assertEquals(buf_put.size(), buf_multi.size())
43 line = "line #%d" % counter
44 self.assertEquals(buf_put.get(), line)
45 self.assertEquals(buf_multi.get(), line)
46 counter += 1
jadmanski6e8bf752008-05-14 00:17:48 +000047
48
jadmanski0afbb632008-06-06 21:10:57 +000049 def test_put_back_is_lifo(self):
50 buf = status_lib.line_buffer()
51 lines = ["1", "2", "3"]
52 for line in lines:
53 buf.put(line)
54 results = []
55 results.append(buf.get())
56 buf.put_back("1")
57 buf.put_back("0")
58 while buf.size():
59 results.append(buf.get())
60 self.assertEquals(results, ["1", "0", "1", "2", "3"])
mbligh2895ce52008-04-17 15:40:51 +000061
62
jadmanski0afbb632008-06-06 21:10:57 +000063 def test_size_increased_by_put(self):
64 buf = status_lib.line_buffer()
65 self.assertEquals(buf.size(), 0)
66 buf.put("1")
67 buf.put("2")
68 self.assertEquals(buf.size(), 2)
69 buf.put("3")
70 self.assertEquals(buf.size(), 3)
mbligh2895ce52008-04-17 15:40:51 +000071
72
jadmanski0afbb632008-06-06 21:10:57 +000073 def test_size_decreased_by_get(self):
74 buf = status_lib.line_buffer()
75 buf.put("1")
76 buf.put("2")
77 buf.put("3")
78 self.assertEquals(buf.size(), 3)
79 buf.get()
80 self.assertEquals(buf.size(), 2)
81 buf.get()
82 buf.get()
83 self.assertEquals(buf.size(), 0)
mbligh2895ce52008-04-17 15:40:51 +000084
85
86class status_stack_test(unittest.TestCase):
jadmanski0afbb632008-06-06 21:10:57 +000087 statuses = logging.job_statuses
mbligh302482e2008-05-01 20:06:16 +000088
jadmanski0afbb632008-06-06 21:10:57 +000089 def test_default_to_nostatus(self):
90 stack = status_lib.status_stack()
91 self.assertEquals(stack.current_status(), "NOSTATUS")
mbligh2895ce52008-04-17 15:40:51 +000092
93
jadmanski0afbb632008-06-06 21:10:57 +000094 def test_default_on_start_to_nostatus(self):
95 stack = status_lib.status_stack()
96 stack.update("FAIL")
97 stack.start()
98 self.assertEquals(stack.current_status(), "NOSTATUS")
mbligh2895ce52008-04-17 15:40:51 +000099
100
jadmanski0afbb632008-06-06 21:10:57 +0000101 def test_size_always_at_least_zero(self):
102 stack = status_lib.status_stack()
103 self.assertEquals(stack.size(), 0)
104 stack.start()
105 stack.end()
106 self.assertEquals(stack.size(), 0)
107 stack.end()
108 self.assertEquals(stack.size(), 0)
mbligh2895ce52008-04-17 15:40:51 +0000109
110
jadmanski0afbb632008-06-06 21:10:57 +0000111 def test_anything_overrides_nostatus(self):
112 for status in self.statuses:
113 stack = status_lib.status_stack()
114 stack.update(status)
115 self.assertEquals(stack.current_status(), status)
mbligh2895ce52008-04-17 15:40:51 +0000116
117
jadmanski0afbb632008-06-06 21:10:57 +0000118 def test_worse_overrides_better(self):
119 for i in xrange(len(self.statuses)):
120 worse_status = self.statuses[i]
121 for j in xrange(i + 1, len(self.statuses)):
122 stack = status_lib.status_stack()
123 better_status = self.statuses[j]
124 stack.update(better_status)
125 stack.update(worse_status)
126 self.assertEquals(stack.current_status(),
127 worse_status)
mbligh2895ce52008-04-17 15:40:51 +0000128
129
jadmanski0afbb632008-06-06 21:10:57 +0000130 def test_better_never_overrides_better(self):
131 for i in xrange(len(self.statuses)):
132 better_status = self.statuses[i]
133 for j in xrange(i):
134 stack = status_lib.status_stack()
135 worse_status = self.statuses[j]
136 stack.update(worse_status)
137 stack.update(better_status)
138 self.assertEquals(stack.current_status(),
139 worse_status)
mbligh2895ce52008-04-17 15:40:51 +0000140
141
jadmanski0afbb632008-06-06 21:10:57 +0000142 def test_stack_is_lifo(self):
143 stack = status_lib.status_stack()
144 stack.update("GOOD")
145 stack.start()
146 stack.update("FAIL")
147 stack.start()
148 stack.update("WARN")
149 self.assertEquals(stack.end(), "WARN")
150 self.assertEquals(stack.end(), "FAIL")
151 self.assertEquals(stack.end(), "GOOD")
152 self.assertEquals(stack.end(), "NOSTATUS")
mbligh2895ce52008-04-17 15:40:51 +0000153
154
155class parser_test(unittest.TestCase):
jadmanski0afbb632008-06-06 21:10:57 +0000156 available_versions = [0, 1]
157 def test_can_import_available_versions(self):
158 for version in self.available_versions:
159 p = status_lib.parser(0)
160 self.assertNotEqual(p, None)
mbligh2895ce52008-04-17 15:40:51 +0000161
162
163if __name__ == "__main__":
jadmanski0afbb632008-06-06 21:10:57 +0000164 unittest.main()