summaryrefslogtreecommitdiff
path: root/cmd/kpod
diff options
context:
space:
mode:
authorbaude <bbaude@redhat.com>2017-11-01 16:44:08 -0500
committerbaude <bbaude@redhat.com>2017-11-03 20:37:19 -0500
commit46d762176eafb748b2094bd518ecf66d86388779 (patch)
treeca73c03853f2fd05e7fd23a8acf29c01a8d41170 /cmd/kpod
parent9f5fa7f2eb4c2a441dc224c45ba981d595ac3638 (diff)
downloadpodman-46d762176eafb748b2094bd518ecf66d86388779.tar.gz
podman-46d762176eafb748b2094bd518ecf66d86388779.tar.bz2
podman-46d762176eafb748b2094bd518ecf66d86388779.zip
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 <bbaude@redhat.com>
Diffstat (limited to 'cmd/kpod')
-rw-r--r--cmd/kpod/create.go5
-rw-r--r--cmd/kpod/create_cli.go18
-rw-r--r--cmd/kpod/create_cli_test.go98
3 files changed, 112 insertions, 9 deletions
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)
+}