"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo crear pruebas sencillas para Client-Go utilizando un cliente falso?

¿Cómo crear pruebas sencillas para Client-Go utilizando un cliente falso?

Publicado el 2024-11-13
Navegar:517

How to Create Simple Tests for Client-Go Using a Fake Client?

Cómo escribir pruebas simples para Client-Go usando un cliente falso

Descripción general del problema

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.

Implementación de prueba

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
}

Función de prueba

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.

Mejoras adicionales en la capacidad de prueba

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.

Declaración de liberación Este artículo se reimprime en: 1729745300 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

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