Do so that meilisearch versions get downloaded

This commit is contained in:
Mubelotix
2025-08-25 15:16:26 +02:00
parent c98efe18c9
commit d649732acd
3 changed files with 151 additions and 8 deletions

View File

@ -8,19 +8,41 @@ use crate::{
client::Client,
command::{run_commands, Command},
},
test::TestDeriveArgs,
test::{versions::expand_assets_with_versions, TestDeriveArgs},
};
#[derive(Clone)]
pub enum VersionOrLatest {
Version(Version),
Latest,
}
impl<'a> Deserialize<'a> for VersionOrLatest {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'a>,
{
let s: &str = Deserialize::deserialize(deserializer)?;
if s.eq_ignore_ascii_case("latest") {
Ok(VersionOrLatest::Latest)
} else {
let version = Version::parse(s).map_err(serde::de::Error::custom)?;
Ok(VersionOrLatest::Version(version))
}
}
}
#[derive(Deserialize)]
#[serde(untagged)]
pub enum CommandOrUpgrade {
Command(Command),
Upgrade { upgrade: Version },
Upgrade { upgrade: VersionOrLatest },
}
enum CommandOrUpgradeVec {
Commands(Vec<Command>),
Upgrade(Version),
Upgrade(VersionOrLatest),
}
/// A test workload.
@ -34,17 +56,15 @@ pub struct TestWorkload {
impl TestWorkload {
pub async fn run(
&self,
&mut self,
args: &TestDeriveArgs,
assets_client: &Client,
meili_client: &Client,
) -> anyhow::Result<()> {
// Fetch assets
fetch_assets(assets_client, &self.assets, &args.common.asset_folder).await?;
// Group commands between upgrades
let mut commands_or_upgrade = Vec::new();
let mut current_commands = Vec::new();
let mut all_versions = vec![args.initial_version.clone()];
for command_or_upgrade in &self.commands {
match command_or_upgrade {
CommandOrUpgrade::Command(command) => current_commands.push(command.clone()),
@ -54,10 +74,17 @@ impl TestWorkload {
current_commands = Vec::new();
}
commands_or_upgrade.push(CommandOrUpgradeVec::Upgrade(upgrade.clone()));
if let VersionOrLatest::Version(upgrade) = upgrade {
all_versions.push(upgrade.clone());
}
}
}
}
// Fetch assets
expand_assets_with_versions(&mut self.assets, &all_versions).await?;
fetch_assets(assets_client, &self.assets, &args.common.asset_folder).await?;
for command_or_upgrade in commands_or_upgrade {
match command_or_upgrade {
CommandOrUpgradeVec::Commands(commands) => {