renamed New() returns execer instead of interface

This commit is contained in:
Cedric Meury 2018-03-27 00:03:04 +02:00
parent 7f90415689
commit baba83b124
5 changed files with 30 additions and 54 deletions

View File

@ -17,11 +17,11 @@ type execer struct {
extra []string extra []string
} }
func NewHelmExec(writer io.Writer, kubeContext string) Interface { func New(writer io.Writer, kubeContext string) *execer {
return &execer{ return &execer{
writer: writer, writer: writer,
kubeContext: kubeContext, kubeContext: kubeContext,
runner: new(CliRunner), runner: &ShellRunner{},
} }
} }
@ -95,17 +95,3 @@ func (helm *execer) exec(args ...string) ([]byte, error) {
} }
return helm.runner.Execute(command, cmdargs) return helm.runner.Execute(command, cmdargs)
} }
// for unit testing
func (helm *execer) setRunner(runner Runner) {
helm.runner = runner
}
func (helm *execer) getExtra() []string {
return helm.extra
}
func (helm *execer) getKubeContent() string {
return helm.kubeContext
}
func (helm *execer) getWriter() io.Writer {
return helm.writer
}

View File

@ -9,57 +9,56 @@ import (
// Mocking the command-line runner // Mocking the command-line runner
type MockRunner struct { type mockRunner struct {
output []byte output []byte
err error err error
} }
func (mock *MockRunner) Execute(cmd string, args []string) ([]byte, error) { func (mock *mockRunner) Execute(cmd string, args []string) ([]byte, error) {
return []byte{}, nil return []byte{}, nil
} }
func NewMockExec(writer io.Writer, kubeContext string) Interface { func MockExecer(writer io.Writer, kubeContext string) *execer {
nhe := NewHelmExec(writer, kubeContext) execer := New(writer, kubeContext)
runner := &MockRunner{} execer.runner = &mockRunner{}
nhe.setRunner(runner) return execer
return nhe
} }
// Test methods // Test methods
func TestNewHelmExec(t *testing.T) { func TestNewHelmExec(t *testing.T) {
buffer := bytes.NewBufferString("something") buffer := bytes.NewBufferString("something")
helm := NewHelmExec(buffer, "dev") helm := New(buffer, "dev")
if helm.getKubeContent() != "dev" { if helm.kubeContext != "dev" {
t.Error("helmexec.NewHelmExec() - kubeContext") t.Error("helmexec.New() - kubeContext")
} }
if buffer.String() != "something" { if buffer.String() != "something" {
t.Error("helmexec.NewHelmExec() - changed buffer") t.Error("helmexec.New() - changed buffer")
} }
if len(helm.getExtra()) != 0 { if len(helm.extra) != 0 {
t.Error("helmexec.NewHelmExec() - extra args not empty") t.Error("helmexec.New() - extra args not empty")
} }
} }
func Test_SetExtraArgs(t *testing.T) { func Test_SetExtraArgs(t *testing.T) {
helm := NewHelmExec(new(bytes.Buffer), "dev") helm := New(new(bytes.Buffer), "dev")
helm.SetExtraArgs() helm.SetExtraArgs()
if len(helm.getExtra()) != 0 { if len(helm.extra) != 0 {
t.Error("helmexec.SetExtraArgs() - passing no arguments should not change extra field") t.Error("helmexec.SetExtraArgs() - passing no arguments should not change extra field")
} }
helm.SetExtraArgs("foo") helm.SetExtraArgs("foo")
if !reflect.DeepEqual(helm.getExtra(), []string{"foo"}) { if !reflect.DeepEqual(helm.extra, []string{"foo"}) {
t.Error("helmexec.SetExtraArgs() - one extra argument missing") t.Error("helmexec.SetExtraArgs() - one extra argument missing")
} }
helm.SetExtraArgs("alpha", "beta") helm.SetExtraArgs("alpha", "beta")
if !reflect.DeepEqual(helm.getExtra(), []string{"alpha", "beta"}) { if !reflect.DeepEqual(helm.extra, []string{"alpha", "beta"}) {
t.Error("helmexec.SetExtraArgs() - two extra arguments missing (overwriting the previous value)") t.Error("helmexec.SetExtraArgs() - two extra arguments missing (overwriting the previous value)")
} }
} }
func Test_AddRepo(t *testing.T) { func Test_AddRepo(t *testing.T) {
var buffer bytes.Buffer var buffer bytes.Buffer
helm := NewMockExec(&buffer, "dev") helm := MockExecer(&buffer, "dev")
helm.AddRepo("myRepo", "https://repo.example.com/", "cert.pem", "key.pem") helm.AddRepo("myRepo", "https://repo.example.com/", "cert.pem", "key.pem")
expected := "exec: helm repo add myRepo https://repo.example.com/ --cert-file cert.pem --key-file key.pem --kube-context dev\n" expected := "exec: helm repo add myRepo https://repo.example.com/ --cert-file cert.pem --key-file key.pem --kube-context dev\n"
if buffer.String() != expected { if buffer.String() != expected {
@ -76,7 +75,7 @@ func Test_AddRepo(t *testing.T) {
func Test_UpdateRepo(t *testing.T) { func Test_UpdateRepo(t *testing.T) {
var buffer bytes.Buffer var buffer bytes.Buffer
helm := NewMockExec(&buffer, "dev") helm := MockExecer(&buffer, "dev")
helm.UpdateRepo() helm.UpdateRepo()
expected := "exec: helm repo update --kube-context dev\n" expected := "exec: helm repo update --kube-context dev\n"
if buffer.String() != expected { if buffer.String() != expected {
@ -86,7 +85,7 @@ func Test_UpdateRepo(t *testing.T) {
func Test_SyncRelease(t *testing.T) { func Test_SyncRelease(t *testing.T) {
var buffer bytes.Buffer var buffer bytes.Buffer
helm := NewMockExec(&buffer, "dev") helm := MockExecer(&buffer, "dev")
helm.SyncRelease("release", "chart", "--timeout 10", "--wait") helm.SyncRelease("release", "chart", "--timeout 10", "--wait")
expected := "exec: helm upgrade --install release chart --timeout 10 --wait --kube-context dev\n" expected := "exec: helm upgrade --install release chart --timeout 10 --wait --kube-context dev\n"
if buffer.String() != expected { if buffer.String() != expected {
@ -103,7 +102,7 @@ func Test_SyncRelease(t *testing.T) {
func Test_DecryptSecret(t *testing.T) { func Test_DecryptSecret(t *testing.T) {
var buffer bytes.Buffer var buffer bytes.Buffer
helm := NewMockExec(&buffer, "dev") helm := MockExecer(&buffer, "dev")
helm.DecryptSecret("secretName") helm.DecryptSecret("secretName")
expected := "exec: helm secrets dec secretName --kube-context dev\n" expected := "exec: helm secrets dec secretName --kube-context dev\n"
if buffer.String() != expected { if buffer.String() != expected {
@ -113,7 +112,7 @@ func Test_DecryptSecret(t *testing.T) {
func Test_DiffRelease(t *testing.T) { func Test_DiffRelease(t *testing.T) {
var buffer bytes.Buffer var buffer bytes.Buffer
helm := NewMockExec(&buffer, "dev") helm := MockExecer(&buffer, "dev")
helm.DiffRelease("release", "chart", "--timeout 10", "--wait") helm.DiffRelease("release", "chart", "--timeout 10", "--wait")
expected := "exec: helm diff release chart --timeout 10 --wait --kube-context dev\n" expected := "exec: helm diff release chart --timeout 10 --wait --kube-context dev\n"
if buffer.String() != expected { if buffer.String() != expected {
@ -130,7 +129,7 @@ func Test_DiffRelease(t *testing.T) {
func Test_DeleteRelease(t *testing.T) { func Test_DeleteRelease(t *testing.T) {
var buffer bytes.Buffer var buffer bytes.Buffer
helm := NewMockExec(&buffer, "dev") helm := MockExecer(&buffer, "dev")
helm.DeleteRelease("release") helm.DeleteRelease("release")
expected := "exec: helm delete --purge release --kube-context dev\n" expected := "exec: helm delete --purge release --kube-context dev\n"
if buffer.String() != expected { if buffer.String() != expected {
@ -140,21 +139,21 @@ func Test_DeleteRelease(t *testing.T) {
func Test_exec(t *testing.T) { func Test_exec(t *testing.T) {
var buffer bytes.Buffer var buffer bytes.Buffer
helm := NewMockExec(&buffer, "") helm := MockExecer(&buffer, "")
helm.exec("version") helm.exec("version")
expected := "exec: helm version\n" expected := "exec: helm version\n"
if buffer.String() != expected { if buffer.String() != expected {
t.Errorf("helmexec.exec()\nactual = %v\nexpect = %v", buffer.String(), expected) t.Errorf("helmexec.exec()\nactual = %v\nexpect = %v", buffer.String(), expected)
} }
helm = NewMockExec(nil, "dev") helm = MockExecer(nil, "dev")
ret, _ := helm.exec("diff") ret, _ := helm.exec("diff")
if len(ret) != 0 { if len(ret) != 0 {
t.Error("helmexec.exec() - expected empty return value") t.Error("helmexec.exec() - expected empty return value")
} }
buffer.Reset() buffer.Reset()
helm = NewMockExec(&buffer, "dev") helm = MockExecer(&buffer, "dev")
helm.exec("diff", "release", "chart", "--timeout 10", "--wait") helm.exec("diff", "release", "chart", "--timeout 10", "--wait")
expected = "exec: helm diff release chart --timeout 10 --wait --kube-context dev\n" expected = "exec: helm diff release chart --timeout 10 --wait --kube-context dev\n"
if buffer.String() != expected { if buffer.String() != expected {

View File

@ -1,7 +1,5 @@
package helmexec package helmexec
import "io"
type Interface interface { type Interface interface {
SetExtraArgs(args ...string) SetExtraArgs(args ...string)
@ -13,11 +11,4 @@ type Interface interface {
DeleteRelease(name string) error DeleteRelease(name string) error
DecryptSecret(name string) (string, error) DecryptSecret(name string) (string, error)
// unit testing
exec(args ...string) ([]byte, error)
setRunner(runner Runner)
getExtra() []string
getKubeContent() string
getWriter() io.Writer
} }

View File

@ -15,9 +15,9 @@ type Runner interface {
Execute(cmd string, args []string) ([]byte, error) Execute(cmd string, args []string) ([]byte, error)
} }
type CliRunner struct{} type ShellRunner struct{}
func (cli CliRunner) Execute(cmd string, args []string) ([]byte, error) { func (shell ShellRunner) Execute(cmd string, args []string) ([]byte, error) {
dir, err := ioutil.TempDir("", tmpPrefix+cmd+tmpSuffix) dir, err := ioutil.TempDir("", tmpPrefix+cmd+tmpSuffix)
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -278,7 +278,7 @@ func before(c *cli.Context) (*state.HelmState, helmexec.Interface, error) {
clean(st, errs) clean(st, errs)
}() }()
return st, helmexec.NewHelmExec(writer, kubeContext), nil return st, helmexec.New(writer, kubeContext), nil
} }
func clean(state *state.HelmState, errs []error) error { func clean(state *state.HelmState, errs []error) error {