light_program_test/program_test/
config.rs

1#[cfg(feature = "devenv")]
2use account_compression::{
3    AddressMerkleTreeConfig, AddressQueueConfig, NullifierQueueConfig, StateMerkleTreeConfig,
4};
5#[cfg(feature = "devenv")]
6use light_batched_merkle_tree::{
7    initialize_address_tree::InitAddressTreeAccountsInstructionData,
8    initialize_state_tree::InitStateTreeAccountsInstructionData,
9};
10#[cfg(feature = "devenv")]
11use light_registry::protocol_config::state::ProtocolConfig;
12use solana_sdk::pubkey::Pubkey;
13
14use crate::logging::EnhancedLoggingConfig;
15
16/// Configuration for Light Program Test
17#[derive(Debug, Clone)]
18pub struct ProgramTestConfig {
19    pub additional_programs: Option<Vec<(&'static str, Pubkey)>>,
20    #[cfg(feature = "devenv")]
21    pub protocol_config: ProtocolConfig,
22    pub with_prover: bool,
23    #[cfg(feature = "devenv")]
24    pub skip_register_programs: bool,
25    #[cfg(feature = "devenv")]
26    pub skip_v1_trees: bool,
27    #[cfg(feature = "devenv")]
28    pub skip_second_v1_tree: bool,
29    #[cfg(feature = "devenv")]
30    pub v1_state_tree_config: StateMerkleTreeConfig,
31    #[cfg(feature = "devenv")]
32    pub v1_nullifier_queue_config: NullifierQueueConfig,
33    #[cfg(feature = "devenv")]
34    pub v1_address_tree_config: AddressMerkleTreeConfig,
35    #[cfg(feature = "devenv")]
36    pub v1_address_queue_config: AddressQueueConfig,
37    #[cfg(feature = "devenv")]
38    pub v2_state_tree_config: Option<InitStateTreeAccountsInstructionData>,
39    #[cfg(feature = "devenv")]
40    pub v2_address_tree_config: Option<InitAddressTreeAccountsInstructionData>,
41    #[cfg(feature = "devenv")]
42    pub skip_protocol_init: bool,
43    /// Log failed transactions
44    pub log_failed_tx: bool,
45    /// Disable all logging
46    pub no_logs: bool,
47    /// Skip startup logs
48    pub skip_startup_logs: bool,
49    /// Register a forester for epoch 0 during setup
50    pub with_forester: bool,
51    /// Log Light Protocol events (BatchPublicTransactionEvent, etc.)
52    pub log_light_protocol_events: bool,
53    /// Enhanced transaction logging configuration
54    pub enhanced_logging: EnhancedLoggingConfig,
55}
56
57impl ProgramTestConfig {
58    pub fn new(
59        with_prover: bool,
60        additional_programs: Option<Vec<(&'static str, Pubkey)>>,
61    ) -> Self {
62        Self {
63            additional_programs,
64            with_prover,
65            ..Default::default()
66        }
67    }
68
69    #[cfg(feature = "v2")]
70    pub fn new_v2(
71        with_prover: bool,
72        additional_programs: Option<Vec<(&'static str, Pubkey)>>,
73    ) -> Self {
74        Self {
75            additional_programs,
76            with_prover,
77            #[cfg(feature = "devenv")]
78            v2_state_tree_config: Some(InitStateTreeAccountsInstructionData::test_default()),
79            #[cfg(feature = "devenv")]
80            v2_address_tree_config: Some(InitAddressTreeAccountsInstructionData::test_default()),
81            ..Default::default()
82        }
83    }
84
85    #[cfg(feature = "devenv")]
86    pub fn default_with_batched_trees(with_prover: bool) -> Self {
87        Self {
88            additional_programs: None,
89            with_prover,
90            v2_state_tree_config: Some(InitStateTreeAccountsInstructionData::test_default()),
91            v2_address_tree_config: Some(InitAddressTreeAccountsInstructionData::test_default()),
92            ..Default::default()
93        }
94    }
95
96    #[cfg(feature = "devenv")]
97    pub fn default_test_forester(with_prover: bool) -> Self {
98        Self {
99            additional_programs: None,
100            with_prover,
101            v2_state_tree_config: Some(InitStateTreeAccountsInstructionData::test_default()),
102            v2_address_tree_config: Some(InitAddressTreeAccountsInstructionData::test_default()),
103            ..Default::default()
104        }
105    }
106
107    /// Enable Light Protocol event logging
108    pub fn with_light_protocol_events(mut self) -> Self {
109        self.log_light_protocol_events = true;
110        self
111    }
112
113    /// Disable Light Protocol event logging
114    pub fn without_light_protocol_events(mut self) -> Self {
115        self.log_light_protocol_events = false;
116        self
117    }
118}
119
120impl Default for ProgramTestConfig {
121    fn default() -> Self {
122        Self {
123            additional_programs: None,
124            #[cfg(feature = "devenv")]
125            protocol_config: ProtocolConfig {
126                // Init with an active epoch which doesn't end
127                active_phase_length: 1_000_000_000,
128                slot_length: 1_000_000_000 - 1,
129                genesis_slot: 0,
130                registration_phase_length: 2,
131                ..Default::default()
132            },
133            with_prover: true,
134            #[cfg(feature = "devenv")]
135            skip_second_v1_tree: false,
136            #[cfg(feature = "devenv")]
137            skip_register_programs: false,
138            #[cfg(feature = "devenv")]
139            v1_state_tree_config: StateMerkleTreeConfig::default(),
140            #[cfg(feature = "devenv")]
141            v1_address_tree_config: AddressMerkleTreeConfig::default(),
142            #[cfg(feature = "devenv")]
143            v1_address_queue_config: AddressQueueConfig::default(),
144            #[cfg(feature = "devenv")]
145            v1_nullifier_queue_config: NullifierQueueConfig::default(),
146            #[cfg(feature = "devenv")]
147            v2_state_tree_config: None,
148            #[cfg(feature = "devenv")]
149            v2_address_tree_config: None,
150            #[cfg(feature = "devenv")]
151            skip_protocol_init: false,
152            #[cfg(feature = "devenv")]
153            skip_v1_trees: false,
154            log_failed_tx: true,
155            no_logs: false,
156            skip_startup_logs: true,
157            with_forester: true,
158            log_light_protocol_events: false, // Disabled by default
159            enhanced_logging: EnhancedLoggingConfig::from_env(),
160        }
161    }
162}