#!/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()
|