333 lines
16 KiB
TypeScript
333 lines
16 KiB
TypeScript
|
import { ProgramErrorStack, AnchorError } from "../src/error";
|
||
|
|
||
|
describe("ProgramErrorStack", () => {
|
||
|
test("basic", () => {
|
||
|
const logs = [
|
||
|
"Program ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE invoke [1]",
|
||
|
"Program ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE consumed 3797 of 200000 compute units",
|
||
|
"Program ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE failed: custom program error: 0x29",
|
||
|
];
|
||
|
|
||
|
expect(
|
||
|
ProgramErrorStack.parse(logs).stack.map((publicKey) =>
|
||
|
publicKey.toString()
|
||
|
)
|
||
|
).toEqual(["ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE"]);
|
||
|
});
|
||
|
|
||
|
it("basic multiple ix", () => {
|
||
|
const logs = [
|
||
|
"Program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin invoke [1]",
|
||
|
"Program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin consumed 4308 of 200000 compute units",
|
||
|
"Program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin success",
|
||
|
"Program ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE invoke [1]",
|
||
|
"Program ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE consumed 3797 of 200000 compute units",
|
||
|
"Program ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE failed: custom program error: 0x29",
|
||
|
];
|
||
|
|
||
|
expect(
|
||
|
ProgramErrorStack.parse(logs).stack.map((publicKey) =>
|
||
|
publicKey.toString()
|
||
|
)
|
||
|
).toEqual(["ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE"]);
|
||
|
});
|
||
|
|
||
|
it("failed inner ix", () => {
|
||
|
const logs = [
|
||
|
"Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS invoke [1]",
|
||
|
"Program log: Instruction: Create",
|
||
|
"Program ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE invoke [2]",
|
||
|
"Program log: AnchorError thrown in programs/switchboard_v2/src/actions/aggregator_save_result_action.rs:235. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
|
||
|
"Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS consumed 12619 of 1400000 compute units",
|
||
|
"Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS failed: Program failed to complete",
|
||
|
];
|
||
|
|
||
|
expect(
|
||
|
ProgramErrorStack.parse(logs).stack.map((publicKey) =>
|
||
|
publicKey.toString()
|
||
|
)
|
||
|
).toEqual([
|
||
|
"Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS",
|
||
|
"ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE",
|
||
|
]);
|
||
|
});
|
||
|
|
||
|
it("ignore successful inner ix", () => {
|
||
|
const logs = [
|
||
|
"Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS invoke [1]",
|
||
|
"Program log: Instruction: Create",
|
||
|
"Program 11111111111111111111111111111111 invoke [2]",
|
||
|
"Program 11111111111111111111111111111111 success",
|
||
|
"Program log: panicked at programs/floats/src/lib.rs:17:9",
|
||
|
"Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS consumed 12619 of 1400000 compute units",
|
||
|
"Program failed to complete: BPF program panicked",
|
||
|
"Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS failed: Program failed to complete",
|
||
|
];
|
||
|
expect(
|
||
|
ProgramErrorStack.parse(logs).stack.map((publicKey) =>
|
||
|
publicKey.toString()
|
||
|
)
|
||
|
).toEqual(["Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS"]);
|
||
|
});
|
||
|
|
||
|
it("ignore successful inner ix but don't ignore failing inner ix", () => {
|
||
|
const logs = [
|
||
|
"Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS invoke [1]",
|
||
|
"Program log: Instruction: Create",
|
||
|
"Program 11111111111111111111111111111111 invoke [2]",
|
||
|
"Program 11111111111111111111111111111111 success",
|
||
|
"Program ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE invoke [2]",
|
||
|
"Program log: panicked at programs/floats/src/lib.rs:17:9",
|
||
|
"Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS consumed 12619 of 1400000 compute units",
|
||
|
"Program failed to complete: BPF program panicked",
|
||
|
"Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS failed: Program failed to complete",
|
||
|
];
|
||
|
expect(
|
||
|
ProgramErrorStack.parse(logs).stack.map((publicKey) =>
|
||
|
publicKey.toString()
|
||
|
)
|
||
|
).toEqual([
|
||
|
"Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS",
|
||
|
"ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE",
|
||
|
]);
|
||
|
});
|
||
|
|
||
|
it("ignore successful inner ix but don't ignore failing inner ix - big nested", () => {
|
||
|
const logs = [
|
||
|
"Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS invoke [1]",
|
||
|
"Program log: Instruction: Create",
|
||
|
"Program 11111111111111111111111111111111 invoke [2]",
|
||
|
"Program 11111111111111111111111111111111 success",
|
||
|
"Program 1119iqpxV28XnisGGQVMHsABdWZAx9PjtwegepRhGm5 invoke [2]",
|
||
|
"Program 1119iqpxV28XnisGGQVMHsABdWZAx9PjtwegepRhGm5 consumed 4308 of 200000 compute units",
|
||
|
"Program 1119iqpxV28XnisGGQVMHsABdWZAx9PjtwegepRhGm5 success",
|
||
|
"Program 222fsxyjMZSSpT9gpucChbiFmjZC2GtaZmKsBkh66KMZ invoke [2]",
|
||
|
"Program 333fE7qebyWBjcaCJcVmkzwrheA1Ka9bjGChuhVD9iQr invoke [3]",
|
||
|
"Program 444D5MLf9UbeJBiuFw5WzVG3bMejweunZHPboWm2oTsh invoke [4]",
|
||
|
"Program 444D5MLf9UbeJBiuFw5WzVG3bMejweunZHPboWm2oTsh consumed 14343 of 200000 compute units",
|
||
|
"Program 444D5MLf9UbeJBiuFw5WzVG3bMejweunZHPboWm2oTsh success",
|
||
|
"Program 555CBVR14jAYjK8jRE5kurBACiSNYXkffciRSG2R3krX invoke [4]",
|
||
|
"Program 555CBVR14jAYjK8jRE5kurBACiSNYXkffciRSG2R3krX consumed 163337 of 200000 compute units",
|
||
|
"Program 555CBVR14jAYjK8jRE5kurBACiSNYXkffciRSG2R3krX success",
|
||
|
"Program 666UBGVHWNP7qNqUdnYz86owJ8oErztVvgeF5Dd5v8cR invoke [4]",
|
||
|
"Program 666UBGVHWNP7qNqUdnYz86owJ8oErztVvgeF5Dd5v8cR success",
|
||
|
"Program 333fE7qebyWBjcaCJcVmkzwrheA1Ka9bjGChuhVD9iQr success",
|
||
|
"Program 222fsxyjMZSSpT9gpucChbiFmjZC2GtaZmKsBkh66KMZ success",
|
||
|
"Program 777UGK3pU4ygVWwnn7MDnetec1nSVg4Xi53DFSHu9D6A invoke [2]",
|
||
|
"Program 888E49S65VpyDmydi6juT7tsSwNyD3ZEVkV8te1rL3iH invoke [3]",
|
||
|
"Program 999X95icuyGzfYoeP6SPMb8aMn6ahfCpAt9VPddSNPPi invoke [4]",
|
||
|
"Program 999X95icuyGzfYoeP6SPMb8aMn6ahfCpAt9VPddSNPPi success",
|
||
|
"Program ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE invoke [4]",
|
||
|
"Program log: panicked at programs/floats/src/lib.rs:17:9",
|
||
|
"Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS consumed 12619 of 1400000 compute units",
|
||
|
"Program failed to complete: BPF program panicked",
|
||
|
"Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS failed: Program failed to complete",
|
||
|
];
|
||
|
|
||
|
expect(
|
||
|
ProgramErrorStack.parse(logs).stack.map((publicKey) =>
|
||
|
publicKey.toString()
|
||
|
)
|
||
|
).toEqual([
|
||
|
"Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS",
|
||
|
"777UGK3pU4ygVWwnn7MDnetec1nSVg4Xi53DFSHu9D6A",
|
||
|
"888E49S65VpyDmydi6juT7tsSwNyD3ZEVkV8te1rL3iH",
|
||
|
"ERRM6YCMsccM22TEaPuu35KVU4iCY3GLCz4qMsKLYReE",
|
||
|
]);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("AnchorError", () => {
|
||
|
it("FileLine AnchorError with Pubkeys", () => {
|
||
|
const logs = [
|
||
|
"Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f invoke [1]",
|
||
|
"Program log: Instruction: AggregatorSaveResult",
|
||
|
"Program log: AnchorError thrown in programs/switchboard_v2/src/actions/aggregator_save_result_action.rs:235. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
|
||
|
"Program log: Left:",
|
||
|
"Program log: Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS",
|
||
|
"Program log: Right:",
|
||
|
"Program log: SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f",
|
||
|
"Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f consumed 28928 of 200000 compute units",
|
||
|
"Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f failed: custom program error: 0x1785",
|
||
|
];
|
||
|
|
||
|
const anchorError = AnchorError.parse(logs)!;
|
||
|
expect(anchorError.program.toString()).toEqual(
|
||
|
"SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f"
|
||
|
);
|
||
|
expect(anchorError.error.errorCode).toEqual({
|
||
|
code: "OracleMismatchError",
|
||
|
number: 6021,
|
||
|
});
|
||
|
expect(anchorError.error.errorMessage).toEqual(
|
||
|
"An unexpected oracle account was provided for the transaction."
|
||
|
);
|
||
|
expect(anchorError.error.origin).toEqual({
|
||
|
file:
|
||
|
"programs/switchboard_v2/src/actions/aggregator_save_result_action.rs",
|
||
|
line: 235,
|
||
|
});
|
||
|
expect(
|
||
|
anchorError.error.comparedValues!.map((pk) => pk.toString())
|
||
|
).toEqual([
|
||
|
"Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS",
|
||
|
"SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f",
|
||
|
]);
|
||
|
expect(
|
||
|
anchorError.programErrorStack!.map((publicKey) => publicKey.toString())
|
||
|
).toEqual(["SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f"]);
|
||
|
expect(anchorError.errorLogs).toEqual([
|
||
|
"Program log: AnchorError thrown in programs/switchboard_v2/src/actions/aggregator_save_result_action.rs:235. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
|
||
|
"Program log: Left:",
|
||
|
"Program log: Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS",
|
||
|
"Program log: Right:",
|
||
|
"Program log: SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f",
|
||
|
]);
|
||
|
});
|
||
|
|
||
|
it("FileLine AnchorError with Values", () => {
|
||
|
const logs = [
|
||
|
"Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f invoke [1]",
|
||
|
"Program log: Instruction: AggregatorSaveResult",
|
||
|
"Program log: AnchorError thrown in programs/switchboard_v2/src/actions/aggregator_save_result_action.rs:235. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
|
||
|
"Program log: Left: 1337",
|
||
|
"Program log: Right: 4220",
|
||
|
"Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f consumed 28928 of 200000 compute units",
|
||
|
"Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f failed: custom program error: 0x1785",
|
||
|
];
|
||
|
|
||
|
const anchorError = AnchorError.parse(logs)!;
|
||
|
expect(anchorError.program.toString()).toEqual(
|
||
|
"SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f"
|
||
|
);
|
||
|
expect(anchorError.error.errorCode).toEqual({
|
||
|
code: "OracleMismatchError",
|
||
|
number: 6021,
|
||
|
});
|
||
|
expect(anchorError.error.errorMessage).toEqual(
|
||
|
"An unexpected oracle account was provided for the transaction."
|
||
|
);
|
||
|
expect(anchorError.error.origin).toEqual({
|
||
|
file:
|
||
|
"programs/switchboard_v2/src/actions/aggregator_save_result_action.rs",
|
||
|
line: 235,
|
||
|
});
|
||
|
expect(anchorError.error.comparedValues!).toEqual(["1337", "4220"]);
|
||
|
expect(
|
||
|
anchorError.programErrorStack!.map((publicKey) => publicKey.toString())
|
||
|
).toEqual(["SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f"]);
|
||
|
expect(anchorError.errorLogs).toEqual([
|
||
|
"Program log: AnchorError thrown in programs/switchboard_v2/src/actions/aggregator_save_result_action.rs:235. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
|
||
|
"Program log: Left: 1337",
|
||
|
"Program log: Right: 4220",
|
||
|
]);
|
||
|
});
|
||
|
|
||
|
it("AccountName AnchorError with Pubkeys", () => {
|
||
|
const logs = [
|
||
|
"Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f invoke [1]",
|
||
|
"Program log: Instruction: AggregatorSaveResult",
|
||
|
"Program log: AnchorError caused by account: some_account. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
|
||
|
"Program log: Left:",
|
||
|
"Program log: Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS",
|
||
|
"Program log: Right:",
|
||
|
"Program log: SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f",
|
||
|
"Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f consumed 28928 of 200000 compute units",
|
||
|
"Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f failed: custom program error: 0x1785",
|
||
|
];
|
||
|
|
||
|
const anchorError = AnchorError.parse(logs)!;
|
||
|
expect(anchorError.program.toString()).toEqual(
|
||
|
"SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f"
|
||
|
);
|
||
|
expect(anchorError.error.errorCode).toEqual({
|
||
|
code: "OracleMismatchError",
|
||
|
number: 6021,
|
||
|
});
|
||
|
expect(anchorError.error.errorMessage).toEqual(
|
||
|
"An unexpected oracle account was provided for the transaction."
|
||
|
);
|
||
|
expect(anchorError.error.origin).toEqual("some_account");
|
||
|
expect(
|
||
|
anchorError.error.comparedValues!.map((pk) => pk.toString())
|
||
|
).toEqual([
|
||
|
"Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS",
|
||
|
"SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f",
|
||
|
]);
|
||
|
expect(
|
||
|
anchorError.programErrorStack!.map((publicKey) => publicKey.toString())
|
||
|
).toEqual(["SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f"]);
|
||
|
expect(anchorError.errorLogs).toEqual([
|
||
|
"Program log: AnchorError caused by account: some_account. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
|
||
|
"Program log: Left:",
|
||
|
"Program log: Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS",
|
||
|
"Program log: Right:",
|
||
|
"Program log: SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f",
|
||
|
]);
|
||
|
});
|
||
|
|
||
|
it("AccountName AnchorError with Values", () => {
|
||
|
const logs = [
|
||
|
"Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f invoke [1]",
|
||
|
"Program log: Instruction: AggregatorSaveResult",
|
||
|
"Program log: AnchorError caused by account: some_account. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
|
||
|
"Program log: Left: 1337",
|
||
|
"Program log: Right: 4220",
|
||
|
"Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f consumed 28928 of 200000 compute units",
|
||
|
"Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f failed: custom program error: 0x1785",
|
||
|
];
|
||
|
|
||
|
const anchorError = AnchorError.parse(logs)!;
|
||
|
expect(anchorError.program.toString()).toEqual(
|
||
|
"SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f"
|
||
|
);
|
||
|
expect(anchorError.error.errorCode).toEqual({
|
||
|
code: "OracleMismatchError",
|
||
|
number: 6021,
|
||
|
});
|
||
|
expect(anchorError.error.errorMessage).toEqual(
|
||
|
"An unexpected oracle account was provided for the transaction."
|
||
|
);
|
||
|
expect(anchorError.error.origin).toEqual("some_account");
|
||
|
expect(anchorError.error.comparedValues!).toEqual(["1337", "4220"]);
|
||
|
expect(
|
||
|
anchorError.programErrorStack!.map((publicKey) => publicKey.toString())
|
||
|
).toEqual(["SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f"]);
|
||
|
expect(anchorError.errorLogs).toEqual([
|
||
|
"Program log: AnchorError caused by account: some_account. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
|
||
|
"Program log: Left: 1337",
|
||
|
"Program log: Right: 4220",
|
||
|
]);
|
||
|
});
|
||
|
|
||
|
it("Empty AnchorError", () => {
|
||
|
const logs = [
|
||
|
"Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f invoke [1]",
|
||
|
"Program log: Instruction: AggregatorSaveResult",
|
||
|
"Program log: AnchorError occurred. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
|
||
|
"Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f consumed 28928 of 200000 compute units",
|
||
|
"Program SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f failed: custom program error: 0x1785",
|
||
|
];
|
||
|
|
||
|
const anchorError = AnchorError.parse(logs)!;
|
||
|
expect(anchorError.program.toString()).toEqual(
|
||
|
"SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f"
|
||
|
);
|
||
|
expect(anchorError.error.errorCode).toEqual({
|
||
|
code: "OracleMismatchError",
|
||
|
number: 6021,
|
||
|
});
|
||
|
expect(anchorError.error.errorMessage).toEqual(
|
||
|
"An unexpected oracle account was provided for the transaction."
|
||
|
);
|
||
|
expect(anchorError.error.origin).toBeUndefined();
|
||
|
expect(anchorError.error.comparedValues).toBeUndefined();
|
||
|
expect(
|
||
|
anchorError.programErrorStack!.map((publicKey) => publicKey.toString())
|
||
|
).toEqual(["SW1TCH7qEPTdLsDHRgPuMQjbQxKdH2aBStViMFnt64f"]);
|
||
|
expect(anchorError.errorLogs).toEqual([
|
||
|
"Program log: AnchorError occurred. Error Code: OracleMismatchError. Error Number: 6021. Error Message: An unexpected oracle account was provided for the transaction..",
|
||
|
]);
|
||
|
});
|
||
|
});
|