diff options
Diffstat (limited to 'zephyr/zmake/tests/test_version.py')
-rw-r--r-- | zephyr/zmake/tests/test_version.py | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/zephyr/zmake/tests/test_version.py b/zephyr/zmake/tests/test_version.py index ff8e366736..8fb4a09435 100644 --- a/zephyr/zmake/tests/test_version.py +++ b/zephyr/zmake/tests/test_version.py @@ -2,7 +2,11 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import datetime import subprocess +import unittest.mock as mock + +import pytest import zmake.project import zmake.version as version @@ -96,3 +100,80 @@ def test_version_string_static(tmp_path): version.get_version_string(project, zephyr_base, modules, static=True) == "prj_v2.6.0-STATIC" ) + + +@pytest.fixture +def fake_user_hostname(): + with mock.patch("getpass.getuser", return_value="toukmond", autospec=True): + with mock.patch("platform.node", return_value="pokey", autospec=True): + yield + + +@pytest.fixture +def fake_date(): + fixed_date = datetime.datetime(2021, 6, 28, 3, 18, 53) + with mock.patch("datetime.datetime") as mock_datetime: + mock_datetime.now.return_value = fixed_date + yield + + +HEADER_VERSION_STR = "trogdor_v2.6.1004-cmsis:0dead0,hal_stm32:0beef0,os:ad00da" +EXPECTED_HEADER = ( + "/* This file is automatically generated by zmake */\n" + '#define VERSION "trogdor_v2.6.1004-cmsis:0dead0,hal_stm32:0beef0,os:ad00da"\n' + '#define CROS_EC_VERSION32 "trogdor_v2.6.1004-cmsis:0dead0,"\n' + '#define BUILDER "toukmond@pokey"\n' + '#define DATE "2021-06-28 03:18:53"\n' +) +HEADER_VERSION_STR_STATIC = "trogdor_v2.6.0-STATIC" +EXPECTED_HEADER_STATIC = ( + "/* This file is automatically generated by zmake */\n" + '#define VERSION "trogdor_v2.6.0-STATIC"\n' + '#define CROS_EC_VERSION32 "trogdor_v2.6.0-STATIC"\n' + '#define BUILDER "reproducible@build"\n' + '#define DATE "STATIC_VERSION_DATE"\n' +) + + +def test_header_gen(fake_user_hostname, fake_date, tmp_path): + # Test the simple case (static=False, no existing header). + output_file = tmp_path / "ec_version.h" + version.write_version_header(HEADER_VERSION_STR, output_file) + assert output_file.read_text() == EXPECTED_HEADER + + +def test_header_gen_reproducible_build(tmp_path): + # With static=True this time. + output_file = tmp_path / "ec_version.h" + version.write_version_header(HEADER_VERSION_STR_STATIC, output_file, static=True) + assert output_file.read_text() == EXPECTED_HEADER_STATIC + + +def test_header_gen_exists_not_changed(fake_user_hostname, fake_date, tmp_path): + # Test we don't overwrite if no changes needed. + output_file = tmp_path / "ec_version.h" + + # First time, write and record mtime. + version.write_version_header(HEADER_VERSION_STR, output_file) + expected_mtime = output_file.stat().st_mtime + + # Do another write (contents should be unchanged). + version.write_version_header(HEADER_VERSION_STR, output_file) + + # Assert we didn't write again. + assert output_file.stat().st_mtime == expected_mtime + + +def test_header_gen_exists_needs_changes(fake_user_hostname, fake_date, tmp_path): + # Test we overwrite when it exists already and changes are needed. + output_file = tmp_path / "ec_version.h" + + # First time, write and save contents. + version.write_version_header(HEADER_VERSION_STR, output_file) + original_contents = output_file.read_text() + + # Do another write (contents should be changed). + version.write_version_header(HEADER_VERSION_STR_STATIC, output_file, static=True) + + # Assert we overwrote. + assert output_file.read_text() != original_contents |