En este caso, nuestro objetivo es componer una función de prueba para la función GetNamespaceCreationTime, que está destinada a recuperar la marca de tiempo de creación para un espacio de nombres de Kubernetes en particular. Sin embargo, tiene dificultades para encontrar un enfoque adecuado para incorporar la lógica de inicialización e interactuar con el cliente falso.
Para probar eficazmente la función GetNamespaceCreationTime, el proceso de inicialización no debe residir dentro del función en sí. En su lugar, la interfaz del cliente de Kubernetes debe pasarse como parámetro a la función.
Reemplace el código existente en la función GetNamespaceCreationTime con lo siguiente:
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()
}
A continuación, defina una función para obtener el conjunto de clientes:
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
}
Dentro de la función TestGetNamespaceCreationTime, cree una instancia del cliente falso e invoque el método 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)
}
}
Esta prueba garantiza que la marca de tiempo de creación esperada para el espacio de nombres "predeterminado" se recupere con precisión utilizando el cliente falso.
Considere introducir funciones simuladas para mejorar la capacidad de prueba y flexibilidad del código, como:
func fakeGetInclusterConfig() (*rest.Config, error) {
return nil, nil
}
func fakeGetInclusterConfigWithError() (*rest.Config, error) {
return nil, errors.New("fake error getting in-cluster config")
}
Estos métodos permiten escenarios de prueba más sólidos, donde puede afirmar comportamientos para la recuperación de la configuración en el clúster tanto exitosa como fallida.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3