feat: snackbar for flash err + disconnect on dfurecovery end

This commit is contained in:
2026-05-05 20:19:43 +02:00
parent f1491749d5
commit 512c31d356
5 changed files with 101 additions and 4 deletions

View File

@ -333,6 +333,35 @@ void main() {
await transport.dispose();
});
test('fails early on boot metadata error before START', () async {
final image = _validImage(40);
final transport = _FakeFirmwareUpdateTransport(
totalBytes: image.length,
initialStatusCode: DfuBootloaderStatusCode.bootMetadataError,
);
final service = FirmwareUpdateService(
transport: transport,
defaultStatusTimeout: const Duration(milliseconds: 100),
);
final result = await service.startUpdate(
imageBytes: image,
sessionId: 18,
);
expect(result.isErr(), isTrue);
expect(result.unwrapErr().toString(),
startsWith(universalShifterBootMetadataWarningMessage));
expect(
transport.controlWrites
.where((write) => write.first == universalShifterDfuOpcodeStart),
isEmpty);
expect(service.currentProgress.state, DfuUpdateState.failed);
await service.dispose();
await transport.dispose();
});
test('cancel after START sends session-scoped ABORT', () async {
final image = _validImage(80);
final firstFrameSent = Completer<void>();
@ -373,6 +402,7 @@ void main() {
class _FakeFirmwareUpdateTransport implements FirmwareUpdateTransport {
_FakeFirmwareUpdateTransport({
required this.totalBytes,
this.initialStatusCode = DfuBootloaderStatusCode.ok,
this.startStatusCode = DfuBootloaderStatusCode.ok,
this.alreadyInBootloader = false,
this.failEnterBootloader = false,
@ -387,6 +417,7 @@ class _FakeFirmwareUpdateTransport implements FirmwareUpdateTransport {
});
final int totalBytes;
final DfuBootloaderStatusCode initialStatusCode;
final DfuBootloaderStatusCode startStatusCode;
final bool alreadyInBootloader;
final bool failEnterBootloader;
@ -461,7 +492,7 @@ class _FakeFirmwareUpdateTransport implements FirmwareUpdateTransport {
@override
Future<Result<List<int>>> readStatus() async {
steps.add('readStatus');
return Ok(_status(DfuBootloaderStatusCode.ok, 0, 0));
return Ok(_status(initialStatusCode, 0, 0));
}
@override