From 46d762176eafb748b2094bd518ecf66d86388779 Mon Sep 17 00:00:00 2001 From: baude Date: Wed, 1 Nov 2017 16:44:08 -0500 Subject: create_cli_test.go: Unittests Create unittests for the create_cli helper functions. As such, remove cli context usage from the functions to further divide between cli input and parsing. Also, simplifies unit testing. Signed-off-by: baude --- cmd/kpod/create.go | 5 +-- cmd/kpod/create_cli.go | 18 ++++++--- cmd/kpod/create_cli_test.go | 98 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 112 insertions(+), 9 deletions(-) create mode 100644 cmd/kpod/create_cli_test.go (limited to 'cmd') diff --git a/cmd/kpod/create.go b/cmd/kpod/create.go index 9d4d08b08..545714c68 100644 --- a/cmd/kpod/create.go +++ b/cmd/kpod/create.go @@ -252,13 +252,12 @@ func parseCreateOpts(c *cli.Context, runtime *libpod.Runtime) (*createConfig, er } // LABEL VARIABLES - labels, err := getAllLabels(c) + labels, err := getAllLabels(c.StringSlice("label-file"), c.StringSlice("labels")) if err != nil { return &createConfig{}, errors.Wrapf(err, "unable to process labels") } // ENVIRONMENT VARIABLES - // TODO where should env variables be verified to be x=y format - env, err := getAllEnvironmentVariables(c) + env, err := getAllEnvironmentVariables(c.StringSlice("env-file"), c.StringSlice("env")) if err != nil { return &createConfig{}, errors.Wrapf(err, "unable to process environment variables") } diff --git a/cmd/kpod/create_cli.go b/cmd/kpod/create_cli.go index 996155ba0..1cc00adc5 100644 --- a/cmd/kpod/create_cli.go +++ b/cmd/kpod/create_cli.go @@ -4,13 +4,12 @@ import ( "strings" "github.com/pkg/errors" - "github.com/urfave/cli" ) -func getAllLabels(cli *cli.Context) (map[string]string, error) { +func getAllLabels(labelFile, inputLabels []string) (map[string]string, error) { var labelValues []string labels := make(map[string]string) - labelValues, labelErr := readKVStrings(cli.StringSlice("label-file"), cli.StringSlice("label")) + labelValues, labelErr := readKVStrings(labelFile, inputLabels) if labelErr != nil { return labels, errors.Wrapf(labelErr, "unable to process labels from --label and label-file") } @@ -18,7 +17,7 @@ func getAllLabels(cli *cli.Context) (map[string]string, error) { if len(labelValues) > 0 { for _, i := range labelValues { spliti := strings.Split(i, "=") - if len(spliti) > 1 { + if len(spliti) < 2 { return labels, errors.Errorf("labels must be in KEY=VALUE format: %s is invalid", i) } labels[spliti[0]] = spliti[1] @@ -27,8 +26,8 @@ func getAllLabels(cli *cli.Context) (map[string]string, error) { return labels, nil } -func getAllEnvironmentVariables(cli *cli.Context) ([]string, error) { - env, err := readKVStrings(cli.StringSlice("env-file"), cli.StringSlice("env")) +func getAllEnvironmentVariables(envFiles, envInput []string) ([]string, error) { + env, err := readKVStrings(envFiles, envInput) if err != nil { return []string{}, errors.Wrapf(err, "unable to process variables from --env and --env-file") } @@ -36,6 +35,13 @@ func getAllEnvironmentVariables(cli *cli.Context) ([]string, error) { if len(env) == 0 { env = append(env, defaultEnvVariables...) } + // Each environment variable must be in the K=V format + for _,i := range env{ + spliti := strings.Split(i, "=") + if len(spliti) != 2 { + return env, errors.Errorf("environment variables must be in the format KEY=VALUE: %s is invalid", i) + } + } return env, nil } diff --git a/cmd/kpod/create_cli_test.go b/cmd/kpod/create_cli_test.go new file mode 100644 index 000000000..928a5ce05 --- /dev/null +++ b/cmd/kpod/create_cli_test.go @@ -0,0 +1,98 @@ +package main + +import ( + "github.com/stretchr/testify/assert" + "io/ioutil" + "os" + "testing" +) + +var ( + Var1 = []string{"ONE=1", "TWO=2"} +) + +func createTmpFile(content []byte) (string, error) { + tmpfile, err := ioutil.TempFile(os.TempDir(), "unittest") + if err != nil { + return "", err + } + + if _, err := tmpfile.Write(content); err != nil { + return "", err + + } + if err := tmpfile.Close(); err != nil { + return "", err + } + return tmpfile.Name(), nil +} + +func TestConvertStringSliceToMap(t *testing.T) { + strSlice := []string{"BLAU=BLUE", "GELB=YELLOW"} + result, _ := convertStringSliceToMap(strSlice, "=") + assert.Equal(t, result["BLAU"], "BLUE") +} + +func TestConvertStringSliceToMapBadData(t *testing.T) { + strSlice := []string{"BLAU=BLUE", "GELB^YELLOW"} + _, err := convertStringSliceToMap(strSlice, "=") + assert.Error(t, err) +} + +func TestGetAllLabels(t *testing.T) { + fileLabels := []string{} + labels, _ := getAllLabels(fileLabels, Var1) + assert.Equal(t, len(labels), 2) +} + +func TestGetAllLabelsBadKeyValue(t *testing.T) { + inLabels := []string{"ONE1", "TWO=2"} + fileLabels := []string{} + _, err := getAllLabels(fileLabels, inLabels) + assert.Error(t, err, assert.AnError) +} + +func TestGetAllLabelsBadLabelFile(t *testing.T) { + fileLabels := []string{"/foobar5001/be"} + _, err := getAllLabels(fileLabels, Var1) + assert.Error(t, err, assert.AnError) +} + +func TestGetAllLabelsFile(t *testing.T) { + content := []byte("THREE=3") + tFile, err := createTmpFile(content) + defer os.Remove(tFile) + assert.NoError(t, err) + fileLabels := []string{tFile} + result, _ := getAllLabels(fileLabels, Var1) + assert.Equal(t, len(result), 3) +} + +func TestGetAllEnvironmentVariables(t *testing.T) { + fileEnvs := []string{} + result, _ := getAllEnvironmentVariables(fileEnvs, Var1) + assert.Equal(t, len(result), 2) +} + +func TestGetAllEnvironmentVariablesBadKeyValue(t *testing.T) { + inEnvs := []string{"ONE1", "TWO=2"} + fileEnvs := []string{} + _, err := getAllEnvironmentVariables(fileEnvs, inEnvs) + assert.Error(t, err, assert.AnError) +} + +func TestGetAllEnvironmentVariablesBadEnvFile(t *testing.T) { + fileEnvs := []string{"/foobar5001/be"} + _, err := getAllEnvironmentVariables(fileEnvs, Var1) + assert.Error(t, err, assert.AnError) +} + +func TestGetAllEnvironmentVariablesFile(t *testing.T) { + content := []byte("THREE=3") + tFile, err := createTmpFile(content) + defer os.Remove(tFile) + assert.NoError(t, err) + fileEnvs := []string{tFile} + result, _ := getAllEnvironmentVariables(fileEnvs, Var1) + assert.Equal(t, len(result), 3) +} -- cgit v1.2.3-54-g00ecf