| 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) |
| }) |
| } |
| } |