feat: snackbar for flash err + disconnect on dfurecovery end
This commit is contained in:
@ -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
|
||||
|
||||
Reference in New Issue
Block a user