我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Terratest Helm Charts 在 Go 单元测试中失败

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Terratest Helm Charts 在 Go 单元测试中失败

php小编草莓发现,Terratest Helm Charts 在 Go 单元测试中经常遇到失败的问题。Terratest 是一个用于编写自动化、可重复的基础设施测试的 Go 语言库,而 Helm Charts 则是 Kubernetes 的包管理工具。在使用 Terratest 进行 Helm Charts 的单元测试时,有时会出现各种各样的问题,导致测试失败。本文将探讨这些问题的原因,并提供相应的解决方案,帮助开发者更好地应对这些挑战。无论是初学者还是有经验的开发者,都能从本文中获得有益的知识和技巧。

问题内容

我正在尝试使用 terratest 对我的 helm 图表进行单元测试,但遇到了一个奇怪的错误:

这是我的单元测试:

package grafana

import (
    "fmt"

    "testing"

    corev1 "k8s.io/api/core/v1"

    "github.com/gruntwork-io/terratest/modules/helm"
)

func testgrafanahelmcharttemplate(t *testing.t) {
    // path to the helm chart we will test
    helmchartgrafanapath := "../../../open-electrons-monitoring"

    // setup the args. for this test, we will set the following input values:
    // - image=grafana:latest
    options := &helm.options{
        setvalues: map[string]string{"image": "grafana:latest"},
    }

    // run rendertemplate to render the template and capture the output.
    output := helm.rendertemplate(t, options, helmchartgrafanapath, "pod", []string{"templates/grafana/grafana-deployment.yml"})

    // now we use kubernetes/client-go library to render the template output into the pod struct. this will
    // ensure the pod resource is rendered correctly.
    var pod corev1.pod
    helm.unmarshalk8syaml(t, output, &pod)

    // finally, we verify the pod spec is set to the expected container image value
    expectedcontainerimage := "grafana:latest"
    podcontainers := pod.spec.containers
    fmt.print(pod.spec)
    fmt.print("*********************************************************")
    if podcontainers[0].image != expectedcontainerimage {
        t.fatalf("rendered container image (%s) is not expected (%s)", podcontainers[0].image, expectedcontainerimage)
    }
}

以下是部署的输出:

testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66: apiversion: apps/v1
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66: kind: deployment
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66: metadata:
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:   name: grafana-open-electrons-monitoring
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:   namespace: open-electrons-monitoring-ns
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:   labels:
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:     app.kubernetes.io/name: open-electrons-grafana
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:     app.kubernetes.io/component: monitoring
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:     app.kubernetes.io/part-of: open-electrons-grafana
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:     app.kubernetes.io/managed-by: helm
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:     app.kubernetes.io/instance: open-electrons-grafana
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:     app.kubernetes.io/version: refs/tags/v0.0.11 # todo: better use the grafana version
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66: spec:
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:   replicas: 1
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:   selector:
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:     matchlabels:
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:       app: open-electrons-grafana
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:   strategy:
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:     rollingupdate:
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:       maxsurge: 1
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:       maxunavailable: 1
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:     type: rollingupdate
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:   template:
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:     metadata:
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:       creationtimestamp: null
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:       labels:
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:         name: open-electrons-grafana
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:     spec:
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:       securitycontext:
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:         runasuser: 1000
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:         runasgroup: 3000
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:         fsgroup: 2000
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:         runasnonroot: true
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:       containers:
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:         - image: grafana/grafana:latest
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:           imagepullpolicy: ifnotpresent
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:           name: open-electrons-grafana
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:           ports:
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:             - containerport: 3000
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:               protocol: tcp
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:           resources:
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:             limits:
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:               memory: "1gi"
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:               cpu: "1000m"
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:             requests:
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:               memory: 500m
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:               cpu: "500m"
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:           volumemounts:
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:             - mountpath: /var/lib/grafana
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:               name: grafana-storage
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:             - mountpath: /etc/grafana/provisioning/datasources
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:               name: grafana-datasources
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:               readonly: false
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:       restartpolicy: always
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:       terminationgraceperiodseconds: 30
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:       volumes:
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:         - name: grafana-storage
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:           emptydir: {}
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:         - name: grafana-datasources
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:           configmap:
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:             defaultmode: 420
testgrafanahelmcharttemplate 2023-02-12t18:59:01+01:00 logger.go:66:             name: grafana-datasources
{[] [] [] []     map[]     false false false  nil []   nil  [] []   nil []    map[] [] }*********************************************************--- fail: testgrafanahelmcharttemplate (0.06s)

