Example #1
0
 def test_duplicate_step_names(self):
     steps = [
         step_pb2.Step(name='foo', status=common_pb2.SCHEDULED),
         step_pb2.Step(name='bar', status=common_pb2.SCHEDULED),
         step_pb2.Step(name='foo', status=common_pb2.SCHEDULED),
     ]
     self.assert_invalid(steps, 'duplicate: u\'foo\'')
Example #2
0
 def test_duplicate_log_names(self):
   steps = [
       step_pb2.Step(
           name='foo',
           status=common_pb2.SCHEDULED,
           logs=[
               common_pb2.Log(
                   name='tree',
                   url='logdog://0',
                   view_url='logdog.example.com/0'
               ),
               common_pb2.Log(
                   name='branch',
                   url='logdog://1',
                   view_url='logdog.example.com/1'
               ),
               common_pb2.Log(
                   name='tree',
                   url='logdog://2',
                   view_url='logdog.example.com/2'
               )
           ],
       ),
       step_pb2.Step(name='bar', status=common_pb2.SCHEDULED),
   ]
   self.assert_invalid(steps, 'duplicate: u\'tree\'')
Example #3
0
 def test_unspecified_status(self):
     steps = [
         step_pb2.Step(name='foo', status=common_pb2.SCHEDULED),
         step_pb2.Step(name='bar'),
     ]
     self.assert_invalid(
         steps,
         'must have buildbucket.v2.Status that is not STATUS_UNSPECIFIED')
Example #4
0
    def test_end_before_parent_start(self):
        steps = [
            step_pb2.Step(name='a', status=common_pb2.INFRA_FAILURE),
            step_pb2.Step(name='a|b', status=common_pb2.INFRA_FAILURE),
        ]
        steps[0].start_time.FromDatetime(datetime.datetime(2019, 1, 1))
        steps[0].end_time.FromDatetime(datetime.datetime(2019, 2, 1))
        steps[1].end_time.FromDatetime(datetime.datetime(2018, 2, 1))

        self.assert_invalid(
            steps, r'end_time: cannot precede parent u\'a\'\'s start time')
Example #5
0
    def test_steps(self):
        build = test_util.build(id=1)
        steps = [
            step_pb2.Step(name='a', status=common_pb2.SUCCESS),
            step_pb2.Step(name='b', status=common_pb2.STARTED),
        ]
        build_steps = model.BuildSteps.make(build_pb2.Build(id=1, steps=steps))
        build_steps.put()

        actual = self.to_proto(build, load_steps=True)
        self.assertEqual(list(actual.steps), steps)
Example #6
0
  def test_missing_steps_deep(self):
    steps = [
        step_pb2.Step(name='a', status=common_pb2.STARTED),
        step_pb2.Step(name='a|b', status=common_pb2.STARTED),
        step_pb2.Step(name='a|b|c', status=common_pb2.STARTED),
        step_pb2.Step(name='a|b|c|d|e', status=common_pb2.STARTED),
    ]
    for i in range(4):
      steps[i].start_time.FromDatetime(datetime.datetime(2018, 1, 1))

    self.assert_invalid(steps, r'parent to u\'a\|b\|c\|d\|e\' must precede')
Example #7
0
    def test_end_after_parent_end(self):
        steps = [
            step_pb2.Step(name='a', status=common_pb2.FAILURE),
            step_pb2.Step(name='a|b', status=common_pb2.FAILURE),
        ]
        steps[0].start_time.FromDatetime(datetime.datetime(2018, 1, 1))
        steps[0].end_time.FromDatetime(datetime.datetime(2019, 1, 1))
        steps[1].start_time.FromDatetime(datetime.datetime(2018, 2, 1))
        steps[1].end_time.FromDatetime(datetime.datetime(2019, 2, 1))

        self.assert_invalid(
            steps, r'end_time: cannot follow parent u\'a\'\'s end time')
Example #8
0
 def test_nonexistent_status(self):
     steps = [
         step_pb2.Step(name='foo', status=3),
     ]
     self.assert_invalid(
         steps,
         'must have buildbucket.v2.Status that is not STATUS_UNSPECIFIED')
Example #9
0
 def test_terminal_status_without_end_time(self, status):
     steps = [
         step_pb2.Step(name='foo', status=status),
     ]
     steps[0].start_time.FromDatetime(datetime.datetime(2018, 1, 1))
     self.assert_invalid(
         steps, 'must have both or neither end_time and a terminal status')
Example #10
0
    def test_parent_child_times_ok(self, child, parent, child_started,
                                   child_ended, parent_started, parent_ended):
        steps = [
            step_pb2.Step(name='a', status=parent),
            step_pb2.Step(name='a|b', status=child)
        ]
        if parent_started:
            steps[0].start_time.FromDatetime(datetime.datetime(2018, 1, 1))
        if parent_ended:
            steps[0].end_time.FromDatetime(datetime.datetime(2019, 2, 1))
        if child_started:
            steps[1].start_time.FromDatetime(datetime.datetime(2018, 2, 1))
        if child_ended:
            steps[1].end_time.FromDatetime(datetime.datetime(2019, 1, 1))

        self.assert_valid(steps)
