moby/opts/env_test.go
Sebastiaan van Stijn c255404a25
opts: simplify ValidateEnv to use os.LookupEnv
os.LookupEnv() was not available yet at the time that this was
implemented (9ab73260f8), but now
provides the functionality we need, so replacing our custom handling.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2020-08-14 16:58:30 +02:00

119 lines
2 KiB
Go

package opts // import "github.com/docker/docker/opts"
import (
"fmt"
"os"
"runtime"
"testing"
"gotest.tools/v3/assert"
)
func TestValidateEnv(t *testing.T) {
type testCase struct {
value string
expected string
err error
}
tests := []testCase{
{
value: "a",
expected: "a",
},
{
value: "something",
expected: "something",
},
{
value: "_=a",
expected: "_=a",
},
{
value: "env1=value1",
expected: "env1=value1",
},
{
value: "_env1=value1",
expected: "_env1=value1",
},
{
value: "env2=value2=value3",
expected: "env2=value2=value3",
},
{
value: "env3=abc!qwe",
expected: "env3=abc!qwe",
},
{
value: "env_4=value 4",
expected: "env_4=value 4",
},
{
value: "PATH",
expected: fmt.Sprintf("PATH=%v", os.Getenv("PATH")),
},
{
value: "=a",
err: fmt.Errorf("invalid environment variable: =a"),
},
{
value: "PATH=",
expected: "PATH=",
},
{
value: "PATH=something",
expected: "PATH=something",
},
{
value: "asd!qwe",
expected: "asd!qwe",
},
{
value: "1asd",
expected: "1asd",
},
{
value: "123",
expected: "123",
},
{
value: "some space",
expected: "some space",
},
{
value: " some space before",
expected: " some space before",
},
{
value: "some space after ",
expected: "some space after ",
},
{
value: "=",
err: fmt.Errorf("invalid environment variable: ="),
},
}
if runtime.GOOS == "windows" {
// Environment variables are case in-sensitive on Windows
tests = append(tests, testCase{
value: "PaTh",
expected: fmt.Sprintf("PaTh=%v", os.Getenv("PATH")),
err: nil,
})
}
for _, tc := range tests {
tc := tc
t.Run(tc.value, func(t *testing.T) {
actual, err := ValidateEnv(tc.value)
if tc.err == nil {
assert.NilError(t, err)
} else {
assert.Error(t, err, tc.err.Error())
}
assert.Equal(t, actual, tc.expected)
})
}
}