Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright 2014 The Chromium Authors. All rights reserved. | 2 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 import cStringIO | 6 import cStringIO |
| 7 import json | 7 import json |
| 8 import logging | 8 import logging |
| 9 import os | 9 import os |
| 10 import shutil | 10 import shutil |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 142 }], | 142 }], |
| 143 'swarming_summary': { | 143 'swarming_summary': { |
| 144 'shards': [{ | 144 'shards': [{ |
| 145 'outputs_ref': { | 145 'outputs_ref': { |
| 146 'view_url': 'blah', | 146 'view_url': 'blah', |
| 147 }, | 147 }, |
| 148 }], | 148 }], |
| 149 }, | 149 }, |
| 150 } | 150 } |
| 151 | 151 |
| 152 GOOD_JSON_TEST_RESULT_0 = { | |
| 153 'tests': { | |
| 154 'car': { | |
| 155 'honda': { | |
| 156 'expected': 'PASS', | |
| 157 'actual': 'PASS' | |
| 158 }, | |
| 159 'toyota': { | |
| 160 'expected': 'FAIL', | |
| 161 'actual': 'FAIL' | |
| 162 } | |
| 163 }, | |
| 164 'computer': { | |
| 165 'dell': { | |
| 166 'expected': 'PASS', | |
| 167 'actual': 'PASS' | |
| 168 } | |
| 169 }, | |
| 170 }, | |
| 171 'interrupted': False, | |
| 172 'path_delimiter': '.', | |
| 173 'version': 3, | |
| 174 'seconds_since_epoch': 1406662289.76, | |
| 175 'num_failures_by_type': { | |
| 176 'FAIL': 0, | |
| 177 'PASS': 2 | |
| 178 } | |
| 179 } | |
| 180 | |
| 181 GOOD_JSON_TEST_RESULT_1 = { | |
| 182 'tests': { | |
| 183 'car': { | |
| 184 'tesla': { | |
| 185 'expected': 'pass', | |
| 186 'actual': 'pass' | |
| 187 }, | |
| 188 }, | |
| 189 'burger': { | |
| 190 'mcdonald': { | |
| 191 'expected': 'pass', | |
| 192 'actual': 'pass' | |
| 193 } | |
| 194 }, | |
| 195 }, | |
| 196 'interrupted': False, | |
| 197 'path_delimiter': '.', | |
| 198 'version': 3, | |
| 199 'seconds_since_epoch': 1406662283.11, | |
| 200 'num_failures_by_type': { | |
| 201 'fail': 0, | |
| 202 'pass': 2 | |
| 203 } | |
| 204 } | |
| 205 | |
| 206 GOOD_JSON_TEST_RESULT_2 = { | |
| 207 'tests': { | |
| 208 'car': { | |
| 209 'mercedes': { | |
| 210 'expected': 'pass', | |
| 211 'actual': 'fail' | |
| 212 }, | |
| 213 }, | |
| 214 'burger': { | |
| 215 'in n out': { | |
| 216 'expected': 'pass', | |
| 217 'actual': 'pass' | |
| 218 } | |
| 219 }, | |
| 220 }, | |
| 221 'interrupted': True, | |
| 222 'path_delimiter': '.', | |
| 223 'version': 3, | |
| 224 'seconds_since_epoch': 1406662200.01, | |
| 225 'num_failures_by_type': { | |
| 226 'fail': 1, | |
| 227 'pass': 1 | |
| 228 } | |
| 229 } | |
| 230 | |
| 231 GOOD_JSON_TEST_RESULT_MERGED = { | |
| 232 } | |
|
Ken Russell (switch to Gerrit)
2016/09/30 23:37:53
Sorry, I don't understand: why is this empty?
nednguyen
2016/10/04 00:10:11
Sorry, I wasn't quite sure how to test this. Pleas
| |
| 233 | |
| 152 | 234 |
| 153 # Only shard #1 finished. UNRELIABLE_RESULTS is set. | 235 # Only shard #1 finished. UNRELIABLE_RESULTS is set. |
| 154 BAD_GTEST_JSON_ONLY_1_SHARD = { | 236 BAD_GTEST_JSON_ONLY_1_SHARD = { |
| 155 'all_tests': [ | 237 'all_tests': [ |
| 156 'AlignedMemoryTest.DynamicAllocation', | 238 'AlignedMemoryTest.DynamicAllocation', |
| 157 'AlignedMemoryTest.ScopedDynamicAllocation', | 239 'AlignedMemoryTest.ScopedDynamicAllocation', |
| 158 'AlignedMemoryTest.StackAlignment', | 240 'AlignedMemoryTest.StackAlignment', |
| 159 'AlignedMemoryTest.StaticAlignment', | 241 'AlignedMemoryTest.StaticAlignment', |
| 160 ], | 242 ], |
| 161 'disabled_tests': [ | 243 'disabled_tests': [ |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 334 merged['swarming_summary'] = { | 416 merged['swarming_summary'] = { |
| 335 'shards': [{ | 417 'shards': [{ |
| 336 'outputs_ref': { | 418 'outputs_ref': { |
| 337 'view_url': 'blah', | 419 'view_url': 'blah', |
| 338 }, | 420 }, |
| 339 }], | 421 }], |
| 340 } | 422 } |
| 341 self.assertEqual(GOOD_GTEST_JSON_MERGED, merged) | 423 self.assertEqual(GOOD_GTEST_JSON_MERGED, merged) |
| 342 self.assertEqual('', stdout) | 424 self.assertEqual('', stdout) |
| 343 | 425 |
| 426 def test_merged_json_result_ok(self): | |
| 427 self.stage({ | |
| 428 'summary.json': {'shards': [{'dummy': 0}, {'dummy': 0}, {'dummy': 0}]}, | |
| 429 '0/output.json': GOOD_JSON_TEST_RESULT_0, | |
| 430 '1/output.json': GOOD_JSON_TEST_RESULT_1, | |
| 431 '2/output.json': GOOD_JSON_TEST_RESULT_2, | |
| 432 }) | |
| 433 merged, stdout = self.call() | |
| 434 merged['swarming_summary'] = { | |
| 435 'shards': [{ | |
| 436 'outputs_ref': { | |
| 437 'view_url': 'blah', | |
| 438 }, | |
| 439 }], | |
| 440 } | |
| 441 self.assertEqual(GOOD_JSON_TEST_RESULT_MERGED, merged) | |
| 442 self.assertEqual('', stdout) | |
| 443 | |
| 444 | |
| 344 def test_missing_summary_json(self): | 445 def test_missing_summary_json(self): |
| 345 # summary.json is missing, should return None and emit warning. | 446 # summary.json is missing, should return None and emit warning. |
| 346 merged, output = self.call() | 447 merged, output = self.call() |
| 347 self.assertEqual(None, merged) | 448 self.assertEqual(None, merged) |
| 348 self.assertIn('@@@STEP_WARNINGS@@@', output) | 449 self.assertIn('@@@STEP_WARNINGS@@@', output) |
| 349 self.assertIn('summary.json is missing or can not be read', output) | 450 self.assertIn('summary.json is missing or can not be read', output) |
| 350 | 451 |
| 351 def test_unfinished_shards(self): | 452 def test_unfinished_shards(self): |
| 352 # Only one shard (#1) finished. Shard #0 did not. | 453 # Only one shard (#1) finished. Shard #0 did not. |
| 353 self.stage({ | 454 self.stage({ |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 381 '@@@STEP_TEXT@3 disabled@@@', | 482 '@@@STEP_TEXT@3 disabled@@@', |
| 382 stdout) | 483 stdout) |
| 383 | 484 |
| 384 | 485 |
| 385 if __name__ == '__main__': | 486 if __name__ == '__main__': |
| 386 logging.basicConfig( | 487 logging.basicConfig( |
| 387 level=logging.DEBUG if '-v' in sys.argv else logging.ERROR) | 488 level=logging.DEBUG if '-v' in sys.argv else logging.ERROR) |
| 388 if '-v' in sys.argv: | 489 if '-v' in sys.argv: |
| 389 unittest.TestCase.maxDiff = None | 490 unittest.TestCase.maxDiff = None |
| 390 unittest.main() | 491 unittest.main() |
| OLD | NEW |