예제 #1
0
    def testInitiate_ScheduleBuild(self, put, _):
        # We then need to make sure that the buildbucket put was called.
        put.return_value = {'build': {'id': '345982437987234'}}

        # This time we don't seed the isolate for the change to force the build.
        self.assertDictEqual(
            {
                'find_isolate_chromium@7c7e90be': {
                    'bucket': 'luci.bucket',
                    'buildbucket_result': {
                        'build': {
                            'id': '345982437987234'
                        },
                    },
                    'builder': 'Mac Builder',
                    'change': mock.ANY,
                    'status': 'ongoing',
                    'target': 'telemetry_perf_tests',
                    'tries': 1,
                },
            },
            task_module.Evaluate(
                self.job,
                event_module.Event(
                    type='initiate',
                    target_task='find_isolate_chromium@7c7e90be',
                    payload={}), find_isolate.Evaluator(self.job)))
        self.assertEqual(1, put.call_count)
예제 #2
0
 def testUpdate_MissingIsolates_InvalidJson(self, get_build_status):
     json = '{ invalid }'
     get_build_status.return_value = {
         'build': {
             'status': 'COMPLETED',
             'result': 'SUCCESS',
             'result_details_json': json,
         }
     }
     self.assertDictEqual(
         {
             'find_isolate_chromium@7c7e90be': {
                 'bucket': 'luci.bucket',
                 'buildbucket_result': {
                     'build': {
                         'id': '345982437987234'
                     }
                 },
                 'buildbucket_job_status': mock.ANY,
                 'builder': 'Mac Builder',
                 'change': mock.ANY,
                 'status': 'failed',
                 'errors': mock.ANY,
                 'target': 'telemetry_perf_tests',
                 'tries': 1,
             },
         },
         task_module.Evaluate(
             self.job,
             event_module.Event(
                 type='update',
                 target_task='find_isolate_chromium@7c7e90be',
                 payload={'status': 'build_completed'}),
             find_isolate.Evaluator(self.job)))
     self.assertEqual(1, get_build_status.call_count)
예제 #3
0
    def testInitiate_FoundIsolate(self, *_):
        # Seed the isolate for this change.
        change = change_module.Change(
            commits=[change_module.Commit('chromium', '7c7e90be')])
        isolate.Put((('Mac Builder', change, 'telemetry_perf_tests',
                      'https://isolate.server', '7c7e90be'), ))

        # Then ensure that we can find the seeded isolate for the specified
        # revision.
        self.assertDictEqual(
            {
                'find_isolate_chromium@7c7e90be': {
                    'bucket': 'luci.bucket',
                    'builder': 'Mac Builder',
                    'change': mock.ANY,
                    'isolate_hash': '7c7e90be',
                    'isolate_server': 'https://isolate.server',
                    'status': 'completed',
                    'target': 'telemetry_perf_tests',
                },
            },
            task_module.Evaluate(
                self.job,
                event_module.Event(
                    type='initiate',
                    target_task='find_isolate_chromium@7c7e90be',
                    payload={}), find_isolate.Evaluator(self.job)))
예제 #4
0
    def setUp(self):
        super(FindIsolateEvaluatorUpdateTests, self).setUp()

        # Here we set up the pre-requisite for polling, where we've already had a
        # successful build scheduled.
        with mock.patch('dashboard.services.buildbucket_service.Put') as put:
            put.return_value = {'build': {'id': '345982437987234'}}
            self.assertDictEqual(
                {
                    'find_isolate_chromium@7c7e90be': {
                        'buildbucket_result': {
                            'build': {
                                'id': '345982437987234'
                            }
                        },
                        'status': 'ongoing',
                        'builder': 'Mac Builder',
                        'bucket': 'luci.bucket',
                        'change': mock.ANY,
                        'target': 'telemetry_perf_tests',
                        'tries': 1,
                    },
                },
                task_module.Evaluate(
                    self.job,
                    event_module.Event(
                        type='initiate',
                        target_task='find_isolate_chromium@7c7e90be',
                        payload={}), find_isolate.Evaluator(self.job)))
            self.assertEqual(1, put.call_count)
예제 #5
0
 def testUpdate_BuildFailed_HardFailure(self, get_build_status):
   get_build_status.return_value = {
       'build': {
           'status': 'COMPLETED',
           'result': 'FAILURE',
           'result_details_json': '{}',
       }
   }
   self.assertDictEqual(
       {
           'find_isolate_chromium@7c7e90be': {
               'bucket': 'luci.bucket',
               'buildbucket_result': {
                   'build': {
                       'id': '345982437987234'
                   },
               },
               'buildbucket_job_status': mock.ANY,
               'builder': 'Mac Builder',
               'build_url': mock.ANY,
               'change': mock.ANY,
               'status': 'failed',
               'target': 'telemetry_perf_tests',
               'errors': [mock.ANY],
               'tries': 1,
           },
       },
       task_module.Evaluate(
           self.job,
           event_module.Event(
               type='update',
               target_task='find_isolate_chromium@7c7e90be',
               payload={'status': 'build_completed'}),
           find_isolate.Evaluator(self.job)))
   self.assertEqual(1, get_build_status.call_count)
   self.assertEqual(
       {
           'find_isolate_chromium@7c7e90be': {
               'completed':
                   True,
               'exception':
                   mock.ANY,
               'details': [{
                   'key': 'builder',
                   'value': 'Mac Builder',
                   'url': None,
               }, {
                   'key': 'build',
                   'value': '345982437987234',
                   'url': mock.ANY,
               }]
           }
       },
       task_module.Evaluate(
           self.job,
           event_module.Event(
               type='unimportant', target_task=None, payload={}),
           find_isolate.Serializer()))
