示例#1
0
 def test_wait_for_try_jobs_cl_closed(self):
     host = MockHost()
     host.executive = MockExecutive(output='closed')
     git_cl = GitCL(host)
     git_cl._host.web = MockWeb(responses=[{
         'status_code':
         200,
         'body':
         SEARCHBUILDS_RESPONSE_PREFIX + b"""{
                 "builds": [
                     {
                         "status": "STARTED",
                         "builder": {
                             "builder": "some-builder"
                         }
                     }
                 ]
             }"""
     }])
     self.assertEqual(
         git_cl.wait_for_try_jobs(),
         CLStatus(
             status='closed',
             try_job_results={
                 Build('some-builder', None): TryJobStatus('STARTED', None),
             },
         ))
     self.assertEqual(host.stdout.getvalue(),
                      'Waiting for try jobs, timeout: 7200 seconds.\n')
示例#2
0
 def test_wait_for_try_jobs_done(self):
     host = MockHost()
     host.executive = MockExecutive(output='lgtm')
     git_cl = GitCL(host)
     git_cl._host.web = MockWeb(responses=[{
         'status_code':
         200,
         'body':
         SEARCHBUILDS_RESPONSE_PREFIX + b"""{
                 "builds": [
                     {
                         "status": "FAILURE",
                         "builder": {
                             "builder": "some-builder"
                         },
                         "number": 100
                     }
                 ]
             }"""
     }])
     self.assertEqual(
         git_cl.wait_for_try_jobs(),
         CLStatus(status='lgtm',
                  try_job_results={
                      Build('some-builder', 100):
                      TryJobStatus('COMPLETED', 'FAILURE'),
                  }))
     self.assertEqual(host.stdout.getvalue(),
                      'Waiting for try jobs, timeout: 7200 seconds.\n')
示例#3
0
 def test_wait_for_try_jobs_timeout(self):
     host = MockHost()
     git_cl = GitCL(host)
     response = {
         'status_code':
         200,
         'body':
         SEARCHBUILDS_RESPONSE_PREFIX + b"""{
             "builds": [
                 {
                     "status": "STARTED",
                     "builder": {
                         "builder": "some-builder"
                     },
                     "number": 100
                 }
             ]
         }"""
     }
     # Specify the same response 10 times to ensure each poll gets ones.
     git_cl._host.web = MockWeb(responses=[response] * 10)
     self.assertIsNone(git_cl.wait_for_try_jobs())
     self.assertEqual(
         host.stdout.getvalue(),
         'Waiting for try jobs, timeout: 7200 seconds.\n'
         'Waiting for try jobs. 600 seconds passed.\n'
         'Waiting for try jobs. 1800 seconds passed.\n'
         'Waiting for try jobs. 3000 seconds passed.\n'
         'Waiting for try jobs. 4200 seconds passed.\n'
         'Waiting for try jobs. 5400 seconds passed.\n'
         'Waiting for try jobs. 6600 seconds passed.\n'
         'Timed out waiting for try jobs.\n')
示例#4
0
 def test_fetch_raw_try_job_results(self):
     # Fetching raw try job results has a side effect of writing to and
     # reading from a temporary JSON file. This test method verifies the
     # command line used to fetch try job results.
     host = MockHost()
     host.filesystem.write_text_file('/__im_tmp/tmp_0_/try-results.json',
                                     '{}')
     host.filesystem.write_text_file('/__im_tmp/tmp_1_/try-results.json',
                                     '{}')
     git_cl = GitCL(host)
     git_cl.fetch_raw_try_job_results()
     git_cl.fetch_raw_try_job_results(patchset=7)
     self.assertEqual(
         host.executive.calls,
         [[
             'git',
             'cl',
             'try-results',
             '--json',
             '/__im_tmp/tmp_0_/try-results.json',
         ],
          [
              'git', 'cl', 'try-results', '--json',
              '/__im_tmp/tmp_1_/try-results.json', '--patchset', '7'
          ]])
示例#5
0
 def test_latest_try_jobs(self):
     git_cl = GitCL(MockHost())
     git_cl.fetch_raw_try_job_results = lambda **_: [
         {
             'builder_name': 'builder-b',
             'status': 'COMPLETED',
             'result': 'SUCCESS',
             'url': 'http://build.chromium.org/p/master/builders/builder-b/builds/100',
         },
         {
             'builder_name': 'builder-b',
             'status': 'COMPLETED',
             'result': 'SUCCESS',
             'url': 'http://build.chromium.org/p/master/builders/builder-b/builds/90',
         },
         {
             'builder_name': 'builder-a',
             'status': 'SCHEDULED',
             'result': None,
             'url': None,
         },
         {
             'builder_name': 'builder-c',
             'status': 'COMPLETED',
             'result': 'SUCCESS',
             'url': 'http://ci.chromium.org/master/builder-c/123',
         },
     ]
     self.assertEqual(
         git_cl.latest_try_jobs(['builder-a', 'builder-b']),
         {
             Build('builder-a'): TryJobStatus('SCHEDULED'),
             Build('builder-b', 100): TryJobStatus('COMPLETED', 'SUCCESS'),
         })
示例#6
0
 def test_latest_try_jobs_failures(self):
     git_cl = GitCL(MockHost())
     git_cl.fetch_raw_try_job_results = lambda **_: [
         {
             'builder_name': 'builder-a',
             'status': 'COMPLETED',
             'result': 'FAILURE',
             'failure_reason': 'BUILD_FAILURE',
             'tags': [
                 'build_address:luci.chromium.try/chromium_presubmit/100',
             ],
             'url': 'http://ci.chromium.org/b/123123123123123123',
         },
         {
             'builder_name': 'builder-b',
             'status': 'COMPLETED',
             'result': 'FAILURE',
             'failure_reason': 'INFRA_FAILURE',
             'tags': [
                 'build_address:luci.chromium.try/chromium_presubmit/200',
             ],
             'url': 'http://ci.chromium.org/b/1293871928371923719',
         },
     ]
     self.assertEqual(
         git_cl.latest_try_jobs(['builder-a', 'builder-b']), {
             Build('builder-a', 100): TryJobStatus('COMPLETED', 'FAILURE'),
             Build('builder-b', 200): TryJobStatus('COMPLETED', 'FAILURE'),
         })
示例#7
0
 def test_trigger_try_jobs_with_list(self):
     # When no bucket is specified, master.tryserver.blink is used by
     # default. Besides, `git cl try` invocations are grouped by buckets.
     host = MockHost()
     git_cl = GitCL(host, auth_refresh_token_json='token.json')
     git_cl.trigger_try_jobs(['android_blink_rel', 'fake_blink_try_linux',
                              'fake_blink_try_win', 'fake_mac_cq'])
     self.assertEqual(host.executive.calls, [
         [
             'git', 'cl', 'try',
             '-B', 'master.tryserver.blink',
             '-b', 'fake_blink_try_linux', '-b', 'fake_blink_try_win',
             '--auth-refresh-token-json', 'token.json'
         ],
         [
             'git', 'cl', 'try',
             '-B', 'master.tryserver.chromium.android',
             '-b', 'android_blink_rel',
             '--auth-refresh-token-json', 'token.json'
         ],
         [
             'git', 'cl', 'try',
             '-B', 'master.tryserver.chromium.mac',
             '-b', 'fake_mac_cq',
             '--auth-refresh-token-json', 'token.json'
         ],
     ])
