2021-01-15 23:05:26 -08:00
|
|
|
const assert = require("assert");
|
2021-12-15 15:11:41 -08:00
|
|
|
const anchor = require("@project-serum/anchor");
|
2021-06-09 13:02:50 -07:00
|
|
|
const { Account, Transaction, TransactionInstruction } = anchor.web3;
|
2021-01-15 23:05:26 -08:00
|
|
|
|
|
|
|
describe("errors", () => {
|
|
|
|
// Configure the client to use the local cluster.
|
|
|
|
anchor.setProvider(anchor.Provider.local());
|
|
|
|
|
|
|
|
const program = anchor.workspace.Errors;
|
|
|
|
|
|
|
|
it("Emits a Hello error", async () => {
|
|
|
|
try {
|
|
|
|
const tx = await program.rpc.hello();
|
|
|
|
assert.ok(false);
|
|
|
|
} catch (err) {
|
|
|
|
const errMsg =
|
|
|
|
"This is an error message clients will automatically display";
|
|
|
|
assert.equal(err.toString(), errMsg);
|
|
|
|
assert.equal(err.msg, errMsg);
|
2021-12-08 13:50:08 -08:00
|
|
|
assert.equal(err.code, 6000);
|
2021-01-15 23:05:26 -08:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
it("Emits a HelloNoMsg error", async () => {
|
|
|
|
try {
|
|
|
|
const tx = await program.rpc.helloNoMsg();
|
|
|
|
assert.ok(false);
|
|
|
|
} catch (err) {
|
|
|
|
const errMsg = "HelloNoMsg";
|
|
|
|
assert.equal(err.toString(), errMsg);
|
|
|
|
assert.equal(err.msg, errMsg);
|
2021-12-08 13:50:08 -08:00
|
|
|
assert.equal(err.code, 6000 + 123);
|
2021-01-15 23:05:26 -08:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
it("Emits a HelloNext error", async () => {
|
|
|
|
try {
|
|
|
|
const tx = await program.rpc.helloNext();
|
|
|
|
assert.ok(false);
|
|
|
|
} catch (err) {
|
|
|
|
const errMsg = "HelloNext";
|
|
|
|
assert.equal(err.toString(), errMsg);
|
|
|
|
assert.equal(err.msg, errMsg);
|
2021-12-08 13:50:08 -08:00
|
|
|
assert.equal(err.code, 6000 + 124);
|
2021-06-09 13:02:50 -07:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
it("Emits a mut error", async () => {
|
|
|
|
try {
|
|
|
|
const tx = await program.rpc.mutError({
|
|
|
|
accounts: {
|
|
|
|
myAccount: anchor.web3.SYSVAR_RENT_PUBKEY,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
assert.ok(false);
|
|
|
|
} catch (err) {
|
|
|
|
const errMsg = "A mut constraint was violated";
|
|
|
|
assert.equal(err.toString(), errMsg);
|
|
|
|
assert.equal(err.msg, errMsg);
|
2021-12-08 13:50:08 -08:00
|
|
|
assert.equal(err.code, 2000);
|
2021-06-09 13:02:50 -07:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2021-07-03 11:58:23 -07:00
|
|
|
it("Emits a has one error", async () => {
|
2021-06-09 13:02:50 -07:00
|
|
|
try {
|
|
|
|
const account = new Account();
|
2021-07-03 11:58:23 -07:00
|
|
|
const tx = await program.rpc.hasOneError({
|
2021-06-09 13:02:50 -07:00
|
|
|
accounts: {
|
|
|
|
myAccount: account.publicKey,
|
|
|
|
owner: anchor.web3.SYSVAR_RENT_PUBKEY,
|
|
|
|
rent: anchor.web3.SYSVAR_RENT_PUBKEY,
|
|
|
|
},
|
|
|
|
instructions: [
|
2021-07-03 11:58:23 -07:00
|
|
|
await program.account.hasOneAccount.createInstruction(account),
|
2021-06-09 13:02:50 -07:00
|
|
|
],
|
|
|
|
signers: [account],
|
|
|
|
});
|
|
|
|
assert.ok(false);
|
|
|
|
} catch (err) {
|
2021-07-03 11:58:23 -07:00
|
|
|
const errMsg = "A has_one constraint was violated";
|
2021-06-09 13:02:50 -07:00
|
|
|
assert.equal(err.toString(), errMsg);
|
|
|
|
assert.equal(err.msg, errMsg);
|
2021-12-08 13:50:08 -08:00
|
|
|
assert.equal(err.code, 2001);
|
2021-06-09 13:02:50 -07:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
// This test uses a raw transaction and provider instead of a program
|
|
|
|
// instance since the client won't allow one to send a transaction
|
|
|
|
// with an invalid signer account.
|
|
|
|
it("Emits a signer error", async () => {
|
|
|
|
try {
|
|
|
|
const account = new Account();
|
|
|
|
const tx = new Transaction();
|
|
|
|
tx.add(
|
|
|
|
new TransactionInstruction({
|
|
|
|
keys: [
|
|
|
|
{
|
|
|
|
pubkey: anchor.web3.SYSVAR_RENT_PUBKEY,
|
|
|
|
isWritable: false,
|
|
|
|
isSigner: false,
|
|
|
|
},
|
|
|
|
],
|
|
|
|
programId: program.programId,
|
|
|
|
data: program.coder.instruction.encode("signer_error", {}),
|
|
|
|
})
|
|
|
|
);
|
|
|
|
await program.provider.send(tx);
|
|
|
|
assert.ok(false);
|
|
|
|
} catch (err) {
|
|
|
|
const errMsg =
|
2022-02-08 09:34:18 -08:00
|
|
|
"Error: failed to send transaction: Transaction simulation failed: Error processing Instruction 0: custom program error: 0xbc2";
|
2021-06-09 13:02:50 -07:00
|
|
|
assert.equal(err.toString(), errMsg);
|
2021-01-15 23:05:26 -08:00
|
|
|
}
|
|
|
|
});
|
2021-10-21 15:51:20 -07:00
|
|
|
|
|
|
|
it("Emits a raw custom error", async () => {
|
|
|
|
try {
|
|
|
|
const tx = await program.rpc.rawCustomError({
|
|
|
|
accounts: {
|
|
|
|
myAccount: anchor.web3.SYSVAR_RENT_PUBKEY,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
assert.ok(false);
|
|
|
|
} catch (err) {
|
|
|
|
const errMsg = "HelloCustom";
|
|
|
|
assert.equal(err.toString(), errMsg);
|
|
|
|
assert.equal(err.msg, errMsg);
|
2021-12-08 13:50:08 -08:00
|
|
|
assert.equal(err.code, 6000 + 125);
|
2021-10-21 15:51:20 -07:00
|
|
|
}
|
|
|
|
});
|
2021-11-18 07:42:07 -08:00
|
|
|
|
|
|
|
it("Emits a account not initialized error", async () => {
|
|
|
|
try {
|
|
|
|
const tx = await program.rpc.accountNotInitializedError({
|
|
|
|
accounts: {
|
2021-12-15 15:11:41 -08:00
|
|
|
notInitializedAccount: new anchor.web3.Keypair().publicKey,
|
2021-11-18 07:42:07 -08:00
|
|
|
},
|
|
|
|
});
|
2021-12-15 15:11:41 -08:00
|
|
|
assert.fail(
|
|
|
|
"Unexpected success in creating a transaction that should have fail with `AccountNotInitialized` error"
|
|
|
|
);
|
2021-11-18 07:42:07 -08:00
|
|
|
} catch (err) {
|
2021-12-15 15:11:41 -08:00
|
|
|
const errMsg =
|
|
|
|
"The program expected this account to be already initialized";
|
2021-11-18 07:42:07 -08:00
|
|
|
assert.equal(err.toString(), errMsg);
|
|
|
|
}
|
|
|
|
});
|
2021-01-15 23:05:26 -08:00
|
|
|
});
|