Skip to content

Commit a7c6d8a

Browse files
apollo_http_server: add config manager client
1 parent e4489fc commit a7c6d8a

File tree

7 files changed

+64
-15
lines changed

7 files changed

+64
-15
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/apollo_http_server/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ testing = [
1919
workspace = true
2020

2121
[dependencies]
22+
apollo_config_manager_types.workspace = true
2223
apollo_gateway_types.workspace = true
2324
apollo_http_server_config.workspace = true
2425
apollo_infra.workspace = true
@@ -40,7 +41,9 @@ thiserror.workspace = true
4041
tokio = { workspace = true, features = ["rt"] }
4142
tracing.workspace = true
4243

44+
4345
[dev-dependencies]
46+
apollo_config_manager_types = { workspace = true, features = ["testing"] }
4447
apollo_gateway_types = { workspace = true, features = ["testing"] }
4548
apollo_metrics = { workspace = true, features = ["testing"] }
4649
assert_matches.workspace = true

crates/apollo_http_server/src/http_server.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use std::clone::Clone;
22
use std::net::SocketAddr;
33
use std::string::String;
44

5+
use apollo_config_manager_types::communication::SharedConfigManagerClient;
56
use apollo_gateway_types::communication::{GatewayClientError, SharedGatewayClient};
67
use apollo_gateway_types::deprecated_gateway_error::{
78
KnownStarknetErrorCode,
@@ -56,12 +57,18 @@ pub struct HttpServer {
5657

5758
#[derive(Clone)]
5859
pub struct AppState {
60+
// TODO(Tsabary): use the config manager in the tx processing.
61+
_config_manager_client: SharedConfigManagerClient,
5962
pub gateway_client: SharedGatewayClient,
6063
}
6164

6265
impl HttpServer {
63-
pub fn new(config: HttpServerConfig, gateway_client: SharedGatewayClient) -> Self {
64-
let app_state = AppState { gateway_client };
66+
pub fn new(
67+
config: HttpServerConfig,
68+
config_manager_client: SharedConfigManagerClient,
69+
gateway_client: SharedGatewayClient,
70+
) -> Self {
71+
let app_state = AppState { _config_manager_client: config_manager_client, gateway_client };
6572
HttpServer { config, app_state }
6673
}
6774

@@ -259,9 +266,10 @@ fn record_added_transactions(add_tx_result: &HttpServerResult<GatewayOutput>, re
259266

260267
pub fn create_http_server(
261268
config: HttpServerConfig,
269+
config_manager_client: SharedConfigManagerClient,
262270
gateway_client: SharedGatewayClient,
263271
) -> HttpServer {
264-
HttpServer::new(config, gateway_client)
272+
HttpServer::new(config, config_manager_client, gateway_client)
265273
}
266274

267275
#[async_trait]

crates/apollo_http_server/src/http_server_test.rs

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use apollo_config_manager_types::communication::MockConfigManagerClient;
12
use apollo_gateway_types::communication::{GatewayClientError, MockGatewayClient};
23
use apollo_gateway_types::deprecated_gateway_error::{
34
KnownStarknetErrorCode,
@@ -126,8 +127,11 @@ async fn record_region_test(#[case] index: u16, #[case] tx: impl GatewayTransact
126127
.times(1)
127128
.return_const(Ok(GatewayOutput::Invoke(InvokeGatewayOutput::new(tx_hash_2))));
128129

130+
let mock_config_manager_client = MockConfigManagerClient::new();
131+
129132
// TODO(Yael): avoid the hardcoded node offset index, consider dynamic allocation.
130-
let http_client = add_tx_http_client(mock_gateway_client, 1 + index).await;
133+
let http_client =
134+
add_tx_http_client(mock_config_manager_client, mock_gateway_client, 1 + index).await;
131135

132136
// Send a transaction to the server, without a region.
133137
http_client.add_tx(tx.clone()).await;
@@ -159,7 +163,10 @@ async fn record_region_gateway_failing_tx(#[case] index: u16, #[case] tx: impl G
159163
)),
160164
));
161165

162-
let http_client = add_tx_http_client(mock_gateway_client, 3 + index).await;
166+
let mock_config_manager_client = MockConfigManagerClient::new();
167+
168+
let http_client =
169+
add_tx_http_client(mock_config_manager_client, mock_gateway_client, 3 + index).await;
163170

164171
// Send a transaction to the server.
165172
http_client.add_tx(tx).await;
@@ -207,7 +214,10 @@ async fn test_response(#[case] index: u16, #[case] tx: impl GatewayTransaction)
207214
expected_internal_err,
208215
));
209216

210-
let http_client = add_tx_http_client(mock_gateway_client, 5 + index).await;
217+
let mock_config_manager_client = MockConfigManagerClient::new();
218+
219+
let http_client =
220+
add_tx_http_client(mock_config_manager_client, mock_gateway_client, 5 + index).await;
211221

212222
// Test a successful response.
213223
let tx_hash = http_client.assert_add_tx_success(tx.clone()).await;
@@ -264,6 +274,8 @@ async fn test_unsupported_tx_version(
264274
#[case] expected_err: StarknetError,
265275
) {
266276
// Set the tx version to the given version.
277+
278+
use apollo_config_manager_types::communication::MockConfigManagerClient;
267279
let mut tx_json =
268280
TransactionSerialization(serde_json::to_value(deprecated_gateway_invoke_tx()).unwrap());
269281
let as_object = tx_json.0.as_object_mut().unwrap();
@@ -274,7 +286,10 @@ async fn test_unsupported_tx_version(
274286
}
275287

276288
let mock_gateway_client = MockGatewayClient::new();
277-
let http_client = add_tx_http_client(mock_gateway_client, 9 + index).await;
289+
let mock_config_manager_client = MockConfigManagerClient::new();
290+
291+
let http_client =
292+
add_tx_http_client(mock_config_manager_client, mock_gateway_client, 9 + index).await;
278293

279294
let serialized_err =
280295
http_client.assert_add_tx_error(tx_json, reqwest::StatusCode::BAD_REQUEST).await;
@@ -293,7 +308,9 @@ async fn sanitizing_error_message() {
293308
tx_object.insert("version".to_string(), Value::String(malicious_version.to_string())).unwrap();
294309

295310
let mock_gateway_client = MockGatewayClient::new();
296-
let http_client = add_tx_http_client(mock_gateway_client, 13).await;
311+
let mock_config_manager_client = MockConfigManagerClient::new();
312+
313+
let http_client = add_tx_http_client(mock_config_manager_client, mock_gateway_client, 13).await;
297314

298315
let serialized_err =
299316
http_client.assert_add_tx_error(tx_json, reqwest::StatusCode::BAD_REQUEST).await;

crates/apollo_http_server/src/metrics_test.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use apollo_config_manager_types::communication::MockConfigManagerClient;
12
use apollo_gateway_types::communication::{GatewayClientError, MockGatewayClient};
23
use apollo_gateway_types::gateway_types::{GatewayOutput, InvokeGatewayOutput};
34
use apollo_infra::component_client::ClientError;
@@ -54,12 +55,15 @@ async fn add_tx_metrics_test(#[case] index: u16, #[case] tx: impl GatewayTransac
5455
)))
5556
});
5657

58+
let mock_config_manager_client = MockConfigManagerClient::new();
59+
5760
// Initialize the metrics directly instead of spawning a monitoring endpoint task.
5861
let recorder = PrometheusBuilder::new().build_recorder();
5962
let _recorder_guard = metrics::set_default_local_recorder(&recorder);
6063
let prometheus_handle = recorder.handle();
6164

62-
let http_client = add_tx_http_client(mock_gateway_client, 14 + index).await;
65+
let http_client =
66+
add_tx_http_client(mock_config_manager_client, mock_gateway_client, 14 + index).await;
6367

6468
// Send transactions to the server.
6569
for _ in std::iter::repeat_n((), SUCCESS_TXS_TO_SEND + FAILURE_TXS_TO_SEND) {
@@ -85,12 +89,14 @@ async fn add_tx_serde_failure_metrics_test() {
8589
.times(1)
8690
.return_once(move |_| Ok(success_gateway_client_output()));
8791

92+
let mock_config_manager_client = MockConfigManagerClient::new();
93+
8894
// Initialize the metrics directly instead of spawning a monitoring endpoint task.
8995
let recorder = PrometheusBuilder::new().build_recorder();
9096
let _recorder_guard = metrics::set_default_local_recorder(&recorder);
9197
let prometheus_handle = recorder.handle();
9298

93-
let http_client = add_tx_http_client(mock_gateway_client, 16).await;
99+
let http_client = add_tx_http_client(mock_config_manager_client, mock_gateway_client, 16).await;
94100

95101
// Send a transaction that fails deserialization.
96102
let tx: InvalidTransaction = "invalid transaction";

crates/apollo_http_server/src/test_utils.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::net::{IpAddr, Ipv4Addr, SocketAddr};
22
use std::sync::Arc;
33

4+
use apollo_config_manager_types::communication::MockConfigManagerClient;
45
use apollo_gateway_types::communication::MockGatewayClient;
56
use apollo_gateway_types::gateway_types::GatewayOutput;
67
use apollo_http_server_config::config::{HttpServerConfig, DEFAULT_MAX_SIERRA_PROGRAM_SIZE};
@@ -87,13 +88,17 @@ pub fn create_http_server_config(socket: SocketAddr) -> HttpServerConfig {
8788
}
8889

8990
/// Creates an HTTP server and an HttpTestClient that can interact with it.
90-
pub async fn http_client_server_setup(
91+
async fn http_client_server_setup(
92+
mock_config_manager_client: MockConfigManagerClient,
9193
mock_gateway_client: MockGatewayClient,
9294
http_server_config: HttpServerConfig,
9395
) -> HttpTestClient {
9496
// Create and run the server.
95-
let mut http_server =
96-
HttpServer::new(http_server_config.clone(), Arc::new(mock_gateway_client));
97+
let mut http_server = HttpServer::new(
98+
http_server_config.clone(),
99+
Arc::new(mock_config_manager_client),
100+
Arc::new(mock_gateway_client),
101+
);
97102
tokio::spawn(async move { http_server.run().await });
98103

99104
let (ip, port) = http_server_config.ip_and_port();
@@ -145,6 +150,7 @@ impl GatewayTransaction for TransactionSerialization {
145150
}
146151

147152
pub async fn add_tx_http_client(
153+
mock_config_manager_client: MockConfigManagerClient,
148154
mock_gateway_client: MockGatewayClient,
149155
port_index: u16,
150156
) -> HttpTestClient {
@@ -153,7 +159,8 @@ pub async fn add_tx_http_client(
153159
AvailablePorts::new(TestIdentifier::HttpServerUnitTests.into(), port_index);
154160
let http_server_config =
155161
HttpServerConfig::new(ip, available_ports.get_next_port(), DEFAULT_MAX_SIERRA_PROGRAM_SIZE);
156-
http_client_server_setup(mock_gateway_client, http_server_config).await
162+
http_client_server_setup(mock_config_manager_client, mock_gateway_client, http_server_config)
163+
.await
157164
}
158165

159166
pub fn rpc_invoke_tx() -> RpcTransaction {

crates/apollo_node/src/components.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,12 +232,19 @@ pub async fn create_node_components(
232232

233233
let http_server = match config.components.http_server.execution_mode {
234234
ActiveComponentExecutionMode::Enabled => {
235+
let config_manager_client = clients
236+
.get_config_manager_shared_client()
237+
.expect("Config Manager client should be available");
235238
let http_server_config =
236239
config.http_server_config.as_ref().expect("HTTP Server config should be set");
237240
let gateway_client =
238241
clients.get_gateway_shared_client().expect("Gateway client should be available");
239242

240-
Some(create_http_server(http_server_config.clone(), gateway_client))
243+
Some(create_http_server(
244+
http_server_config.clone(),
245+
config_manager_client,
246+
gateway_client,
247+
))
241248
}
242249
ActiveComponentExecutionMode::Disabled => None,
243250
};

0 commit comments

Comments
 (0)