这是输出:

panic: runtime error: index out of range [0] with length 0 [recovered]
    panic: runtime error: index out of range [0] with length 0

goroutine 5 [running]:
testing.tRunner.func1.2({0x1440620, 0xc0002a85b8})
    /usr/local/go/class="lazy" data-src/testing/testing.go:1526 +0x24e
testing.tRunner.func1()
    /usr/local/go/class="lazy" data-src/testing/testing.go:1529 +0x39f
panic({0x1440620, 0xc0002a85b8})
    /usr/local/go/class="lazy" data-src/runtime/panic.go:884 +0x213

为什么会失败?我在这里缺少什么?

解决方法

我设法把它修好了。导入应该是这样的:

appsv1 "k8s.io/api/apps/v1"

然后我必须修改 deployment 对象的实例化:

var deployment appsv1.Deployment

而不是 pod 对象。

以上就是Terratest Helm Charts 在 Go 单元测试中失败的详细内容,更多请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Terratest Helm Charts 在 Go 单元测试中失败

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Terratest Helm Charts 在 Go 单元测试中失败

php小编草莓发现,Terratest Helm Charts 在 Go 单元测试中经常遇到失败的问题。Terratest 是一个用于编写自动化、可重复的基础设施测试的 Go 语言库,而 Helm Charts 则是 Kubernetes
Terratest Helm Charts 在 Go 单元测试中失败
2024-02-09

如何在 Golang 单元测试中调试失败的测试?

如何调试 golang 单元测试失败?查看错误消息,以了解失败原因。使用 delve 调试器逐步执行测试,检查变量值和代码流程。添加日志语句,以跟踪测试执行并获取更多信息。如何在 Golang 单元测试中调试失败的测试在编写 Golang
如何在 Golang 单元测试中调试失败的测试?
2024-05-16

如何在 Go 单元测试中模拟 Pulumi 资源?

问题内容我有一个函数,它接受 aws openidconnectprovider pulumi 资源的输入并创建一个 iam 角色,并附加一个包含来自该 oidc 提供商的信息的 assumerolepolicy。问题:我正在尝试为此函
如何在 Go 单元测试中模拟 Pulumi 资源?
2024-02-06

如何在单元测试中比较 Go 切片和 NaN 元素?

php小编百草在单元测试中比较 Go 切片和 NaN 元素是一个常见的问题。在处理切片时,我们经常需要比较两个切片是否相等,但当切片包含 NaN 元素时,比较会变得复杂。NaN 是一个特殊的浮点数,它代表不是一个数值。在 Go 中,使用 m
如何在单元测试中比较 Go 切片和 NaN 元素?
2024-02-12

如何在go中实现CLI命令的单元测试

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《如何在go中实现CLI命令的单元测试》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!问题内容我正
如何在go中实现CLI命令的单元测试
2024-04-05

断言:模拟:我不知道要返回什么,因为方法调用是意外的 在 Go 中编写单元测试时出错

php小编小新在这篇文章中将为您介绍在Go语言中编写单元测试时出现的一种常见错误,即断言错误。当我们在编写单元测试时,有时会遇到无法确定返回值的情况,这会导致意外的方法调用错误。在本文中,我们将讨论这个问题的原因和解决方法,帮助您更好地处理
断言:模拟:我不知道要返回什么,因为方法调用是意外的 在 Go 中编写单元测试时出错
2024-02-10

SQLServer 错误 605 尝试在数据库 %d 中提取逻辑页 %S_PGID 失败。 该逻辑页属于分配单元 %I64d,而非 %I64d。 故障 处理 修复 支持远程

详细信息 Attribute 值 产品名称 SQL Server 事件 ID 605 事件源 MSSQLSERVER 组件 SQLEngine 符号名称 WRONGPAGE 消息正文 ...
SQLServer 错误 605 尝试在数据库 %d 中提取逻辑页 %S_PGID 失败。 该逻辑页属于分配单元 %I64d,而非 %I64d。 故障 处理 修复 支持远程
2023-11-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录