예제 #6
0
    def __init__(self, job):
        # We gather all the evaluators from the modules we know.
        super(ExecutionEngine, self).__init__(evaluators=[
            evaluators.DispatchByTaskType(
                {
                    'find_isolate': find_isolate.Evaluator(job),
                    'find_culprit': performance_bisection.Evaluator(job),
                    'read_value': read_value.Evaluator(job),
                    'run_test': run_test.Evaluator(job),
                }),

            # We then always lift the task payload up, skipping some of the
            # larger objects that we know we are not going to need when deciding
            # what the end result is.
            evaluators.TaskPayloadLiftingEvaluator(
                exclude_keys=EXCLUDED_PAYLOAD_KEYS)
        ])
예제 #7
0
 def testUpdate_MissingIsolates_Revision(self, get_build_status):
   json = """
   {
     "properties": {
         "isolate_server": "https://isolate.server",
         "swarm_hashes_refs/heads/master(at)7c7e90be_without_patch":
             {"telemetry_perf_tests": "192923affe212adf"}
     }
   }"""
   get_build_status.return_value = {
       'build': {
           'status': 'COMPLETED',
           'result': 'SUCCESS',
           'result_details_json': json,
       }
   }
   self.assertDictEqual(
       {
           'find_isolate_chromium@7c7e90be': {
               'bucket': 'luci.bucket',
               'builder': 'Mac Builder',
               'build_url': mock.ANY,
               'buildbucket_result': {
                   'build': {
                       'id': '345982437987234'
                   }
               },
               'buildbucket_job_status': mock.ANY,
               'change': mock.ANY,
               'status': 'failed',
               'target': 'telemetry_perf_tests',
               'tries': 1,
               'errors': mock.ANY,
           },
       },
       task_module.Evaluate(
           self.job,
           event_module.Event(
               type='update',
               target_task='find_isolate_chromium@7c7e90be',
               payload={'status': 'build_completed'}),
           find_isolate.Evaluator(self.job)))
   self.assertEqual(1, get_build_status.call_count)
예제 #8
0
 def testUpdate_BuildFailed_Cancelled(self, get_build_status):
   get_build_status.return_value = {
       'build': {
           'status': 'COMPLETED',
           'result': 'CANCELLED',
           'result_details_json': '{}',
       }
   }
   self.assertDictEqual(
       {
           'find_isolate_chromium@7c7e90be': {
               'bucket': 'luci.bucket',
               'builder': 'Mac Builder',
               'buildbucket_result': {
                   'build': {
                       'id': '345982437987234'
                   }
               },
               'buildbucket_job_status': {
                   'status': 'COMPLETED',
                   'result': 'CANCELLED',
                   'result_details_json': '{}',
               },
               'build_url': mock.ANY,
               'change': mock.ANY,
               'errors': [mock.ANY],
               'status': 'cancelled',
               'target': 'telemetry_perf_tests',
               'tries': 1,
           },
       },
       task_module.Evaluate(
           self.job,
           event_module.Event(
               type='update',
               target_task='find_isolate_chromium@7c7e90be',
               payload={'status': 'build_completed'}),
           find_isolate.Evaluator(self.job)))
   self.assertEqual(1, get_build_status.call_count)
예제 #9
0
    def testUpdate_BuildSuccessful(self, put, get_build_status):
        # First we're going to initiate so we have a build scheduled.
        put.return_value = {'build': {'id': '345982437987234'}}
        self.assertDictEqual(
            {
                'find_isolate_chromium@7c7e90be': {
                    'bucket': 'luci.bucket',
                    'buildbucket_result': {
                        'build': {
                            'id': '345982437987234'
                        },
                    },
                    'builder': 'Mac Builder',
                    'change': mock.ANY,
                    'status': 'ongoing',
                    'target': 'telemetry_perf_tests',
                    'tries': 1,
                },
            },
            task_module.Evaluate(
                self.job,
                event_module.Event(
                    type='initiate',
                    target_task='find_isolate_chromium@7c7e90be',
                    payload={}), find_isolate.Evaluator(self.job)))
        self.assertEqual(1, put.call_count)

        # Now we send an update event which should cause us to poll the status of
        # the build on demand.
        json = """
    {
      "properties": {
          "got_revision_cp": "refs/heads/master@7c7e90be",
          "isolate_server": "https://isolate.server",
          "swarm_hashes_refs/heads/master(at)7c7e90be_without_patch":
              {"telemetry_perf_tests": "192923affe212adf"}
      }
    }"""
        get_build_status.return_value = {
            'build': {
                'status': 'COMPLETED',
                'result': 'SUCCESS',
                'result_details_json': json,
            }
        }
        self.assertDictEqual(
            {
                'find_isolate_chromium@7c7e90be': {
                    'bucket': 'luci.bucket',
                    'buildbucket_job_status': mock.ANY,
                    'buildbucket_result': {
                        'build': {
                            'id': '345982437987234'
                        }
                    },
                    'builder': 'Mac Builder',
                    'change': mock.ANY,
                    'isolate_hash': '192923affe212adf',
                    'isolate_server': 'https://isolate.server',
                    'status': 'completed',
                    'target': 'telemetry_perf_tests',
                    'tries': 1,
                },
            },
            task_module.Evaluate(
                self.job,
                event_module.Event(
                    type='update',
                    target_task='find_isolate_chromium@7c7e90be',
                    payload={'status': 'build_completed'}),
                find_isolate.Evaluator(self.job)))
        self.assertEqual(1, get_build_status.call_count)