Exemple #1
0
    def test_delete_old_flakes(self):
        # Create old FlakyRuns.
        now = datetime.datetime.utcnow()
        old_flakes = []
        for i in range(1, 101):  # id can not be 0
            key = FlakyRun(key=ndb.Key('FlakyRun', i),
                           failure_run_time_finished=now -
                           datetime.timedelta(days=100 + i),
                           failure_run=ndb.Key('BuildRun', 1),
                           success_run=ndb.Key('BuildRun', 2)).put()
            old_flakes.append(key)

        # Create new FlakyRuns.
        new_flakes = []
        for i in range(101, 201):
            key = FlakyRun(key=ndb.Key('FlakyRun', i),
                           failure_run_time_finished=now -
                           datetime.timedelta(hours=100 + i),
                           failure_run=ndb.Key('BuildRun', 1),
                           success_run=ndb.Key('BuildRun', 2)).put()
            new_flakes.append(key)

        non_existant_flake = [ndb.Key('FlakyRun', '201')]

        # Create Flakes.
        Flake(key=ndb.Key('Flake', 'foo'),
              name='foo',
              occurrences=old_flakes + new_flakes,
              last_time_seen=now).put()
        Flake(key=ndb.Key('Flake', 'bar'),
              name='bar',
              occurrences=old_flakes + new_flakes[:50],
              last_time_seen=now).put()
        Flake(key=ndb.Key('Flake', 'baz'),
              name='baz',
              occurrences=non_existant_flake + new_flakes,
              last_time_seen=now).put()

        path = '/cron/delete_old_flake_occurrences'
        response = self.test_app.get(path,
                                     headers={'X-AppEngine-Cron': 'true'})
        self.assertEqual(200, response.status_int)

        # Removed old flakes.
        self.assertEqual(set(Flake.get_by_id('foo').occurrences),
                         set(new_flakes))

        # Kept old flakes since there are just 50 new flakes.
        self.assertEqual(len(Flake.get_by_id('bar').occurrences), 150)

        # Make sure that non existant flake got removed.
        self.assertNotIn(non_existant_flake,
                         Flake.get_by_id('bar').occurrences)

        # Make sure that we do not delete any FlakyRun entities.
        self.assertEqual(FlakyRun.query().count(limit=300), 200)
  def test_create_tasks_to_update_issue_tracker(self):
    Flake(name='foo1', count_day=1).put()
    key2 = Flake(name='foo2', count_day=3).put()
    key3 = Flake(name='foo3', count_day=5).put()
    Flake(name='foo4', count_day=2).put()
    key5 = Flake(name='foo5', count_day=200).put()

    path = '/cron/update_issue_tracker'
    response = self.test_app.get(path, headers={'X-AppEngine-Cron': 'true'})
    self.assertEqual(200, response.status_int)

    tasks = self.taskqueue_stub.get_filtered_tasks(queue_names='issue-updates')
    self.assertEqual(len(tasks), 3)
    self.assertEqual(tasks[0].url, '/issues/process/%s' % key2.urlsafe())
    self.assertEqual(tasks[1].url, '/issues/process/%s' % key3.urlsafe())
    self.assertEqual(tasks[2].url, '/issues/process/%s' % key5.urlsafe())
    def test_converts_step_flake(self):
        last_updated = datetime.datetime.now()
        Flake(issue_id=1,
              is_step=True,
              name='fake_step',
              issue_last_updated=last_updated).put()

        self.test_app.get('/migrate')

        flake_types = FlakeType.query().fetch()
        self.assertEqual(len(flake_types), 1)

        flake_type = flake_types[0]
        self.assertEqual(flake_type.project, 'chromium')
        self.assertEqual(flake_type.step_name, 'fake_step')
        self.assertIsNone(flake_type.test_name)
        self.assertIsNone(flake_type.config)
        self.assertEqual(flake_type.last_updated, last_updated)

        issues = Issue.query().fetch()
        self.assertEqual(len(issues), 1)

        issue = issues[0]
        self.assertEqual(issue.issue_id, 1)
        self.assertEqual(issue.project, 'chromium')
        self.assertEqual(sorted(issue.flake_type_keys),
                         sorted(flake_type.key for flake_type in flake_types))
Exemple #4
0
 def test_normalizes_step_name(self):
     key = Flake(name='my_unittests (with patch)').put()
     response = self.test_app.get(
         '/search?q=my_unittests+(with+patch)+on+NVIDIA+GPU', status=302)
     self.assertIn('location', response.headers)
     self.assertTrue(response.headers['location'].endswith(
         '/all_flake_occurrences?key=%s' % key.urlsafe()))
    def test_ignores_if_issue_id_is_0(self):
        last_updated = datetime.datetime.now()
        Flake(issue_id=0,
              is_step=True,
              name='fake_step',
              issue_last_updated=last_updated).put()

        self.test_app.get('/migrate')

        self.assertEqual(len(FlakeType.query().fetch()), 0)
    def test_ignores_null_flaky_runs(self):
        last_updated = datetime.datetime.now()

        fake_build_key = BuildRun(buildnumber=1,
                                  result=1,
                                  time_finished=last_updated).put()

        flake_run_key = FlakyRun(failure_run=fake_build_key,
                                 success_run=fake_build_key,
                                 failure_run_time_finished=last_updated,
                                 flakes=[
                                     FlakeOccurrence(name='fake_step',
                                                     failure='fake_test_name'),
                                     FlakeOccurrence(name='fake_step2',
                                                     failure='fake_test_name')
                                 ]).put()

        null_flake_run_key = ndb.Key('FlakyRun', 'fake-key')

        Flake(issue_id=1,
              is_step=False,
              name='fake_test_name',
              issue_last_updated=last_updated,
              occurrences=[
                  flake_run_key,
                  null_flake_run_key,
              ]).put()

        self.test_app.get('/migrate')

        flake_types = FlakeType.query().fetch()
        self.assertEqual(len(flake_types), 2)

        flake_type_1 = flake_types[0]
        self.assertEqual(flake_type_1.project, 'chromium')
        self.assertEqual(flake_type_1.step_name, 'fake_step')
        self.assertEqual(flake_type_1.test_name, 'fake_test_name')
        self.assertIsNone(flake_type_1.config)
        self.assertEqual(flake_type_1.last_updated, last_updated)

        flake_type_2 = flake_types[1]
        self.assertEqual(flake_type_2.project, 'chromium')
        self.assertEqual(flake_type_2.step_name, 'fake_step2')
        self.assertEqual(flake_type_2.test_name, 'fake_test_name')
        self.assertIsNone(flake_type_2.config)
        self.assertEqual(flake_type_2.last_updated, last_updated)

        issues = Issue.query().fetch()
        self.assertEqual(len(issues), 1)

        issue = issues[0]
        self.assertEqual(issue.issue_id, 1)
        self.assertEqual(issue.project, 'chromium')
        self.assertEqual(sorted(issue.flake_type_keys),
                         sorted(flake_type.key for flake_type in flake_types))
Exemple #7
0
def add_failure_to_flake(name, flaky_run):
  flake = Flake.get_by_id(name)
  if not flake:
    flake = Flake(name=name, id=name, last_time_seen=datetime.datetime.min)
    flake.put()

  flake.occurrences.append(flaky_run.key)

  flaky_run_time = flaky_run.failure_run.get().time_finished
  add_occurance_time_to_flake(flake, flaky_run_time)

  flake.put()
Exemple #8
0
  def add_failure_to_flake(name, flaky_run_key, failure_time, is_step):
    flake = Flake.get_by_id(name)
    if not flake:
      flake = Flake(name=name, id=name, last_time_seen=datetime.datetime.min,
                    is_step=is_step)
      flake.put()

    flake.occurrences.append(flaky_run_key)
    # TODO(sergiyb): This is necessary to update existing flakes. Remove in July
    # 2016 or later.
    flake.is_step = is_step
    util.add_occurrence_time_to_flake(flake, failure_time)
    flake.put()
Exemple #9
0
    def test_adds_occurrence_time_to_flake(self):
        flake = Flake(name='foo.bar', last_time_seen=datetime.datetime.min)

        now = datetime.datetime.utcnow()
        util.add_occurrence_time_to_flake(flake, now)

        self.assertEqual(flake.last_time_seen, now)
        self.assertEqual(flake.count_hour, 1)
        self.assertEqual(flake.count_day, 1)
        self.assertEqual(flake.count_week, 1)
        self.assertEqual(flake.count_month, 1)
        self.assertEqual(flake.last_hour, True)
        self.assertEqual(flake.last_day, True)
        self.assertEqual(flake.last_week, True)
        self.assertEqual(flake.last_month, True)
