| # Copyright 2019 The ChromiumOS Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """uprev_lib tests.""" |
| |
| import os |
| import pathlib |
| from unittest import mock |
| |
| import pytest |
| |
| import chromite as cr |
| from chromite.lib import build_target_lib |
| from chromite.lib import chroot_lib |
| from chromite.lib import constants |
| from chromite.lib import cros_test_lib |
| from chromite.lib import osutils |
| from chromite.lib import parallel |
| from chromite.lib import uprev_lib |
| from chromite.lib.parser import package_info |
| |
| |
| class ChromeVersionTest(cros_test_lib.TestCase): |
| """Tests for best_version and get_version_from_refs.""" |
| |
| def setUp(self) -> None: |
| # The tag ref template. |
| ref_tpl = "refs/tags/%s" |
| |
| self.best = "4.3.2.1" |
| self.versions = ["1.2.3.4", self.best, "4.2.2.1", "4.3.1.4"] |
| self.best_ref = uprev_lib.GitRef("/path", ref_tpl % self.best, "abc123") |
| self.refs = [ |
| uprev_lib.GitRef("/path", ref_tpl % v, "abc123") |
| for v in self.versions |
| ] |
| |
| self.unstable = "9999" |
| self.unstable_versions = self.versions + [self.unstable] |
| |
| def test_single_version(self) -> None: |
| """Test a single version.""" |
| self.assertEqual(self.best, uprev_lib.best_version([self.best])) |
| |
| def test_multiple_versions(self) -> None: |
| """Test a single version.""" |
| self.assertEqual(self.best, uprev_lib.best_version(self.versions)) |
| |
| def test_no_versions_fail(self) -> None: |
| """Test no versions given.""" |
| with self.assertRaises(uprev_lib.NoVersionsError): |
| uprev_lib.best_version([]) |
| |
| def test_unstable_only(self) -> None: |
| """Test the unstable version.""" |
| self.assertEqual(self.unstable, uprev_lib.best_version([self.unstable])) |
| |
| def test_unstable_multiple(self) -> None: |
| """Test unstable alongside multiple other versions.""" |
| self.assertEqual( |
| self.unstable, uprev_lib.best_version(self.unstable_versions) |
| ) |
| |
| def test_single_ref(self) -> None: |
| """Test a single ref.""" |
| self.assertEqual( |
| self.best, uprev_lib.get_version_from_refs([self.best_ref]) |
| ) |
| |
| def test_multiple_refs(self) -> None: |
| """Test multiple refs.""" |
| self.assertEqual(self.best, uprev_lib.get_version_from_refs(self.refs)) |
| |
| def test_no_refs_fail(self) -> None: |
| """Test no versions given.""" |
| with self.assertRaises(uprev_lib.NoRefsError): |
| uprev_lib.get_version_from_refs([]) |
| |
| |
| class ChromeEbuildVersionTest(cros_test_lib.MockTempDirTestCase): |
| """Tests for best_chrome_ebuild and get_stable_chrome_version.""" |
| |
| def setUp(self) -> None: |
| # Setup some ebuilds to test against. |
| pkg_dir = os.path.join(self.tempdir, constants.CHROME_CP) |
| osutils.SafeMakedirs(pkg_dir) |
| ebuild = os.path.join(pkg_dir, "chromeos-chrome-%s_rc-r%s.ebuild") |
| unstable_ebuild = os.path.join(pkg_dir, "chromeos-chrome-9999.ebuild") |
| |
| best_version = "4.3.2.1" |
| rest_versions = ["1.2.3.4", "4.3.2.0"] |
| |
| best_revs = [2, 12] |
| rest_revs = best_revs + [21] |
| |
| # Other versions to set up to compare against. |
| ebuild_paths = [ebuild % (best_version, rev) for rev in best_revs] |
| ebuild_paths += [ |
| ebuild % (ver, rev) for ver in rest_versions for rev in rest_revs |
| ] |
| best_ebuild_path = ebuild % (best_version, max(best_revs)) |
| |
| # Write stable ebuild data. |
| stable_data = "KEYWORDS=*" |
| osutils.WriteFile(best_ebuild_path, stable_data) |
| for path in ebuild_paths: |
| osutils.WriteFile(path, stable_data) |
| # Write the unstable ebuild. |
| unstable_data = "KEYWORDS=~*" |
| osutils.WriteFile(unstable_ebuild, unstable_data) |
| |
| # Create the ebuilds. |
| self.ebuilds = [uprev_lib.ChromeEBuild(path) for path in ebuild_paths] |
| self.best_ebuild = uprev_lib.ChromeEBuild(best_ebuild_path) |
| |
| def test_no_ebuilds(self) -> None: |
| """Test error on no ebuilds provided.""" |
| with self.assertRaises(uprev_lib.NoEbuildsError): |
| uprev_lib.best_chrome_ebuild([]) |
| |
| def test_single_ebuild(self) -> None: |
| """Test a single ebuild.""" |
| best = uprev_lib.best_chrome_ebuild([self.best_ebuild]) |
| self.assertEqual(self.best_ebuild.ebuild_path, best.ebuild_path) |
| |
| def test_multiple_ebuilds(self) -> None: |
| """Test multiple ebuilds.""" |
| best = uprev_lib.best_chrome_ebuild(self.ebuilds) |
| self.assertEqual(self.best_ebuild.ebuild_path, best.ebuild_path) |
| |
| def test_get_stable_version(self) -> None: |
| """Test fetching latest stable version from ebuilds.""" |
| self.PatchObject(uprev_lib, "_CHROME_OVERLAY_PATH", new=self.tempdir) |
| version = uprev_lib.get_stable_chrome_version() |
| self.assertEqual(self.best_ebuild.chrome_version, version) |
| |
| |
| class FindChromeEbuildsTest(cros_test_lib.TempDirTestCase): |
| """find_chrome_ebuilds tests.""" |
| |
| def setUp(self) -> None: |
| ebuild = os.path.join(self.tempdir, "chromeos-chrome-%s.ebuild") |
| self.unstable = ebuild % "9999" |
| self.alpha_unstable = ebuild % "4.3.2.1_alpha-r12" |
| self.best_stable = ebuild % "4.3.2.1_rc-r12" |
| self.old_stable = ebuild % "4.3.2.1_rc-r2" |
| |
| unstable_data = "KEYWORDS=~*" |
| stable_data = "KEYWORDS=*" |
| |
| osutils.WriteFile(self.unstable, unstable_data) |
| osutils.WriteFile(self.alpha_unstable, unstable_data) |
| osutils.WriteFile(self.best_stable, stable_data) |
| osutils.WriteFile(self.old_stable, stable_data) |
| |
| def test_find_all(self) -> None: |
| unstable, stables = uprev_lib.find_chrome_ebuilds(self.tempdir) |
| self.assertEqual(self.unstable, unstable.ebuild_path) |
| self.assertCountEqual( |
| [self.best_stable, self.old_stable], |
| [stable.ebuild_path for stable in stables], |
| ) |
| |
| |
| class UprevChromeManagerTest(cros_test_lib.MockTempDirTestCase): |
| """UprevChromeManager tests.""" |
| |
| def setUp(self) -> None: |
| ebuild = "chromeos-chrome-%s.ebuild" |
| self.stable_chrome_version = "4.3.2.1" |
| self.new_chrome_version = "4.3.2.2" |
| self.stable_revision = 1 |
| stable_version = "%s_rc-r%d" % ( |
| self.stable_chrome_version, |
| self.stable_revision, |
| ) |
| |
| self.package_dir = os.path.join(self.tempdir, constants.CHROME_CP) |
| osutils.SafeMakedirs(self.package_dir) |
| |
| self.stable_path = os.path.join( |
| self.package_dir, ebuild % stable_version |
| ) |
| self.unstable_path = os.path.join(self.package_dir, ebuild % "9999") |
| |
| osutils.WriteFile(self.stable_path, "KEYWORDS=*\n") |
| osutils.WriteFile(self.unstable_path, "KEYWORDS=~*\n") |
| |
| # Avoid chroot interactions for the tests. |
| self.PatchObject(uprev_lib, "clean_stale_packages") |
| |
| def test_no_change(self) -> None: |
| """Test a no-change uprev.""" |
| # No changes should be made when the stable and unstable ebuilds match. |
| manager = uprev_lib.UprevChromeManager( |
| self.stable_chrome_version, overlay_dir=self.tempdir |
| ) |
| manager.uprev(constants.CHROME_CP) |
| |
| self.assertFalse(manager.modified_ebuilds) |
| |
| def test_older_version(self) -> None: |
| """Test uprevving to an older version.""" |
| manager = uprev_lib.UprevChromeManager( |
| "1.2.3.4", overlay_dir=self.tempdir |
| ) |
| manager.uprev(constants.CHROME_CP) |
| |
| self.assertFalse(manager.modified_ebuilds) |
| |
| def test_new_version(self) -> None: |
| """Test a new chrome version.""" |
| # The stable ebuild should be replaced with one of the new version. |
| manager = uprev_lib.UprevChromeManager( |
| self.new_chrome_version, overlay_dir=self.tempdir |
| ) |
| manager.uprev(constants.CHROME_CP) |
| |
| # The old one should be deleted and the new one should exist. |
| new_path = self.stable_path.replace( |
| self.stable_chrome_version, self.new_chrome_version |
| ) |
| self.assertCountEqual( |
| [self.stable_path, new_path], manager.modified_ebuilds |
| ) |
| self.assertExists(new_path) |
| self.assertNotExists(self.stable_path) |
| |
| new_ebuild = uprev_lib.ChromeEBuild(new_path) |
| expected_version = "%s_rc-r1" % self.new_chrome_version |
| self.assertEqual(expected_version, new_ebuild.version) |
| |
| def test_uprev(self) -> None: |
| """Test a revision bump.""" |
| # Make the contents different to force the uprev. |
| osutils.WriteFile(self.unstable_path, 'IUSE=""', mode="a") |
| manager = uprev_lib.UprevChromeManager( |
| self.stable_chrome_version, overlay_dir=self.tempdir |
| ) |
| manager.uprev(constants.CHROME_CP) |
| |
| new_path = self.stable_path.replace( |
| "-r%d" % self.stable_revision, "-r%d" % (self.stable_revision + 1) |
| ) |
| |
| self.assertCountEqual( |
| [self.stable_path, new_path], manager.modified_ebuilds |
| ) |
| self.assertExists(new_path) |
| self.assertNotExists(self.stable_path) |
| |
| new_ebuild = uprev_lib.ChromeEBuild(new_path) |
| expected_version = "%s_rc-r%d" % ( |
| self.stable_chrome_version, |
| self.stable_revision + 1, |
| ) |
| self.assertEqual(expected_version, new_ebuild.version) |
| |
| |
| class UprevManagerTest(cros_test_lib.MockTestCase): |
| """UprevManager tests.""" |
| |
| def test_clean_stale_packages_no_chroot(self) -> None: |
| """Test no chroot skip.""" |
| manager = uprev_lib.UprevOverlayManager([], None) |
| self.PatchObject(parallel, "RunTasksInProcessPool") |
| |
| # pylint: disable=protected-access |
| manager._clean_stale_packages() |
| |
| # Make sure we aren't doing any work. |
| # TODO(crbug/1065172): Invalid assertion that was previously mocked. |
| # patch.assert_not_called() |
| |
| def test_clean_stale_packages_chroot_not_exists(self) -> None: |
| """Cannot run the commands when the chroot does not exist.""" |
| chroot = chroot_lib.Chroot() |
| self.PatchObject(chroot, "exists", return_value=False) |
| manager = uprev_lib.UprevOverlayManager([], None, chroot=chroot) |
| self.PatchObject(parallel, "RunTasksInProcessPool") |
| |
| # pylint: disable=protected-access |
| manager._clean_stale_packages() |
| |
| # Make sure we aren't doing any work. |
| # TODO(crbug/1065172): Invalid assertion that was previously mocked. |
| # patch.assert_not_called() |
| |
| def test_clean_stale_packages_no_build_targets(self) -> None: |
| """Make sure it behaves as expected with no build targets provided.""" |
| chroot = chroot_lib.Chroot() |
| self.PatchObject(chroot, "exists", return_value=True) |
| manager = uprev_lib.UprevOverlayManager([], None, chroot=chroot) |
| patch = self.PatchObject(parallel, "RunTasksInProcessPool") |
| |
| # pylint: disable=protected-access |
| manager._clean_stale_packages() |
| |
| # Make sure we aren't doing any work. |
| patch.assert_called_once_with(mock.ANY, [[None]]) |
| |
| def test_clean_stale_packages_with_boards(self) -> None: |
| """Test it cleans all boards as well as the chroot.""" |
| targets = ["board1", "board2"] |
| build_targets = [build_target_lib.BuildTarget(t) for t in targets] |
| chroot = chroot_lib.Chroot() |
| self.PatchObject(chroot, "exists", return_value=True) |
| manager = uprev_lib.UprevOverlayManager( |
| [], None, chroot=chroot, build_targets=build_targets |
| ) |
| patch = self.PatchObject(parallel, "RunTasksInProcessPool") |
| |
| # pylint: disable=protected-access |
| manager._clean_stale_packages() |
| |
| patch.assert_called_once_with(mock.ANY, [[t] for t in targets + [None]]) |
| |
| |
| def test_find_chrome_ebuilds(overlay_stack) -> None: |
| """Test that chrome ebuilds can be discovered in the test overlay.""" |
| |
| (overlay,) = overlay_stack(1) |
| unstable_chrome = cr.test.Package( |
| "chromeos-base", "chromeos-chrome", version="9999", keywords="~*" |
| ) |
| stable_chrome = cr.test.Package( |
| "chromeos-base", "chromeos-chrome", version="78.0.3876.1-r1" |
| ) |
| overlay.add_package(unstable_chrome) |
| overlay.add_package(stable_chrome) |
| |
| unstable, stable = uprev_lib.find_chrome_ebuilds( |
| overlay.path / "chromeos-base" / "chromeos-chrome" |
| ) |
| assert unstable |
| assert stable |
| |
| |
| def test_find_chrome_stable_candidate(overlay_stack) -> None: |
| """Test that a stable uprev candidate can be chosen in the expected case.""" |
| NEW_CHROME_VERSION = "80.0.1234.0" |
| |
| (overlay,) = overlay_stack(1) |
| unstable_chrome = cr.test.Package( |
| "chromeos-base", "chromeos-chrome", version="9999", keywords="~*" |
| ) |
| stable_chrome = cr.test.Package( |
| "chromeos-base", "chromeos-chrome", version="78.0.3876.0_rc-r1" |
| ) |
| overlay.add_package(unstable_chrome) |
| overlay.add_package(stable_chrome) |
| |
| _unstable, stable = uprev_lib.find_chrome_ebuilds( |
| overlay.path / "chromeos-base" / "chromeos-chrome" |
| ) |
| assert stable |
| uprev_manager = uprev_lib.UprevChromeManager(version=NEW_CHROME_VERSION) |
| # pylint: disable=protected-access |
| candidate = uprev_manager._find_chrome_uprev_candidate(stable) |
| assert candidate |
| |
| |
| def test_basic_chrome_uprev(overlay_stack) -> None: |
| """Test that the default uprev path works as expected.""" |
| NEW_CHROME_VERSION = "80.0.1234.0" |
| |
| (overlay,) = overlay_stack(1) |
| unstable_chrome = cr.test.Package( |
| "chromeos-base", "chromeos-chrome", version="9999", keywords="~*" |
| ) |
| stable_chrome = cr.test.Package( |
| "chromeos-base", "chromeos-chrome", version="78.0.3876.0_rc-r1" |
| ) |
| overlay.add_package(unstable_chrome) |
| overlay.add_package(stable_chrome) |
| |
| uprev_manager = uprev_lib.UprevChromeManager( |
| version=NEW_CHROME_VERSION, overlay_dir=overlay.path |
| ) |
| |
| result = uprev_manager.uprev(constants.CHROME_CP) |
| assert result |
| assert result.outcome is uprev_lib.Outcome.VERSION_BUMP |
| |
| new_chrome = cr.test.Package( |
| "chromeos-base", "chromeos-chrome", version="80.0.1234.0_rc-r1" |
| ) |
| |
| assert new_chrome.cpv in overlay |
| |
| |
| def test_chrome_uprev_revision_bump(overlay_stack) -> None: |
| """Verify an uprev with the same major version just increments revision.""" |
| NEW_CHROME_VERSION = "80.0.1234.0" |
| |
| (overlay,) = overlay_stack(1) |
| unstable_chrome = cr.test.Package( |
| "chromeos-base", |
| "chromeos-chrome", |
| version="9999", |
| keywords="~*", |
| depend="foo/bar", |
| ) |
| stable_chrome = cr.test.Package( |
| "chromeos-base", "chromeos-chrome", version="80.0.1234.0_rc-r1" |
| ) |
| |
| overlay.add_package(unstable_chrome) |
| overlay.add_package(stable_chrome) |
| |
| uprev_manager = uprev_lib.UprevChromeManager( |
| version=NEW_CHROME_VERSION, overlay_dir=overlay.path |
| ) |
| |
| result = uprev_manager.uprev(constants.CHROME_CP) |
| assert result |
| assert result.outcome is uprev_lib.Outcome.REVISION_BUMP |
| |
| expected_uprev = cr.test.Package( |
| "chromeos-base", "chromeos-chrome", version="80.0.1234.0_rc-r2" |
| ) |
| |
| assert expected_uprev.cpv in overlay |
| |
| |
| def test_no_chrome_uprev_same_version(overlay_stack, caplog) -> None: |
| """Test that no uprev occurs when version and contents are the same.""" |
| NEW_CHROME_VERSION = "80.0.1234.0" |
| |
| (overlay,) = overlay_stack(1) |
| unstable_chrome = cr.test.Package( |
| "chromeos-base", "chromeos-chrome", version="9999", keywords="~*" |
| ) |
| stable_chrome = cr.test.Package( |
| "chromeos-base", "chromeos-chrome", version="80.0.1234.0_rc-r1" |
| ) |
| |
| overlay.add_package(unstable_chrome) |
| overlay.add_package(stable_chrome) |
| |
| uprev_manager = uprev_lib.UprevChromeManager( |
| version=NEW_CHROME_VERSION, overlay_dir=overlay.path |
| ) |
| |
| result = uprev_manager.uprev(constants.CHROME_CP) |
| assert not result |
| assert result.outcome is uprev_lib.Outcome.SAME_VERSION_EXISTS |
| |
| ebuild_redundant_warning = ( |
| "Previous ebuild with same version found and ebuild is redundant." |
| ) |
| assert ebuild_redundant_warning in caplog.text |
| |
| |
| def test_no_chrome_uprev_older_version(overlay_stack, caplog) -> None: |
| """Test that no uprev occurs when a newer version already exists.""" |
| # Intentionally older than what already exists. |
| NEW_CHROME_VERSION = "55.0.1234.0" |
| |
| (overlay,) = overlay_stack(1) |
| unstable_chrome = cr.test.Package( |
| "chromeos-base", "chromeos-chrome", version="9999", keywords="~*" |
| ) |
| stable_chrome = cr.test.Package( |
| "chromeos-base", "chromeos-chrome", version="80.0.1234.0_rc-r1" |
| ) |
| |
| overlay.add_package(unstable_chrome) |
| overlay.add_package(stable_chrome) |
| |
| uprev_manager = uprev_lib.UprevChromeManager( |
| version=NEW_CHROME_VERSION, overlay_dir=overlay.path |
| ) |
| |
| result = uprev_manager.uprev(constants.CHROME_CP) |
| assert not result |
| assert result.outcome is uprev_lib.Outcome.NEWER_VERSION_EXISTS |
| |
| newer_version_warning = ( |
| "A chrome ebuild candidate with a higher version than the " |
| "requested uprev version was found." |
| ) |
| assert newer_version_warning in caplog.messages |
| assert "Candidate version found: 80.0.1234.0" in caplog.messages |
| |
| |
| def test_chrome_uprev_no_existing_stable(overlay_stack) -> None: |
| """Test that an uprev generates a stable ebuild if one doesn't exist yet.""" |
| NEW_CHROME_VERSION = "80.0.1234.0" |
| |
| (overlay,) = overlay_stack(1) |
| unstable_chrome = cr.test.Package( |
| "chromeos-base", |
| "chromeos-chrome", |
| version="9999", |
| keywords="~*", |
| depend="foo/bar", |
| ) |
| |
| overlay.add_package(unstable_chrome) |
| |
| uprev_manager = uprev_lib.UprevChromeManager( |
| version=NEW_CHROME_VERSION, overlay_dir=overlay.path |
| ) |
| |
| result = uprev_manager.uprev(constants.CHROME_CP) |
| assert result |
| assert result.outcome is uprev_lib.Outcome.NEW_EBUILD_CREATED |
| |
| stable_chrome = cr.test.Package( |
| "chromeos-base", |
| "chromeos-chrome", |
| version=f"{NEW_CHROME_VERSION}_rc-r1", |
| ) |
| |
| assert stable_chrome.cpv in overlay |
| |
| |
| def test_get_stable_ebuild_version(overlay_stack, monkeypatch) -> None: |
| """Test getting the stable ebuild version.""" |
| (overlay,) = overlay_stack(1) |
| unstable_package = cr.test.Package( |
| "chromeos-base", |
| "test-package", |
| version="9999", |
| keywords="~*", |
| inherit="cros-workon", |
| ) |
| stable_package = cr.test.Package( |
| "chromeos-base", "test-package", version="30.0" |
| ) |
| |
| overlay.add_package(unstable_package) |
| overlay.add_package(stable_package) |
| |
| monkeypatch.setattr(uprev_lib, "SRC_ROOT", overlay.path) |
| stable_version = uprev_lib.get_stable_ebuild_version( |
| pathlib.Path(unstable_package.category) / unstable_package.package, |
| ) |
| |
| assert stable_version == stable_package.package_info.version |
| |
| |
| def test_get_stable_ebuild_version_2_stable_ebuilds( |
| overlay_stack, monkeypatch |
| ) -> None: |
| """Test getting the stable ebuild version on multiple stable ebuilds.""" |
| (overlay,) = overlay_stack(1) |
| unstable_package = cr.test.Package( |
| "chromeos-base", |
| "test-package", |
| version="9999", |
| keywords="~*", |
| inherit="cros-workon", |
| ) |
| stable_package_30 = cr.test.Package( |
| "chromeos-base", "test-package", version="30.0" |
| ) |
| stable_package_31 = cr.test.Package( |
| "chromeos-base", "test-package", version="31.0" |
| ) |
| |
| overlay.add_package(unstable_package) |
| overlay.add_package(stable_package_30) |
| overlay.add_package(stable_package_31) |
| |
| monkeypatch.setattr(uprev_lib, "SRC_ROOT", overlay.path) |
| with pytest.raises(uprev_lib.TooManyStableEbuildsError): |
| _ = uprev_lib.get_stable_ebuild_version( |
| pathlib.Path(unstable_package.category) / unstable_package.package, |
| ) |
| |
| |
| def test_get_stable_ebuild_version_no_unstable( |
| overlay_stack, monkeypatch |
| ) -> None: |
| """Test getting the stable ebuild version on no unstable ebuild.""" |
| (overlay,) = overlay_stack(1) |
| stable_package = cr.test.Package( |
| "chromeos-base", "test-package", version="30.0" |
| ) |
| |
| overlay.add_package(stable_package) |
| |
| monkeypatch.setattr(uprev_lib, "SRC_ROOT", overlay.path) |
| with pytest.raises(uprev_lib.NoUnstableEbuildError): |
| _ = uprev_lib.get_stable_ebuild_version( |
| pathlib.Path(stable_package.category) / stable_package.package, |
| ) |
| |
| |
| @pytest.mark.inside_only |
| def test_non_workon_fails_uprev_workon_ebuild_to_version( |
| overlay_stack, monkeypatch |
| ) -> None: |
| (overlay,) = overlay_stack(1) |
| unstable_package = cr.test.Package( |
| "chromeos-base", |
| "test-package", |
| version="9999", |
| keywords="~*", |
| ) |
| |
| overlay.add_package(unstable_package) |
| |
| monkeypatch.setattr(uprev_lib, "SRC_ROOT", overlay.path) |
| with pytest.raises(uprev_lib.EbuildUprevError): |
| uprev_lib.uprev_workon_ebuild_to_version( |
| pathlib.Path(unstable_package.category) / unstable_package.package, |
| target_version="1", |
| chroot=chroot_lib.Chroot(), |
| ) |
| |
| stable_package = package_info.PackageInfo( |
| "chromeos-base", |
| "test-package", |
| version="1", |
| revision="1", |
| ) |
| |
| assert not stable_package in overlay |
| |
| |
| @pytest.mark.inside_only |
| def test_simple_uprev_workon_ebuild_to_version( |
| overlay_stack, monkeypatch |
| ) -> None: |
| (overlay,) = overlay_stack(1) |
| unstable_package = cr.test.Package( |
| "chromeos-base", |
| "test-package", |
| version="9999", |
| keywords="~*", |
| inherit="cros-workon", |
| CROS_WORKON_PROJECT="chromiumos/infra/build/empty-project", |
| CROS_WORKON_LOCALNAME="empty-project", |
| ) |
| |
| overlay.add_package(unstable_package) |
| |
| monkeypatch.setattr(uprev_lib, "SRC_ROOT", overlay.path) |
| res = uprev_lib.uprev_workon_ebuild_to_version( |
| pathlib.Path(unstable_package.category) / unstable_package.package, |
| target_version="1", |
| chroot=chroot_lib.Chroot(), |
| ) |
| |
| assert res.outcome is uprev_lib.Outcome.NEW_EBUILD_CREATED |
| |
| stable_package = package_info.PackageInfo( |
| "chromeos-base", |
| "test-package", |
| version="1", |
| revision="1", |
| ) |
| |
| assert stable_package in overlay |
| |
| |
| def test_uprev_workon_ebuild_to_version_newer_exists( |
| overlay_stack, monkeypatch |
| ) -> None: |
| """Test no uprev when downrev not allowed and newer version exists.""" |
| (overlay,) = overlay_stack(1) |
| unstable_ebuild = cr.test.Package( |
| "chromeos-base", |
| "uprev-test", |
| version="9999", |
| keywords="~*", |
| inherit="cros-workon", |
| ) |
| stable_ebuild = cr.test.Package( |
| "chromeos-base", "uprev-test", version="5.0.3-r2", inherit="cros-workon" |
| ) |
| |
| overlay.add_package(unstable_ebuild) |
| overlay.add_package(stable_ebuild) |
| |
| monkeypatch.setattr(uprev_lib, "SRC_ROOT", overlay.path) |
| result = uprev_lib.uprev_workon_ebuild_to_version( |
| "chromeos-base/uprev-test", |
| "1.2.3", |
| allow_downrev=False, |
| chroot=chroot_lib.Chroot(), |
| ) |
| |
| assert not result |
| assert result.outcome is uprev_lib.Outcome.NEWER_VERSION_EXISTS |