blob: 8e85224f088e85c50ec6c5923c198431713eb461 [file] [log] [blame]
jadmanski6e8bf752008-05-14 00:17:48 +00001#!/usr/bin/python
2
3import unittest, datetime, time, md5
4
5import common
6from autotest_lib.tko.parsers import version_1
7
8
9class test_status_line(unittest.TestCase):
jadmanski0afbb632008-06-06 21:10:57 +000010 statuses = ["GOOD", "WARN", "FAIL", "ABORT"]
jadmanski6e8bf752008-05-14 00:17:48 +000011
12
jadmanski0afbb632008-06-06 21:10:57 +000013 def test_handles_start(self):
14 line = version_1.status_line(0, "START", "----", "test",
15 "", {})
16 self.assertEquals(line.type, "START")
17 self.assertEquals(line.status, None)
jadmanski6e8bf752008-05-14 00:17:48 +000018
19
jadmanski0afbb632008-06-06 21:10:57 +000020 def test_handles_status(self):
21 for stat in self.statuses:
22 line = version_1.status_line(0, stat, "----", "test",
23 "", {})
24 self.assertEquals(line.type, "STATUS")
25 self.assertEquals(line.status, stat)
jadmanski6e8bf752008-05-14 00:17:48 +000026
27
jadmanski0afbb632008-06-06 21:10:57 +000028 def test_handles_endstatus(self):
29 for stat in self.statuses:
30 line = version_1.status_line(0, "END " + stat, "----",
31 "test", "", {})
32 self.assertEquals(line.type, "END")
33 self.assertEquals(line.status, stat)
jadmanski6e8bf752008-05-14 00:17:48 +000034
35
jadmanski0afbb632008-06-06 21:10:57 +000036 def test_fails_on_bad_status(self):
37 for stat in self.statuses:
38 self.assertRaises(AssertionError,
39 version_1.status_line, 0,
40 "BAD " + stat, "----", "test",
41 "", {})
jadmanski6e8bf752008-05-14 00:17:48 +000042
43
jadmanski0afbb632008-06-06 21:10:57 +000044 def test_saves_all_fields(self):
45 line = version_1.status_line(5, "GOOD", "subdir_name",
46 "test_name", "my reason here",
47 {"key1": "value",
48 "key2": "another value",
49 "key3": "value3"})
50 self.assertEquals(line.indent, 5)
51 self.assertEquals(line.status, "GOOD")
52 self.assertEquals(line.subdir, "subdir_name")
53 self.assertEquals(line.testname, "test_name")
54 self.assertEquals(line.reason, "my reason here")
55 self.assertEquals(line.optional_fields,
56 {"key1": "value", "key2": "another value",
57 "key3": "value3"})
jadmanski6e8bf752008-05-14 00:17:48 +000058
59
jadmanski0afbb632008-06-06 21:10:57 +000060 def test_parses_blank_subdir(self):
61 line = version_1.status_line(0, "GOOD", "----", "test",
62 "", {})
63 self.assertEquals(line.subdir, None)
jadmanski6e8bf752008-05-14 00:17:48 +000064
65
jadmanski0afbb632008-06-06 21:10:57 +000066 def test_parses_blank_testname(self):
67 line = version_1.status_line(0, "GOOD", "subdir", "----",
68 "", {})
69 self.assertEquals(line.testname, None)
jadmanski6e8bf752008-05-14 00:17:48 +000070
71
jadmanski0afbb632008-06-06 21:10:57 +000072 def test_parse_line_smoketest(self):
73 input_data = ("\t\t\tGOOD\t----\t----\t"
74 "field1=val1\tfield2=val2\tTest Passed")
75 line = version_1.status_line.parse_line(input_data)
76 self.assertEquals(line.indent, 3)
77 self.assertEquals(line.type, "STATUS")
78 self.assertEquals(line.status, "GOOD")
79 self.assertEquals(line.subdir, None)
80 self.assertEquals(line.testname, None)
81 self.assertEquals(line.reason, "Test Passed")
82 self.assertEquals(line.optional_fields,
83 {"field1": "val1", "field2": "val2"})
jadmanski6e8bf752008-05-14 00:17:48 +000084
jadmanski0afbb632008-06-06 21:10:57 +000085 def test_parse_line_handles_newline(self):
86 input_data = ("\t\tGOOD\t----\t----\t"
87 "field1=val1\tfield2=val2\tNo newline here!")
88 for suffix in ("", "\n"):
89 line = version_1.status_line.parse_line(input_data +
90 suffix)
91 self.assertEquals(line.indent, 2)
92 self.assertEquals(line.type, "STATUS")
93 self.assertEquals(line.status, "GOOD")
94 self.assertEquals(line.subdir, None)
95 self.assertEquals(line.testname, None)
96 self.assertEquals(line.reason, "No newline here!")
97 self.assertEquals(line.optional_fields,
98 {"field1": "val1",
99 "field2": "val2"})
jadmanski6e8bf752008-05-14 00:17:48 +0000100
101
jadmanski0afbb632008-06-06 21:10:57 +0000102 def test_parse_line_fails_on_untabbed_lines(self):
103 input_data = " GOOD\trandom\tfields\tof text"
104 line = version_1.status_line.parse_line(input_data)
105 self.assertEquals(line, None)
106 line = version_1.status_line.parse_line(input_data.lstrip())
107 self.assertEquals(line.indent, 0)
108 self.assertEquals(line.type, "STATUS")
109 self.assertEquals(line.status, "GOOD")
110 self.assertEquals(line.subdir, "random")
111 self.assertEquals(line.testname, "fields")
112 self.assertEquals(line.reason, "of text")
113 self.assertEquals(line.optional_fields, {})
jadmanski6e8bf752008-05-14 00:17:48 +0000114
115
jadmanskibf446192008-08-13 21:51:03 +0000116 def test_parse_line_fails_on_incomplete_lines(self):
117 input_data = "\t\tGOOD\tfield\tsecond field"
118 complete_data = input_data + "\tneeded last field"
119 line = version_1.status_line.parse_line(input_data)
120 self.assertEquals(line, None)
121 line = version_1.status_line.parse_line(complete_data)
122 self.assertEquals(line.indent, 2)
123 self.assertEquals(line.type, "STATUS")
124 self.assertEquals(line.status, "GOOD")
125 self.assertEquals(line.subdir, "field")
126 self.assertEquals(line.testname, "second field")
127 self.assertEquals(line.reason, "needed last field")
128 self.assertEquals(line.optional_fields, {})
129
130
jadmanski0afbb632008-06-06 21:10:57 +0000131 def test_parse_line_fails_on_bad_optional_fields(self):
132 input_data = "GOOD\tfield1\tfield2\tfield3\tfield4"
133 self.assertRaises(AssertionError,
134 version_1.status_line.parse_line,
135 input_data)
jadmanski6e8bf752008-05-14 00:17:48 +0000136
137
jadmanski0afbb632008-06-06 21:10:57 +0000138 def test_good_reboot_passes_success_test(self):
139 line = version_1.status_line(0, "NOSTATUS", None, "reboot",
140 "reboot success", {})
141 self.assertEquals(line.is_successful_reboot("GOOD"), True)
142 self.assertEquals(line.is_successful_reboot("WARN"), True)
jadmanski6e8bf752008-05-14 00:17:48 +0000143
144
jadmanski0afbb632008-06-06 21:10:57 +0000145 def test_bad_reboot_passes_success_test(self):
146 line = version_1.status_line(0, "NOSTATUS", None, "reboot",
147 "reboot success", {})
148 self.assertEquals(line.is_successful_reboot("FAIL"), False)
149 self.assertEquals(line.is_successful_reboot("ABORT"), False)
jadmanski6e8bf752008-05-14 00:17:48 +0000150
151
jadmanski0afbb632008-06-06 21:10:57 +0000152 def test_get_kernel_returns_kernel_plus_patches(self):
153 line = version_1.status_line(0, "GOOD", "subdir", "testname",
154 "reason text",
155 {"kernel": "2.6.24-rc40",
156 "patch0": "first_patch 0 0",
157 "patch1": "another_patch 0 0"})
158 kern = line.get_kernel()
159 kernel_hash = md5.new("2.6.24-rc40,0,0").hexdigest()
160 self.assertEquals(kern.base, "2.6.24-rc40")
161 self.assertEquals(kern.patches[0].spec, "first_patch")
162 self.assertEquals(kern.patches[1].spec, "another_patch")
163 self.assertEquals(len(kern.patches), 2)
164 self.assertEquals(kern.kernel_hash, kernel_hash)
jadmanski6e8bf752008-05-14 00:17:48 +0000165
166
jadmanski0afbb632008-06-06 21:10:57 +0000167 def test_get_kernel_ignores_out_of_sequence_patches(self):
168 line = version_1.status_line(0, "GOOD", "subdir", "testname",
169 "reason text",
170 {"kernel": "2.6.24-rc40",
171 "patch0": "first_patch 0 0",
172 "patch2": "another_patch 0 0"})
173 kern = line.get_kernel()
174 kernel_hash = md5.new("2.6.24-rc40,0").hexdigest()
175 self.assertEquals(kern.base, "2.6.24-rc40")
176 self.assertEquals(kern.patches[0].spec, "first_patch")
177 self.assertEquals(len(kern.patches), 1)
178 self.assertEquals(kern.kernel_hash, kernel_hash)
jadmanski6e8bf752008-05-14 00:17:48 +0000179
180
jadmanski0afbb632008-06-06 21:10:57 +0000181 def test_get_kernel_returns_unknown_with_no_kernel(self):
182 line = version_1.status_line(0, "GOOD", "subdir", "testname",
183 "reason text",
184 {"patch0": "first_patch 0 0",
185 "patch2": "another_patch 0 0"})
186 kern = line.get_kernel()
187 self.assertEquals(kern.base, "UNKNOWN")
188 self.assertEquals(kern.patches, [])
189 self.assertEquals(kern.kernel_hash, "UNKNOWN")
jadmanski6e8bf752008-05-14 00:17:48 +0000190
191
jadmanski0afbb632008-06-06 21:10:57 +0000192 def test_get_timestamp_returns_timestamp_field(self):
193 timestamp = datetime.datetime(1970, 1, 1, 4, 30)
194 timestamp -= datetime.timedelta(seconds=time.timezone)
195 line = version_1.status_line(0, "GOOD", "subdir", "testname",
196 "reason text",
197 {"timestamp": "16200"})
198 self.assertEquals(timestamp, line.get_timestamp())
jadmanski6e8bf752008-05-14 00:17:48 +0000199
200
jadmanski0afbb632008-06-06 21:10:57 +0000201 def test_get_timestamp_returns_none_on_missing_field(self):
202 line = version_1.status_line(0, "GOOD", "subdir", "testname",
203 "reason text", {})
204 self.assertEquals(None, line.get_timestamp())
jadmanski6e8bf752008-05-14 00:17:48 +0000205
206
207if __name__ == "__main__":
jadmanski0afbb632008-06-06 21:10:57 +0000208 unittest.main()