blob: c7a12e36d6a792de04fb17e27cef5aae9a499ea2 [file] [log] [blame]
# Copyright 2022 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Test the chromeos_version module."""
import os
import tempfile
from chromite.lib import chromeos_version
from chromite.lib import constants
from chromite.lib import cros_test_lib
from chromite.lib import git
from chromite.lib import osutils
FAKE_VERSION = """
CHROMEOS_BUILD=%(build_number)s
CHROMEOS_BRANCH=%(branch_build_number)s
CHROMEOS_PATCH=%(patch_number)s
CHROME_BRANCH=%(chrome_branch)s
"""
FAKE_VERSION_STRING = "1.2.3"
CHROME_BRANCH = "13"
FAKE_DATE_STRING = "2022_07_20_203326"
FAKE_DEV_VERSION_STRING = f"{FAKE_VERSION_STRING}-d{FAKE_DATE_STRING}"
class VersionInfoTest(cros_test_lib.MockTempDirTestCase):
"""Test methods testing methods in VersionInfo class."""
@classmethod
def WriteFakeVersionFile(
cls, version_file, version=None, chrome_branch=None
):
"""Helper method to write a version file for |version|."""
if version is None:
version = FAKE_VERSION_STRING
if chrome_branch is None:
chrome_branch = CHROME_BRANCH
osutils.SafeMakedirs(os.path.split(version_file)[0])
info = chromeos_version.VersionInfo(version, chrome_branch)
osutils.WriteFile(version_file, FAKE_VERSION % info.__dict__)
@classmethod
def CreateFakeVersionFile(cls, tmpdir, version=None, chrome_branch=None):
"""Helper method to create a version file for |version|."""
version_file = tempfile.mktemp(dir=tmpdir)
cls.WriteFakeVersionFile(
version_file, version=version, chrome_branch=chrome_branch
)
return version_file
def setUp(self):
self.PatchObject(
chromeos_version.VersionInfo,
"_GetDateTime",
return_value=FAKE_DATE_STRING,
)
def testLoadFromFile(self):
"""Tests whether we can load from a version file."""
version_file = self.CreateFakeVersionFile(self.tempdir)
# Test for Dev/Local Builds.
info = chromeos_version.VersionInfo(version_file=version_file)
self.assertEqual(info.VersionString(), FAKE_VERSION_STRING)
self.assertEqual(
info.VersionStringWithDateTime(), FAKE_DEV_VERSION_STRING
)
# Test for Official.
os.environ["CHROMEOS_OFFICIAL"] = "1"
info = chromeos_version.VersionInfo(version_file=version_file)
self.assertEqual(info.VersionString(), FAKE_VERSION_STRING)
self.assertEqual(info.VersionStringWithDateTime(), FAKE_VERSION_STRING)
def testLoadFromRepo(self):
"""Tests whether we can load from a source repo."""
version_file = os.path.join(self.tempdir, constants.VERSION_FILE)
self.WriteFakeVersionFile(version_file)
# Test for Dev/Local Builds.
info = chromeos_version.VersionInfo.from_repo(self.tempdir)
self.assertEqual(info.VersionString(), FAKE_VERSION_STRING)
self.assertEqual(
info.VersionStringWithDateTime(), FAKE_DEV_VERSION_STRING
)
# Test for Official.
os.environ["CHROMEOS_OFFICIAL"] = "1"
info = chromeos_version.VersionInfo.from_repo(self.tempdir)
self.assertEqual(info.VersionString(), FAKE_VERSION_STRING)
self.assertEqual(info.VersionStringWithDateTime(), FAKE_VERSION_STRING)
def testLoadFromString(self):
"""Tests whether we can load from a string."""
info = chromeos_version.VersionInfo(FAKE_VERSION_STRING, CHROME_BRANCH)
self.assertEqual(info.VersionString(), FAKE_VERSION_STRING)
self.assertEqual(info.VersionStringWithDateTime(), FAKE_VERSION_STRING)
def CommonTestIncrementVersion(
self, incr_type, version, chrome_branch=None
):
"""Common test increment. Returns path to new incremented file."""
message = "Incrementing cuz I sed so"
create_mock = self.PatchObject(git, "CreateBranch")
push_mock = self.PatchObject(
chromeos_version.VersionInfo, "_PushGitChanges"
)
clean_mock = self.PatchObject(git, "CleanAndCheckoutUpstream")
version_file = self.CreateFakeVersionFile(
self.tempdir, version=version, chrome_branch=chrome_branch
)
info = chromeos_version.VersionInfo(
version_file=version_file, incr_type=incr_type
)
info.IncrementVersion()
info.UpdateVersionFile(message, dry_run=False)
# pylint: disable=protected-access
create_mock.assert_called_once_with(
self.tempdir, chromeos_version._PUSH_BRANCH
)
# pylint: enable=protected-access
push_mock.assert_called_once_with(self.tempdir, message, False, None)
clean_mock.assert_called_once_with(self.tempdir)
return version_file
def testIncrementVersionPatch(self):
"""Tests whether we can increment a version file by patch number."""
version_file = self.CommonTestIncrementVersion("branch", "1.2.3")
new_info = chromeos_version.VersionInfo(
version_file=version_file, incr_type="branch"
)
self.assertEqual(new_info.VersionString(), "1.2.4")
def testIncrementVersionBranch(self):
"""Tests whether we can increment a version file by branch number."""
version_file = self.CommonTestIncrementVersion("branch", "1.2.0")
new_info = chromeos_version.VersionInfo(
version_file=version_file, incr_type="branch"
)
self.assertEqual(new_info.VersionString(), "1.3.0")
def testIncrementVersionBuild(self):
"""Tests whether we can increment a version file by build number."""
version_file = self.CommonTestIncrementVersion("build", "1.0.0")
new_info = chromeos_version.VersionInfo(
version_file=version_file, incr_type="build"
)
self.assertEqual(new_info.VersionString(), "2.0.0")
def testIncrementVersionChrome(self):
"""Tests whether we can increment the chrome version."""
version_file = self.CommonTestIncrementVersion(
"chrome_branch", version="1.0.0", chrome_branch="29"
)
new_info = chromeos_version.VersionInfo(version_file=version_file)
self.assertEqual(new_info.VersionString(), "2.0.0")
self.assertEqual(new_info.chrome_branch, "30")
def testCompareEqual(self):
"""Verify comparisons of equal versions."""
lhs = chromeos_version.VersionInfo(version_string="1.2.3")
rhs = chromeos_version.VersionInfo(version_string="1.2.3")
self.assertFalse(lhs < rhs)
self.assertTrue(lhs <= rhs)
self.assertTrue(lhs == rhs)
self.assertFalse(lhs != rhs)
self.assertFalse(lhs > rhs)
self.assertTrue(lhs >= rhs)
def testCompareLess(self):
"""Verify comparisons of less versions."""
lhs = chromeos_version.VersionInfo(version_string="1.0.3")
rhs = chromeos_version.VersionInfo(version_string="1.2.3")
self.assertTrue(lhs < rhs)
self.assertTrue(lhs <= rhs)
self.assertFalse(lhs == rhs)
self.assertTrue(lhs != rhs)
self.assertFalse(lhs > rhs)
self.assertFalse(lhs >= rhs)
def testCompareGreater(self):
"""Verify comparisons of greater versions."""
lhs = chromeos_version.VersionInfo(version_string="1.2.4")
rhs = chromeos_version.VersionInfo(version_string="1.2.3")
self.assertFalse(lhs < rhs)
self.assertFalse(lhs <= rhs)
self.assertFalse(lhs == rhs)
self.assertTrue(lhs != rhs)
self.assertTrue(lhs > rhs)
self.assertTrue(lhs >= rhs)