Continue integrating commands to tests

This commit is contained in:
Mubelotix
2025-08-25 12:24:21 +02:00
parent 0e25398d3e
commit 0d8b2edfb0
5 changed files with 46 additions and 42 deletions

View File

@ -8,7 +8,7 @@ use tokio::time;
use super::workload::BenchWorkload; use super::workload::BenchWorkload;
use crate::common::assets::Asset; use crate::common::assets::Asset;
use crate::common::client::Client; use crate::common::client::Client;
use crate::common::command::{run as run_command, Command, SyncMode}; use crate::common::command::{health_command, run as run_command};
pub async fn kill(mut meilisearch: tokio::process::Child) { pub async fn kill(mut meilisearch: tokio::process::Child) {
let Some(id) = meilisearch.id() else { return }; let Some(id) = meilisearch.id() else { return };
@ -123,15 +123,6 @@ async fn wait_for_health(
bail!("meilisearch is not responding") bail!("meilisearch is not responding")
} }
fn health_command() -> Command {
Command {
route: "/health".into(),
method: crate::common::client::Method::Get,
body: Default::default(),
synchronous: SyncMode::WaitForResponse,
}
}
pub fn delete_db() { pub fn delete_db() {
let _ = std::fs::remove_dir_all("./_xtask_benchmark.ms"); let _ = std::fs::remove_dir_all("./_xtask_benchmark.ms");
} }

View File

@ -15,7 +15,7 @@ use super::BenchDeriveArgs;
use crate::bench::meili_process; use crate::bench::meili_process;
use crate::common::assets::{self, Asset}; use crate::common::assets::{self, Asset};
use crate::common::client::Client; use crate::common::client::Client;
use crate::common::command::{run_batch as run_command_batch, Command, SyncMode}; use crate::common::command::{run_commands, Command};
/// A bench workload. /// A bench workload.
/// Not to be confused with [a test workload](crate::test::workload::Workload). /// Not to be confused with [a test workload](crate::test::workload::Workload).
@ -32,7 +32,7 @@ pub struct BenchWorkload {
pub commands: Vec<Command>, pub commands: Vec<Command>,
} }
async fn run_commands( async fn run_workload_commands(
dashboard_client: &DashboardClient, dashboard_client: &DashboardClient,
logs_client: &Client, logs_client: &Client,
meili_client: &Client, meili_client: &Client,
@ -44,13 +44,8 @@ async fn run_commands(
let report_folder = &args.report_folder; let report_folder = &args.report_folder;
let workload_name = &workload.name; let workload_name = &workload.name;
for batch in workload run_commands(meili_client, &workload.precommands, &workload.assets, &args.common.asset_folder)
.precommands .await?;
.as_slice()
.split_inclusive(|command| !matches!(command.synchronous, SyncMode::DontWait))
{
run_command_batch(meili_client, batch, &workload.assets, &args.common.asset_folder).await?;
}
std::fs::create_dir_all(report_folder) std::fs::create_dir_all(report_folder)
.with_context(|| format!("could not create report directory at {report_folder}"))?; .with_context(|| format!("could not create report directory at {report_folder}"))?;
@ -60,13 +55,8 @@ async fn run_commands(
let report_handle = start_report(logs_client, trace_filename, &workload.target).await?; let report_handle = start_report(logs_client, trace_filename, &workload.target).await?;
for batch in workload run_commands(meili_client, &workload.commands, &workload.assets, &args.common.asset_folder)
.commands .await?;
.as_slice()
.split_inclusive(|command| !matches!(command.synchronous, SyncMode::DontWait))
{
run_command_batch(meili_client, batch, &workload.assets, &args.common.asset_folder).await?;
}
let processor = let processor =
stop_report(dashboard_client, logs_client, workload_uuid, report_filename, report_handle) stop_report(dashboard_client, logs_client, workload_uuid, report_filename, report_handle)
@ -165,7 +155,7 @@ async fn execute_run(
) )
.await?; .await?;
let processor = run_commands( let processor = run_workload_commands(
dashboard_client, dashboard_client,
logs_client, logs_client,
meili_client, meili_client,

View File

@ -15,7 +15,7 @@ pub struct Command {
#[serde(default)] #[serde(default)]
pub body: Body, pub body: Body,
#[serde(default)] #[serde(default)]
pub synchronous: SyncMode, synchronous: SyncMode,
} }
#[derive(Default, Clone, Deserialize)] #[derive(Default, Clone, Deserialize)]
@ -64,14 +64,14 @@ impl Display for Command {
} }
#[derive(Default, Debug, Clone, Copy, Deserialize)] #[derive(Default, Debug, Clone, Copy, Deserialize)]
pub enum SyncMode { enum SyncMode {
DontWait, DontWait,
#[default] #[default]
WaitForResponse, WaitForResponse,
WaitForTask, WaitForTask,
} }
pub async fn run_batch( async fn run_batch(
client: &Client, client: &Client,
batch: &[Command], batch: &[Command],
assets: &BTreeMap<String, Asset>, assets: &BTreeMap<String, Asset>,
@ -192,3 +192,27 @@ pub async fn run(
Ok(()) Ok(())
} }
pub async fn run_commands(
client: &Client,
commands: &[Command],
assets: &BTreeMap<String, Asset>,
asset_folder: &str,
) -> anyhow::Result<()> {
for batch in
commands.split_inclusive(|command| !matches!(command.synchronous, SyncMode::DontWait))
{
run_batch(client, batch, assets, asset_folder).await?;
}
Ok(())
}
pub fn health_command() -> Command {
Command {
route: "/health".into(),
method: crate::common::client::Method::Get,
body: Default::default(),
synchronous: SyncMode::WaitForResponse,
}
}

View File

@ -1,9 +1,6 @@
use crate::common::{args::CommonArgs, client::Client, logs::setup_logs};
use cargo_metadata::semver::Version; use cargo_metadata::semver::Version;
use clap::Parser; use clap::Parser;
use serde::Deserialize;
use crate::common::command::Command;
use crate::common::{args::CommonArgs, client::Client, logs::setup_logs};
mod workload; mod workload;
@ -19,13 +16,6 @@ pub struct TestDeriveArgs {
initial_version: Version, initial_version: Version,
} }
#[derive(Deserialize)]
#[serde(untagged)]
pub enum CommandOrUpgrade {
Command(Command),
Upgrade { upgrade: Version },
}
pub fn run(args: TestDeriveArgs) -> anyhow::Result<()> { pub fn run(args: TestDeriveArgs) -> anyhow::Result<()> {
setup_logs(&args.common.log_filter)?; setup_logs(&args.common.log_filter)?;

View File

@ -1,7 +1,15 @@
use cargo_metadata::semver::Version;
use serde::Deserialize; use serde::Deserialize;
use std::collections::BTreeMap; use std::collections::BTreeMap;
use crate::common::assets::Asset; use crate::common::{assets::Asset, command::Command};
#[derive(Deserialize)]
#[serde(untagged)]
pub enum CommandOrUpgrade {
Command(Command),
Upgrade { upgrade: Version },
}
/// A test workload. /// A test workload.
/// Not to be confused with [a bench workload](crate::bench::workload::Workload). /// Not to be confused with [a bench workload](crate::bench::workload::Workload).
@ -9,4 +17,5 @@ use crate::common::assets::Asset;
pub struct TestWorkload { pub struct TestWorkload {
pub name: String, pub name: String,
pub assets: BTreeMap<String, Asset>, pub assets: BTreeMap<String, Asset>,
pub commands: Vec<CommandOrUpgrade>,
} }