blob: f2ddfb52f6570ceafcee20171138e05fe4f26205 [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 unittest
from webkitpy.common.host_mock import MockHost
from webkitpy.common.net.buildbot import Build
from webkitpy.common.net.git_cl import GitCL
from webkitpy.common.system.executive_mock import MockExecutive
class GitCLTest(unittest.TestCase):
def test_run(self):
host = MockHost()
host.executive = MockExecutive(output='mock-output')
git_cl = GitCL(host)
output = git_cl.run(['command'])
self.assertEqual(output, 'mock-output')
self.assertEqual(host.executive.calls, [['git', 'cl', 'command']])
def test_run_with_auth(self):
host = MockHost()
host.executive = MockExecutive(output='mock-output')
git_cl = GitCL(host, auth_refresh_token_json='token.json')
git_cl.run(['try', '-b', 'win10_blink_rel'])
self.assertEqual(
host.executive.calls,
[['git', 'cl', 'try', '-b', 'win10_blink_rel', '--auth-refresh-token-json', 'token.json']])
def test_some_commands_not_run_with_auth(self):
host = MockHost()
host.executive = MockExecutive(output='mock-output')
git_cl = GitCL(host, auth_refresh_token_json='token.json')
git_cl.run(['issue'])
self.assertEqual(host.executive.calls, [['git', 'cl', 'issue']])
def test_get_issue_number(self):
host = MockHost()
host.executive = MockExecutive(output='Issue number: 12345 (http://crrev.com/12345)')
git_cl = GitCL(host)
self.assertEqual(git_cl.get_issue_number(), '12345')
def test_get_issue_number_none(self):
host = MockHost()
host.executive = MockExecutive(output='Issue number: None (None)')
git_cl = GitCL(host)
self.assertEqual(git_cl.get_issue_number(), 'None')
def test_all_jobs_finished_empty(self):
self.assertTrue(GitCL.all_jobs_finished([]))
def test_wait_for_try_jobs_time_out(self):
host = MockHost()
git_cl = GitCL(host)
git_cl.fetch_try_results = lambda: [
{
'builder_name': 'some-builder',
'status': 'STARTED',
'result': None,
},
]
git_cl.wait_for_try_jobs()
self.assertEqual(
host.stdout.getvalue(),
'Waiting for try jobs (timeout: 7200 seconds).\n'
'Waiting. 600 seconds passed.\n'
'Waiting. 1800 seconds passed.\n'
'Waiting. 3000 seconds passed.\n'
'Waiting. 4200 seconds passed.\n'
'Waiting. 5400 seconds passed.\n'
'Waiting. 6600 seconds passed.\n'
'Timed out waiting for try results.\n')
def test_wait_for_try_jobs_done(self):
host = MockHost()
git_cl = GitCL(host)
git_cl.fetch_try_results = lambda: [
{
'builder_name': 'some-builder',
'status': 'COMPLETED',
'result': 'FAILURE',
},
]
git_cl.wait_for_try_jobs()
self.assertEqual(
host.stdout.getvalue(),
'Waiting for try jobs (timeout: 7200 seconds).\n'
'All jobs finished.\n')
def test_all_jobs_finished_with_started_jobs(self):
self.assertFalse(GitCL.all_jobs_finished([
{
'builder_name': 'some-builder',
'status': 'COMPLETED',
'result': 'FAILURE',
'url': 'http://build.chromium.org/p/master/builders/some-builder/builds/90',
},
{
'builder_name': 'some-builder',
'status': 'STARTED',
'result': None,
'url': 'http://build.chromium.org/p/master/builders/some-builder/builds/100',
},
]))
def test_all_jobs_finished_only_completed_jobs(self):
self.assertTrue(GitCL.all_jobs_finished([
{
'builder_name': 'some-builder',
'status': 'COMPLETED',
'result': 'FAILURE',
'url': 'http://build.chromium.org/p/master/builders/some-builder/builds/90',
},
{
'builder_name': 'some-builder',
'status': 'COMPLETED',
'result': 'SUCCESS',
'url': 'http://build.chromium.org/p/master/builders/some-builder/builds/100',
},
]))
def test_has_failing_try_results_empty(self):
self.assertFalse(GitCL.has_failing_try_results([]))
def test_has_failing_try_results_only_success_and_started(self):
self.assertFalse(GitCL.has_failing_try_results([
{
'builder_name': 'some-builder',
'status': 'COMPLETED',
'result': 'SUCCESS',
'url': 'http://build.chromium.org/p/master/builders/some-builder/builds/90',
},
{
'builder_name': 'some-builder',
'status': 'STARTED',
'result': None,
'url': 'http://build.chromium.org/p/master/builders/some-builder/builds/100',
},
]))
def test_has_failing_try_results_with_failing_results(self):
self.assertTrue(GitCL.has_failing_try_results([
{
'builder_name': 'some-builder',
'status': 'COMPLETED',
'result': 'FAILURE',
},
]))
def test_latest_try_builds(self):
git_cl = GitCL(MockHost())
git_cl.fetch_try_results = lambda: [
{
'builder_name': 'builder-b',
'status': 'COMPLETED',
'result': 'SUCCESS',
'url': 'http://build.chromium.org/p/master/builders/some-builder/builds/100',
},
{
'builder_name': 'builder-b',
'status': 'COMPLETED',
'result': 'SUCCESS',
'url': 'http://build.chromium.org/p/master/builders/some-builder/builds/90',
},
{
'builder_name': 'builder-a',
'status': 'SCHEDULED',
'result': None,
'url': None,
},
{
'builder_name': 'builder-c',
'status': 'COMPLETED',
'result': 'SUCCESS',
'url': 'http://build.chromium.org/p/master/builders/some-builder/builds/123',
},
]
self.assertEqual(
git_cl.latest_try_jobs(['builder-a', 'builder-b']),
[Build('builder-a'), Build('builder-b', 100)])