add tests for bootloader protocol errors

This commit is contained in:
David Lechner
2020-05-26 21:20:08 -05:00
committed by David Lechner
parent 3e4ea382e5
commit 7a7eba407f
4 changed files with 109 additions and 7 deletions
+25 -2
View File
@@ -77,6 +77,20 @@ export enum ProtectionLevel {
Level2 = 0x02,
}
/**
* Protocol error. Thrown e.g. when there is a malformed message.
*/
export class ProtocolError extends Error {
/**
* Creates a new ProtocolError.
* @param message The error message
* @param data The bytecodes that caused the error
*/
constructor(message: string, public data: DataView) {
super(message);
}
}
/**
* Creates a new message to erase the flash memory.
*/
@@ -192,11 +206,20 @@ export function parseErrorResponse(msg: DataView): Command {
assert(msg.getUint8(0) === 5, 'unexpected length');
// Error responses are ordered differently compared to command responses.
if (msg.getUint8(2) !== ErrorBytecode) {
throw Error('expecting error');
throw new ProtocolError(
`expecting error bytecode 0x05 but got 0x${msg
.getUint8(2)
.toString(16)
.padStart(2, '0')}`,
msg,
);
}
if (msg.getUint8(4) !== ErrorCode.UnknownCommand) {
// "command not recognized" is only possible error code
throw Error('unexpected error code');
throw new ProtocolError(
`unknown error code: 0x${msg.getUint8(4).toString(16).padStart(2, '0')}`,
msg,
);
}
const command = msg.getUint8(3);
return command;