MCPcopy Create free account
hub / github.com/Commit-Boost/commit-boost-client / test_mux

Function test_mux

tests/tests/pbs_mux.rs:154–230  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

152
153#[tokio::test]
154async fn test_mux() -> Result<()> {
155 setup_test_env();
156 let signer = random_secret();
157 let pubkey = signer.public_key();
158
159 let chain = Chain::Holesky;
160 let pbs_port = 3700;
161
162 let mux_relay_1 = generate_mock_relay(pbs_port + 1, pubkey.clone())?;
163 let mux_relay_2 = generate_mock_relay(pbs_port + 2, pubkey.clone())?;
164 let default_relay = generate_mock_relay(pbs_port + 3, pubkey.clone())?;
165
166 // Run 3 mock relays
167 let mock_state = Arc::new(MockRelayState::new(chain, signer));
168 tokio::spawn(start_mock_relay_service(mock_state.clone(), pbs_port + 1));
169 tokio::spawn(start_mock_relay_service(mock_state.clone(), pbs_port + 2));
170 tokio::spawn(start_mock_relay_service(mock_state.clone(), pbs_port + 3));
171
172 // Register all relays in PBS config
173 let relays = vec![default_relay.clone()];
174 let mut config = to_pbs_config(chain, get_pbs_static_config(pbs_port), relays);
175 config.all_relays = vec![mux_relay_1.clone(), mux_relay_2.clone(), default_relay.clone()];
176
177 // Configure mux for two relays
178 let mux = RuntimeMuxConfig {
179 id: String::from("test"),
180 config: config.pbs_config.clone(),
181 relays: vec![mux_relay_1, mux_relay_2],
182 };
183
184 // Bind mux to a specific validator key
185 let validator_pubkey = random_secret().public_key();
186 config.mux_lookup = Some(HashMap::from([(validator_pubkey.clone(), mux)]));
187
188 // Run PBS service
189 let state = PbsState::new(config);
190 tokio::spawn(PbsService::run::<(), DefaultBuilderApi>(state));
191
192 // leave some time to start servers
193 tokio::time::sleep(Duration::from_millis(100)).await;
194
195 // Send default request without specifying a validator key
196 let mock_validator = MockValidator::new(pbs_port)?;
197 info!("Sending get header with default");
198 assert_eq!(mock_validator.do_get_header(None).await?.status(), StatusCode::OK);
199 assert_eq!(mock_state.received_get_header(), 1); // only default relay was used
200
201 // Send request specifying a validator key to use mux
202 info!("Sending get header with mux");
203 assert_eq!(
204 mock_validator.do_get_header(Some(validator_pubkey)).await?.status(),
205 StatusCode::OK
206 );
207 assert_eq!(mock_state.received_get_header(), 3); // two mux relays were used
208
209 // Status requests should go to all relays
210 info!("Sending get status");
211 assert_eq!(mock_validator.do_get_status().await?.status(), StatusCode::OK);

Callers

nothing calls this directly

Calls 7

setup_test_envFunction · 0.85
random_secretFunction · 0.85
generate_mock_relayFunction · 0.85
start_mock_relay_serviceFunction · 0.85
to_pbs_configFunction · 0.85
get_pbs_static_configFunction · 0.85
public_keyMethod · 0.80

Tested by

no test coverage detected