示例#8
0
 def __init__(self, host):
     self.host = host
     self.port = self.host.port_factory.get()
     self.git_cl = GitCL(host)
     self.finder = PathFinder(self.host.filesystem)
     self.ports_with_no_results = set()
     self.ports_with_all_pass = set()
    def __init__(self, host, args=None, wpt_manifests=None):
        self.host = host
        self.port = self.host.port_factory.get()
        self.finder = PathFinder(self.host.filesystem)
        self.git_cl = GitCL(host)
        self.git = self.host.git(self.finder.chromium_base())
        self.configs_with_no_results = []
        self.patchset = None
        self.wpt_manifests = (
            wpt_manifests or
            [self.port.wpt_manifest(d) for d in self.port.WPT_DIRS])

        # Get options from command line arguments.
        parser = argparse.ArgumentParser(description=__doc__)
        self.add_arguments(parser)
        self.options = parser.parse_args(args or [])
        if not (self.options.clean_up_test_expectations or
                self.options.clean_up_test_expectations_only):
            assert not self.options.clean_up_affected_tests_only, (
                'Cannot use --clean-up-affected-tests-only without using '
                '--clean-up-test-expectations or '
                '--clean-up-test-expectations-only')
        # Set up TestExpectations instance which contains all
        # expectations files associated with the platform.
        expectations_dict = {p: self.host.filesystem.read_text_file(p)
                             for p in self.expectations_files()}
        self._test_expectations = TestExpectations(
            self.port, expectations_dict=expectations_dict)
示例#10
0
 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']])
示例#11
0
 def test_try_job_results_with_task_id_in_url(self):
     git_cl = GitCL(MockHost())
     git_cl.fetch_raw_try_job_results = lambda **_: [
         {
             'builder_name':
             'builder-a',
             'status':
             'COMPLETED',
             'result':
             'FAILURE',
             'failure_reason':
             'BUILD_FAILURE',
             'url': ('https://ci.chromium.org/swarming/task/'
                     '36a767f405d9ee10'),
         },
         {
             'builder_name':
             'builder-b',
             'status':
             'COMPLETED',
             'result':
             'SUCCESS',
             'url': ('https://ci.chromium.org/swarming/task/'
                     '38740befcd9c0010?server=chromium-swarm.appspot.com'),
         },
     ]
     self.assertEqual(
         git_cl.try_job_results(), {
             Build('builder-a', '36a767f405d9ee10'):
             TryJobStatus('COMPLETED', 'FAILURE'),
             Build('builder-b', '38740befcd9c0010'):
             TryJobStatus('COMPLETED', 'SUCCESS'),
         })
示例#12
0
 def test_latest_try_jobs_ignores_swarming_task(self):
     git_cl = GitCL(MockHost())
     git_cl.fetch_raw_try_job_results = lambda **_: [
         {
             'builder_name': 'builder-b',
             'status': 'COMPLETED',
             'result': 'SUCCESS',
             'tags': [
                 'build_address:luci.chromium.try/chromium_presubmit/10',
             ],
             'url': 'https://ci.chromium.org/b/123918239182739',
         }, {
             'builder_name':
             'builder-b',
             'status':
             'COMPLETED',
             'result':
             'SUCCESS',
             'url': ('https://ci.chromium.org/swarming/task/'
                     '1234abcd1234abcd?server=chromium-swarm.appspot.com'),
         }
     ]
     self.assertEqual(
         git_cl.latest_try_jobs(['builder-b']), {
             Build('builder-b', 10): TryJobStatus('COMPLETED', 'SUCCESS'),
         })
示例#13
0
 def test_try_job_results_with_other_builder(self):
     git_cl = GitCL(MockHost())
     git_cl._host.web = MockWeb(responses=[{
         'status_code':
         200,
         'body':
         SEARCHBUILDS_RESPONSE_PREFIX + b"""{
                 "builds": [
                     {
                         "status": "FAILURE",
                         "builder": {
                             "builder": "builder-a"
                         },
                         "number": 100,
                         "tags": [
                             {"key": "user_agent", "value": "cq"}
                         ]
                     }
                 ]
             }"""
     }])
     # We ignore builders that we explicitly don't care about;
     # so if we only care about other-builder, not builder-a,
     # then no exception is raised.
     self.assertEqual(
         git_cl.try_job_results(builder_names=['other-builder']), {})
示例#14
0
 def test_latest_try_jobs_failures(self):
     git_cl = GitCL(MockHost())
     git_cl._host.web = MockWeb(responses=[{
         'status_code':
         200,
         'body':
         SEARCHBUILDS_RESPONSE_PREFIX + b"""{
                 "builds": [
                     {
                         "status": "FAILURE",
                         "builder": {
                             "builder": "builder-a"
                         },
                         "number": 100
                     },
                     {
                         "status": "INFRA_FAILURE",
                         "builder": {
                             "builder": "builder-b"
                         },
                         "number": 200
                     }
                 ]
             }"""
     }])
     self.assertEqual(
         git_cl.latest_try_jobs(builder_names=['builder-a', 'builder-b']), {
             Build('builder-a', 100): TryJobStatus('COMPLETED', 'FAILURE'),
             Build('builder-b', 200): TryJobStatus('COMPLETED', 'FAILURE'),
         })
