第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Kubernetes 假客戶端不處理對象Meta中的生成名稱

Kubernetes 假客戶端不處理對象Meta中的生成名稱

Go
拉風的咖菲貓 2022-09-19 21:10:40
當使用 Kubernetes 假客戶端編寫單元測試時,我注意到它無法創(chuàng)建兩個相同的對象,這些對象將其 ObjectMeta.GenerateName 字段設(shè)置為某個字符串。真正的集群接受此規(guī)范,并為每個對象生成唯一的名稱。運行以下測試代碼:package mainimport (    "context"    "testing"    "github.com/stretchr/testify/assert"    corev1 "k8s.io/api/core/v1"    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"    "k8s.io/client-go/kubernetes/fake")func TestFake(t *testing.T) {    ctx := context.Background()    client := fake.NewSimpleClientset()    _, err := client.CoreV1().Secrets("default").Create(ctx, &corev1.Secret{        ObjectMeta: metav1.ObjectMeta{            GenerateName: "generated",        },        StringData: map[string]string{"foo": "bar"},    }, metav1.CreateOptions{})    assert.NoError(t, err)    _, err = client.CoreV1().Secrets("default").Create(ctx, &corev1.Secret{        ObjectMeta: metav1.ObjectMeta{            GenerateName: "generated",        },        StringData: map[string]string{"foo": "bar"},    }, metav1.CreateOptions{})    assert.NoError(t, err)}失敗與--- FAIL: TestFake (0.00s)    /Users/mihaitodor/Projects/kubernetes/main_test.go:44:             Error Trace:    main_test.go:44            Error:          Received unexpected error:                            secrets "" already exists            Test:           TestFakeFAILFAIL    kubernetes  0.401sFAIL
查看完整描述

1 回答

?
HUH函數(shù)

TA貢獻1836條經(jīng)驗 獲得超4個贊

根據(jù)這個 GitHub 問題評論:

假客戶端不會嘗試復(fù)制服務(wù)器端行為,如驗證,名稱生成,uid分配等,如果你想測試這樣的東西,你可以添加反應(yīng)堆來模擬該行為。

要添加所需的反應(yīng)器,我們可以在創(chuàng)建對象之前插入以下代碼:corev1.Secret

client.PrependReactor(

    "create", "*",

    func(action k8sTesting.Action) (handled bool, ret runtime.Object, err error) {

        ret = action.(k8sTesting.CreateAction).GetObject()

        meta, ok := ret.(metav1.Object)

        if !ok {

            return

        }


        if meta.GetName() == "" && meta.GetGenerateName() != "" {

            meta.SetName(names.SimpleNameGenerator.GenerateName(meta.GetGenerateName()))

        }


        return

    },

)

那里有一些陷阱:

  • 包含一個嵌入式 Fake 結(jié)構(gòu),該結(jié)構(gòu)具有我們需要為此用例調(diào)用的前置反應(yīng)器方法(還有其他一些方法)。此處的此代碼在創(chuàng)建此類對象時調(diào)用。Clientset

  • 該方法有 3 個參數(shù):、和 。對于 ,我找不到任何命名常量,所以,在這種情況下,“創(chuàng)建”和“secrets”(奇怪的是它不是“秘密”)似乎是它們的正確值,如果我們想要超級具體,但在這種情況下設(shè)置為“*”應(yīng)該是可以接受的。PrependReactorverbresourcereactionverbresourceresource

  • 該參數(shù)的類型為反應(yīng)符,它將操作作為參數(shù)并返回 、 和 。經(jīng)過一番挖掘,我注意到該參數(shù)將被轉(zhuǎn)換為Creaction,它具有返回實例的方法,該實例可以轉(zhuǎn)換為metav1。對象。此接口允許我們獲取和設(shè)置基礎(chǔ)對象的各種元數(shù)據(jù)字段。根據(jù)需要設(shè)置對象字段后,我們必須返回 ,并指示調(diào)用代碼執(zhí)行剩余的反應(yīng)堆。reactionhandledreterractionGetObject()runtime.ObjectNamehandled = falseret = mutatedObjecterr = nil

  • 通過瀏覽代碼,我注意到該字段是使用名稱從字段生成的。簡單名稱生成器.生成名稱實用程序。apiserverObjectMeta.NameObjectMeta.GenerateName


查看完整回答
反對 回復(fù) 2022-09-19
  • 1 回答
  • 0 關(guān)注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號