diff --git a/scripts/tests/test_compression.py b/scripts/tests/test_compression.py
new file mode 100644
index 0000000..35597ec
--- /dev/null
+++ b/scripts/tests/test_compression.py
@@ -0,0 +1,88 @@
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from pathlib import Path
+
+import pytest
+from click.testing import CliRunner
+
+from imgtool.image import Image
+from imgtool.main import (
+    comp_default_lp,
+    comp_default_dictsize,
+    comp_default_lc,
+    create_lzma2_header,
+    comp_default_pb,
+    imgtool,
+)
+
+VERSION = '2.0.0'
+HEADER_SIZE = 0x200
+SLOT_SIZE = 0x7a000
+
+
+@pytest.fixture
+def key_file() -> Path:
+    return Path(__file__).parents[2] / 'root-ec-p256.pem'
+
+
+def check_if_compressed(out_file: Path) -> bool:
+    # Verify output file. There should be better solution to check
+    # if the output file is correctly compressed with lzma2.
+    # For now we check only if the output image contains
+    # some specific for lzma2 values.
+    img = Image(version=VERSION, header_size=HEADER_SIZE, slot_size=SLOT_SIZE, pad_header=True)
+    img.load(out_file)
+    compression_header = create_lzma2_header(
+        dictsize=comp_default_dictsize, pb=comp_default_pb,
+        lc=comp_default_lc, lp=comp_default_lp
+    )
+    return compression_header in img.payload
+
+
+@pytest.mark.parametrize(
+    'compression, compressed',
+    [
+        ('lzma2', True),
+        ('disabled', False)
+    ]
+)
+def test_lzma2_compression(tmpdir: Path, key_file: Path, compression: str, compressed: bool):
+    """
+    Test if lzma2 compression works by running ``imgtool sign``
+    command and checking expected output.
+    """
+    in_file = tmpdir / 'zephyr.bin'
+    with in_file.open("wb") as f:
+        f.write(b"hello world\x00\x00\x00\x00\x00" * 64)
+    out_file: Path = tmpdir / 'zephyr_signed.bin'
+
+    runner = CliRunner()
+    result = runner.invoke(
+        imgtool,
+        [
+            'sign',
+            str(in_file),
+            str(out_file),
+            f'--header-size={HEADER_SIZE}',
+            f'--slot-size={SLOT_SIZE}',
+            f'--version={VERSION}',
+            '--pad-header',
+            f'--compression={compression}',
+            f'--key={key_file}'
+        ],
+    )
+    assert result.exit_code == 0
+    assert out_file.exists()
+    assert check_if_compressed(out_file) is compressed
