Rumah >pembangunan bahagian belakang >Golang >Carta Helm Terratest gagal dalam ujian unit Go

Carta Helm Terratest gagal dalam ujian unit Go

WBOY
WBOYke hadapan
2024-02-08 23:06:28977semak imbas

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

editor php Strawberry mendapati Carta Helm Terratest sering menghadapi masalah kegagalan dalam ujian unit Go. Terratest ialah pustaka Go untuk menulis ujian infrastruktur automatik yang boleh diulang, dan Carta Helm ialah alat pengurusan pakej untuk Kubernetes. Apabila menggunakan Terratest untuk ujian unit Carta Helm, pelbagai masalah kadangkala berlaku, menyebabkan ujian gagal. Artikel ini akan meneroka punca masalah ini dan menyediakan penyelesaian yang sepadan untuk membantu pembangun menangani cabaran ini dengan lebih baik. Sama ada anda seorang pemula atau pembangun yang berpengalaman, anda boleh memperoleh pengetahuan dan kemahiran yang berguna daripada artikel ini.

Kandungan soalan

Saya cuba menggunakan terratest untuk menguji unit carta teraju saya, tetapi saya mendapat ralat pelik:

Ini adalah ujian unit saya:

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)
    }
}

Berikut ialah output penggunaan:

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)

Ini adalah output:

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

Kenapa gagal? Apa yang saya hilang di sini?

Penyelesaian

Saya berjaya memperbaikinya. Import sepatutnya kelihatan seperti ini:

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

Kemudian saya perlu mengubah suai instantiasi objek penempatan:

var deployment appsv1.Deployment

Daripada objek pod.

Atas ialah kandungan terperinci Carta Helm Terratest gagal dalam ujian unit Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam