Skip to main content

secrets_provider_tests/
assertions.rs

1use crate::ProviderUnderTest;
2use crate::retry_async;
3use anyhow::{Context, Result};
4use std::time::Duration;
5
6pub async fn assert_get_eq<P: ProviderUnderTest>(
7    provider: &P,
8    provider_name: &str,
9    key: &str,
10    expected: &[u8],
11) -> Result<()> {
12    let got = retry_async(
13        || async { provider.get(key).await },
14        5,
15        Duration::from_millis(100),
16    )
17    .await
18    .with_context(|| format!("get failed for {provider_name}:{key}"))?;
19    let Some(actual) = got else {
20        anyhow::bail!("expected value for {provider_name}:{key}, got none");
21    };
22    if actual != expected {
23        anyhow::bail!(
24            "value mismatch for {provider_name}:{key} ({} vs {})",
25            actual.len(),
26            expected.len()
27        );
28    }
29    Ok(())
30}
31
32pub async fn assert_deleted<P: ProviderUnderTest>(
33    provider: &P,
34    provider_name: &str,
35    key: &str,
36) -> Result<()> {
37    let got = retry_async(
38        || async { provider.get(key).await },
39        5,
40        Duration::from_millis(150),
41    )
42    .await
43    .with_context(|| format!("delete confirmation failed for {provider_name}:{key}"))?;
44
45    if got.is_some() {
46        anyhow::bail!("expected deletion for {provider_name}:{key}");
47    }
48    Ok(())
49}