356 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			356 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Go
		
	
	
	
package helmexec
 | 
						|
 | 
						|
import (
 | 
						|
	"bytes"
 | 
						|
	"os"
 | 
						|
	"reflect"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"go.uber.org/zap"
 | 
						|
)
 | 
						|
 | 
						|
// Mocking the command-line runner
 | 
						|
 | 
						|
type mockRunner struct {
 | 
						|
	output []byte
 | 
						|
	err    error
 | 
						|
}
 | 
						|
 | 
						|
func (mock *mockRunner) Execute(cmd string, args []string) ([]byte, error) {
 | 
						|
	return []byte{}, nil
 | 
						|
}
 | 
						|
 | 
						|
func MockExecer(logger *zap.SugaredLogger, kubeContext string) *execer {
 | 
						|
	execer := New(logger, kubeContext)
 | 
						|
	execer.runner = &mockRunner{}
 | 
						|
	return execer
 | 
						|
}
 | 
						|
 | 
						|
// Test methods
 | 
						|
 | 
						|
func TestNewHelmExec(t *testing.T) {
 | 
						|
	buffer := bytes.NewBufferString("something")
 | 
						|
	logger := NewLogger(buffer, "debug")
 | 
						|
	helm := New(logger, "dev")
 | 
						|
	if helm.kubeContext != "dev" {
 | 
						|
		t.Error("helmexec.New() - kubeContext")
 | 
						|
	}
 | 
						|
	if buffer.String() != "something" {
 | 
						|
		t.Error("helmexec.New() - changed buffer")
 | 
						|
	}
 | 
						|
	if len(helm.extra) != 0 {
 | 
						|
		t.Error("helmexec.New() - extra args not empty")
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Test_SetExtraArgs(t *testing.T) {
 | 
						|
	helm := New(NewLogger(os.Stdout, "info"), "dev")
 | 
						|
	helm.SetExtraArgs()
 | 
						|
	if len(helm.extra) != 0 {
 | 
						|
		t.Error("helmexec.SetExtraArgs() - passing no arguments should not change extra field")
 | 
						|
	}
 | 
						|
	helm.SetExtraArgs("foo")
 | 
						|
	if !reflect.DeepEqual(helm.extra, []string{"foo"}) {
 | 
						|
		t.Error("helmexec.SetExtraArgs() - one extra argument missing")
 | 
						|
	}
 | 
						|
	helm.SetExtraArgs("alpha", "beta")
 | 
						|
	if !reflect.DeepEqual(helm.extra, []string{"alpha", "beta"}) {
 | 
						|
		t.Error("helmexec.SetExtraArgs() - two extra arguments missing (overwriting the previous value)")
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Test_SetHelmBinary(t *testing.T) {
 | 
						|
	helm := New(NewLogger(os.Stdout, "info"), "dev")
 | 
						|
	if helm.helmBinary != "helm" {
 | 
						|
		t.Error("helmexec.command - default command is not helm")
 | 
						|
	}
 | 
						|
	helm.SetHelmBinary("foo")
 | 
						|
	if helm.helmBinary != "foo" {
 | 
						|
		t.Errorf("helmexec.SetHelmBinary() - actual = %s expect = foo", helm.helmBinary)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Test_AddRepo(t *testing.T) {
 | 
						|
	var buffer bytes.Buffer
 | 
						|
	logger := NewLogger(&buffer, "debug")
 | 
						|
	helm := MockExecer(logger, "dev")
 | 
						|
	helm.AddRepo("myRepo", "https://repo.example.com/", "cert.pem", "key.pem", "", "")
 | 
						|
	expected := `Adding repo myRepo https://repo.example.com/
 | 
						|
exec: helm repo add myRepo https://repo.example.com/ --cert-file cert.pem --key-file key.pem --kube-context dev
 | 
						|
`
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.AddRepo()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
 | 
						|
	buffer.Reset()
 | 
						|
	helm.AddRepo("myRepo", "https://repo.example.com/", "", "", "", "")
 | 
						|
	expected = `Adding repo myRepo https://repo.example.com/
 | 
						|
exec: helm repo add myRepo https://repo.example.com/ --kube-context dev
 | 
						|
`
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.AddRepo()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
 | 
						|
	buffer.Reset()
 | 
						|
	helm.AddRepo("myRepo", "https://repo.example.com/", "", "", "example_user", "example_password")
 | 
						|
	expected = `Adding repo myRepo https://repo.example.com/
 | 
						|
exec: helm repo add myRepo https://repo.example.com/ --username example_user --password example_password --kube-context dev
 | 
						|
`
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.AddRepo()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Test_UpdateRepo(t *testing.T) {
 | 
						|
	var buffer bytes.Buffer
 | 
						|
	logger := NewLogger(&buffer, "debug")
 | 
						|
	helm := MockExecer(logger, "dev")
 | 
						|
	helm.UpdateRepo()
 | 
						|
	expected := `Updating repo
 | 
						|
exec: helm repo update --kube-context dev
 | 
						|
`
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.UpdateRepo()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Test_SyncRelease(t *testing.T) {
 | 
						|
	var buffer bytes.Buffer
 | 
						|
	logger := NewLogger(&buffer, "debug")
 | 
						|
	helm := MockExecer(logger, "dev")
 | 
						|
	helm.SyncRelease("release", "chart", "--timeout 10", "--wait")
 | 
						|
	expected := `Upgrading chart
 | 
						|
exec: helm upgrade --install --reset-values release chart --timeout 10 --wait --kube-context dev
 | 
						|
`
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.SyncRelease()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
 | 
						|
	buffer.Reset()
 | 
						|
	helm.SyncRelease("release", "chart")
 | 
						|
	expected = `Upgrading chart
 | 
						|
exec: helm upgrade --install --reset-values release chart --kube-context dev
 | 
						|
`
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.SyncRelease()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Test_UpdateDeps(t *testing.T) {
 | 
						|
	var buffer bytes.Buffer
 | 
						|
	logger := NewLogger(&buffer, "debug")
 | 
						|
	helm := MockExecer(logger, "dev")
 | 
						|
	helm.UpdateDeps("./chart/foo")
 | 
						|
	expected := `Updating dependency ./chart/foo
 | 
						|
exec: helm dependency update ./chart/foo --kube-context dev
 | 
						|
`
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.UpdateDeps()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
 | 
						|
	buffer.Reset()
 | 
						|
	helm.SetExtraArgs("--verify")
 | 
						|
	helm.UpdateDeps("./chart/foo")
 | 
						|
	expected = `Updating dependency ./chart/foo
 | 
						|
exec: helm dependency update ./chart/foo --verify --kube-context dev
 | 
						|
`
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.AddRepo()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Test_DecryptSecret(t *testing.T) {
 | 
						|
	var buffer bytes.Buffer
 | 
						|
	logger := NewLogger(&buffer, "debug")
 | 
						|
	helm := MockExecer(logger, "dev")
 | 
						|
	helm.DecryptSecret("secretName")
 | 
						|
	expected := `Decrypting secret secretName
 | 
						|
exec: helm secrets dec secretName --kube-context dev
 | 
						|
`
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.DecryptSecret()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Test_DiffRelease(t *testing.T) {
 | 
						|
	var buffer bytes.Buffer
 | 
						|
	logger := NewLogger(&buffer, "debug")
 | 
						|
	helm := MockExecer(logger, "dev")
 | 
						|
	helm.DiffRelease("release", "chart", "--timeout 10", "--wait")
 | 
						|
	expected := `Comparing release chart
 | 
						|
exec: helm diff upgrade --allow-unreleased release chart --timeout 10 --wait --kube-context dev
 | 
						|
`
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.DiffRelease()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
 | 
						|
	buffer.Reset()
 | 
						|
	helm.DiffRelease("release", "chart")
 | 
						|
	expected = `Comparing release chart
 | 
						|
exec: helm diff upgrade --allow-unreleased release chart --kube-context dev
 | 
						|
`
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.DiffRelease()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Test_DeleteRelease(t *testing.T) {
 | 
						|
	var buffer bytes.Buffer
 | 
						|
	logger := NewLogger(&buffer, "debug")
 | 
						|
	helm := MockExecer(logger, "dev")
 | 
						|
	helm.DeleteRelease("release")
 | 
						|
	expected := `Deleting release
 | 
						|
exec: helm delete release --kube-context dev
 | 
						|
`
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.DeleteRelease()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
func Test_DeleteRelease_Flags(t *testing.T) {
 | 
						|
	var buffer bytes.Buffer
 | 
						|
	logger := NewLogger(&buffer, "debug")
 | 
						|
	helm := MockExecer(logger, "dev")
 | 
						|
	helm.DeleteRelease("release", "--purge")
 | 
						|
	expected := `Deleting release
 | 
						|
exec: helm delete release --purge --kube-context dev
 | 
						|
`
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.DeleteRelease()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Test_TestRelease(t *testing.T) {
 | 
						|
	var buffer bytes.Buffer
 | 
						|
	logger := NewLogger(&buffer, "debug")
 | 
						|
	helm := MockExecer(logger, "dev")
 | 
						|
	helm.TestRelease("release")
 | 
						|
	expected := `Testing release
 | 
						|
exec: helm test release --kube-context dev
 | 
						|
`
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.TestRelease()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
func Test_TestRelease_Flags(t *testing.T) {
 | 
						|
	var buffer bytes.Buffer
 | 
						|
	logger := NewLogger(&buffer, "debug")
 | 
						|
	helm := MockExecer(logger, "dev")
 | 
						|
	helm.TestRelease("release", "--cleanup", "--timeout", "60")
 | 
						|
	expected := `Testing release
 | 
						|
exec: helm test release --cleanup --timeout 60 --kube-context dev
 | 
						|
`
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.TestRelease()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Test_ReleaseStatus(t *testing.T) {
 | 
						|
	var buffer bytes.Buffer
 | 
						|
	logger := NewLogger(&buffer, "debug")
 | 
						|
	helm := MockExecer(logger, "dev")
 | 
						|
	helm.ReleaseStatus("myRelease")
 | 
						|
	expected := `Getting status myRelease
 | 
						|
exec: helm status myRelease --kube-context dev
 | 
						|
`
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.ReleaseStatus()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Test_exec(t *testing.T) {
 | 
						|
	var buffer bytes.Buffer
 | 
						|
	logger := NewLogger(&buffer, "debug")
 | 
						|
	helm := MockExecer(logger, "")
 | 
						|
	helm.exec("version")
 | 
						|
	expected := "exec: helm version\n"
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.exec()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
 | 
						|
	helm = MockExecer(logger, "dev")
 | 
						|
	ret, _ := helm.exec("diff")
 | 
						|
	if len(ret) != 0 {
 | 
						|
		t.Error("helmexec.exec() - expected empty return value")
 | 
						|
	}
 | 
						|
 | 
						|
	buffer.Reset()
 | 
						|
	helm = MockExecer(logger, "dev")
 | 
						|
	helm.exec("diff", "release", "chart", "--timeout 10", "--wait")
 | 
						|
	expected = "exec: helm diff release chart --timeout 10 --wait --kube-context dev\n"
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.exec()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
 | 
						|
	buffer.Reset()
 | 
						|
	helm.exec("version")
 | 
						|
	expected = "exec: helm version --kube-context dev\n"
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.exec()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
 | 
						|
	buffer.Reset()
 | 
						|
	helm.SetExtraArgs("foo")
 | 
						|
	helm.exec("version")
 | 
						|
	expected = "exec: helm version foo --kube-context dev\n"
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.exec()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
 | 
						|
	buffer.Reset()
 | 
						|
	helm = MockExecer(logger, "")
 | 
						|
	helm.SetHelmBinary("overwritten")
 | 
						|
	helm.exec("version")
 | 
						|
	expected = "exec: overwritten version\n"
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.exec()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Test_Lint(t *testing.T) {
 | 
						|
	var buffer bytes.Buffer
 | 
						|
	logger := NewLogger(&buffer, "debug")
 | 
						|
	helm := MockExecer(logger, "dev")
 | 
						|
	helm.Lint("path/to/chart", "--values", "file.yml")
 | 
						|
	expected := `Linting path/to/chart
 | 
						|
exec: helm lint path/to/chart --values file.yml --kube-context dev
 | 
						|
`
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.Lint()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Test_Fetch(t *testing.T) {
 | 
						|
	var buffer bytes.Buffer
 | 
						|
	logger := NewLogger(&buffer, "debug")
 | 
						|
	helm := MockExecer(logger, "dev")
 | 
						|
	helm.Fetch("chart", "--version", "1.2.3", "--untar", "--untardir", "/tmp/dir")
 | 
						|
	expected := `Fetching chart
 | 
						|
exec: helm fetch chart --version 1.2.3 --untar --untardir /tmp/dir --kube-context dev
 | 
						|
`
 | 
						|
	if buffer.String() != expected {
 | 
						|
		t.Errorf("helmexec.Lint()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
var logLevelTests = map[string]string{
 | 
						|
	"debug": `Adding repo myRepo https://repo.example.com/
 | 
						|
exec: helm repo add myRepo https://repo.example.com/ --username example_user --password example_password
 | 
						|
`,
 | 
						|
	"info": `Adding repo myRepo https://repo.example.com/
 | 
						|
`,
 | 
						|
	"warn": ``,
 | 
						|
}
 | 
						|
 | 
						|
func Test_LogLevels(t *testing.T) {
 | 
						|
	var buffer bytes.Buffer
 | 
						|
	for logLevel, expected := range logLevelTests {
 | 
						|
		buffer.Reset()
 | 
						|
		logger := NewLogger(&buffer, logLevel)
 | 
						|
		helm := MockExecer(logger, "")
 | 
						|
		helm.AddRepo("myRepo", "https://repo.example.com/", "", "", "example_user", "example_password")
 | 
						|
		if buffer.String() != expected {
 | 
						|
			t.Errorf("helmexec.AddRepo()\nactual = %v\nexpect = %v", buffer.String(), expected)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |