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

Function create_mock_ssv_server

tests/src/mock_ssv.rs:29–60  ·  view source on GitHub ↗

Creates a simple mock server to simulate the SSV API endpoint under various conditions for testing. Note this ignores

(
    port: u16,
    state: Option<SsvMockState>,
)

Source from the content-addressed store, hash-verified

27/// Creates a simple mock server to simulate the SSV API endpoint under
28/// various conditions for testing. Note this ignores
29pub async fn create_mock_ssv_server(
30 port: u16,
31 state: Option<SsvMockState>,
32) -> Result<JoinHandle<()>, axum::Error> {
33 let data = include_str!("../../tests/data/ssv_valid.json");
34 let response = serde_json::from_str::<SSVResponse>(data).expect("failed to parse test data");
35 let state = state.unwrap_or(SsvMockState {
36 validators: Arc::new(RwLock::new(response.validators)),
37 force_timeout: Arc::new(RwLock::new(false)),
38 });
39 let router = axum::Router::new()
40 .route(
41 "/api/v4/{chain_name}/validators/in_operator/{node_operator_id}",
42 get(handle_validators),
43 )
44 .route("/big_data", get(handle_big_data))
45 .with_state(state)
46 .into_make_service();
47
48 let address = SocketAddr::from(([127, 0, 0, 1], port));
49 let listener = TcpListener::bind(address).await.map_err(axum::Error::new)?;
50 let server = axum::serve(listener, router).with_graceful_shutdown(async {
51 tokio::signal::ctrl_c().await.expect("Failed to listen for shutdown signal");
52 });
53 let result = Ok(tokio::spawn(async move {
54 if let Err(e) = server.await {
55 eprintln!("Server error: {e}");
56 }
57 }));
58 info!("Mock server started on http://localhost:{port}/");
59 result
60}
61
62/// Returns a valid SSV validators response, or a timeout if requested in
63/// the server state

Calls

no outgoing calls