示例#15
0
 def test_try_job_results_url_format_fallback(self):
     git_cl = GitCL(MockHost())
     git_cl.fetch_raw_try_job_results = lambda **_: [
         {
             'builder_name': 'builder-a',
             'status': 'COMPLETED',
             'result': 'FAILURE',
             'tags': [
                 'build_address:luci.chromium.try/chromium_presubmit/100',
             ],
             'url': 'http://ci.chromium.org/p/master/builders/builder-b/builds/10',
         },
         {
             'builder_name': 'builder-b',
             'status': 'COMPLETED',
             'result': 'FAILURE',
             'url': 'http://ci.chromium.org/p/master/builders/builder-b/builds/20',
         },
         {
             'builder_name': 'builder-c',
             'status': 'COMPLETED',
             'result': 'FAILURE',
             'url': 'https://ci.chromium.org/swarming/task/36a767f405d9ee10',
         },
     ]
     self.assertEqual(
         git_cl.try_job_results(),
         {
             Build('builder-a', 100): TryJobStatus('COMPLETED', 'FAILURE'),
             Build('builder-b', 20): TryJobStatus('COMPLETED', 'FAILURE'),
             Build('builder-c', '36a767f405d9ee10'): TryJobStatus('COMPLETED', 'FAILURE'),
         })
示例#16
0
 def test_wait_for_try_jobs_done(self):
     host = MockHost()
     host.executive = MockExecutive(output='lgtm')
     git_cl = GitCL(host)
     git_cl.fetch_raw_try_job_results = lambda **_: [
         {
             'builder_name': 'some-builder',
             'status': 'COMPLETED',
             'result': 'FAILURE',
             'tags': [
                 'build_address:luci.chromium.try/chromium_presubmit/100',
             ],
             'url': 'http://ci.chromium.org/b/8931586523737389552',
         },
     ]
     self.assertEqual(
         git_cl.wait_for_try_jobs(),
         CLStatus(
             status='lgtm',
             try_job_results={
                 Build('some-builder', 100): TryJobStatus('COMPLETED', 'FAILURE'),
             }
         )
     )
     self.assertEqual(
         host.stdout.getvalue(),
         'Waiting for try jobs, timeout: 7200 seconds.\n')
示例#17
0
 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']])
示例#18
0
 def test_wait_for_closed_status_closed(self):
     host = MockHost()
     host.executive = MockExecutive(output='closed')
     git_cl = GitCL(host)
     self.assertEqual(git_cl.wait_for_closed_status(), 'closed')
     self.assertEqual(
         host.stdout.getvalue(),
         'Waiting for closed status, timeout: 1800 seconds.\n'
         'CL is closed.\n')
示例#19
0
 def test_latest_try_jobs_started_build_luci_url(self):
     git_cl = GitCL(MockHost())
     git_cl.fetch_raw_try_job_results = lambda **_: [
         {
             'builder_name': 'builder-a',
             'status': 'STARTED',
             'result': None,
             'url': 'http://ci.chromium.org/p/master/some-builder/100',
         },
     ]
     self.assertEqual(git_cl.latest_try_jobs(['builder-a']),
                      {Build('builder-a', 100): TryJobStatus('STARTED')})
示例#20
0
 def test_trigger_try_jobs_with_frozenset(self):
     # The trigger_try_jobs method may be called with an immutable set.
     host = MockHost()
     git_cl = GitCL(host, auth_refresh_token_json='token.json')
     git_cl.trigger_try_jobs(
         frozenset(['fake_blink_try_linux', 'fake_blink_try_win']))
     self.assertEqual(host.executive.calls, [
         [
             'git', 'cl', 'try', '-b', 'fake_blink_try_linux', '-b',
             'fake_blink_try_win', '--auth-refresh-token-json', 'token.json'
         ],
     ])
