开发者社区> 问答> 正文

无法在kubebuilder的client.Client中获取K8S资源进行单元测试

我正在为使用Kubebuilder创建的样本Kubernetes CRD和控制器编写一些单元测试。控制器中的主代码创建Kubernetes资源(名称空间和其中的ResourceQuota)。在我的单元测试中,我想验证控制器是否实际创建了这些。我使用client.Client使用默认sigs.k8s.io/controller-runtime/pkg/manager对象创建的对象。

mgr, _ := manager.New(cfg, manager.Options{})
cl := mgr.GetClient()
rq := &corev1.ResourceQuota{}
err = cl.Get(ctx, types.NamespacedName{Name: "my-quota", Namespace:

    "my-namespace"}, rq)

我知道主代码工作正常,因为我在真实的实时环境中测试它。我看到主要代码从单元测试中调用。但是,单元测试中的上述代码不起作用; 即对Get()的调用返回我期望的ResourceQuota。我也尝试了List()api但是它也没有返回任何东西。也没有错误。只是空洞的回应。

为了让Kubebuilder中的K8S控制平面运行单元测试,我是否需要做一些特殊/不同的事情?

展开
收起
k8s小能手 2019-01-11 14:24:08 4581 0
1 条回答
写回答
取消 提交回答
  • 整合最优质的专家资源和技术资料,问答解疑

    如果要访问其他K8S资源,则需要使用clientSetKubernetes的client-go中的标准对象。例如,如果要确认targetNamespace存在特定的命名空间:

    mgr, _ := manager.New(cfg, manager.Options{})
    generatedClient := kubernetes.NewForConfigOrDie(mgr.GetConfig())

    nsFound := false
    namespaces := generatedClient.CoreV1().Namespaces()
    namespaceList, _ := namespaces.List(metav1.ListOptions{})
    for _, ns := range namespaceList.Items {

    if ns.Name == targetNamespace {
        nsFound = true
        break
    }

    }
    g.Expect(nsFound).To(gomega.BeTrue())
    log.Printf("Namespace %s verified", targetNamespace)

    2019-07-17 23:25:22
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
移动互联网测试到质量的转变 立即下载
给ITer的技术实战进阶课-阿里CIO学院独家教材(四) 立即下载
F2etest — 多浏览器兼容性测试整体解决方案 立即下载

相关镜像