summaryrefslogtreecommitdiff
path: root/zephyr/zmake/tests/test_version.py
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/zmake/tests/test_version.py')
-rw-r--r--zephyr/zmake/tests/test_version.py81
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