From 3321ed3daab5e67fed6844e2fe9f5d30dd03ad49 Mon Sep 17 00:00:00 2001 From: Armani Ferrante Date: Fri, 11 Jun 2021 09:31:59 -0700 Subject: [PATCH] examples: Add misc test for remaining accounts with state (#343) --- examples/misc/programs/misc/src/lib.rs | 14 ++++++++++++-- examples/misc/tests/misc.js | 8 ++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/examples/misc/programs/misc/src/lib.rs b/examples/misc/programs/misc/src/lib.rs index 5db63fcf9..6f6afcf9d 100644 --- a/examples/misc/programs/misc/src/lib.rs +++ b/examples/misc/programs/misc/src/lib.rs @@ -2,7 +2,7 @@ //! It's not too instructive/coherent by itself, so please see other examples. use anchor_lang::prelude::*; -use misc2::misc2::MyState; +use misc2::misc2::MyState as Misc2State; use misc2::Auth; #[program] @@ -20,6 +20,13 @@ pub mod misc { pub fn new(_ctx: Context) -> Result { Ok(Self { v: vec![] }) } + + pub fn remaining_accounts(&mut self, ctx: Context) -> ProgramResult { + if ctx.remaining_accounts.len() != 1 { + return Err(ProgramError::Custom(1)); // Arbitrary error. + } + Ok(()) + } } pub fn initialize(ctx: Context, udata: u128, idata: i128) -> ProgramResult { @@ -91,6 +98,9 @@ pub mod misc { #[derive(Accounts)] pub struct Ctor {} +#[derive(Accounts)] +pub struct RemainingAccounts {} + #[derive(Accounts)] pub struct Initialize<'info> { #[account(init)] @@ -116,7 +126,7 @@ pub struct TestStateCpi<'info> { #[account(signer)] authority: AccountInfo<'info>, #[account(mut, state = misc2_program)] - cpi_state: CpiState<'info, MyState>, + cpi_state: CpiState<'info, Misc2State>, #[account(executable)] misc2_program: AccountInfo<'info>, } diff --git a/examples/misc/tests/misc.js b/examples/misc/tests/misc.js index b6b387503..dd3b3b4fa 100644 --- a/examples/misc/tests/misc.js +++ b/examples/misc/tests/misc.js @@ -17,6 +17,14 @@ describe("misc", () => { assert.ok(accountInfo.data.length === 99); }); + it("Can use remaining accounts for a state instruction", async () => { + await program.state.rpc.remainingAccounts({ + remainingAccounts: [ + { pubkey: misc2Program.programId, isWritable: false, isSigner: false }, + ], + }); + }); + const data = anchor.web3.Keypair.generate(); it("Can use u128 and i128", async () => {