Beispiel #1
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'
          ]])
 def test_latest_try_builds_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',
             'url':
             'http://build.chromium.org/p/master/builders/builder-a/builds/100',
         },
         {
             'builder_name':
             'builder-b',
             'status':
             'COMPLETED',
             'result':
             'FAILURE',
             'failure_reason':
             'INFRA_FAILURE',
             'url':
             'http://build.chromium.org/p/master/builders/builder-b/builds/200',
         },
     ]
     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'),
         })
 def test_latest_try_builds(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://build.chromium.org/p/master/builders/builder-c/builds/123',
         },
     ]
     self.assertEqual(
         git_cl.latest_try_jobs(['builder-a', 'builder-b']),
         {
             Build('builder-a'): TryJobStatus('SCHEDULED'),
             Build('builder-b', 100): TryJobStatus('COMPLETED', 'SUCCESS'),
         })
Beispiel #4
0
 def test_latest_try_builds_ignores_swarming(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':
         'https://ci.chromium.org/swarming/task/1234abcd1234abcd?server=chromium-swarm.appspot.com',
     }]
     self.assertEqual(
         git_cl.latest_try_jobs(['builder-b']), {
             Build('builder-b', 100): TryJobStatus('COMPLETED', 'SUCCESS'),
         })
Beispiel #5
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'),
         })
Beispiel #6
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',
             'url':
             'http://build.chromium.org/p/master/builders/some-builder/builds/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')
Beispiel #7
0
 def test_latest_try_jobs_cq_only(self):
     git_cl = GitCL(MockHost())
     git_cl.fetch_raw_try_job_results = lambda **_: [
         {
             'builder_name': 'cq-a',
             'experimental': False,
             'result': None,
             'status': 'SCHEDULED',
             'tags': ['user_agent:cq'],
             'url': None,
         },
         {
             'builder_name': 'cq-a-experimental',
             'experimental': True,
             'result': None,
             'status': 'SCHEDULED',
             'tags': ['user_agent:cq'],
             'url': None,
         },
         {
             'builder_name': 'other',
             'experimental': False,
             'status': 'SCHEDULED',
             'result': None,
             'tags': ['user_agent:git_cl_try'],
             'url': None,
         },
     ]
     self.assertEqual(
         git_cl.latest_try_jobs(cq_only=True),
         {
             Build('cq-a'): TryJobStatus('SCHEDULED'),
         })
Beispiel #8
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')})
 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: []
     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')
 def test_wait_for_try_jobs_done(self):
     host = MockHost()
     git_cl = GitCL(host)
     git_cl.fetch_raw_try_job_results = lambda: [
         {
             'builder_name': 'some-builder',
             'status': 'COMPLETED',
             'result': 'FAILURE',
             'url': 'http://build.chromium.org/p/master/builders/some-builder/builds/100',
         },
     ]
     git_cl.wait_for_try_jobs()
     self.assertEqual(
         host.stdout.getvalue(),
         'Waiting for try jobs (timeout: 7200 seconds).\n'
         'All jobs finished.\n')
Beispiel #11
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']), {})
 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://luci-milo.appspot.com/swarming/task/36a767f405d9ee10',
         },
     ]
     self.assertEqual(
         git_cl.try_job_results(), {
             Build('builder-a', '36a767f405d9ee10'):
             TryJobStatus('COMPLETED', 'FAILURE')
         })
 def test_wait_for_try_jobs_time_out(self):
     host = MockHost()
     git_cl = GitCL(host)
     git_cl.fetch_raw_try_job_results = lambda: [
         {
             'builder_name': 'some-builder',
             'status': 'STARTED',
             'result': None,
             'url': None,
         },
     ]
     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')
Beispiel #14
0
 def test_wait_for_try_jobs_cl_closed(self):
     host = MockHost()
     host.executive = MockExecutive(output='closed')
     git_cl = GitCL(host)
     git_cl.fetch_raw_try_job_results = lambda **_: [
         {
             'builder_name': 'some-builder',
             'status': 'STARTED',
             'result': None,
             'url': None,
         },
     ]
     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')