blob: a4d44329c26bfb31d60820e5cc67e3a572461f0c [file] [log] [blame] [edit]
"""Tests for get_latest_build."""
import unittest
from build import get_latest_build
from gunittest import gtestcase
from unittest import mock
class GetLatestBuildTest(gtestcase.GTestCase):
def setUp(self):
self._orig_get_builds = get_latest_build.GetBuildsListByFlavor
self._orig_execute = get_latest_build._Execute
def tearDown(self):
get_latest_build.GetBuildsListByFlavor = self._orig_get_builds
get_latest_build._Execute = self._orig_execute
def testToBuildNumber(self):
"""Ensures build numbers can be parsed."""
self.assertEqual(
get_latest_build.ToBuildNumber(
'gs://gtv-te/internal/gtv-3.0/cosmo-tests/32908/'
'cosmo-tests-32908.zip'),
'32908')
self.assertEqual(
get_latest_build.ToBuildNumber(
'gs://gtv-te/internal/gtv-3.0/cosmo-eng/1234/'
'cosmo-eng-1234.zip'),
'1234')
def testGetLatestBuild(self):
"""Ensures the latest build is returned."""
fmt = ('gs://gtv-eureka/internal/unfork_m37/anchovy-{1}/{0}'
'/anchovy-ota-{0}.zip')
get_latest_build.FLAGS = mock.Mock(test_identifier='',
use_unit_test_hint=False,
claim_unit_test_hint=False)
mock_build_output = {
'eng': [fmt.format(i, 'eng') for i in range(18307, 183012, 2)],
'user': [fmt.format(i, 'user') for i in [18304, 18305, 18307, 18309]]
}
get_latest_build.GetBuildsListByFlavor = (
lambda *args: mock_build_output.get(args[3]))
get_latest_build._Execute = mock.Mock(
side_effect=get_latest_build.GOOD_BUILD_MARKER)
get_latest_build.GetBuildNumberWithMarker = lambda x, *_, **__: str(max(x))
self.assertEqual(
get_latest_build.GetLatestBuildNumber('', 'unfork_m37', 'anchovy'),
'18309')
expected_build = fmt.format(18309, 'user')
get_latest_build._Execute = lambda x: expected_build
self.assertEqual(
get_latest_build.GetBuildPath(
'', 'unfork_m37', 'anchovy', '18309', 'ota', 'user', ''),
expected_build)
def testExecute(self):
"""Ensures execute works."""
self.assertEqual('foo bar\n', get_latest_build._Execute('echo foo bar'))
def testGetListCmd(self):
"""Ensures the correct list command is built."""
kwargs = {
'product': 'anchovy',
'build_output_type': 'w',
'board_type': 'x',
'branch': 'y',
'flavor': 'z'
}
self.assertEqual(
get_latest_build.GetListBuildsCommand(**kwargs),
('gsutil ls gs://gtv-eureka/internal/y/anchovy-z/[0-9]*/'
'anchovy-w-x-[0-9]*.zip'))
kwargs['build_number'] = 'A'
self.assertEqual(
get_latest_build.GetListBuildsCommand(**kwargs),
'gsutil ls gs://gtv-eureka/internal/y/anchovy-z/A/anchovy-w-x-A.zip')
kwargs['build_output_type'] = 'fct'
self.assertEqual(
get_latest_build.GetListBuildsCommand(**kwargs),
'gsutil ls gs://gtv-eureka/internal/y/anchovy-z/A/factory/'
'anchovy-fct-x-A.zip')
class GetBuildNumberWithMarkerTest(gtestcase.GTestCase):
"""Tests for the GetBuildNumberWithMarker() function."""
def _TestBuildNumberWithMarker(
self, build_numbers, expected_build, build_selection_policy,
build_marked_mock=None, build_tested_mock=None):
"""Helper to test GetBuildNumberWithMarker()."""
if build_marked_mock:
get_latest_build._IsBuildMarked = build_marked_mock
if build_tested_mock:
get_latest_build._IsBuildTested = build_tested_mock
latest_build = get_latest_build.GetBuildNumberWithMarker(
build_numbers, 'MOCK_COMMAND_PATTERN',
has_been_tested_cmd='MOCK_TESTED_COMMAND',
build_selection_policy=build_selection_policy)
self.assertEqual(expected_build, latest_build)
def testBacktrackThenLatestPolicy(self):
"""Tests the first untested build is returned."""
self._TestBuildNumberWithMarker(
[3, 2, 1], '1', get_latest_build.BACKTRACK_THEN_LATEST,
lambda *_: True, mock.Mock(side_effect=[True, True, False]))
self._TestBuildNumberWithMarker(
[3, 2, 1], '3', get_latest_build.BACKTRACK_THEN_LATEST,
lambda *_: True, lambda *_: True)
self._TestBuildNumberWithMarker(
[3, 2, 1], '0', get_latest_build.BACKTRACK_THEN_LATEST,
lambda *_: False)
def testBacktrackOnlyPolicy(self):
"""Tests that no build is returned when the flag is not specified."""
self._TestBuildNumberWithMarker(
[3, 2, 1], '0', get_latest_build.ONLY_BACKTRACK,
lambda *_: True, lambda *_: True)
self._TestBuildNumberWithMarker(
[1, 2, 3], '1', get_latest_build.ONLY_BACKTRACK,
lambda *_: True, mock.Mock(side_effect=[True, True, False]))
self._TestBuildNumberWithMarker(
[3, 2, 1], '0', get_latest_build.BACKTRACK_THEN_LATEST,
lambda *_: False)
def testAlwaysLatestPolicy(self):
"""Tests the always return latest policy."""
self._TestBuildNumberWithMarker(
[1, 2, 3], '3', get_latest_build.ALWAYS_USE_LATEST,
lambda *_: True, lambda *_: False)
self._TestBuildNumberWithMarker(
[1, 2, 3], '3', get_latest_build.ALWAYS_USE_LATEST,
lambda *_: True, lambda *_: True)
self._TestBuildNumberWithMarker(
[3, 2, 1], '0', get_latest_build.ALWAYS_USE_LATEST,
lambda *_: False)
if __name__ == '__main__':
unittest.main()