Skip to content

Commit 6313918

Browse files
committed
create ix fix + initial tests
1 parent 09cf665 commit 6313918

File tree

2 files changed

+174
-0
lines changed

2 files changed

+174
-0
lines changed

src/instruction_builders.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,7 @@ pub fn create_add_approved_evictor_instruction(
331331
AccountMeta::new(*authority, true),
332332
AccountMeta::new_readonly(*authorized_delegate, false),
333333
AccountMeta::new(authorized_delegate_pda, false),
334+
AccountMeta::new_readonly(system_program::id(), false),
334335
],
335336
data: SeatManagerInstruction::AddApprovedEvictor.to_vec(),
336337
}
@@ -347,6 +348,7 @@ pub fn create_remove_approved_evictor_instruction(
347348
AccountMeta::new(*authority, true),
348349
AccountMeta::new_readonly(*authorized_delegate, false),
349350
AccountMeta::new(authorized_delegate_pda, false),
351+
AccountMeta::new_readonly(system_program::id(), false),
350352
],
351353
data: SeatManagerInstruction::RemoveApprovedEvictor.to_vec(),
352354
}
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
mod setup;
2+
3+
use crate::setup::init::bootstrap_default;
4+
use crate::setup::init::PhoenixTestClient;
5+
use phoenix_seat_manager::get_authorized_delegate_pda;
6+
7+
use phoenix_seat_manager::instruction_builders::create_add_approved_evictor_instruction;
8+
use phoenix_seat_manager::instruction_builders::create_claim_seat_instruction;
9+
use phoenix_seat_manager::instruction_builders::create_evict_seat_with_authorized_delegate_instruction;
10+
use phoenix_seat_manager::instruction_builders::create_remove_approved_evictor_instruction;
11+
use phoenix_seat_manager::instruction_builders::EvictTraderAccountBackup;
12+
use setup::init::setup_account;
13+
use solana_sdk::compute_budget::ComputeBudgetInstruction;
14+
use solana_sdk::signature::Keypair;
15+
use solana_sdk::signer::Signer;
16+
17+
#[tokio::test]
18+
async fn test_add_remove_happy_path() {
19+
let PhoenixTestClient {
20+
ctx: _,
21+
sdk,
22+
mint_authority: _,
23+
market: _,
24+
} = bootstrap_default(5).await;
25+
26+
let authorized_delegate = Keypair::new();
27+
let (authorized_delegate_pda, _) =
28+
get_authorized_delegate_pda(&sdk.client.payer.pubkey(), &authorized_delegate.pubkey());
29+
30+
let add_evictor_ix = create_add_approved_evictor_instruction(
31+
&sdk.client.payer.pubkey(),
32+
&authorized_delegate.pubkey(),
33+
);
34+
35+
sdk.client
36+
.sign_send_instructions(vec![add_evictor_ix], vec![])
37+
.await
38+
.unwrap();
39+
40+
let authorized_delegate_pda_data = sdk
41+
.client
42+
.get_account(&authorized_delegate_pda)
43+
.await
44+
.unwrap();
45+
46+
assert_ne!(authorized_delegate_pda_data.lamports, 0);
47+
assert_eq!(
48+
authorized_delegate_pda_data.owner,
49+
phoenix_seat_manager::id()
50+
);
51+
52+
let remove_evictor_ix = create_remove_approved_evictor_instruction(
53+
&sdk.client.payer.pubkey(),
54+
&authorized_delegate.pubkey(),
55+
);
56+
57+
sdk.client
58+
.sign_send_instructions(vec![remove_evictor_ix], vec![])
59+
.await
60+
.unwrap();
61+
62+
let authorized_delegate_pda_resp = sdk.client.get_account(&authorized_delegate_pda).await;
63+
64+
assert!(authorized_delegate_pda_resp.is_err());
65+
}
66+
67+
#[tokio::test]
68+
async fn test_evict_seat_multiple_authorized() {
69+
let PhoenixTestClient {
70+
ctx: _,
71+
sdk,
72+
market,
73+
mint_authority,
74+
} = bootstrap_default(5).await;
75+
76+
let authorized_delegate = Keypair::new();
77+
let (authorized_delegate_pda, _) =
78+
get_authorized_delegate_pda(&sdk.client.payer.pubkey(), &authorized_delegate.pubkey());
79+
80+
let add_evictor_ix = create_add_approved_evictor_instruction(
81+
&sdk.client.payer.pubkey(),
82+
&authorized_delegate.pubkey(),
83+
);
84+
85+
sdk.client
86+
.sign_send_instructions(vec![add_evictor_ix], vec![])
87+
.await
88+
.unwrap();
89+
90+
let authorized_delegate_pda_data = sdk
91+
.client
92+
.get_account(&authorized_delegate_pda)
93+
.await
94+
.unwrap();
95+
96+
assert_ne!(authorized_delegate_pda_data.lamports, 0);
97+
assert_eq!(
98+
authorized_delegate_pda_data.owner,
99+
phoenix_seat_manager::id()
100+
);
101+
102+
let meta = sdk.get_market_metadata(&market).await.unwrap();
103+
104+
// Claim seats for two traders
105+
let trader_one = setup_account(
106+
&sdk.client,
107+
&mint_authority,
108+
meta.base_mint,
109+
meta.quote_mint,
110+
)
111+
.await;
112+
113+
let trader_two = setup_account(
114+
&sdk.client,
115+
&mint_authority,
116+
meta.base_mint,
117+
meta.quote_mint,
118+
)
119+
.await;
120+
121+
let claim_seat_one = create_claim_seat_instruction(&trader_one.user.pubkey(), &market);
122+
123+
let claim_seat_two = create_claim_seat_instruction(&trader_two.user.pubkey(), &market);
124+
125+
sdk.client
126+
.sign_send_instructions(
127+
vec![claim_seat_one, claim_seat_two],
128+
vec![&trader_one.user, &trader_two.user],
129+
)
130+
.await
131+
.unwrap();
132+
133+
let traders = sdk.get_traders_with_market_key(&market).await.unwrap();
134+
assert!(traders.get(&trader_one.user.pubkey()).is_some());
135+
assert!(traders.get(&trader_two.user.pubkey()).is_some());
136+
137+
// Evict seats for both traders
138+
let evict_seats = create_evict_seat_with_authorized_delegate_instruction(
139+
&market,
140+
&meta.base_mint,
141+
&meta.quote_mint,
142+
&authorized_delegate.pubkey(),
143+
vec![
144+
EvictTraderAccountBackup {
145+
trader_pubkey: trader_one.user.pubkey(),
146+
base_token_account_backup: None,
147+
quote_token_account_backup: None,
148+
},
149+
EvictTraderAccountBackup {
150+
trader_pubkey: trader_two.user.pubkey(),
151+
base_token_account_backup: None,
152+
quote_token_account_backup: None,
153+
},
154+
],
155+
&sdk.client.payer.pubkey(),
156+
);
157+
158+
let compute_increase = ComputeBudgetInstruction::set_compute_unit_limit(1_400_000);
159+
160+
sdk.client
161+
.sign_send_instructions(
162+
vec![compute_increase, evict_seats],
163+
vec![&authorized_delegate],
164+
)
165+
.await
166+
.unwrap();
167+
168+
// Assert that neither trader are in the market state
169+
let traders = sdk.get_traders_with_market_key(&market).await.unwrap();
170+
assert!(traders.get(&trader_one.user.pubkey()).is_none());
171+
assert!(traders.get(&trader_two.user.pubkey()).is_none());
172+
}

0 commit comments

Comments
 (0)