mirror of
https://github.com/meilisearch/meilisearch.git
synced 2025-09-23 13:16:27 +00:00
Continue integrating commands to tests
This commit is contained in:
@ -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");
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
|
@ -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,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -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)?;
|
||||||
|
|
||||||
|
@ -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>,
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user