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 {[] [] [] [] <nil> <nil> map[] <nil> false false false <nil> nil [] nil [] [] <nil> nil [] <nil> <nil> <nil> map[] [] <nil>}*********************************************************--- 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/src/testing/testing.go:1526 +0x24e testing.tRunner.func1() /usr/local/go/src/testing/testing.go:1529 +0x39f panic({0x1440620, 0xc0002a85b8}) /usr/local/go/src/runtime/panic.go:884 +0x213
為什麼會失敗?我在這裡缺少什麼?
我設法把它修好了。導入應該是這樣的:
appsv1 "k8s.io/api/apps/v1"
然後我必須修改 deployment 物件的實例化:
var deployment appsv1.Deployment
而不是 pod 物件。
以上是Terratest Helm Charts 在 Go 單元測試中失敗的詳細內容。更多資訊請關注PHP中文網其他相關文章!