kubernetes 控制器的单元测试
Unit tests for kubernetes controller
我正在尝试编写一个控制器,但在编写测试时遇到了一些问题。
我在我的控制器中使用了一些来自 k8s HPA 的代码,但在使用 testrestmapper
时我看到了一些奇怪的东西。
基本上当 运行 这个 test with a breakpoint here 我看到映射被返回。
当我这样做时,映射没有返回。
这里发生了什么魔法?
以下测试失败
package main
import (
"github.com/stretchr/testify/assert"
"k8s.io/apimachinery/pkg/api/meta/testrestmapper"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"testing"
)
func TestT(t *testing.T) {
mapper := testrestmapper.TestOnlyStaticRESTMapper(legacyscheme.Scheme)
gk := schema.FromAPIVersionAndKind("apps/v1", "Deployment").GroupKind()
mapping, err := mapper.RESTMapping(gk)
assert.NoError(t, err)
assert.NotNil(t, mapping)
}
我认为这是因为您缺少 _ "k8s.io/kubernetes/pkg/apis/apps/install"
的导入。
如果不导入此路径,则没有 API 组或版本注册到您用来获取 REST 映射的 schema
。
通过导入路径,API 组将被注册,允许对 schema.FromAPIVersionAndKind("apps/v1", "Deployment").GroupKind()
的调用到 return 一个有效的 GroupKind。
我正在尝试编写一个控制器,但在编写测试时遇到了一些问题。
我在我的控制器中使用了一些来自 k8s HPA 的代码,但在使用 testrestmapper
时我看到了一些奇怪的东西。
基本上当 运行 这个 test with a breakpoint here 我看到映射被返回。
当我这样做时,映射没有返回。
这里发生了什么魔法?
以下测试失败
package main
import (
"github.com/stretchr/testify/assert"
"k8s.io/apimachinery/pkg/api/meta/testrestmapper"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"testing"
)
func TestT(t *testing.T) {
mapper := testrestmapper.TestOnlyStaticRESTMapper(legacyscheme.Scheme)
gk := schema.FromAPIVersionAndKind("apps/v1", "Deployment").GroupKind()
mapping, err := mapper.RESTMapping(gk)
assert.NoError(t, err)
assert.NotNil(t, mapping)
}
我认为这是因为您缺少 _ "k8s.io/kubernetes/pkg/apis/apps/install"
的导入。
如果不导入此路径,则没有 API 组或版本注册到您用来获取 REST 映射的 schema
。
通过导入路径,API 组将被注册,允许对 schema.FromAPIVersionAndKind("apps/v1", "Deployment").GroupKind()
的调用到 return 一个有效的 GroupKind。