示例#21
0
 def test_trigger_try_jobs_with_explicit_bucket(self):
     # An explicit bucket overrides configured or default buckets.
     host = MockHost()
     git_cl = GitCL(host, auth_refresh_token_json='token.json')
     git_cl.trigger_try_jobs(['fake_blink_try_linux', 'android_blink_rel'],
                             bucket='luci.dummy')
     self.assertEqual(host.executive.calls, [
         [
             'git', 'cl', 'try', '-B', 'luci.dummy', '-b',
             'android_blink_rel', '-b', 'fake_blink_try_linux',
             '--auth-refresh-token-json', 'token.json'
         ],
     ])
示例#22
0
    def __init__(self, host, args=None):
        self.host = host
        self.port = self.host.port_factory.get()
        self.git_cl = GitCL(host)
        self.finder = PathFinder(self.host.filesystem)
        self.configs_with_no_results = []
        self.configs_with_all_pass = []
        self.patchset = None

        # Get options from command line arguments.
        parser = argparse.ArgumentParser(description=__doc__)
        self.add_arguments(parser)
        self.options = parser.parse_args(args or [])
示例#23
0
 def test_latest_try_jobs_started_build_luci_url(self):
     git_cl = GitCL(MockHost())
     git_cl.fetch_raw_try_job_results = lambda **_: [
         {
             'builder_name': 'builder-a',
             'status': 'STARTED',
             'result': None,
             'tags': [
                 'build_address:luci.chromium.try/chromium_presubmit/100',
             ],
             'url': 'http://ci.chromium.org/b/123123123123123',
         },
     ]
     self.assertEqual(git_cl.latest_try_jobs(['builder-a']),
                      {Build('builder-a', 100): TryJobStatus('STARTED')})
示例#24
0
 def test_wait_for_try_jobs_no_results_not_considered_finished(self):
     host = MockHost()
     git_cl = GitCL(host)
     git_cl.fetch_raw_try_job_results = lambda **_: []
     self.assertIsNone(git_cl.wait_for_try_jobs())
     self.assertEqual(
         host.stdout.getvalue(),
         'Waiting for try jobs, timeout: 7200 seconds.\n'
         'Waiting for try jobs. 600 seconds passed.\n'
         'Waiting for try jobs. 1800 seconds passed.\n'
         'Waiting for try jobs. 3000 seconds passed.\n'
         'Waiting for try jobs. 4200 seconds passed.\n'
         'Waiting for try jobs. 5400 seconds passed.\n'
         'Waiting for try jobs. 6600 seconds passed.\n'
         'Timed out waiting for try jobs.\n')
示例#25
0
 def test_try_job_results_with_swarming_url_with_query(self):
     git_cl = GitCL(MockHost())
     git_cl.fetch_raw_try_job_results = lambda **_: [
         {
             'builder_name': 'builder-b',
             'status': 'COMPLETED',
             'result': 'SUCCESS',
             'url': ('https://ci.chromium.org/swarming/task/'
                     '38740befcd9c0010?server=chromium-swarm.appspot.com'),
         },
     ]
     self.assertEqual(
         git_cl.try_job_results(),
         {
             Build('builder-b', '38740befcd9c0010'): TryJobStatus('COMPLETED', 'SUCCESS'),
         })
示例#26
0
 def test_try_job_results(self):
     git_cl = GitCL(MockHost())
     git_cl._host.web = MockWeb(responses=[{
         'status_code':
         200,
         'body':
         SEARCHBUILDS_RESPONSE_PREFIX + b"""{
                 "builds": [
                     {
                         "status": "SUCCESS",
                         "builder": {
                             "builder": "builder-a"
                         },
                         "number": 111,
                         "tags": [
                             {"key": "user_agent", "value": "cq"}
                         ]
                     },
                     {
                         "status": "SCHEDULED",
                         "builder": {
                             "builder": "builder-b"
                         },
                         "number": 222
                     },
                     {
                         "status": "INFRA_FAILURE",
                         "builder": {
                             "builder": "builder-c"
                         },
                         "number": 333
                     }
                 ]
             }"""
     }])
     self.assertEqual(
         git_cl.try_job_results(issue_number=None),
         {
             Build('builder-a', 111):
             TryJobStatus('COMPLETED', 'SUCCESS'),
             Build('builder-b', 222):
             TryJobStatus('SCHEDULED', None),
             # INFRA_FAILURE is mapped to FAILURE for this build.
             Build('builder-c', 333):
             TryJobStatus('COMPLETED', 'FAILURE'),
         })
