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 |
11 from webkitpy.common.system.logtesting import LoggingTestCase | 11 from webkitpy.common.system.logtesting import LoggingTestCase |
12 | 12 |
13 | 13 |
14 class RietveldTest(LoggingTestCase): | 14 class RietveldTest(LoggingTestCase): |
15 | 15 |
16 def mock_web(self): | 16 def mock_web(self): |
17 return MockWeb(urls={ | 17 return MockWeb(urls={ |
18 'https://codereview.chromium.org/api/11112222': json.dumps({ | 18 'https://codereview.chromium.org/api/11112222': json.dumps({ |
19 'patchsets': [1, 2, 3], | 19 'patchsets': [1, 2, 3], |
20 }), | 20 }), |
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': None, |
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 'result': 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({ |
(...skipping 13 matching lines...) Expand all Loading... |
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_job_results(11112222, ('bar-builder', 'other-bui
lder')), | 59 rietveld.latest_try_jobs(11112222, ('bar-builder', 'other-builder'))
, |
60 {Build('bar-builder', 60): {'builder': 'bar-builder', 'buildnumber':
60, 'result': 0}}) | 60 [Build('bar-builder', 60)]) |
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_job_results(11112222, ('bar-builder
',)), {}) | 68 self.assertEqual(rietveld.latest_try_jobs(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_job_results(11113333, ('bar-builder
',)), {}) | 73 self.assertEqual(rietveld.latest_try_jobs(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_job_results(11112222, ('bar-builder', 'other-bui
lder'), patchset_number=2), | 79 rietveld.latest_try_jobs(11112222, ('bar-builder', 'other-builder'),
patchset_number=2), |
80 {Build('bar-builder', 50): {'builder': 'bar-builder', 'buildnumber':
50, 'result': 0}}) | 80 [Build('bar-builder', 50)]) |
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_job_results(11112222, ('foo', 'bar'
)), {}) | 84 self.assertEqual(rietveld.latest_try_jobs(11112222, ('foo', 'bar')), []) |
85 | 85 |
86 def test_changed_files(self): | 86 def test_changed_files(self): |
87 rietveld = Rietveld(self.mock_web()) | 87 rietveld = Rietveld(self.mock_web()) |
88 self.assertEqual( | 88 self.assertEqual( |
89 rietveld.changed_files(11112222), | 89 rietveld.changed_files(11112222), |
90 ['some/path/bar.html', 'some/path/foo.cc']) | 90 ['some/path/bar.html', 'some/path/foo.cc']) |
91 | 91 |
92 def test_changed_files_no_results(self): | 92 def test_changed_files_no_results(self): |
93 rietveld = Rietveld(self.mock_web()) | 93 rietveld = Rietveld(self.mock_web()) |
94 self.assertIsNone(rietveld.changed_files(11113333)) | 94 self.assertIsNone(rietveld.changed_files(11113333)) |
95 | 95 |
96 # Testing protected methods - pylint: disable=protected-access | 96 # Testing protected methods - pylint: disable=protected-access |
97 | 97 |
98 def test_filter_latest_jobs_empty(self): | 98 def test_filter_latest_jobs_empty(self): |
99 rietveld = Rietveld(self.mock_web()) | 99 rietveld = Rietveld(self.mock_web()) |
100 self.assertEqual(rietveld._filter_latest_builds([]), []) | 100 self.assertEqual(rietveld._filter_latest_builds([]), []) |
101 | 101 |
102 def test_filter_latest_jobs_higher_build_first(self): | 102 def test_filter_latest_jobs_higher_build_first(self): |
103 rietveld = Rietveld(self.mock_web()) | 103 rietveld = Rietveld(self.mock_web()) |
104 self.assertEqual( | 104 self.assertEqual( |
105 rietveld._filter_latest_builds([Build('foo', 5), Build('foo', 3), Bu
ild('bar', 5)]), | 105 rietveld._filter_latest_builds([Build('foo', 5), Build('foo', 3), Bu
ild('bar', 5)]), |
106 [Build('foo', 5), Build('bar', 5)]) | 106 [Build('bar', 5), Build('foo', 5)]) |
107 | 107 |
108 def test_filter_latest_jobs_higher_build_last(self): | 108 def test_filter_latest_jobs_higher_build_last(self): |
109 rietveld = Rietveld(self.mock_web()) | 109 rietveld = Rietveld(self.mock_web()) |
110 self.assertEqual( | 110 self.assertEqual( |
111 rietveld._filter_latest_builds([Build('foo', 3), Build('bar', 5), Bu
ild('foo', 5)]), | 111 rietveld._filter_latest_builds([Build('foo', 3), Build('bar', 5), Bu
ild('foo', 5)]), |
112 [Build('bar', 5), Build('foo', 5)]) | 112 [Build('bar', 5), Build('foo', 5)]) |
113 | 113 |
114 def test_filter_latest_jobs_no_build_number(self): | 114 def test_filter_latest_jobs_no_build_number(self): |
115 rietveld = Rietveld(self.mock_web()) | 115 rietveld = Rietveld(self.mock_web()) |
116 self.assertEqual( | 116 self.assertEqual( |
117 rietveld._filter_latest_builds([Build('foo', 3), Build('bar')]), | 117 rietveld._filter_latest_builds([Build('foo', 3), Build('bar'), Build
('bar')]), |
118 [Build('foo', 3)]) | 118 [Build('bar'), Build('foo', 3)]) |
OLD | NEW |