You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.2 KiB
Rust
124 lines
3.2 KiB
Rust
mod default;
|
|
mod deserializer;
|
|
|
|
pub use self::deserializer::from_env;
|
|
|
|
pub mod common;
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use std::path::PathBuf;
|
|
|
|
use super::*;
|
|
use serde::Deserialize;
|
|
|
|
#[derive(Debug, Deserialize, PartialEq)]
|
|
#[serde(untagged)]
|
|
#[serde(field_identifier, rename_all = "lowercase")]
|
|
enum Debug {
|
|
All,
|
|
LLB,
|
|
Frontend,
|
|
}
|
|
|
|
#[derive(Debug, Deserialize, PartialEq)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
struct CustomOptions {
|
|
filename: Option<PathBuf>,
|
|
verbosity: u32,
|
|
|
|
#[serde(default)]
|
|
debug: Vec<Debug>,
|
|
|
|
#[serde(default)]
|
|
cache_imports: Vec<common::CacheOptionsEntry>,
|
|
}
|
|
|
|
#[test]
|
|
fn custom_options() {
|
|
let env = vec![
|
|
(
|
|
"BUILDKIT_FRONTEND_OPT_0".into(),
|
|
"filename=/path/to/Dockerfile".into(),
|
|
),
|
|
(
|
|
"BUILDKIT_FRONTEND_OPT_1".into(),
|
|
"debug=llb,frontend".into(),
|
|
),
|
|
(
|
|
"BUILDKIT_FRONTEND_OPT_2".into(),
|
|
r#"cache-imports=[{"Type":"local","Attrs":{"src":"cache"}}]"#.into(),
|
|
),
|
|
(
|
|
"BUILDKIT_FRONTEND_OPT_3".into(),
|
|
"verbosity=12345678".into(),
|
|
),
|
|
];
|
|
|
|
assert_eq!(
|
|
from_env::<CustomOptions, _>(env.into_iter()).unwrap(),
|
|
CustomOptions {
|
|
filename: Some(PathBuf::from("/path/to/Dockerfile")),
|
|
verbosity: 12_345_678,
|
|
|
|
debug: vec![Debug::LLB, Debug::Frontend],
|
|
|
|
cache_imports: vec![common::CacheOptionsEntry {
|
|
cache_type: common::CacheType::Local,
|
|
attrs: vec![("src".into(), "cache".into())].into_iter().collect()
|
|
}],
|
|
}
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn env_variable_names() {
|
|
let env = vec![
|
|
(
|
|
"ANOTHER_OPT_0".into(),
|
|
"filename=/path/to/Dockerfile".into(),
|
|
),
|
|
(
|
|
"ANOTHER_OPT_2".into(),
|
|
r#"cache-imports=[{"Type":"local","Attrs":{"src":"cache"}}]"#.into(),
|
|
),
|
|
("BUILDKIT_FRONTEND_OPT_1".into(), "debug=all".into()),
|
|
(
|
|
"BUILDKIT_FRONTEND_OPT_2".into(),
|
|
"verbosity=12345678".into(),
|
|
),
|
|
];
|
|
|
|
assert_eq!(
|
|
from_env::<CustomOptions, _>(env.into_iter()).unwrap(),
|
|
CustomOptions {
|
|
filename: None,
|
|
verbosity: 12_345_678,
|
|
debug: vec![Debug::All],
|
|
cache_imports: vec![],
|
|
}
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn empty_cache() {
|
|
let env = vec![
|
|
("BUILDKIT_FRONTEND_OPT_1".into(), "cache-imports=".into()),
|
|
(
|
|
"BUILDKIT_FRONTEND_OPT_2".into(),
|
|
"verbosity=12345678".into(),
|
|
),
|
|
];
|
|
|
|
assert_eq!(
|
|
from_env::<CustomOptions, _>(env.into_iter()).unwrap(),
|
|
CustomOptions {
|
|
filename: None,
|
|
verbosity: 12_345_678,
|
|
debug: vec![],
|
|
cache_imports: vec![],
|
|
}
|
|
);
|
|
}
|
|
}
|