Skip to content

Commit e43e670

Browse files
fundakolnvlsianpu
authored andcommitted
Add a test to verify if lzma2 compression works
Signed-off-by: Lukasz Fundakowski <[email protected]>
1 parent eb94206 commit e43e670

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed

scripts/tests/test_compression.py

+88
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
from pathlib import Path
16+
17+
import pytest
18+
from click.testing import CliRunner
19+
20+
from imgtool.image import Image
21+
from imgtool.main import (
22+
comp_default_lp,
23+
comp_default_dictsize,
24+
comp_default_lc,
25+
create_lzma2_header,
26+
comp_default_pb,
27+
imgtool,
28+
)
29+
30+
VERSION = '2.0.0'
31+
HEADER_SIZE = 0x200
32+
SLOT_SIZE = 0x7a000
33+
34+
35+
@pytest.fixture
36+
def key_file() -> Path:
37+
return Path(__file__).parents[2] / 'root-ec-p256.pem'
38+
39+
40+
def check_if_compressed(out_file: Path) -> bool:
41+
# Verify output file. There should be better solution to check
42+
# if the output file is correctly compressed with lzma2.
43+
# For now we check only if the output image contains
44+
# some specific for lzma2 values.
45+
img = Image(version=VERSION, header_size=HEADER_SIZE, slot_size=SLOT_SIZE, pad_header=True)
46+
img.load(out_file)
47+
compression_header = create_lzma2_header(
48+
dictsize=comp_default_dictsize, pb=comp_default_pb,
49+
lc=comp_default_lc, lp=comp_default_lp
50+
)
51+
return compression_header in img.payload
52+
53+
54+
@pytest.mark.parametrize(
55+
'compression, compressed',
56+
[
57+
('lzma2', True),
58+
('disabled', False)
59+
]
60+
)
61+
def test_lzma2_compression(tmpdir: Path, key_file: Path, compression: str, compressed: bool):
62+
"""
63+
Test if lzma2 compression works by running ``imgtool sign``
64+
command and checking expected output.
65+
"""
66+
in_file = tmpdir / 'zephyr.bin'
67+
with in_file.open("wb") as f:
68+
f.write(b"hello world\x00\x00\x00\x00\x00" * 64)
69+
out_file: Path = tmpdir / 'zephyr_signed.bin'
70+
71+
runner = CliRunner()
72+
result = runner.invoke(
73+
imgtool,
74+
[
75+
'sign',
76+
str(in_file),
77+
str(out_file),
78+
f'--header-size={HEADER_SIZE}',
79+
f'--slot-size={SLOT_SIZE}',
80+
f'--version={VERSION}',
81+
'--pad-header',
82+
f'--compression={compression}',
83+
f'--key={key_file}'
84+
],
85+
)
86+
assert result.exit_code == 0
87+
assert out_file.exists()
88+
assert check_if_compressed(out_file) is compressed

0 commit comments

Comments
 (0)