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。