Skip to content

Commit 454dc49

Browse files
committed
test(message-buffer): refactor test util methods into MessageBufferTestContext for less duplication
1 parent e47d67b commit 454dc49

File tree

10 files changed

+649
-764
lines changed

10 files changed

+649
-764
lines changed

message_buffer/programs/mock-cpi-caller/tests/cases/mod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
pub use {
22
super::program_test::*,
3+
anchor_lang::prelude::ProgramError,
4+
message_buffer::MessageBufferError,
35
solana_program_test::*,
46
solana_sdk::{
57
pubkey::Pubkey,
@@ -10,7 +12,7 @@ pub use {
1012
},
1113
};
1214

13-
mod test_create_msg_buffer;
15+
mod test_create_buffer;
1416
mod test_delete_buffer;
1517
mod test_initialize;
1618
mod test_put_all;
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
use super::*;
2+
3+
#[tokio::test]
4+
async fn test_create_buffer() {
5+
let mut context =
6+
MessageBufferTestContext::initialize_with_default_test_allowed_programs(false)
7+
.await
8+
.unwrap();
9+
10+
let space = 1024;
11+
12+
let (msg_buffer_pda, msg_buffer_bump) = context
13+
.create_buffer(MessageBufferTestContext::DEFAULT_TEST_PRICE_ID, space)
14+
.await
15+
.unwrap();
16+
17+
18+
let msg_buffer_account_data = context
19+
.fetch_msg_buffer_account_data(&msg_buffer_pda)
20+
.await
21+
.unwrap();
22+
23+
24+
assert_eq!(msg_buffer_account_data.len(), space as usize);
25+
26+
let (bump, _version, _header_len, end_offsets) =
27+
deserialize_msg_buffer_header(&msg_buffer_account_data);
28+
29+
assert_eq!(bump, msg_buffer_bump);
30+
assert_eq!(end_offsets, [0u16; 255]);
31+
}
32+
33+
#[tokio::test]
34+
async fn create_buffer_with_invalid_admin_should_fail() {
35+
let mut context =
36+
MessageBufferTestContext::initialize_with_default_test_allowed_programs(false)
37+
.await
38+
.unwrap();
39+
40+
let pyth_price_acct = MessageBufferTestContext::get_mock_pyth_price_account(
41+
MessageBufferTestContext::DEFAULT_TEST_PRICE_ID,
42+
);
43+
let cpi_caller_auth = MessageBufferTestContext::get_mock_cpi_auth();
44+
let space = 1024;
45+
let invalid_admin = Keypair::new();
46+
let (msg_buffer_pda, _) = find_msg_buffer_pda(cpi_caller_auth, pyth_price_acct);
47+
let invalid_create_buffer_ix = create_msg_buffer_ix(
48+
cpi_caller_auth,
49+
pyth_price_acct,
50+
space,
51+
context.whitelist(),
52+
invalid_admin.pubkey(),
53+
msg_buffer_pda,
54+
);
55+
56+
let res = context
57+
.process_ixs(&[invalid_create_buffer_ix], vec![&invalid_admin])
58+
.await;
59+
60+
assert!(res.is_err());
61+
62+
let err: ProgramError = res.unwrap_err().into();
63+
// violates the whitelist has_one = admin constraint
64+
assert_eq!(
65+
err,
66+
ProgramError::Custom(anchor_lang::error::ErrorCode::ConstraintHasOne.into())
67+
)
68+
}
69+
70+
#[tokio::test]
71+
async fn create_buffer_with_invalid_size_should_fail() {
72+
let mut context =
73+
MessageBufferTestContext::initialize_with_default_test_allowed_programs(false)
74+
.await
75+
.unwrap();
76+
77+
78+
let pyth_price_acct = MessageBufferTestContext::get_mock_pyth_price_account(
79+
MessageBufferTestContext::DEFAULT_TEST_PRICE_ID,
80+
);
81+
let cpi_caller_auth = MessageBufferTestContext::get_mock_cpi_auth();
82+
let _whitelist = context.whitelist();
83+
let admin = context.default_admin();
84+
85+
let (msg_buffer_pda, _) = find_msg_buffer_pda(cpi_caller_auth, pyth_price_acct);
86+
let invalid_create_buffer_ix = create_msg_buffer_ix(
87+
cpi_caller_auth,
88+
pyth_price_acct,
89+
1,
90+
context.whitelist(),
91+
admin.pubkey(),
92+
msg_buffer_pda,
93+
);
94+
95+
let res = context
96+
.process_ixs(&[invalid_create_buffer_ix], vec![&admin])
97+
.await;
98+
99+
assert!(res.is_err());
100+
101+
let err: ProgramError = res.unwrap_err().into();
102+
assert_eq!(
103+
err,
104+
ProgramError::Custom(MessageBufferError::MessageBufferTooSmall.into())
105+
);
106+
}

message_buffer/programs/mock-cpi-caller/tests/cases/test_create_msg_buffer.rs

Lines changed: 0 additions & 113 deletions
This file was deleted.

message_buffer/programs/mock-cpi-caller/tests/cases/test_delete_buffer.rs

Lines changed: 14 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,27 @@ use super::*;
22

33
#[tokio::test]
44
async fn test_delete_buffer() {
5-
let pt_ctxt = &mut setup_program_test(false).await;
5+
let mut context = MessageBufferTestContext::initialize_with_default_test_buffer(
6+
false,
7+
MessageBufferTestContext::DEFAULT_TARGET_SIZE,
8+
)
9+
.await
10+
.unwrap();
611

7-
let banks_client = &mut pt_ctxt.banks_client;
8-
let payer = &pt_ctxt.payer;
9-
let (whitelist_pda, _) = send_initialize_whitelist(banks_client, payer.pubkey(), payer)
10-
.await
11-
.unwrap();
12+
let payer = context.payer.pubkey();
13+
let (msg_buffer_pda, _) = MessageBufferTestContext::default_msg_buffer();
1214

13-
let mock_cpi_caller_auth = get_mock_cpi_auth();
15+
let payer_lamports_before = context.get_balance(payer).await;
1416

15-
let allowed_programs = vec![mock_cpi_caller_auth];
16-
send_set_allowed_programs(banks_client, payer, &whitelist_pda, &allowed_programs)
17+
context
18+
.delete_buffer(MessageBufferTestContext::DEFAULT_TEST_PRICE_ID)
1719
.await
1820
.unwrap();
19-
let pyth_price_acct_id = 0u64;
20-
let mock_pyth_price_acct = get_mock_pyth_price_account(pyth_price_acct_id);
21-
let target_size = 1024;
22-
let (msg_buffer_pda, msg_buffer_bump) = send_create_msg_buffer(
23-
banks_client,
24-
payer,
25-
payer,
26-
whitelist_pda,
27-
mock_cpi_caller_auth,
28-
mock_pyth_price_acct,
29-
target_size,
30-
)
31-
.await
32-
.unwrap();
33-
34-
let payer_lamports_before = banks_client.get_balance(payer.pubkey()).await.unwrap();
3521

36-
send_delete_msg_buffer(
37-
banks_client,
38-
payer,
39-
whitelist_pda,
40-
mock_cpi_caller_auth,
41-
mock_pyth_price_acct,
42-
msg_buffer_bump,
43-
)
44-
.await
45-
.unwrap();
22+
let msg_buffer_account_data = context.fetch_msg_buffer_account_data(&msg_buffer_pda).await;
23+
assert!(msg_buffer_account_data.is_none());
4624

47-
let msg_buffer_account = banks_client.get_account(msg_buffer_pda).await.unwrap();
48-
assert!(msg_buffer_account.is_none());
49-
let payer_lamports_after = banks_client.get_balance(payer.pubkey()).await.unwrap();
25+
let payer_lamports_after = context.get_balance(payer).await;
5026
assert!(payer_lamports_before < payer_lamports_after);
5127
}
5228

message_buffer/programs/mock-cpi-caller/tests/cases/test_initialize.rs

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,15 @@ use super::*;
22

33
#[tokio::test]
44
async fn test_initialize() {
5-
let pt_ctxt = &mut setup_program_test(false).await;
6-
7-
// Initialize whitelist
8-
9-
let banks_client = &mut pt_ctxt.banks_client;
10-
let payer = &pt_ctxt.payer;
11-
let (whitelist_pda, whitelist_bump) =
12-
send_initialize_whitelist(banks_client, payer.pubkey(), payer)
13-
.await
14-
.unwrap();
5+
let context = &mut MessageBufferTestContext::initialize_context(false).await;
6+
let admin = context.payer.insecure_clone();
7+
let (_, whitelist_bump) = context.initialize(admin).await.unwrap();
158

169
let (whitelist_acct_bump, admin_pubkey, allowed_programs_len, allowed_programs) =
17-
fetch_whitelist(banks_client, &whitelist_pda).await;
10+
context.fetch_whitelist().await.unwrap();
1811

1912
assert_eq!(whitelist_bump, whitelist_acct_bump);
20-
assert_eq!(payer.pubkey(), admin_pubkey);
13+
assert_eq!(context.payer.pubkey(), admin_pubkey);
2114

2215
assert_eq!(0, allowed_programs_len);
2316
assert_eq!(allowed_programs, vec![]);

0 commit comments

Comments
 (0)