Dans ce cas, nous visons à composer une fonction de test pour la fonction GetNamespaceCreationTime, qui est destinée à récupérer l'horodatage de création pour un espace de noms Kubernetes particulier. Cependant, vous rencontrez des difficultés pour trouver une approche appropriée pour intégrer la logique d'initialisation et interagir avec le faux client.
Pour tester efficacement la fonction GetNamespaceCreationTime, le processus d'initialisation ne doit pas résider dans le fonctionner lui-même. Au lieu de cela, l'interface client Kubernetes doit être transmise en tant que paramètre à la fonction.
Remplacez le code existant dans la fonction GetNamespaceCreationTime par ce qui suit :
import (
"fmt"
"k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"time"
)
func GetNamespaceCreationTime(kubeClient kubernetes.Interface, namespace string) int64 {
ns, err := kubeClient.CoreV1().Namespaces().Get(namespace, metav1.GetOptions{})
if err != nil {
panic(err.Error())
}
fmt.Printf("%v \n", ns.CreationTimestamp)
return ns.GetCreationTimestamp().Unix()
}
Ensuite, définissez une fonction pour obtenir l'ensemble client :
func GetClientSet() kubernetes.Interface {
config, err := rest.InClusterConfig()
if err != nil {
log.Warnf("Could not get in-cluster config: %s", err)
return nil, err
}
client, err := kubernetes.NewForConfig(config)
if err != nil {
log.Warnf("Could not connect to in-cluster API server: %s", err)
return nil, err
}
return client, err
}
Dans la fonction TestGetNamespaceCreationTime, instanciez le faux client et invoquez la méthode GetNamespaceCreationTIme :
func TestGetNamespaceCreationTime(t *testing.T) {
kubeClient := fake.NewSimpleClientset()
got := GetNamespaceCreationTime(kubeClient, "default")
want := int64(1257894000)
nsMock := config.CoreV1().Namespaces()
nsMock.Create(&v1.Namespace{
ObjectMeta: metav1.ObjectMeta{
Name: "default",
CreationTimestamp: metav1.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC),
},
})
if got != want {
t.Errorf("got %q want %q", got, want)
}
}
Ce test garantit que l'horodatage de création attendu pour l'espace de noms « par défaut » est récupéré avec précision à l'aide du faux client.
Envisagez d'introduire des fonctions fictives pour améliorer la testabilité et la flexibilité du code, telles que :
func fakeGetInclusterConfig() (*rest.Config, error) {
return nil, nil
}
func fakeGetInclusterConfigWithError() (*rest.Config, error) {
return nil, errors.New("fake error getting in-cluster config")
}
Ces méthodes permettent des scénarios de test plus robustes, dans lesquels vous pouvez affirmer des comportements pour une récupération de configuration dans le cluster réussie ou échouée.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3