Terratest Helm Charts 在 Go 单元测试中失败
短信预约 -IT技能 免费直播动态提醒
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