mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
dfc6c04fa3
- Refactor opts.ValidatePath and add an opts.ValidateDevice ValidePath will now accept : containerPath:mode, hostPath:containerPath:mode and hostPath:containerPath. ValidateDevice will have the same behavior as current. - Refactor opts.ValidateEnv, opts.ParseEnvFile Environment variables will now be validated with the following definition : > Environment variables set by the user must have a name consisting > solely of alphabetics, numerics, and underscores - the first of > which must not be numeric. Signed-off-by: Vincent Demeester <vincent@sbr.pm>
133 lines
3 KiB
Go
133 lines
3 KiB
Go
package opts
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func tmpFileWithContent(content string, t *testing.T) string {
|
|
tmpFile, err := ioutil.TempFile("", "envfile-test")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer tmpFile.Close()
|
|
|
|
tmpFile.WriteString(content)
|
|
return tmpFile.Name()
|
|
}
|
|
|
|
// Test ParseEnvFile for a file with a few well formatted lines
|
|
func TestParseEnvFileGoodFile(t *testing.T) {
|
|
content := `foo=bar
|
|
baz=quux
|
|
# comment
|
|
|
|
_foobar=foobaz
|
|
`
|
|
|
|
tmpFile := tmpFileWithContent(content, t)
|
|
defer os.Remove(tmpFile)
|
|
|
|
lines, err := ParseEnvFile(tmpFile)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
expectedLines := []string{
|
|
"foo=bar",
|
|
"baz=quux",
|
|
"_foobar=foobaz",
|
|
}
|
|
|
|
if !reflect.DeepEqual(lines, expectedLines) {
|
|
t.Fatal("lines not equal to expected_lines")
|
|
}
|
|
}
|
|
|
|
// Test ParseEnvFile for an empty file
|
|
func TestParseEnvFileEmptyFile(t *testing.T) {
|
|
tmpFile := tmpFileWithContent("", t)
|
|
defer os.Remove(tmpFile)
|
|
|
|
lines, err := ParseEnvFile(tmpFile)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if len(lines) != 0 {
|
|
t.Fatal("lines not empty; expected empty")
|
|
}
|
|
}
|
|
|
|
// Test ParseEnvFile for a non existent file
|
|
func TestParseEnvFileNonExistentFile(t *testing.T) {
|
|
_, err := ParseEnvFile("foo_bar_baz")
|
|
if err == nil {
|
|
t.Fatal("ParseEnvFile succeeded; expected failure")
|
|
}
|
|
if _, ok := err.(*os.PathError); !ok {
|
|
t.Fatalf("Expected a PathError, got [%v]", err)
|
|
}
|
|
}
|
|
|
|
// Test ParseEnvFile for a badly formatted file
|
|
func TestParseEnvFileBadlyFormattedFile(t *testing.T) {
|
|
content := `foo=bar
|
|
f =quux
|
|
`
|
|
|
|
tmpFile := tmpFileWithContent(content, t)
|
|
defer os.Remove(tmpFile)
|
|
|
|
_, err := ParseEnvFile(tmpFile)
|
|
if err == nil {
|
|
t.Fatalf("Expected a ErrBadEnvVariable, got nothing")
|
|
}
|
|
if _, ok := err.(ErrBadEnvVariable); !ok {
|
|
t.Fatalf("Expected a ErrBadEnvVariable, got [%v]", err)
|
|
}
|
|
expectedMessage := "poorly formatted environment: variable 'f ' is not a valid environment variable"
|
|
if err.Error() != expectedMessage {
|
|
t.Fatalf("Expected [%v], got [%v]", expectedMessage, err.Error())
|
|
}
|
|
}
|
|
|
|
// Test ParseEnvFile for a file with a line exeeding bufio.MaxScanTokenSize
|
|
func TestParseEnvFileLineTooLongFile(t *testing.T) {
|
|
content := strings.Repeat("a", bufio.MaxScanTokenSize+42)
|
|
content = fmt.Sprint("foo=", content)
|
|
|
|
tmpFile := tmpFileWithContent(content, t)
|
|
defer os.Remove(tmpFile)
|
|
|
|
_, err := ParseEnvFile(tmpFile)
|
|
if err == nil {
|
|
t.Fatal("ParseEnvFile succeeded; expected failure")
|
|
}
|
|
}
|
|
|
|
// ParseEnvFile with a random file, pass through
|
|
func TestParseEnvFileRandomFile(t *testing.T) {
|
|
content := `first line
|
|
another invalid line`
|
|
tmpFile := tmpFileWithContent(content, t)
|
|
defer os.Remove(tmpFile)
|
|
|
|
_, err := ParseEnvFile(tmpFile)
|
|
|
|
if err == nil {
|
|
t.Fatalf("Expected a ErrBadEnvVariable, got nothing")
|
|
}
|
|
if _, ok := err.(ErrBadEnvVariable); !ok {
|
|
t.Fatalf("Expected a ErrBadEnvvariable, got [%v]", err)
|
|
}
|
|
expectedMessage := "poorly formatted environment: variable 'first line' is not a valid environment variable"
|
|
if err.Error() != expectedMessage {
|
|
t.Fatalf("Expected [%v], got [%v]", expectedMessage, err.Error())
|
|
}
|
|
}
|