"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como criar testes simples para Client-Go usando um cliente falso?

Como criar testes simples para Client-Go usando um cliente falso?

Publicado em 13/11/2024
Navegar:732

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

Como escrever testes simples para Client-Go usando um cliente falso

Visão geral do problema

Neste caso, pretendemos compor uma função de teste para a função GetNamespaceCreationTime, que se destina a recuperar o carimbo de data/hora de criação para um namespace específico do Kubernetes. No entanto, você enfrenta dificuldade em encontrar uma abordagem adequada para incorporar a lógica de inicialização e interagir com o cliente falso.

Implementação de teste

Para testar efetivamente a função GetNamespaceCreationTime, o processo de inicialização não deve residir no funcionar em si. Em vez disso, a interface do cliente Kubernetes deve ser passada como um parâmetro para a função.

Substitua o código existente na função GetNamespaceCreationTime pelo seguinte:

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

Em seguida, defina uma função para obter o 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
}

Função de teste

Na função TestGetNamespaceCreationTime, instancie o cliente falso e invoque o 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)
  }
}

Este teste garante que o carimbo de data/hora de criação esperado para o namespace "padrão" seja recuperado com precisão usando o cliente falso.

Aprimoramentos adicionais de testabilidade

Considere introduzir funções simuladas para aprimorar a testabilidade e flexibilidade do 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")
}

Esses métodos permitem cenários de teste mais robustos, onde você pode afirmar comportamentos para recuperação de configuração no cluster bem-sucedida e com falha.

Declaração de lançamento Este artigo foi reimpresso em: 1729745300 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3