blob: 8f39a5bd42b04c04d5bdef507bb99beafcfe6cec [file] [log] [blame]
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import json
import urllib2
from webkitpy.common.net.rietveld import Rietveld
from webkitpy.common.net.buildbot import Build
from webkitpy.common.net.web_mock import MockWeb
from webkitpy.common.system.log_testing import LoggingTestCase
class RietveldTest(LoggingTestCase):
def mock_web(self):
return MockWeb(urls={
'https://codereview.chromium.org/api/11112222': json.dumps({
'patchsets': [1, 2, 3],
}),
'https://codereview.chromium.org/api/11112222/2': json.dumps({
'try_job_results': [
{
'builder': 'foo-builder',
'buildnumber': None,
'result': -1
},
{
'builder': 'bar-builder',
'buildnumber': 50,
'result': 0
},
],
}),
'https://codereview.chromium.org/api/11112222/3': json.dumps({
'try_job_results': [
{
'builder': 'foo-builder',
'buildnumber': 20,
'result': 1
},
{
'builder': 'bar-builder',
'buildnumber': 60,
'result': 0
},
],
'files': {
'some/path/foo.cc': {'status': 'M'},
'some/path/bar.html': {'status': 'M'},
'some/path/deleted.html': {'status': 'D'},
}
}),
'https://codereview.chromium.org/api/11113333': 'my non-JSON contents',
})
def test_latest_try_jobs(self):
rietveld = Rietveld(self.mock_web())
self.assertEqual(
rietveld.latest_try_jobs(11112222, ('bar-builder', 'other-builder')),
[Build('bar-builder', 60)])
def test_latest_try_jobs_http_error(self):
def raise_error(_):
raise urllib2.URLError('Some request error message')
web = self.mock_web()
web.get_binary = raise_error
rietveld = Rietveld(web)
self.assertEqual(rietveld.latest_try_jobs(11112222, ('bar-builder',)), [])
self.assertLog(['ERROR: Request failed to URL: https://codereview.chromium.org/api/11112222\n'])
def test_latest_try_jobs_non_json_response(self):
rietveld = Rietveld(self.mock_web())
self.assertEqual(rietveld.latest_try_jobs(11113333, ('bar-builder',)), [])
self.assertLog(['ERROR: Invalid JSON: my non-JSON contents\n'])
def test_latest_try_jobs_with_patchset(self):
rietveld = Rietveld(self.mock_web())
self.assertEqual(
rietveld.latest_try_jobs(11112222, ('bar-builder', 'other-builder'), patchset_number=2),
[Build('bar-builder', 50)])
def test_latest_try_jobs_no_relevant_builders(self):
rietveld = Rietveld(self.mock_web())
self.assertEqual(rietveld.latest_try_jobs(11112222, ('foo', 'bar')), [])
def test_changed_files(self):
rietveld = Rietveld(self.mock_web())
self.assertEqual(
rietveld.changed_files(11112222),
['some/path/bar.html', 'some/path/foo.cc'])
def test_changed_files_no_results(self):
rietveld = Rietveld(self.mock_web())
self.assertIsNone(rietveld.changed_files(11113333))