1 回答

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)該是可以接受的。
PrependReactor
verb
resource
reaction
verb
resource
resource
該參數(shù)的類型為反應(yīng)符,它將
操作
作為參數(shù)并返回 、 和 。經(jīng)過一番挖掘,我注意到該參數(shù)將被轉(zhuǎn)換為Creaction
,它具有返回實例的方法,該實例可以轉(zhuǎn)換為metav1。對象
。此接口允許我們獲取和設(shè)置基礎(chǔ)對象的各種元數(shù)據(jù)字段。根據(jù)需要設(shè)置對象字段后,我們必須返回 ,并指示調(diào)用代碼執(zhí)行剩余的反應(yīng)堆。reaction
handled
ret
err
action
GetObject()
runtime.Object
Name
handled = false
ret = mutatedObject
err = nil
通過瀏覽代碼,我注意到該字段是使用名稱從字段生成的
。簡單名稱生成器.生成名稱
實用程序。apiserver
ObjectMeta.Name
ObjectMeta.GenerateName
- 1 回答
- 0 關(guān)注
- 151 瀏覽
添加回答
舉報