Exemple #10
0
    def test_does_not_modify_flake(self):
        little_time_ago = datetime.datetime.utcnow() - datetime.timedelta(
            hours=2)
        flake = Flake(name='foo.bar', last_time_seen=little_time_ago)

        long_time_ago = datetime.datetime.utcnow() - datetime.timedelta(
            days=60)
        util.add_occurrence_time_to_flake(flake, long_time_ago)

        self.assertEqual(flake.last_time_seen, little_time_ago)
        self.assertEqual(flake.count_hour, 0)
        self.assertEqual(flake.count_day, 0)
        self.assertEqual(flake.count_week, 0)
        self.assertEqual(flake.count_month, 0)
        self.assertEqual(flake.last_hour, False)
        self.assertEqual(flake.last_day, False)
        self.assertEqual(flake.last_week, False)
        self.assertEqual(flake.last_month, False)
 def _create_flake():
     tf = datetime.datetime.utcnow()
     ts = tf - datetime.timedelta(hours=1)
     p = PatchsetBuilderRuns(issue=1,
                             patchset=1,
                             master='tryserver.bar',
                             builder='baz').put()
     br_f0 = BuildRun(parent=p,
                      buildnumber=10,
                      result=2,
                      time_started=ts,
                      time_finished=tf).put()
     br_f1 = BuildRun(parent=p,
                      buildnumber=20,
                      result=2,
                      time_started=ts,
                      time_finished=tf).put()
     br_s0 = BuildRun(parent=p,
                      buildnumber=30,
                      result=0,
                      time_started=ts,
                      time_finished=tf).put()
     occ1 = FlakyRun(failure_run=br_f0,
                     success_run=br_s0,
                     failure_run_time_started=ts,
                     failure_run_time_finished=tf,
                     flakes=[
                         FlakeOccurrence(name='step1', failure='testX'),
                     ])
     occ2 = FlakyRun(failure_run=br_f1,
                     success_run=br_s0,
                     failure_run_time_started=ts,
                     failure_run_time_finished=tf,
                     flakes=[
                         FlakeOccurrence(name='step2', failure='testX'),
                         FlakeOccurrence(name='step3', failure='step3'),
                     ])
     f = Flake(name='testX',
               count_day=10,
               occurrences=[occ1.put(), occ2.put()],
               is_step=True,
               issue_id=123456)
     return f, [occ1, occ2]
  def test_create_tasks_to_update_stale_issues(self):
    Flake(name='foo1', issue_id=123).put()
    Flake(name='foo2', issue_id=234).put()
    Flake(name='foo3', issue_id=234).put()
    Flake(name='foo4', issue_id=345).put()
    Flake(name='foo5', issue_id=345).put()
    Flake(name='foo6', issue_id=234).put()

    path = '/cron/update_stale_issues'
    response = self.test_app.get(path, headers={'X-AppEngine-Cron': 'true'})
    self.assertEqual(200, response.status_int)

    tasks = self.taskqueue_stub.get_filtered_tasks(queue_names='issue-updates')
    self.assertEqual(len(tasks), 3)
    self.assertEqual(tasks[0].url, '/issues/update-if-stale/123')
    self.assertEqual(tasks[1].url, '/issues/update-if-stale/234')
    self.assertEqual(tasks[2].url, '/issues/update-if-stale/345')
 def _create_flake(self):
   tf = datetime.datetime(2016, 8, 6, 10, 20, 30)
   ts = tf - datetime.timedelta(hours=1)
   tf2 = tf - datetime.timedelta(days=5)
   ts2 = tf2 - datetime.timedelta(hours=1)
   p = PatchsetBuilderRuns(issue=123456, patchset=1, master='tryserver.test',
                           builder='test-builder').put()
   br_f0 = BuildRun(parent=p, buildnumber=0, result=2, time_started=ts2,
                    time_finished=tf2).put()
   br_f1 = BuildRun(parent=p, buildnumber=1, result=2, time_started=ts,
                    time_finished=tf).put()
   br_s1 = BuildRun(parent=p, buildnumber=2, result=0, time_started=ts,
                    time_finished=tf).put()
   br_f2 = BuildRun(parent=p, buildnumber=3, result=4, time_started=ts,
                    time_finished=tf).put()
   br_s2 = BuildRun(parent=p, buildnumber=4, result=0, time_started=ts,
                    time_finished=tf).put()
   occ_key1 = FlakyRun(failure_run=br_f0, success_run=br_s2,
                       flakes=[
                         FlakeOccurrence(name='foo (x)', failure='foo.bar'),
                         FlakeOccurrence(name='foo (x)', failure='other')],
                       failure_run_time_started=ts2,
                       failure_run_time_finished=tf2).put()
   occ_key2 = FlakyRun(failure_run=br_f1, success_run=br_s1,
                       flakes=[
                         FlakeOccurrence(name='bar (y)', failure='foo.bar')],
                       failure_run_time_started=ts,
                       failure_run_time_finished=tf).put()
   occ_key3 = FlakyRun(failure_run=br_f2, success_run=br_s2,
                       flakes=[
                         FlakeOccurrence(
                           name='foo (x)', failure='foo.bar', issue_id=100),
                         FlakeOccurrence(
                           name='bar (y)', failure='foo.bar', issue_id=200)],
                       failure_run_time_started=ts,
                       failure_run_time_finished=tf).put()
   return Flake(name='foo.bar', count_day=10, is_step=False,
                occurrences=[occ_key1, occ_key2, occ_key3])
 def put_flake(self, attr, count):
   flake = Flake(name='foo')
   setattr(flake, 'last_%s' % attr, True)
   setattr(flake, 'count_%s' % attr, count)
   flake.put()
