Minor test cleanup

- `Before` gives a nice place to call `require.New(t)` to make the assertion lines more terse
- Just delete the keys for testing when env vars are missing
This commit is contained in:
Ryan Richard 2020-07-28 17:22:17 -07:00
parent 1e56ecfdb4
commit 43c3f1ab2e
1 changed files with 20 additions and 30 deletions

View File

@ -12,18 +12,18 @@ import (
"testing" "testing"
"time" "time"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/sclevine/spec" "github.com/sclevine/spec"
"github.com/sclevine/spec/report" "github.com/sclevine/spec/report"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
clientauthenticationv1beta1 "k8s.io/client-go/pkg/apis/clientauthentication/v1beta1" clientauthenticationv1beta1 "k8s.io/client-go/pkg/apis/clientauthentication/v1beta1"
"github.com/suzerain-io/placeholder-name/test/library" "github.com/suzerain-io/placeholder-name/test/library"
) )
func TestRun(t *testing.T) { func TestRun(t *testing.T) {
spec.Run(t, "Run", func(t *testing.T, when spec.G, it spec.S) { spec.Run(t, "main.run", func(t *testing.T, when spec.G, it spec.S) {
var r *require.Assertions
var buffer *bytes.Buffer var buffer *bytes.Buffer
var tokenExchanger tokenExchanger var tokenExchanger tokenExchanger
var fakeEnv map[string]string var fakeEnv map[string]string
@ -37,6 +37,7 @@ func TestRun(t *testing.T) {
} }
it.Before(func() { it.Before(func() {
r = require.New(t)
buffer = new(bytes.Buffer) buffer = new(bytes.Buffer)
fakeEnv = map[string]string{ fakeEnv = map[string]string{
"PLACEHOLDER_NAME_TOKEN": "token from env", "PLACEHOLDER_NAME_TOKEN": "token from env",
@ -47,30 +48,21 @@ func TestRun(t *testing.T) {
when("env vars are missing", func() { when("env vars are missing", func() {
it("returns an error when PLACEHOLDER_NAME_TOKEN is missing", func() { it("returns an error when PLACEHOLDER_NAME_TOKEN is missing", func() {
fakeEnv = map[string]string{ delete(fakeEnv, "PLACEHOLDER_NAME_TOKEN")
"PLACEHOLDER_NAME_K8S_API_ENDPOINT": "a",
"PLACEHOLDER_NAME_CA_BUNDLE": "b",
}
err := run(envGetter, tokenExchanger, buffer, 30*time.Second) err := run(envGetter, tokenExchanger, buffer, 30*time.Second)
require.EqualError(t, err, "failed to login: environment variable not set: PLACEHOLDER_NAME_TOKEN") r.EqualError(err, "failed to login: environment variable not set: PLACEHOLDER_NAME_TOKEN")
}) })
it("returns an error when PLACEHOLDER_NAME_CA_BUNDLE is missing", func() { it("returns an error when PLACEHOLDER_NAME_CA_BUNDLE is missing", func() {
fakeEnv = map[string]string{ delete(fakeEnv, "PLACEHOLDER_NAME_CA_BUNDLE")
"PLACEHOLDER_NAME_K8S_API_ENDPOINT": "a",
"PLACEHOLDER_NAME_TOKEN": "b",
}
err := run(envGetter, tokenExchanger, buffer, 30*time.Second) err := run(envGetter, tokenExchanger, buffer, 30*time.Second)
require.EqualError(t, err, "failed to login: environment variable not set: PLACEHOLDER_NAME_CA_BUNDLE") r.EqualError(err, "failed to login: environment variable not set: PLACEHOLDER_NAME_CA_BUNDLE")
}) })
it("returns an error when PLACEHOLDER_NAME_K8S_API_ENDPOINT is missing", func() { it("returns an error when PLACEHOLDER_NAME_K8S_API_ENDPOINT is missing", func() {
fakeEnv = map[string]string{ delete(fakeEnv, "PLACEHOLDER_NAME_K8S_API_ENDPOINT")
"PLACEHOLDER_NAME_TOKEN": "a",
"PLACEHOLDER_NAME_CA_BUNDLE": "b",
}
err := run(envGetter, tokenExchanger, buffer, 30*time.Second) err := run(envGetter, tokenExchanger, buffer, 30*time.Second)
require.EqualError(t, err, "failed to login: environment variable not set: PLACEHOLDER_NAME_K8S_API_ENDPOINT") r.EqualError(err, "failed to login: environment variable not set: PLACEHOLDER_NAME_K8S_API_ENDPOINT")
}) })
}, spec.Parallel()) }, spec.Parallel())
@ -83,7 +75,7 @@ func TestRun(t *testing.T) {
it("returns an error", func() { it("returns an error", func() {
err := run(envGetter, tokenExchanger, buffer, 30*time.Second) err := run(envGetter, tokenExchanger, buffer, 30*time.Second)
require.EqualError(t, err, "failed to login: some error") r.EqualError(err, "failed to login: some error")
}) })
}, spec.Parallel()) }, spec.Parallel())
@ -98,7 +90,7 @@ func TestRun(t *testing.T) {
it("returns an error", func() { it("returns an error", func() {
err := run(envGetter, tokenExchanger, &library.ErrorWriter{ReturnError: fmt.Errorf("some IO error")}, 30*time.Second) err := run(envGetter, tokenExchanger, &library.ErrorWriter{ReturnError: fmt.Errorf("some IO error")}, 30*time.Second)
require.EqualError(t, err, "failed to marshal response to stdout: some IO error") r.EqualError(err, "failed to marshal response to stdout: some IO error")
}) })
}, spec.Parallel()) }, spec.Parallel())
@ -118,7 +110,7 @@ func TestRun(t *testing.T) {
it("returns an error", func() { it("returns an error", func() {
err := run(envGetter, tokenExchanger, buffer, 1*time.Millisecond) err := run(envGetter, tokenExchanger, buffer, 1*time.Millisecond)
require.EqualError(t, err, "failed to login: context deadline exceeded") r.EqualError(err, "failed to login: context deadline exceeded")
}) })
}, spec.Parallel()) }, spec.Parallel())
@ -140,21 +132,19 @@ func TestRun(t *testing.T) {
it("writes the execCredential to the given writer", func() { it("writes the execCredential to the given writer", func() {
err := run(envGetter, tokenExchanger, buffer, 30*time.Second) err := run(envGetter, tokenExchanger, buffer, 30*time.Second)
require.NoError(t, err) r.NoError(err)
require.Equal(t, fakeEnv["PLACEHOLDER_NAME_TOKEN"], actualToken) r.Equal(fakeEnv["PLACEHOLDER_NAME_TOKEN"], actualToken)
require.Equal(t, fakeEnv["PLACEHOLDER_NAME_CA_BUNDLE"], actualCaBundle) r.Equal(fakeEnv["PLACEHOLDER_NAME_CA_BUNDLE"], actualCaBundle)
require.Equal(t, fakeEnv["PLACEHOLDER_NAME_K8S_API_ENDPOINT"], actualAPIEndpoint) r.Equal(fakeEnv["PLACEHOLDER_NAME_K8S_API_ENDPOINT"], actualAPIEndpoint)
expected := ` expected := `{
{
"kind": "ExecCredential", "kind": "ExecCredential",
"apiVersion": "client.authentication.k8s.io/v1beta1", "apiVersion": "client.authentication.k8s.io/v1beta1",
"spec": {}, "spec": {},
"status": { "status": {
"token": "some token" "token": "some token"
} }
} }`
` r.JSONEq(expected, buffer.String())
require.JSONEq(t, expected, buffer.String())
}) })
}, spec.Parallel()) }, spec.Parallel())
}, spec.Report(report.Terminal{})) }, spec.Report(report.Terminal{}))