Skip to content

Commit d846cd6

Browse files
jpraynaudAlenar
authored andcommitted
Prepare stress test scenario framework
Added logs and 'wait_for_http_timeout' routine.
1 parent 195a6ee commit d846cd6

File tree

1 file changed

+37
-12
lines changed
  • mithril-test-lab/mithril-end-to-end/src/bin/load-aggregator

1 file changed

+37
-12
lines changed

mithril-test-lab/mithril-end-to-end/src/bin/load-aggregator/main.rs

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use mithril_common::{
1515
use mithril_end_to_end::{Aggregator, BftNode};
1616
use reqwest::StatusCode;
1717
use slog::Level;
18+
use slog_scope::info;
1819
use thiserror::Error;
1920
use tokio::{select, task::JoinSet, time::sleep};
2021

@@ -40,6 +41,7 @@ fn init_logger(opts: &MainOpts) -> slog_scope::GlobalLoggerGuard {
4041
slog_scope::set_global_logger(slog::Logger::root(Arc::new(drain), slog::o!()))
4142
}
4243

44+
/// Generate signer data
4345
pub fn generate_signer_data(number_of_signers: usize) -> MithrilFixture {
4446
MithrilFixtureBuilder::default()
4547
.with_signers(number_of_signers)
@@ -63,6 +65,28 @@ pub fn generate_register_message(signers_fixture: &MithrilFixture) -> Vec<Regist
6365
.collect::<Vec<_>>()
6466
}
6567

68+
/// Wait for http response until timeout
69+
pub async fn wait_for_http_response(url: &str, timeout: Duration, message: &str) -> StdResult<()> {
70+
let progress_bar = ProgressBar::new_spinner().with_message(message.to_owned());
71+
let spinner = async move {
72+
loop {
73+
progress_bar.tick();
74+
sleep(Duration::from_millis(50)).await;
75+
}
76+
};
77+
let probe = async move {
78+
while reqwest::get(url).await.is_err() {
79+
sleep(Duration::from_millis(300)).await;
80+
}
81+
};
82+
83+
select! {
84+
_ = spinner => Err(String::new().into()),
85+
_ = sleep(timeout) => Err(format!("Aggregator did not get a response after {timeout:?} from '{url}'").into()),
86+
_ = probe => Ok(())
87+
}
88+
}
89+
6690
#[derive(Debug, Parser)]
6791
#[command(author, version, about, long_about = None)]
6892
pub struct MainOpts {
@@ -180,9 +204,13 @@ async fn main() -> StdResult<()> {
180204
let opts = MainOpts::parse();
181205
let _logger = init_logger(&opts);
182206
let args = AggregatorParameters::new(&opts)?;
183-
println!("OPTIONS={opts:?}");
207+
info!(">> Starting stress test with options: {opts:?}");
208+
209+
info!(">> Creation of the Signer Key Registrations payloads");
184210
let signers_fixture = generate_signer_data(opts.num_signers);
185211
let register_messages = generate_register_message(&signers_fixture);
212+
213+
info!(">> Launch Aggregator");
186214
let mut aggregator = Aggregator::new(
187215
args.server_port as u64,
188216
&args.bft_node,
@@ -192,25 +220,22 @@ async fn main() -> StdResult<()> {
192220
&args.mithril_era,
193221
)
194222
.unwrap();
195-
let progress_bar = ProgressBar::new_spinner().with_message("starting Aggregator process…");
223+
196224
aggregator.set_protocol_parameters(&ProtocolParameters::default());
197225
aggregator.serve().unwrap();
198-
let spinner = async move {
199-
loop {
200-
progress_bar.tick();
201-
sleep(Duration::from_millis(50)).await;
202-
}
203-
};
204226

205-
select! {
206-
_ = spinner => (),
207-
_ = sleep(Duration::from_secs(10)) => (),
208-
}
227+
wait_for_http_response(
228+
&format!("{}/epoch-settings", aggregator.endpoint()),
229+
Duration::from_secs(10),
230+
"Waiting for the aggregator to start",
231+
)
232+
.await?;
209233

210234
let mut join_set: JoinSet<StdResult<()>> = JoinSet::new();
211235
let progress_bar =
212236
ProgressBar::with_draw_target(Some(opts.num_signers as u64), ProgressDrawTarget::stdout());
213237

238+
info!(">> Send the Signer Key Registrations payloads");
214239
for register in register_messages {
215240
let endpoint = aggregator.endpoint();
216241
join_set.spawn(async move {

0 commit comments

Comments
 (0)