|
Este documento foi traduzido usando tecnologia de tradução automática de máquina. Sempre trabalhamos para apresentar traduções precisas, mas não oferecemos nenhuma garantia em relação à integridade, precisão ou confiabilidade do conteúdo traduzido. Em caso de qualquer discrepância, a versão original em inglês prevalecerá e constituirá o texto official. |
|
Esta é uma documentação não divulgada para Admission Controller 1.34-dev. |
Definindo configurações de política
A estrutura das configurações de política
Primeiramente, defina a estrutura que contém as configurações de política.
Abra o arquivo demo/src/settings.rs e altere a definição do Settings
struct para ficar assim:
pub(crate) struct Settings {
pub invalid_names: HashSet<String>,
}
Isso coloca automaticamente a lista de nomes inválidos em uma coleção Set.
A função de validação das configurações
Em seguida, escreva uma função de validação das configurações para garantir que a política seja sempre executada com pelo menos um nome inválido.
Você faz isso alterando a implementação do trait Validatable.
Altere a implementação do scaffolding definida em src/settings.rs para ficar assim:
impl kubewarden::settings::Validatable for Settings {
fn validate(&self) -> Result<(), String> {
if self.invalid_names.is_empty() {
Err(String::from("No invalid name specified. Specify at least one invalid name to match"))
} else {
Ok(())
}
}
}
Adicione testes de unidade
Agora você pode escrever um teste de unidade para garantir que a validação das configurações esteja funcionando. Você pode fazer isso da maneira usual do Rust.
Já existem alguns testes padrão no final do arquivo src/settings.rs. Substitua o código gerado automaticamente para ficar assim:
#[cfg(test)]
mod tests {
use super::*;
use kubewarden_policy_sdk::settings::Validatable;
#[test]
fn accept_settings_with_a_list_of_invalid_names() -> Result<(), ()> {
let mut invalid_names = HashSet::new();
invalid_names.insert(String::from("bad_name1"));
invalid_names.insert(String::from("bad_name2"));
let settings = Settings { invalid_names };
assert!(settings.validate().is_ok());
Ok(())
}
#[test]
fn reject_settings_without_a_list_of_invalid_names() -> Result<(), ()> {
let invalid_names = HashSet::<String>::new();
let settings = Settings { invalid_names };
assert!(settings.validate().is_err());
Ok(())
}
}
Agora você pode executar os testes de unidade fazendo:
cargo test
Isso produz uma saída semelhante à seguinte:
Compiling demo v0.1.0 (/home/jhk/projects/suse/tmp/demo)
Finished test [unoptimized + debuginfo] target(s) in 0.59s
Running unittests src/lib.rs (target/debug/deps/demo-bea8e11b21717093)
running 5 tests
test settings::tests::accept_settings_with_a_list_of_invalid_names ... ok
test settings::tests::reject_settings_without_a_list_of_invalid_names ... ok
test tests::reject_pod_with_invalid_name ... ok
test tests::accept_request_with_non_pod_resource ... ok
test tests::accept_pod_with_valid_name ... ok
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s