diff options
Diffstat (limited to 'cros_utils/buildbot_utils_unittest.py')
-rwxr-xr-x | cros_utils/buildbot_utils_unittest.py | 384 |
1 files changed, 224 insertions, 160 deletions
diff --git a/cros_utils/buildbot_utils_unittest.py b/cros_utils/buildbot_utils_unittest.py index c615c95f..2c9585b5 100755 --- a/cros_utils/buildbot_utils_unittest.py +++ b/cros_utils/buildbot_utils_unittest.py @@ -1,16 +1,14 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# Copyright 2018 The Chromium OS Authors. All rights reserved. +# Copyright 2018 The ChromiumOS Authors # 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 import time - import unittest from unittest.mock import patch @@ -19,160 +17,226 @@ from cros_utils import command_executer class TrybotTest(unittest.TestCase): - """Test for CommandExecuter class.""" - - tryjob_out = ( - '[{"buildbucket_id": "8952721143823688176", "build_config": ' - '"cave-llvm-toolchain-tryjob", "url": ' - # pylint: disable=line-too-long - '"http://cros-goldeneye/chromeos/healthmonitoring/buildDetails?buildbucketId=8952721143823688176"}]' - ) - - GSUTILS_LS = '\n'.join([ - 'gs://chromeos-image-archive/{0}/R78-12421.0.0/', - 'gs://chromeos-image-archive/{0}/R78-12422.0.0/', - 'gs://chromeos-image-archive/{0}/R78-12423.0.0/', - ]) - - GSUTILS_LS_RECIPE = '\n'.join([ - 'gs://chromeos-image-archive/{0}/R83-12995.0.0-30031-8885075268947031/', - 'gs://chromeos-image-archive/{0}/R83-13003.0.0-30196-8884755532184725/', - 'gs://chromeos-image-archive/{0}/R83-13003.0.0-30218-8884712858556419/', - ]) - - 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', [], asynchronous=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) - - def testGetLatestImageValid(self): - with patch.object(command_executer.CommandExecuter, - 'ChrootRunCommandWOutput') as mocked_run: - with patch.object(buildbot_utils, 'DoesImageExist') as mocked_imageexist: - IMAGE_DIR = 'lulu-release' - mocked_run.return_value = (0, self.GSUTILS_LS.format(IMAGE_DIR), '') - mocked_imageexist.return_value = True - image = buildbot_utils.GetLatestImage('', IMAGE_DIR) - self.assertEqual(image, '{0}/R78-12423.0.0'.format(IMAGE_DIR)) - - def testGetLatestImageInvalid(self): - with patch.object(command_executer.CommandExecuter, - 'ChrootRunCommandWOutput') as mocked_run: - with patch.object(buildbot_utils, 'DoesImageExist') as mocked_imageexist: - IMAGE_DIR = 'kefka-release' - mocked_run.return_value = (0, self.GSUTILS_LS.format(IMAGE_DIR), '') - mocked_imageexist.return_value = False - image = buildbot_utils.GetLatestImage('', IMAGE_DIR) - self.assertIsNone(image) - - def testGetLatestRecipeImageValid(self): - with patch.object(command_executer.CommandExecuter, - 'ChrootRunCommandWOutput') as mocked_run: - with patch.object(buildbot_utils, 'DoesImageExist') as mocked_imageexist: - IMAGE_DIR = 'lulu-llvm-next-nightly' - mocked_run.return_value = (0, self.GSUTILS_LS_RECIPE.format(IMAGE_DIR), - '') - mocked_imageexist.return_value = True - image = buildbot_utils.GetLatestRecipeImage('', IMAGE_DIR) - self.assertEqual( - image, '{0}/R83-13003.0.0-30218-8884712858556419'.format(IMAGE_DIR)) - - def testGetLatestRecipeImageInvalid(self): - with patch.object(command_executer.CommandExecuter, - 'ChrootRunCommandWOutput') as mocked_run: - with patch.object(buildbot_utils, 'DoesImageExist') as mocked_imageexist: - IMAGE_DIR = 'kefka-llvm-next-nightly' - mocked_run.return_value = (0, self.GSUTILS_LS_RECIPE.format(IMAGE_DIR), - '') - mocked_imageexist.return_value = False - image = buildbot_utils.GetLatestRecipeImage('', IMAGE_DIR) - self.assertIsNone(image) - - def testGetLatestRecipeImageTwodays(self): - with patch.object(command_executer.CommandExecuter, - 'ChrootRunCommandWOutput') as mocked_run: - with patch.object(buildbot_utils, 'DoesImageExist') as mocked_imageexist: - IMAGE_DIR = 'lulu-llvm-next-nightly' - mocked_run.return_value = (0, self.GSUTILS_LS_RECIPE.format(IMAGE_DIR), - '') - mocked_imageexist.side_effect = [False, False, True] - image = buildbot_utils.GetLatestRecipeImage('', IMAGE_DIR) - self.assertIsNone(image) - mocked_imageexist.side_effect = [False, True, True] - image = buildbot_utils.GetLatestRecipeImage('', IMAGE_DIR) - self.assertEqual( - image, '{0}/R83-13003.0.0-30196-8884755532184725'.format(IMAGE_DIR)) - - -if __name__ == '__main__': - unittest.main() + """Test for CommandExecuter class.""" + + tryjob_out = ( + '[{"buildbucket_id": "8952721143823688176", "build_config": ' + '"cave-llvm-toolchain-tryjob", "url": ' + # pylint: disable=line-too-long + '"http://cros-goldeneye/chromeos/healthmonitoring/buildDetails?buildbucketId=8952721143823688176"}]' + ) + + GSUTILS_LS = "\n".join( + [ + "gs://chromeos-image-archive/{0}/R78-12421.0.0/", + "gs://chromeos-image-archive/{0}/R78-12422.0.0/", + "gs://chromeos-image-archive/{0}/R78-12423.0.0/", + ] + ) + + GSUTILS_LS_RECIPE = "\n".join( + [ + "gs://chromeos-image-archive/{0}/R83-12995.0.0-30031-8885075268947031/", + "gs://chromeos-image-archive/{0}/R83-13003.0.0-30196-8884755532184725/", + "gs://chromeos-image-archive/{0}/R83-13003.0.0-30218-8884712858556419/", + ] + ) + + 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", [], asynchronous=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) + + def testGetLatestImageValid(self): + with patch.object( + command_executer.CommandExecuter, "ChrootRunCommandWOutput" + ) as mocked_run: + with patch.object( + buildbot_utils, "DoesImageExist" + ) as mocked_imageexist: + IMAGE_DIR = "lulu-release" + mocked_run.return_value = ( + 0, + self.GSUTILS_LS.format(IMAGE_DIR), + "", + ) + mocked_imageexist.return_value = True + image = buildbot_utils.GetLatestImage("", IMAGE_DIR) + self.assertEqual(image, "{0}/R78-12423.0.0".format(IMAGE_DIR)) + + def testGetLatestImageInvalid(self): + with patch.object( + command_executer.CommandExecuter, "ChrootRunCommandWOutput" + ) as mocked_run: + with patch.object( + buildbot_utils, "DoesImageExist" + ) as mocked_imageexist: + IMAGE_DIR = "kefka-release" + mocked_run.return_value = ( + 0, + self.GSUTILS_LS.format(IMAGE_DIR), + "", + ) + mocked_imageexist.return_value = False + image = buildbot_utils.GetLatestImage("", IMAGE_DIR) + self.assertIsNone(image) + + def testGetLatestRecipeImageValid(self): + with patch.object( + command_executer.CommandExecuter, "ChrootRunCommandWOutput" + ) as mocked_run: + with patch.object( + buildbot_utils, "DoesImageExist" + ) as mocked_imageexist: + IMAGE_DIR = "lulu-llvm-next-nightly" + mocked_run.return_value = ( + 0, + self.GSUTILS_LS_RECIPE.format(IMAGE_DIR), + "", + ) + mocked_imageexist.return_value = True + image = buildbot_utils.GetLatestRecipeImage("", IMAGE_DIR) + self.assertEqual( + image, + "{0}/R83-13003.0.0-30218-8884712858556419".format( + IMAGE_DIR + ), + ) + + def testGetLatestRecipeImageInvalid(self): + with patch.object( + command_executer.CommandExecuter, "ChrootRunCommandWOutput" + ) as mocked_run: + with patch.object( + buildbot_utils, "DoesImageExist" + ) as mocked_imageexist: + IMAGE_DIR = "kefka-llvm-next-nightly" + mocked_run.return_value = ( + 0, + self.GSUTILS_LS_RECIPE.format(IMAGE_DIR), + "", + ) + mocked_imageexist.return_value = False + image = buildbot_utils.GetLatestRecipeImage("", IMAGE_DIR) + self.assertIsNone(image) + + def testGetLatestRecipeImageTwodays(self): + with patch.object( + command_executer.CommandExecuter, "ChrootRunCommandWOutput" + ) as mocked_run: + with patch.object( + buildbot_utils, "DoesImageExist" + ) as mocked_imageexist: + IMAGE_DIR = "lulu-llvm-next-nightly" + mocked_run.return_value = ( + 0, + self.GSUTILS_LS_RECIPE.format(IMAGE_DIR), + "", + ) + mocked_imageexist.side_effect = [False, False, True] + image = buildbot_utils.GetLatestRecipeImage("", IMAGE_DIR) + self.assertIsNone(image) + mocked_imageexist.side_effect = [False, True, True] + image = buildbot_utils.GetLatestRecipeImage("", IMAGE_DIR) + self.assertEqual( + image, + "{0}/R83-13003.0.0-30196-8884755532184725".format( + IMAGE_DIR + ), + ) + + +if __name__ == "__main__": + unittest.main() |