this should all be tested now: 1. invoking against precompiled _pb2.py files provided by user 2. invoking against .proto files provided by user which must be compiled 3. invoking with a special option to use shipped (by us) .proto files which must be compiled 4. erroring because none of the above occurred this took some reorganization, but this should finally give me stability in using this in GP2040-CE's build process Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
101 lines
4.0 KiB
Python
101 lines
4.0 KiB
Python
"""Test our tools themselves to make sure they adhere to certain flags.
|
|
|
|
SPDX-FileCopyrightText: © 2023 Brian S. Stephan <bss@incorporeal.org>
|
|
SPDX-License-Identifier: GPL-3.0-or-later
|
|
"""
|
|
import json
|
|
import os
|
|
import sys
|
|
from subprocess import run
|
|
|
|
from decorator import decorator
|
|
|
|
from gp2040ce_bintools import __version__
|
|
|
|
HERE = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
|
|
@decorator
|
|
def with_pb2s(test, *args, **kwargs):
|
|
"""Wrap a test with precompiled pb2 files on the path."""
|
|
proto_path = os.path.join(HERE, 'test-files', 'pb2-files')
|
|
sys.path.append(proto_path)
|
|
|
|
test(*args, **kwargs)
|
|
|
|
sys.path.pop()
|
|
del sys.modules['config_pb2']
|
|
del sys.modules['enums_pb2']
|
|
del sys.modules['nanopb_pb2']
|
|
|
|
|
|
def test_version_flag():
|
|
"""Test that tools report the version."""
|
|
result = run(['visualize-config', '-v'], capture_output=True, encoding='utf8')
|
|
assert f'gp2040ce-binary-tools {__version__}' in result.stdout
|
|
assert 'Python 3' in result.stdout
|
|
|
|
|
|
def test_help_flag():
|
|
"""Test that tools report the usage information."""
|
|
result = run(['visualize-config', '-h'], capture_output=True, encoding='utf8')
|
|
assert 'usage: visualize-config' in result.stdout
|
|
assert 'Read the configuration section from a dump of a GP2040-CE board' in result.stdout
|
|
|
|
|
|
def test_concatenate_invocation(tmpdir):
|
|
"""Test that a normal invocation against a dump works."""
|
|
out_filename = os.path.join(tmpdir, 'out.bin')
|
|
_ = run(['concatenate', 'tests/test-files/test-firmware.bin', '--binary-user-config-filename',
|
|
'tests/test-files/test-storage-area.bin', '--new-filename', out_filename])
|
|
with open(out_filename, 'rb') as out_file, open('tests/test-files/test-storage-area.bin', 'rb') as storage_file:
|
|
out = out_file.read()
|
|
storage = storage_file.read()
|
|
assert out[2080768:2097152] == storage
|
|
|
|
|
|
def test_concatenate_invocation_json(tmpdir):
|
|
"""Test that a normal invocation with a firmware and a JSON file works."""
|
|
out_filename = os.path.join(tmpdir, 'out.bin')
|
|
_ = run(['concatenate', '-P', 'tests/test-files/proto-files', 'tests/test-files/test-firmware.bin',
|
|
'--json-user-config-filename', 'tests/test-files/test-config.json', '--new-filename',
|
|
out_filename])
|
|
with open(out_filename, 'rb') as out_file, open('tests/test-files/test-binary-source-of-json-config.bin',
|
|
'rb') as storage_file:
|
|
out = out_file.read()
|
|
storage = storage_file.read()
|
|
assert out[2093382:2097152] == storage
|
|
|
|
|
|
def test_summarize_invocation(tmpdir):
|
|
"""Test that we can get some summary information."""
|
|
result = run(['summarize-gp2040ce', '--filename', 'tests/test-files/test-firmware.bin'],
|
|
capture_output=True, encoding='utf8')
|
|
assert 'detected GP2040-CE version: v0.7.5' in result.stdout
|
|
|
|
|
|
def test_storage_dump_invocation():
|
|
"""Test that a normal invocation against a dump works."""
|
|
result = run(['visualize-config', '-P', 'tests/test-files/proto-files',
|
|
'--filename', 'tests/test-files/test-storage-area.bin'],
|
|
capture_output=True, encoding='utf8')
|
|
assert 'boardVersion: "v0.7.5"' in result.stdout
|
|
|
|
|
|
def test_debug_storage_dump_invocation():
|
|
"""Test that a normal invocation against a dump works."""
|
|
result = run(['visualize-config', '-d', '-P', 'tests/test-files/proto-files',
|
|
'--filename', 'tests/test-files/test-storage-area.bin'],
|
|
capture_output=True, encoding='utf8')
|
|
assert 'boardVersion: "v0.7.5"' in result.stdout
|
|
assert 'length of content to look for footer in: 16384' in result.stderr
|
|
|
|
|
|
def test_storage_dump_json_invocation():
|
|
"""Test that a normal invocation against a dump works."""
|
|
result = run(['visualize-config', '-P', 'tests/test-files/proto-files', '--json',
|
|
'--filename', 'tests/test-files/test-storage-area.bin'],
|
|
capture_output=True, encoding='utf8')
|
|
to_dict = json.loads(result.stdout)
|
|
assert to_dict['boardVersion'] == 'v0.7.5'
|