Helm Test Code 설명

Helm Test Code는 Helm 차트의 정확성과 기능을 검증하기 위한 테스트 스크립트입니다. 이는 차트가 올바르게 설치되고 예상대로 작동하는지 확인하는 데 사용됩니다.

Golang 기반 Helm Test Code 예시

package main

import (
	"testing"

	"helm.sh/helm/v3/pkg/action"
	"helm.sh/helm/v3/pkg/cli"
	"helm.sh/helm/v3/pkg/release"
)

func TestHelmRelease(t *testing.T) {
	// 설정
	settings := cli.New()
	actionConfig := new(action.Configuration)
	if err := actionConfig.Init(settings.RESTClientGetter(), settings.Namespace(), os.Getenv("HELM_DRIVER"), log.Printf); err != nil {
		t.Fatalf("Failed to initialize action config: %v", err)
	}

	// Helm 설치 실행
	client := action.NewInstall(actionConfig)
	client.Namespace = settings.Namespace()
	client.ReleaseName = "test-release"
	client.ChartPathOptions.RepoURL = "<https://charts.bitnami.com/bitnami>"
	client.ChartPathOptions.Version = "9.3.0"

	chartPath, err := client.ChartPathOptions.LocateChart("nginx", settings)
	if err != nil {
		t.Fatalf("Failed to locate chart: %v", err)
	}

	rel, err := client.Run(chartPath, nil)
	if err != nil {
		t.Fatalf("Failed to install chart: %v", err)
	}

	// 릴리스 상태 확인
	if rel.Info.Status != release.StatusDeployed {
		t.Errorf("Expected release status to be 'deployed', got '%s'", rel.Info.Status)
	}

	// 릴리스 이름 확인
	if rel.Name != "test-release" {
		t.Errorf("Expected release name to be 'test-release', got '%s'", rel.Name)
	}

	// 차트 버전 확인
	if rel.Chart.Metadata.Version != "9.3.0" {
		t.Errorf("Expected chart version to be '9.3.0', got '%s'", rel.Chart.Metadata.Version)
	}
}

참조

https://helm.sh/docs/chart_template_guide/builtin_objects/