| OLD | NEW |
| 1 # Copyright 2016 The Chromium Authors. All rights reserved. | 1 # Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import json | 5 import json |
| 6 import urllib2 | 6 import urllib2 |
| 7 | 7 |
| 8 from webkitpy.common.net.rietveld import Rietveld | 8 from webkitpy.common.net.rietveld import Rietveld |
| 9 from webkitpy.common.net.buildbot import Build | 9 from webkitpy.common.net.buildbot import Build |
| 10 from webkitpy.common.net.web_mock import MockWeb | 10 from webkitpy.common.net.web_mock import MockWeb |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 'https://codereview.chromium.org/api/11112222/2': json.dumps({ | 21 'https://codereview.chromium.org/api/11112222/2': json.dumps({ |
| 22 'try_job_results': [ | 22 'try_job_results': [ |
| 23 { | 23 { |
| 24 'builder': 'foo-builder', | 24 'builder': 'foo-builder', |
| 25 'buildnumber': 10, | 25 'buildnumber': 10, |
| 26 'result': -1 | 26 'result': -1 |
| 27 }, | 27 }, |
| 28 { | 28 { |
| 29 'builder': 'bar-builder', | 29 'builder': 'bar-builder', |
| 30 'buildnumber': 50, | 30 'buildnumber': 50, |
| 31 'results': 0 | 31 'result': 0 |
| 32 }, | 32 }, |
| 33 ], | 33 ], |
| 34 }), | 34 }), |
| 35 'https://codereview.chromium.org/api/11112222/3': json.dumps({ | 35 'https://codereview.chromium.org/api/11112222/3': json.dumps({ |
| 36 'try_job_results': [ | 36 'try_job_results': [ |
| 37 { | 37 { |
| 38 'builder': 'foo-builder', | 38 'builder': 'foo-builder', |
| 39 'buildnumber': 20, | 39 'buildnumber': 20, |
| 40 'result': 1 | 40 'result': 1 |
| 41 }, | 41 }, |
| 42 { | 42 { |
| 43 'builder': 'bar-builder', | 43 'builder': 'bar-builder', |
| 44 'buildnumber': 60, | 44 'buildnumber': 60, |
| 45 'result': 0 | 45 'result': 0 |
| 46 }, | 46 }, |
| 47 ], | 47 ], |
| 48 'files': { | 48 'files': { |
| 49 'some/path/foo.cc': {'status': 'M'}, | 49 'some/path/foo.cc': {'status': 'M'}, |
| 50 'some/path/bar.html': {'status': 'M'}, | 50 'some/path/bar.html': {'status': 'M'}, |
| 51 } | 51 } |
| 52 }), | 52 }), |
| 53 'https://codereview.chromium.org/api/11113333': 'my non-JSON content
s', | 53 'https://codereview.chromium.org/api/11113333': 'my non-JSON content
s', |
| 54 }) | 54 }) |
| 55 | 55 |
| 56 def test_latest_try_jobs(self): | 56 def test_latest_try_jobs(self): |
| 57 rietveld = Rietveld(self.mock_web()) | 57 rietveld = Rietveld(self.mock_web()) |
| 58 self.assertEqual( | 58 self.assertEqual( |
| 59 rietveld.latest_try_jobs(11112222, ('bar-builder', 'other-builder'))
, | 59 rietveld.latest_try_job_results(11112222, ('bar-builder', 'other-bui
lder')), |
| 60 [Build('bar-builder', 60)]) | 60 {Build('bar-builder', 60): {'builder': 'bar-builder', 'buildnumber':
60, 'result': 0}}) |
| 61 | 61 |
| 62 def test_latest_try_jobs_http_error(self): | 62 def test_latest_try_jobs_http_error(self): |
| 63 def raise_error(_): | 63 def raise_error(_): |
| 64 raise urllib2.URLError('Some request error message') | 64 raise urllib2.URLError('Some request error message') |
| 65 web = self.mock_web() | 65 web = self.mock_web() |
| 66 web.get_binary = raise_error | 66 web.get_binary = raise_error |
| 67 rietveld = Rietveld(web) | 67 rietveld = Rietveld(web) |
| 68 self.assertEqual(rietveld.latest_try_jobs(11112222, ('bar-builder',)), [
]) | 68 self.assertEqual(rietveld.latest_try_job_results(11112222, ('bar-builder
',)), {}) |
| 69 self.assertLog(['ERROR: Request failed to URL: https://codereview.chromi
um.org/api/11112222\n']) | 69 self.assertLog(['ERROR: Request failed to URL: https://codereview.chromi
um.org/api/11112222\n']) |
| 70 | 70 |
| 71 def test_latest_try_jobs_non_json_response(self): | 71 def test_latest_try_jobs_non_json_response(self): |
| 72 rietveld = Rietveld(self.mock_web()) | 72 rietveld = Rietveld(self.mock_web()) |
| 73 self.assertEqual(rietveld.latest_try_jobs(11113333, ('bar-builder',)), [
]) | 73 self.assertEqual(rietveld.latest_try_job_results(11113333, ('bar-builder
',)), {}) |
| 74 self.assertLog(['ERROR: Invalid JSON: my non-JSON contents\n']) | 74 self.assertLog(['ERROR: Invalid JSON: my non-JSON contents\n']) |
| 75 | 75 |
| 76 def test_latest_try_jobs_with_patchset(self): | 76 def test_latest_try_jobs_with_patchset(self): |
| 77 rietveld = Rietveld(self.mock_web()) | 77 rietveld = Rietveld(self.mock_web()) |
| 78 self.assertEqual( | 78 self.assertEqual( |
| 79 rietveld.latest_try_jobs(11112222, ('bar-builder', 'other-builder'),
patchset_number=2), | 79 rietveld.latest_try_job_results(11112222, ('bar-builder', 'other-bui
lder'), patchset_number=2), |
| 80 [Build('bar-builder', 50)]) | 80 {Build('bar-builder', 50): {'builder': 'bar-builder', 'buildnumber':
50, 'result': 0}}) |
| 81 | 81 |
| 82 def test_latest_try_jobs_no_relevant_builders(self): | 82 def test_latest_try_jobs_no_relevant_builders(self): |
| 83 rietveld = Rietveld(self.mock_web()) | 83 rietveld = Rietveld(self.mock_web()) |
| 84 self.assertEqual(rietveld.latest_try_jobs(11112222, ('foo', 'bar')), []) | 84 self.assertEqual(rietveld.latest_try_job_results(11112222, ('foo', 'bar'
)), {}) |
| 85 | |
| 86 def test_filter_latest_jobs_empty(self): | |
| 87 rietveld = Rietveld(self.mock_web()) | |
| 88 self.assertEqual(rietveld.filter_latest_jobs([]), []) | |
| 89 | |
| 90 def test_filter_latest_jobs_higher_build_first(self): | |
| 91 rietveld = Rietveld(self.mock_web()) | |
| 92 self.assertEqual( | |
| 93 rietveld.filter_latest_jobs([Build('foo', 5), Build('foo', 3), Build
('bar', 5)]), | |
| 94 [Build('foo', 5), Build('bar', 5)]) | |
| 95 | |
| 96 def test_filter_latest_jobs_higher_build_last(self): | |
| 97 rietveld = Rietveld(self.mock_web()) | |
| 98 self.assertEqual( | |
| 99 rietveld.filter_latest_jobs([Build('foo', 3), Build('bar', 5), Build
('foo', 5)]), | |
| 100 [Build('bar', 5), Build('foo', 5)]) | |
| 101 | |
| 102 def test_filter_latest_jobs_no_build_number(self): | |
| 103 rietveld = Rietveld(self.mock_web()) | |
| 104 self.assertEqual( | |
| 105 rietveld.filter_latest_jobs([Build('foo', 3), Build('bar')]), | |
| 106 [Build('foo', 3)]) | |
| 107 | 85 |
| 108 def test_changed_files(self): | 86 def test_changed_files(self): |
| 109 rietveld = Rietveld(self.mock_web()) | 87 rietveld = Rietveld(self.mock_web()) |
| 110 self.assertEqual( | 88 self.assertEqual( |
| 111 rietveld.changed_files(11112222), | 89 rietveld.changed_files(11112222), |
| 112 ['some/path/bar.html', 'some/path/foo.cc']) | 90 ['some/path/bar.html', 'some/path/foo.cc']) |
| 113 | 91 |
| 114 def test_changed_files_no_results(self): | 92 def test_changed_files_no_results(self): |
| 115 rietveld = Rietveld(self.mock_web()) | 93 rietveld = Rietveld(self.mock_web()) |
| 116 self.assertIsNone(rietveld.changed_files(11113333)) | 94 self.assertIsNone(rietveld.changed_files(11113333)) |
| 95 |
| 96 # Testing protected methods - pylint: disable=protected-access |
| 97 |
| 98 def test_filter_latest_jobs_empty(self): |
| 99 rietveld = Rietveld(self.mock_web()) |
| 100 self.assertEqual(rietveld._filter_latest_builds([]), []) |
| 101 |
| 102 def test_filter_latest_jobs_higher_build_first(self): |
| 103 rietveld = Rietveld(self.mock_web()) |
| 104 self.assertEqual( |
| 105 rietveld._filter_latest_builds([Build('foo', 5), Build('foo', 3), Bu
ild('bar', 5)]), |
| 106 [Build('foo', 5), Build('bar', 5)]) |
| 107 |
| 108 def test_filter_latest_jobs_higher_build_last(self): |
| 109 rietveld = Rietveld(self.mock_web()) |
| 110 self.assertEqual( |
| 111 rietveld._filter_latest_builds([Build('foo', 3), Build('bar', 5), Bu
ild('foo', 5)]), |
| 112 [Build('bar', 5), Build('foo', 5)]) |
| 113 |
| 114 def test_filter_latest_jobs_no_build_number(self): |
| 115 rietveld = Rietveld(self.mock_web()) |
| 116 self.assertEqual( |
| 117 rietveld._filter_latest_builds([Build('foo', 3), Build('bar')]), |
| 118 [Build('foo', 3)]) |
| OLD | NEW |