aboutsummaryrefslogtreecommitdiff
path: root/cros_utils/buildbot_utils_unittest.py
blob: c57b2d328983543f86434fe7c63ac9083d3882f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#!/usr/bin/env python2

# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unittest for buildbot_utils.py."""

from __future__ import print_function

from mock import patch

import time
import unittest

from cros_utils import buildbot_utils
from cros_utils import command_executer


class TrybotTest(unittest.TestCase):
  """Test for CommandExecuter class."""

  old_tryjob_out = (
      'Verifying patches...\n'
      'Submitting tryjob...\n'
      'Successfully sent PUT request to [buildbucket_bucket:master.chromiumos.t'
      'ryserver] with [config:success-build] [buildbucket_id:895272114382368817'
      '6].\n'
      'Tryjob submitted!\n'
      'To view your tryjobs, visit:\n'
      '  http://cros-goldeneye/chromeos/healthmonitoring/buildDetails?buildbuck'
      'etId=8952721143823688176\n'
      '  https://uberchromegw.corp.google.com/i/chromiumos.tryserver/waterfall?'
      'committer=laszio@chromium.org&builder=etc\n')
  tryjob_out = (
      '[{"buildbucket_id": "8952721143823688176", "build_config": '
      '"cave-llvm-toolchain-tryjob", "url": '
      '"http://cros-goldeneye/chromeos/healthmonitoring/buildDetails?buildbucketId=8952721143823688176"}]'
  )

  buildresult_out = (
      '{"8952721143823688176": {"status": "pass", "artifacts_url":'
      '"gs://chromeos-image-archive/trybot-elm-release-tryjob/R67-10468.0.0-'
      'b20789"}}')

  buildbucket_id = '8952721143823688176'
  counter_1 = 10

  def testGetTrybotImage(self):
    with patch.object(buildbot_utils, 'SubmitTryjob') as mock_submit:
      with patch.object(buildbot_utils, 'PeekTrybotImage') as mock_peek:
        with patch.object(time, 'sleep', return_value=None):

          def peek(_chromeos_root, _buildbucket_id):
            self.counter_1 -= 1
            if self.counter_1 >= 0:
              return ('running', '')
            return ('pass',
                    'gs://chromeos-image-archive/trybot-elm-release-tryjob/'
                    'R67-10468.0.0-b20789')

          mock_peek.side_effect = peek
          mock_submit.return_value = self.buildbucket_id

          # sync
          buildbucket_id, image = buildbot_utils.GetTrybotImage(
              '/tmp', 'falco-release-tryjob', [])
          self.assertEqual(buildbucket_id, self.buildbucket_id)
          self.assertEqual('trybot-elm-release-tryjob/'
                           'R67-10468.0.0-b20789', image)

          # async
          buildbucket_id, image = buildbot_utils.GetTrybotImage(
              '/tmp', 'falco-release-tryjob', [], async=True)
          self.assertEqual(buildbucket_id, self.buildbucket_id)
          self.assertEqual(' ', image)

  def testSubmitTryjob(self):
    with patch.object(command_executer.CommandExecuter,
                      'RunCommandWOutput') as mocked_run:
      mocked_run.return_value = (0, self.tryjob_out, '')
      buildbucket_id = buildbot_utils.SubmitTryjob('/', 'falco-release-tryjob',
                                                   [], [])
      self.assertEqual(buildbucket_id, self.buildbucket_id)

  def testPeekTrybotImage(self):
    with patch.object(command_executer.CommandExecuter,
                      'RunCommandWOutput') as mocked_run:
      # pass
      mocked_run.return_value = (0, self.buildresult_out, '')
      status, image = buildbot_utils.PeekTrybotImage('/', self.buildbucket_id)
      self.assertEqual('pass', status)
      self.assertEqual(
          'gs://chromeos-image-archive/trybot-elm-release-tryjob/'
          'R67-10468.0.0-b20789', image)

      # running
      mocked_run.return_value = (1, '', '')
      status, image = buildbot_utils.PeekTrybotImage('/', self.buildbucket_id)
      self.assertEqual('running', status)
      self.assertEqual(None, image)

      # fail
      buildresult_fail = self.buildresult_out.replace('\"pass\"', '\"fail\"')
      mocked_run.return_value = (0, buildresult_fail, '')
      status, image = buildbot_utils.PeekTrybotImage('/', self.buildbucket_id)
      self.assertEqual('fail', status)
      self.assertEqual(
          'gs://chromeos-image-archive/trybot-elm-release-tryjob/'
          'R67-10468.0.0-b20789', image)

  def testParseTryjobBuildbucketId(self):
    buildbucket_id = buildbot_utils.ParseTryjobBuildbucketId(self.tryjob_out)
    self.assertEqual(buildbucket_id, self.buildbucket_id)


if __name__ == '__main__':
  unittest.main()