Ce document a été traduit à l'aide d'une technologie de traduction automatique. Bien que nous nous efforcions de fournir des traductions exactes, nous ne fournissons aucune garantie quant à l'exhaustivité, l'exactitude ou la fiabilité du contenu traduit. En cas de divergence, la version originale anglaise prévaut et fait foi.

Il s'agit d'une documentation non publiée pour Admission Controller 1.34-dev.

Définir les paramètres de stratégie

La structure des paramètres de stratégie

Tout d’abord, définissez la structure qui contient les paramètres de stratégie.

Ouvrez le fichier demo/src/settings.rs et changez la définition de Settings struct pour qu’elle ressemble à :

pub(crate) struct Settings {
    pub invalid_names: HashSet<String>,
}

Cela place automatiquement la liste des noms invalides dans une collection Set.

La fonction de validation des paramètres de stratégie

Ensuite, écrivez une fonction de validation des paramètres pour vous assurer que la stratégie est toujours exécutée avec au moins un nom invalide.

Vous le faites en changeant l’implémentation du trait Validatable.

Changez l’implémentation de l’échafaudage définie dans src/settings.rs pour qu’elle ressemble à :

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(())
        }
    }
}

Ajouter des tests unitaires

Maintenant, vous pouvez écrire un test unitaire pour vous assurer que la validation des paramètres fonctionne. Vous pouvez le faire de la manière habituelle en Rust.

Il y a déjà quelques tests par défaut en bas du fichier src/settings.rs . Remplacez le code généré automatiquement par celui-ci :

#[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(())
    }
}

Vous pouvez maintenant exécuter les tests unitaires en faisant :

cargo test

Cela produit une sortie similaire à celle-ci :

   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