Skip to content

Commit 07e5fb1

Browse files
committed
rm test util duplication
1 parent 732d1e8 commit 07e5fb1

File tree

5 files changed

+45
-101
lines changed

5 files changed

+45
-101
lines changed

sysvar/src/clock.rs

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -173,30 +173,6 @@ mod tests {
173173
assert_eq!(got, expected);
174174
}
175175

176-
struct ValidateIdSyscall {
177-
data: Vec<u8>,
178-
}
179-
180-
impl crate::program_stubs::SyscallStubs for ValidateIdSyscall {
181-
fn sol_get_sysvar(
182-
&self,
183-
sysvar_id_addr: *const u8,
184-
var_addr: *mut u8,
185-
offset: u64,
186-
length: u64,
187-
) -> u64 {
188-
// Validate that the macro passed the correct sysvar id pointer
189-
let passed_id = unsafe { *(sysvar_id_addr as *const solana_pubkey::Pubkey) };
190-
assert_eq!(passed_id, id());
191-
192-
let slice = unsafe { std::slice::from_raw_parts_mut(var_addr, length as usize) };
193-
slice.copy_from_slice(
194-
&self.data[offset as usize..(offset.saturating_add(length)) as usize],
195-
);
196-
solana_program_entrypoint::SUCCESS
197-
}
198-
}
199-
200176
#[test]
201177
#[serial]
202178
fn test_clock_get_passes_correct_sysvar_id() {
@@ -208,7 +184,7 @@ mod tests {
208184
unix_timestamp: 55,
209185
};
210186
let data = to_bytes(&expected);
211-
let prev = crate::program_stubs::set_syscall_stubs(Box::new(ValidateIdSyscall { data }));
187+
let prev = crate::tests::mock_get_sysvar_syscall_with_id(&data, &id());
212188

213189
let got = Clock::get().unwrap();
214190
assert_eq!(got, expected);

sysvar/src/epoch_rewards.rs

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -218,11 +218,6 @@ mod tests {
218218
#[serial]
219219
#[cfg(feature = "bincode")]
220220
fn test_epoch_rewards_get() {
221-
use {
222-
crate::program_stubs::{set_syscall_stubs, SyscallStubs},
223-
solana_program_entrypoint::SUCCESS,
224-
};
225-
226221
let expected = EpochRewards {
227222
distribution_starting_block_height: 42,
228223
num_partitions: 7,
@@ -236,26 +231,7 @@ mod tests {
236231
let data = bincode::serialize(&expected).unwrap();
237232
assert_eq!(data.len(), 81);
238233

239-
struct MockSyscall {
240-
data: Vec<u8>,
241-
}
242-
impl SyscallStubs for MockSyscall {
243-
fn sol_get_sysvar(
244-
&self,
245-
_sysvar_id_addr: *const u8,
246-
var_addr: *mut u8,
247-
offset: u64,
248-
length: u64,
249-
) -> u64 {
250-
unsafe {
251-
let slice = core::slice::from_raw_parts_mut(var_addr, length as usize);
252-
slice.copy_from_slice(&self.data[offset as usize..(offset + length) as usize]);
253-
}
254-
SUCCESS
255-
}
256-
}
257-
258-
set_syscall_stubs(Box::new(MockSyscall { data }));
234+
crate::tests::mock_get_sysvar_syscall(&data);
259235
let got = EpochRewards::get().unwrap();
260236
assert_eq!(got, expected);
261237
}

sysvar/src/epoch_schedule.rs

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -177,35 +177,11 @@ mod tests {
177177
#[serial]
178178
#[cfg(feature = "bincode")]
179179
fn test_epoch_schedule_get() {
180-
use {
181-
crate::program_stubs::{set_syscall_stubs, SyscallStubs},
182-
solana_program_entrypoint::SUCCESS,
183-
};
184-
185180
let expected = EpochSchedule::custom(1234, 5678, false);
186181
let data = bincode::serialize(&expected).unwrap();
187182
assert_eq!(data.len(), 33);
188183

189-
struct MockSyscall {
190-
data: Vec<u8>,
191-
}
192-
impl SyscallStubs for MockSyscall {
193-
fn sol_get_sysvar(
194-
&self,
195-
_sysvar_id_addr: *const u8,
196-
var_addr: *mut u8,
197-
offset: u64,
198-
length: u64,
199-
) -> u64 {
200-
unsafe {
201-
let slice = core::slice::from_raw_parts_mut(var_addr, length as usize);
202-
slice.copy_from_slice(&self.data[offset as usize..(offset + length) as usize]);
203-
}
204-
SUCCESS
205-
}
206-
}
207-
208-
set_syscall_stubs(Box::new(MockSyscall { data }));
184+
crate::tests::mock_get_sysvar_syscall(&data);
209185
let got = EpochSchedule::get().unwrap();
210186
assert_eq!(got, expected);
211187
}

sysvar/src/lib.rs

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,10 +328,13 @@ mod tests {
328328
impl Sysvar for TestSysvar {}
329329
impl SysvarSerialize for TestSysvar {}
330330

331-
// NOTE tests that use this mock MUST carry the #[serial] attribute
331+
// NOTE: Tests using these mocks MUST carry the #[serial] attribute
332+
// because they modify global SYSCALL_STUBS state.
333+
332334
struct MockGetSysvarSyscall {
333335
data: Vec<u8>,
334336
}
337+
335338
impl SyscallStubs for MockGetSysvarSyscall {
336339
#[allow(clippy::arithmetic_side_effects)]
337340
fn sol_get_sysvar(
@@ -346,12 +349,49 @@ mod tests {
346349
SUCCESS
347350
}
348351
}
352+
353+
/// Mock syscall stub for tests. Requires `#[serial]` attribute.
349354
pub fn mock_get_sysvar_syscall(data: &[u8]) {
350355
set_syscall_stubs(Box::new(MockGetSysvarSyscall {
351356
data: data.to_vec(),
352357
}));
353358
}
354359

360+
struct ValidateIdSyscall {
361+
data: Vec<u8>,
362+
expected_id: Pubkey,
363+
}
364+
365+
impl SyscallStubs for ValidateIdSyscall {
366+
#[allow(clippy::arithmetic_side_effects)]
367+
fn sol_get_sysvar(
368+
&self,
369+
sysvar_id_addr: *const u8,
370+
var_addr: *mut u8,
371+
offset: u64,
372+
length: u64,
373+
) -> u64 {
374+
// Validate that the correct sysvar id pointer was passed
375+
let passed_id = unsafe { *(sysvar_id_addr as *const Pubkey) };
376+
assert_eq!(passed_id, self.expected_id);
377+
378+
let slice = unsafe { std::slice::from_raw_parts_mut(var_addr, length as usize) };
379+
slice.copy_from_slice(&self.data[offset as usize..(offset + length) as usize]);
380+
SUCCESS
381+
}
382+
}
383+
384+
/// Mock syscall stub that validates sysvar ID. Requires `#[serial]` attribute.
385+
pub fn mock_get_sysvar_syscall_with_id(
386+
data: &[u8],
387+
expected_id: &Pubkey,
388+
) -> Box<dyn SyscallStubs> {
389+
set_syscall_stubs(Box::new(ValidateIdSyscall {
390+
data: data.to_vec(),
391+
expected_id: *expected_id,
392+
}))
393+
}
394+
355395
/// Convert a value to its in-memory byte representation.
356396
///
357397
/// # Safety

sysvar/src/rent.rs

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,6 @@ mod tests {
173173
#[serial]
174174
#[cfg(feature = "bincode")]
175175
fn test_rent_get() {
176-
use {
177-
crate::program_stubs::{set_syscall_stubs, SyscallStubs},
178-
solana_program_entrypoint::SUCCESS,
179-
};
180-
181176
let expected = Rent {
182177
lamports_per_byte_year: 123,
183178
exemption_threshold: 2.5,
@@ -187,26 +182,7 @@ mod tests {
187182
let data = bincode::serialize(&expected).unwrap();
188183
assert_eq!(data.len(), 17);
189184

190-
struct MockSyscall {
191-
data: Vec<u8>,
192-
}
193-
impl SyscallStubs for MockSyscall {
194-
fn sol_get_sysvar(
195-
&self,
196-
_sysvar_id_addr: *const u8,
197-
var_addr: *mut u8,
198-
offset: u64,
199-
length: u64,
200-
) -> u64 {
201-
unsafe {
202-
let slice = core::slice::from_raw_parts_mut(var_addr, length as usize);
203-
slice.copy_from_slice(&self.data[offset as usize..(offset + length) as usize]);
204-
}
205-
SUCCESS
206-
}
207-
}
208-
209-
set_syscall_stubs(Box::new(MockSyscall { data }));
185+
crate::tests::mock_get_sysvar_syscall(&data);
210186
let got = Rent::get().unwrap();
211187
assert_eq!(got, expected);
212188
}

0 commit comments

Comments
 (0)