light_program_test/program_test/
config.rs

1use account_compression::{
2    AddressMerkleTreeConfig, AddressQueueConfig, NullifierQueueConfig, StateMerkleTreeConfig,
3};
4use light_batched_merkle_tree::{
5    initialize_address_tree::InitAddressTreeAccountsInstructionData,
6    initialize_state_tree::InitStateTreeAccountsInstructionData,
7};
8use light_prover_client::prover::ProverConfig;
9use light_registry::protocol_config::state::ProtocolConfig;
10use solana_sdk::pubkey::Pubkey;
11
12#[derive(Debug, Clone)]
13pub struct ProgramTestConfig {
14    pub additional_programs: Option<Vec<(&'static str, Pubkey)>>,
15    pub protocol_config: ProtocolConfig,
16    pub register_forester_and_advance_to_active_phase: bool,
17    pub with_prover: bool,
18    pub prover_config: Option<ProverConfig>,
19    pub skip_register_programs: bool,
20    pub skip_v1_trees: bool,
21    pub skip_second_v1_tree: bool,
22    pub v1_state_tree_config: StateMerkleTreeConfig,
23    pub v1_nullifier_queue_config: NullifierQueueConfig,
24    pub v1_address_tree_config: AddressMerkleTreeConfig,
25    pub v1_address_queue_config: AddressQueueConfig,
26    pub v2_state_tree_config: Option<InitStateTreeAccountsInstructionData>,
27    pub v2_address_tree_config: Option<InitAddressTreeAccountsInstructionData>,
28    pub skip_protocol_init: bool,
29    pub log_failed_tx: bool,
30    pub no_logs: bool,
31    pub skip_startup_logs: bool,
32}
33
34impl ProgramTestConfig {
35    pub fn new(
36        with_prover: bool,
37        additional_programs: Option<Vec<(&'static str, Pubkey)>>,
38    ) -> Self {
39        Self {
40            additional_programs,
41            with_prover,
42            ..Default::default()
43        }
44    }
45
46    #[cfg(feature = "v2")]
47    pub fn new_v2(
48        with_prover: bool,
49        additional_programs: Option<Vec<(&'static str, Pubkey)>>,
50    ) -> Self {
51        let mut res = Self::default_with_batched_trees(with_prover);
52        res.additional_programs = additional_programs;
53
54        res
55    }
56
57    #[cfg(feature = "v2")]
58    pub fn default_with_batched_trees(with_prover: bool) -> Self {
59        Self {
60            additional_programs: None,
61            prover_config: Some(ProverConfig::default()),
62            with_prover,
63            v2_state_tree_config: Some(InitStateTreeAccountsInstructionData::test_default()),
64            v2_address_tree_config: Some(InitAddressTreeAccountsInstructionData::test_default()),
65            ..Default::default()
66        }
67    }
68
69    #[cfg(feature = "devenv")]
70    pub fn default_test_forester(with_prover: bool) -> Self {
71        Self {
72            additional_programs: None,
73            with_prover,
74            v2_state_tree_config: Some(InitStateTreeAccountsInstructionData::test_default()),
75            v2_address_tree_config: Some(InitAddressTreeAccountsInstructionData::test_default()),
76            prover_config: Some(ProverConfig::default()),
77            ..Default::default()
78        }
79    }
80
81    // TODO: uncomment once batched trees are on devnet.
82    // #[cfg(not(feature = "devenv"))]
83    // pub fn default_with_batched_trees() -> Self {
84    //     Self {
85    //         additional_programs: None,
86    //         with_prover: false,
87    //         v2_state_tree_config: Some(InitStateTreeAccountsInstructionData::default()),
88    //         v2_address_tree_config: Some(
89    //             InitAddressTreeAccountsInstructionData::default(),
90    //         ),
91    //         ..Default::default()
92    //     }
93    // }
94}
95
96impl Default for ProgramTestConfig {
97    fn default() -> Self {
98        Self {
99            additional_programs: None,
100            protocol_config: ProtocolConfig {
101                // Init with an active epoch which doesn't end
102                active_phase_length: 1_000_000_000,
103                slot_length: 1_000_000_000 - 1,
104                genesis_slot: 0,
105                registration_phase_length: 2,
106                ..Default::default()
107            },
108            register_forester_and_advance_to_active_phase: true,
109            with_prover: true,
110            prover_config: None,
111            skip_second_v1_tree: false,
112            skip_register_programs: false,
113            v1_state_tree_config: StateMerkleTreeConfig::default(),
114            v1_address_tree_config: AddressMerkleTreeConfig::default(),
115            v1_address_queue_config: AddressQueueConfig::default(),
116            v1_nullifier_queue_config: NullifierQueueConfig::default(),
117            v2_state_tree_config: None,
118            v2_address_tree_config: None,
119            skip_protocol_init: false,
120            skip_v1_trees: false,
121            log_failed_tx: true,
122            no_logs: false,
123            skip_startup_logs: true,
124        }
125    }
126}