示例#27
0
 def test_wait_for_closed_status_timeout(self):
     host = MockHost()
     host.executive = MockExecutive(output='commit')
     git_cl = GitCL(host)
     self.assertIsNone(git_cl.wait_for_closed_status())
     self.assertEqual(
         host.stdout.getvalue(),
         'Waiting for closed status, timeout: 1800 seconds.\n'
         'Waiting for closed status. 120 seconds passed.\n'
         'Waiting for closed status. 360 seconds passed.\n'
         'Waiting for closed status. 600 seconds passed.\n'
         'Waiting for closed status. 840 seconds passed.\n'
         'Waiting for closed status. 1080 seconds passed.\n'
         'Waiting for closed status. 1320 seconds passed.\n'
         'Waiting for closed status. 1560 seconds passed.\n'
         'Waiting for closed status. 1800 seconds passed.\n'
         'Timed out waiting for closed status.\n')
示例#28
0
 def test_latest_try_jobs(self):
     # Here we have multiple builds with the same name, but we only take the
     # latest one (based on build number).
     git_cl = GitCL(MockHost())
     git_cl._host.web = MockWeb(responses=[{
         'status_code':
         200,
         'body':
         SEARCHBUILDS_RESPONSE_PREFIX + b"""{
                 "builds": [
                     {
                         "status": "SUCCESS",
                         "builder": {
                             "builder": "builder-b"
                         },
                         "number": 100
                     },
                     {
                         "status": "SUCCESS",
                         "builder": {
                             "builder": "builder-b"
                         },
                         "number": 90
                     },
                     {
                         "status": "SCHEDULED",
                         "builder": {
                             "builder": "builder-a"
                         }
                     },
                     {
                         "status": "SUCCESS",
                         "builder": {
                             "builder": "builder-c"
                         },
                         "number": 123
                     }
                 ]
             }"""
     }])
     self.assertEqual(
         git_cl.latest_try_jobs(builder_names=['builder-a', 'builder-b']), {
             Build('builder-a'): TryJobStatus('SCHEDULED'),
             Build('builder-b', 100): TryJobStatus('COMPLETED', 'SUCCESS'),
         })
示例#29
0
 def test_try_job_results_with_unexpected_url_format(self):
     git_cl = GitCL(MockHost())
     git_cl.fetch_raw_try_job_results = lambda **_: [
         {
             'builder_name': 'builder-a',
             'status': 'COMPLETED',
             'result': 'FAILURE',
             'failure_reason': 'BUILD_FAILURE',
             'url': 'https://example.com/',
         },
     ]
     # We try to parse a build number or task ID from the URL.
     with self.assertRaisesRegexp(AssertionError, 'https://example.com/ did not match expected format'):
         git_cl.try_job_results()
     # We ignore builders that we explicitly don't care about;
     # so if we only care about other-builder, not builder-a,
     # then no exception is raised.
     self.assertEqual(git_cl.try_job_results(['other-builder']), {})
示例#30
0
 def test_latest_try_jobs_started(self):
     git_cl = GitCL(MockHost())
     git_cl._host.web = MockWeb(responses=[{
         'status_code':
         200,
         'body':
         SEARCHBUILDS_RESPONSE_PREFIX + b"""{
                 "builds": [
                     {
                         "status": "STARTED",
                         "builder": {
                             "builder": "builder-a"
                         },
                         "number": 100
                     }
                 ]
             }"""
     }])
     self.assertEqual(git_cl.latest_try_jobs(builder_names=['builder-a']),
                      {Build('builder-a', 100): TryJobStatus('STARTED')})