1 回答

TA貢獻1836條經驗 獲得超4個贊
根據這個 GitHub 問題評論:
假客戶端不會嘗試復制服務器端行為,如驗證,名稱生成,uid分配等,如果你想測試這樣的東西,你可以添加反應堆來模擬該行為。
要添加所需的反應器,我們可以在創建對象之前插入以下代碼: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
結構,該結構具有我們需要為此用例調用的前置反應器
方法(還有其他一些方法)。此處的此代碼在創建此類對象時調用。Clientset
該方法有 3 個參數:、和 。對于 ,我找不到任何命名常量,所以,在這種情況下,“創建”和“secrets”(奇怪的是它不是“秘密”)似乎是它們的正確值,如果我們想要超級具體,但在這種情況下設置為“*”應該是可以接受的。
PrependReactor
verb
resource
reaction
verb
resource
resource
該參數的類型為反應符,它將
操作
作為參數并返回 、 和 。經過一番挖掘,我注意到該參數將被轉換為Creaction
,它具有返回實例的方法,該實例可以轉換為metav1。對象
。此接口允許我們獲取和設置基礎對象的各種元數據字段。根據需要設置對象字段后,我們必須返回 ,并指示調用代碼執行剩余的反應堆。reaction
handled
ret
err
action
GetObject()
runtime.Object
Name
handled = false
ret = mutatedObject
err = nil
通過瀏覽代碼,我注意到該字段是使用名稱從字段生成的
。簡單名稱生成器.生成名稱
實用程序。apiserver
ObjectMeta.Name
ObjectMeta.GenerateName
- 1 回答
- 0 關注
- 152 瀏覽
添加回答
舉報