Exemple #15
0
 def test_redirects_to_all_flake_occurrences(self):
     key = Flake(name='foo').put()
     response = self.test_app.get('/search?q=foo', status=302)
     self.assertIn('location', response.headers)
     self.assertTrue(response.headers['location'].endswith(
         '/all_flake_occurrences?key=%s' % key.urlsafe()))
Exemple #16
0
 def test_no_occurrences(self):
     flake_key = Flake(name='foo.bar').put()
     self.test_app.get('/all_flake_occurrences?key=%s' %
                       flake_key.urlsafe())
Exemple #17
0
    def _create_flakes(ts, tf, ts2, tf2):
        p = PatchsetBuilderRuns(issue=123456,
                                patchset=1,
                                master='tryserver.test',
                                builder='test-builder').put()
        br_f0 = BuildRun(parent=p,
                         buildnumber=0,
                         result=2,
                         time_started=ts2,
                         time_finished=tf2).put()
        br_f1 = BuildRun(parent=p,
                         buildnumber=1,
                         result=2,
                         time_started=ts,
                         time_finished=tf).put()
        br_s1 = BuildRun(parent=p,
                         buildnumber=2,
                         result=0,
                         time_started=ts,
                         time_finished=tf).put()
        br_f2 = BuildRun(parent=p,
                         buildnumber=3,
                         result=4,
                         time_started=ts,
                         time_finished=tf2).put()
        br_s2 = BuildRun(parent=p,
                         buildnumber=4,
                         result=0,
                         time_started=ts,
                         time_finished=tf2).put()
        occ_key1 = FlakyRun(failure_run=br_f0,
                            success_run=br_s2,
                            failure_run_time_started=ts2,
                            failure_run_time_finished=tf2).put()
        occ_key2 = FlakyRun(failure_run=br_f1,
                            success_run=br_s1,
                            failure_run_time_started=ts,
                            failure_run_time_finished=tf).put()
        occ_key3 = FlakyRun(failure_run=br_f2,
                            success_run=br_s2,
                            failure_run_time_started=ts,
                            failure_run_time_finished=tf).put()

        Flake(name='foo',
              last_hour=True,
              last_day=True,
              last_week=True,
              last_month=True).put()
        Flake(name='bar',
              last_hour=True,
              last_day=True,
              last_week=True,
              last_month=True,
              occurrences=[occ_key1, occ_key2]).put()
        Flake(name='baz',
              last_hour=True,
              last_day=True,
              last_week=True,
              last_month=True,
              occurrences=[occ_key3]).put()
        Flake(name='zee',
              last_hour=False,
              last_day=False,
              last_week=True,
              last_month=False).put()