"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > नकली क्लाइंट का उपयोग करके क्लाइंट-गो के लिए सरल टेस्ट कैसे बनाएं?

नकली क्लाइंट का उपयोग करके क्लाइंट-गो के लिए सरल टेस्ट कैसे बनाएं?

2024-11-13 को प्रकाशित
ब्राउज़ करें:993

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

नकली क्लाइंट का उपयोग करके क्लाइंट-गो के लिए सरल टेस्ट कैसे लिखें

समस्या अवलोकन

इस मामले में, हमारा लक्ष्य एक परीक्षण फ़ंक्शन बनाना है GetNamespaceCreationTime फ़ंक्शन के लिए, जिसका उद्देश्य किसी विशेष कुबेरनेट्स नेमस्पेस के लिए निर्माण टाइमस्टैम्प को पुनः प्राप्त करना है। हालाँकि, आपको इनिशियलाइज़ेशन लॉजिक को शामिल करने और नकली क्लाइंट के साथ इंटरैक्ट करने के लिए एक उपयुक्त दृष्टिकोण खोजने में कठिनाई का सामना करना पड़ता है। स्वयं कार्य करें। इसके बजाय, Kubernetes क्लाइंट इंटरफ़ेस को फ़ंक्शन के पैरामीटर के रूप में पास किया जाना चाहिए।

GetNamespaceCreationTime फ़ंक्शन में मौजूदा कोड को निम्नलिखित के साथ बदलें:

import ( "एफएमटी" "k8s.io/api/core/v1" मेटाव1 "k8s.io/apimachinery/pkg/apis/meta/v1" "समय" ) func GetNamespaceCreationTime(kubeClient kubernetes.Interface, नेमस्पेस स्ट्रिंग) int64 { ns, err := kubeClient.CoreV1().Namespaces().Get(namespace,metav1.GetOptions{}) यदि त्रुटि !=शून्य { घबराहट (त्रुटि.त्रुटि()) } fmt.Printf("%v \n", ns.CreationTimestamp) वापसी ns.GetCreationTimestamp().Unix() }

अगला, क्लाइंट सेट प्राप्त करने के लिए एक फ़ंक्शन को परिभाषित करें:
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()
}
func GetClientSet() kubernetes.Interface { कॉन्फिग, त्रुटि := बाकी.InClusterConfig() यदि त्रुटि !=शून्य { log.Warnf("इन-क्लस्टर कॉन्फिगरेशन नहीं मिल सका: %s", त्रुटि) वापसी शून्य, त्रुटि } क्लाइंट, त्रुटि := kubernetes.NewForConfig(config) यदि त्रुटि !=शून्य { log.Warnf ("इन-क्लस्टर एपीआई सर्वर से कनेक्ट नहीं हो सका: %s", त्रुटि) वापसी शून्य, त्रुटि } वापसी ग्राहक, गलती ) kubeClient := नकली.NewSimpleClientset() मिला := GetNamespaceCreationTime(kubeClient, "डिफ़ॉल्ट") चाहते हैं := int64(1257894000) nsMock := config.CoreV1().Namespaces() nsMock.Create(&v1.Namespace{ ऑब्जेक्टमेटा: मेटाव1.ऑब्जेक्टमेटा{ नाम: "डिफ़ॉल्ट", निर्माणटाइमस्टैम्प: मेटाव1.दिनांक(2009, समय.नवंबर, 10, 23, 0, 0, 0, समय.यूटीसी), }, }) अगर मिल गया != चाहिए { t.Errorf ("मिल गया %q चाहिए %q", मिल गया, चाहिए) } }

यह परीक्षण सुनिश्चित करता है कि "डिफ़ॉल्ट" नेमस्पेस के लिए अपेक्षित निर्माण टाइमस्टैम्प को नकली क्लाइंट का उपयोग करके सटीक रूप से पुनर्प्राप्त किया गया है।
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
}

बढ़ाने के लिए नकली कार्यों को शुरू करने पर विचार करें कोड की परीक्षण योग्यता और लचीलापन, जैसे:

func falseGetInclusterConfig() (*rest.Config, error) { वापसी शून्य, शून्य } func नकलीGetInclusterConfigWithError() (*rest.Config, त्रुटि) { वापसी शून्य, त्रुटियां.नया('क्लस्टर कॉन्फिगरेशन में फर्जी त्रुटि हो रही है') }
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)
  }
}
विज्ञप्ति वक्तव्य इस लेख को पुन: पेश किया गया है: 1729745300 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] पर संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3