Example #11
0
 def test_started_status_without_start_time(self, status):
   steps = [
       step_pb2.Step(name='foo', status=status),
   ]
   self.assert_invalid(
       steps, 'start_time: required by status %s' % status_name(status)
   )
Example #12
0
 def test_step_start_after_end(self, status):
     steps = [
         step_pb2.Step(name='foo', status=status),
     ]
     steps[0].start_time.FromDatetime(datetime.datetime(2018, 1, 1))
     steps[0].end_time.FromDatetime(datetime.datetime(2017, 1, 1))
     self.assert_invalid(steps, 'start_time after end_time')
Example #13
0
    def test_nonterminal_with_terminal_parent(self, child, parent,
                                              needs_start):
        steps = [
            step_pb2.Step(name='a', status=parent),
            step_pb2.Step(name='a|b', status=common_pb2.SUCCESS),
            step_pb2.Step(name='a|c', status=child),
        ]
        for i in range(3):
            if i < 2 or needs_start:
                steps[i].start_time.FromDatetime(datetime.datetime(2018, 1, 1))
            if i < 2:
                steps[i].end_time.FromDatetime(datetime.datetime(2019, 1, 1))

        self.assert_invalid(
            steps,
            r'non-terminal \(%s\) u\'a\|c\' must have STARTED parent u\'a\' \(%s\)'
            % (status_name(child), status_name(parent)))
Example #14
0
 def test_nonterminal_status_with_end_time(self):
     steps = [
         step_pb2.Step(name='foo', status=common_pb2.STARTED),
     ]
     steps[0].start_time.FromDatetime(datetime.datetime(2018, 1, 1))
     steps[0].end_time.FromDatetime(datetime.datetime(2019, 1, 1))
     self.assert_invalid(
         steps, 'must have both or neither end_time and a terminal status')
Example #15
0
 def test_steps_too_big(self):
     msg = rpc_pb2.UpdateBuildRequest(
         build=build_pb2.Build(id=1,
                               steps=[
                                   step_pb2.Step(
                                       name='x' * 1000,
                                       status=common_pb2.SCHEDULED),
                               ]),
         update_mask=field_mask_pb2.FieldMask(paths=['build.steps']),
     )
     self.assert_invalid(msg, r'build\.steps: too big to accept')
Example #16
0
    def test_consistent_statuses(self, child, parent, needs_end):
        steps = [
            step_pb2.Step(name='a', status=common_pb2.STARTED),
            step_pb2.Step(name='a|b', status=common_pb2.STARTED),
            step_pb2.Step(name='a|b|c', status=common_pb2.STARTED),
            step_pb2.Step(name='a|b|c|d', status=common_pb2.STARTED),
            step_pb2.Step(name='a|b|e', status=parent),
            step_pb2.Step(name='a|b|e|f', status=child),
            step_pb2.Step(name='a|b|e|f|g', status=common_pb2.SUCCESS),
            step_pb2.Step(name='a|b|e|f|h', status=common_pb2.SUCCESS),
        ]
        for i in range(8):
            steps[i].start_time.FromDatetime(datetime.datetime(2018, 1, 1))
            if i > 4 or (i == 4 and needs_end):
                steps[i].end_time.FromDatetime(datetime.datetime(2019, 1, 1))

        self.assert_valid(steps)
Example #17
0
    def test_parent_status_better_than_child(self, child, parent):
        steps = [
            step_pb2.Step(name='a', status=common_pb2.CANCELED),
            step_pb2.Step(name='a|b', status=common_pb2.CANCELED),
            step_pb2.Step(name='a|b|c', status=common_pb2.SUCCESS),
            step_pb2.Step(name='a|b|c|d', status=common_pb2.SUCCESS),
            step_pb2.Step(name='a|b|e', status=parent),
            step_pb2.Step(name='a|b|e|f', status=child),
            step_pb2.Step(name='a|b|e|f|g', status=common_pb2.SUCCESS),
            step_pb2.Step(name='a|b|e|f|h', status=common_pb2.SUCCESS),
        ]
        for i in range(8):
            steps[i].start_time.FromDatetime(datetime.datetime(2018, 1, 1))
            steps[i].end_time.FromDatetime(datetime.datetime(2019, 1, 1))

        self.assert_invalid(
            steps,
            r'u\'a\|b\|e\|f\'\'s status %s is worse than parent u\'a\|b\|e\'\'s '
            'status %s' % (status_name(child), status_name(parent)))
Example #18
0
 def test_start_time_with_unstarted_status(self):
     steps = [
         step_pb2.Step(name='foo', status=common_pb2.SCHEDULED),
     ]
     steps[0].start_time.FromDatetime(datetime.datetime(2018, 1, 1))
     self.assert_invalid(steps, 'invalid for status SCHEDULED')
Example #19
0
 def test_unstarted_parent(self):
     steps = [
         step_pb2.Step(name='a', status=common_pb2.SCHEDULED),
         step_pb2.Step(name='a|b', status=common_pb2.SCHEDULED),
     ]
     self.assert_invalid(steps, 'parent u\'a\' must be at least STARTED')
Example #20
0
 def test_missing_steps_shallow(self):
     steps = [
         step_pb2.Step(name='a|b', status=common_pb2.SCHEDULED),
     ]
     self.assert_invalid(steps, r'parent to u\'a\|b\' must precede')