aboutsummaryrefslogtreecommitdiff
path: root/cros_utils/buildbot_utils_unittest.py
diff options
context:
space:
mode:
Diffstat (limited to 'cros_utils/buildbot_utils_unittest.py')
-rwxr-xr-xcros_utils/buildbot_utils_unittest.py384
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()