use std::sync::Arc;
use ortho_config::{ConfigDiscovery, MapEnv};
use rstest::{fixture, rstest};
const SECRET_KEY: &str = "SEKRIT_DEBUG_KEY_7f3a";
const SECRET_VALUE: &str = "sekrit-debug-value-1c9e";
const SECRET_PATH: &str = "/sekrit/debug/path-55d1";
const SELECTOR_VAR: &str = "DEMO_CONFIG_PATH";
#[fixture]
fn secret_env() -> MapEnv {
MapEnv::new().with_var(SECRET_KEY, SECRET_VALUE)
}
#[rstest]
fn map_env_debug_reveals_neither_keys_nor_values(secret_env: MapEnv) {
let rendered = format!("{secret_env:?}");
assert!(
!rendered.contains(SECRET_KEY),
"MapEnv debug output leaked the key: {rendered}"
);
assert!(
!rendered.contains(SECRET_VALUE),
"MapEnv debug output leaked the value: {rendered}"
);
assert!(
rendered.contains("MapEnv"),
"the type name should still identify the value: {rendered}"
);
}
#[rstest]
fn builder_debug_reveals_no_secrets(secret_env: MapEnv) {
let builder = ConfigDiscovery::builder("demo")
.env_var(SELECTOR_VAR)
.add_explicit_path(SECRET_PATH)
.env_source(Arc::new(secret_env));
let rendered = format!("{builder:?}");
assert!(
!rendered.contains(SECRET_KEY),
"builder debug output leaked an environment key: {rendered}"
);
assert!(
!rendered.contains(SECRET_VALUE),
"builder debug output leaked an environment value: {rendered}"
);
assert!(
!rendered.contains(SECRET_PATH),
"builder debug output leaked a path: {rendered}"
);
}
#[rstest]
fn discovery_debug_reveals_no_secrets(secret_env: MapEnv) {
let discovery = ConfigDiscovery::builder("demo")
.env_var(SELECTOR_VAR)
.add_explicit_path(SECRET_PATH)
.env_source(Arc::new(secret_env))
.build();
let rendered = format!("{discovery:?}");
assert!(
!rendered.contains(SECRET_KEY),
"discovery debug output leaked an environment key: {rendered}"
);
assert!(
!rendered.contains(SECRET_VALUE),
"discovery debug output leaked an environment value: {rendered}"
);
assert!(
!rendered.contains(SECRET_PATH),
"discovery debug output leaked a path: {rendered}"
);
}
#[rstest]
fn map_env_debug_snapshot(secret_env: MapEnv) {
assert_eq!(format!("{secret_env:?}"), "MapEnv { vars: 1, .. }");
}