84 lines
3.3 KiB
Python
84 lines
3.3 KiB
Python
import json
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
from scripts.package_firmware import build_manifest, extract_firmware_version, package_bundle
|
|
|
|
|
|
class PackageFirmwareTests(unittest.TestCase):
|
|
def test_extract_firmware_version_reads_init_string(self):
|
|
header_text = '#define initSting "EBBv13_and_above Protocol emulated by Eggduino-Firmware V1.6a"\n'
|
|
|
|
self.assertEqual(extract_firmware_version(header_text), "1.6a")
|
|
|
|
def test_build_manifest_matches_expected_esp32_offsets(self):
|
|
manifest = build_manifest("1.6a")
|
|
|
|
self.assertEqual(manifest["name"], "EggDuino ESP32 Firmware")
|
|
self.assertEqual(manifest["version"], "1.6a")
|
|
self.assertTrue(manifest["new_install_prompt_erase"])
|
|
self.assertEqual(manifest["builds"][0]["chipFamily"], "ESP32")
|
|
self.assertEqual(
|
|
manifest["builds"][0]["parts"],
|
|
[
|
|
{"path": "bootloader.bin", "offset": 4096},
|
|
{"path": "partitions.bin", "offset": 32768},
|
|
{"path": "boot_app0.bin", "offset": 57344},
|
|
{"path": "firmware.bin", "offset": 65536},
|
|
],
|
|
)
|
|
|
|
def test_package_bundle_copies_outputs_and_removes_stale_files(self):
|
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
temp_path = Path(temp_dir)
|
|
build_dir = temp_path / "build"
|
|
build_dir.mkdir()
|
|
header_path = temp_path / "EggDuino.h"
|
|
output_dir = temp_path / "firmware"
|
|
output_dir.mkdir()
|
|
boot_app0_path = temp_path / "boot_app0.bin"
|
|
|
|
build_artifacts = {
|
|
"bootloader.bin": "bootloader",
|
|
"partitions.bin": "partitions",
|
|
"firmware.bin": "firmware-bin",
|
|
"firmware.elf": "firmware-elf",
|
|
"firmware.map": "firmware-map",
|
|
}
|
|
for file_name, contents in build_artifacts.items():
|
|
(build_dir / file_name).write_text(contents, encoding="utf-8")
|
|
|
|
header_path.write_text(
|
|
'#define initSting "EBBv13_and_above Protocol emulated by Eggduino-Firmware V1.6b"\n',
|
|
encoding="utf-8",
|
|
)
|
|
boot_app0_path.write_text("boot-app0", encoding="utf-8")
|
|
(output_dir / "stale.txt").write_text("old", encoding="utf-8")
|
|
|
|
package_bundle(
|
|
build_dir=build_dir,
|
|
boot_app0_path=boot_app0_path,
|
|
header_path=header_path,
|
|
output_dir=output_dir,
|
|
)
|
|
|
|
self.assertFalse((output_dir / "stale.txt").exists())
|
|
expected_files = {
|
|
"bootloader.bin": "bootloader",
|
|
"partitions.bin": "partitions",
|
|
"firmware.bin": "firmware-bin",
|
|
"firmware.elf": "firmware-elf",
|
|
"firmware.map": "firmware-map",
|
|
"boot_app0.bin": "boot-app0",
|
|
}
|
|
for file_name, contents in expected_files.items():
|
|
self.assertEqual((output_dir / file_name).read_text(encoding="utf-8"), contents)
|
|
|
|
manifest = json.loads((output_dir / "manifest.json").read_text(encoding="utf-8"))
|
|
self.assertEqual(manifest["version"], "1.6b")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|