go - kubernetes Controller 的单元测试

标签 go kubernetes autoscaling

我正在尝试编写一个 Controller ,但在编写测试时遇到了一些问题。

我在我的 Controller 中使用了一些来自 k8s HPA 的代码,但在使用 testrestmapper 时我看到了一些奇怪的东西。

基本上在运行这个 test 时带断点 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() 以返回有效的 GroupKind。

关于go - kubernetes Controller 的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54327618/

相关文章:

go - 我应该如何在 Go 1.6 中使用 vendor?

go - 除了可移植性和安全性原因之外,为什么有人想通过 WebAssembly 在 Web 浏览器中运行他们现有的 go/rust/c++ 应用程序?

Kubernetes:仅命中一次 readinessProbe

ssl - 使用 HAProxy 入口 Controller 时,TLS 握手间歇性失败

docker - 我们可以从 pods 中现有的容器中产生更多的容器吗?

ruby-on-rails - 如何扩展你的 1 服务器 Rails 应用程序

amazon-ec2 - 使用 ansible 配置 EC2 自动缩放策略和警报

io - Golang 中的 Reader 接口(interface)和 Read 方法

go - socket.go 中 SimpleQuery 中的本地互斥锁

kubernetes - Kubernetes节点CPU利用率