fix: align bootloader image validation limits

This commit is contained in:
2026-04-29 19:55:10 +02:00
parent 09c686d542
commit 16365e1d04
4 changed files with 49 additions and 5 deletions

View File

@ -120,6 +120,26 @@ void main() {
result.failure?.reason, FirmwareSelectionFailureReason.imageTooLarge);
});
test('accepts image exactly at application slot size', () async {
final image = Uint8List(universalShifterDfuAppSlotSizeBytes);
_writeLeU32(image, 0, 0x20001000);
_writeLeU32(image, 4, 0x00030009);
final service = FirmwareFileSelectionService(
filePicker: _FakeFirmwareFilePicker(
selection: FirmwarePickerSelection(
fileName: 'firmware.bin',
fileBytes: image,
),
),
);
final result = await service.selectAndPrepareBootloaderDfu();
expect(result.isSuccess, isTrue);
expect(result.firmware?.metadata.totalLength,
universalShifterDfuAppSlotSizeBytes);
});
test('rejects images with invalid vector table', () async {
final image = _validBootloaderImage();
_writeLeU32(image, 0, 0x10001000);
@ -158,6 +178,23 @@ void main() {
expect(second.firmware?.metadata.sessionId, 10);
});
test('normalizes generated zero session id to one', () async {
final service = FirmwareFileSelectionService(
filePicker: _FakeFirmwareFilePicker(
selection: FirmwarePickerSelection(
fileName: 'firmware.bin',
fileBytes: _validBootloaderImage(),
),
),
sessionIdGenerator: () => 0,
);
final result = await service.selectAndPrepareBootloaderDfu();
expect(result.isSuccess, isTrue);
expect(result.firmware?.metadata.sessionId, 1);
});
test('maps picker read failure to explicit validation error', () async {
final service = FirmwareFileSelectionService(
filePicker: _FakeFirmwareFilePicker(