Skip to content

Commit e207f10

Browse files
committed
Fix gardenlinux_epoch value of S3 artifact metadata and add test for it
Signed-off-by: Tobias Wolf <wolf@b1-systems.de> On-behalf-of: SAP <tobias.wolf@sap.com>
1 parent 3b2782b commit e207f10

File tree

4 files changed

+95
-20
lines changed

4 files changed

+95
-20
lines changed

src/gardenlinux/s3/s3_artifacts.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ def upload_from_directory(
180180
"base_image": None,
181181
"build_committish": commit_id_or_hash,
182182
"build_timestamp": datetime.fromtimestamp(release_timestamp).isoformat(),
183-
"gardenlinux_epoch": {version_epoch},
183+
"gardenlinux_epoch": version_epoch,
184184
"logs": None,
185185
"modifiers": cname_object.feature_set,
186186
"require_uefi": require_uefi,

tests/s3/constants.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# -*- coding: utf-8 -*-
2+
3+
RELEASE_DATA = """
4+
GARDENLINUX_CNAME="container-amd64-1234.1-abc123lo"
5+
GARDENLINUX_VERSION=1234.1
6+
GARDENLINUX_COMMIT_ID="abc123lo"
7+
GARDENLINUX_COMMIT_ID_LONG="abc123long"
8+
GARDENLINUX_FEATURES="_usi,_trustedboot"
9+
GARDENLINUX_FEATURES_ELEMENTS=
10+
GARDENLINUX_FEATURES_FLAGS="_usi,_trustedboot"
11+
GARDENLINUX_FEATURES_PLATFORMS="container"
12+
"""
13+
14+
S3_METADATA = """
15+
platform: container
16+
architecture: amd64
17+
base_image: null
18+
build_committish: abc123lo
19+
build_timestamp: '{build_timestamp}'
20+
gardenlinux_epoch: '1234'
21+
logs: null
22+
modifiers: _usi,_trustedboot
23+
require_uefi: true
24+
secureboot: true
25+
published_image_metadata: null
26+
s3_bucket: test-bucket
27+
s3_key: meta/singles/container-amd64-1234.1-abc123lo
28+
test_result: null
29+
version: '1234.1'
30+
paths:
31+
- name: container-amd64-1234.1-abc123lo.release
32+
s3_bucket_name: test-bucket
33+
s3_key: objects/container-amd64-1234.1-abc123lo/container-amd64-1234.1-abc123lo.release
34+
suffix: release
35+
md5sum: {md5sum}
36+
sha256sum: {sha256sum}
37+
""".strip()

tests/s3/test_main.py

Lines changed: 56 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import re
12
import sys
23
from typing import Any, Dict, List
34
from unittest.mock import MagicMock, patch
@@ -6,6 +7,9 @@
67

78
import gardenlinux.s3.__main__ as s3m
89

10+
from .conftest import S3Env
11+
from .constants import RELEASE_DATA, S3_METADATA
12+
913

1014
@pytest.mark.parametrize(
1115
"argv, expected_method, expected_args, expected_kwargs",
@@ -48,14 +52,58 @@ def test_main_calls_correct_artifacts(
4852
expected_args: List[Any],
4953
expected_kwargs: Dict[str, Any],
5054
) -> None:
51-
with patch.object(sys, "argv", argv):
52-
with patch.object(s3m, "S3Artifacts") as mock_s3_cls:
53-
mock_instance = MagicMock()
54-
mock_s3_cls.return_value = mock_instance
55+
with (
56+
patch.object(sys, "argv", argv),
57+
patch.object(s3m, "S3Artifacts") as mock_s3_cls,
58+
):
59+
mock_instance = MagicMock()
60+
mock_s3_cls.return_value = mock_instance
61+
62+
s3m.main()
63+
64+
method = getattr(mock_instance, expected_method)
65+
method.assert_called_once_with(*expected_args, **expected_kwargs)
66+
67+
mock_s3_cls.assert_called_once_with("test-bucket")
68+
69+
70+
def test_main_with_expected_result(
71+
s3_setup: S3Env, capsys: pytest.CaptureFixture[str]
72+
) -> None:
73+
env = s3_setup
74+
75+
# Arrange
76+
with patch.object(
77+
sys,
78+
"argv",
79+
[
80+
"__main__.py",
81+
"--dry-run",
82+
"--bucket",
83+
env.bucket_name,
84+
"--path",
85+
str(env.tmp_path),
86+
"upload-artifacts-to-bucket",
87+
"--artifact-name",
88+
env.cname,
89+
],
90+
):
91+
release_path = env.tmp_path / f"{env.cname}.release"
92+
release_path.write_text(RELEASE_DATA)
93+
94+
s3m.main()
95+
96+
result = capsys.readouterr().out.strip()
5597

56-
s3m.main()
98+
result = re.sub(
99+
"^(.*)build_timestamp\\: '.+'$",
100+
"\\1build_timestamp: '{build_timestamp}'",
101+
result,
102+
flags=re.M,
103+
)
57104

58-
method = getattr(mock_instance, expected_method)
59-
method.assert_called_once_with(*expected_args, **expected_kwargs)
105+
result = re.sub(
106+
"^(.*)(md5sum|sha256sum)\\: .+$", "\\1\\2: {\\2}", result, flags=re.M
107+
)
60108

61-
mock_s3_cls.assert_called_once_with("test-bucket")
109+
assert result == S3_METADATA

tests/s3/test_s3_artifacts.py

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,7 @@
99
from gardenlinux.s3.s3_artifacts import S3Artifacts
1010

1111
from .conftest import S3Env
12-
13-
RELEASE_DATA = """
14-
GARDENLINUX_CNAME="container-amd64-1234.1-abc123lo"
15-
GARDENLINUX_VERSION=1234.1
16-
GARDENLINUX_COMMIT_ID="abc123lo"
17-
GARDENLINUX_COMMIT_ID_LONG="abc123long"
18-
GARDENLINUX_FEATURES="_usi,_trustedboot"
19-
GARDENLINUX_FEATURES_ELEMENTS=
20-
GARDENLINUX_FEATURES_FLAGS="_usi,_trustedboot"
21-
GARDENLINUX_FEATURES_PLATFORMS="container"
22-
"""
12+
from .constants import RELEASE_DATA
2313

2414

2515
def test_s3artifacts_init_success(s3_setup: S3Env) -> None:

0 commit comments

Comments
 (0)