github.com/jmitchell/nomad@v0.1.3-0.20151007230021-7ab84c2862d8/client/driver/args/args_test.go (about) 1 package args 2 3 import ( 4 "fmt" 5 "reflect" 6 "testing" 7 ) 8 9 const ( 10 ipKey = "NOMAD_IP" 11 ipVal = "127.0.0.1" 12 portKey = "NOMAD_PORT_WEB" 13 portVal = ":80" 14 ) 15 16 var ( 17 envVars = map[string]string{ 18 ipKey: ipVal, 19 portKey: portVal, 20 } 21 ) 22 23 func TestDriverArgs_ParseAndReplaceInvalidEnv(t *testing.T) { 24 input := "invalid $FOO" 25 exp := []string{"invalid", "$FOO"} 26 act, err := ParseAndReplace(input, envVars) 27 if err != nil { 28 t.Fatalf("Failed to parse valid input args %v: %v", input, err) 29 } 30 31 if !reflect.DeepEqual(act, exp) { 32 t.Fatalf("ParseAndReplace(%v, %v) returned %#v; want %#v", input, envVars, act, exp) 33 } 34 } 35 36 func TestDriverArgs_ParseAndReplaceValidEnv(t *testing.T) { 37 input := fmt.Sprintf("nomad_ip \\\"$%v\\\"!", ipKey) 38 exp := []string{"nomad_ip", fmt.Sprintf("\"%s\"!", ipVal)} 39 act, err := ParseAndReplace(input, envVars) 40 if err != nil { 41 t.Fatalf("Failed to parse valid input args %v: %v", input, err) 42 } 43 44 if !reflect.DeepEqual(act, exp) { 45 t.Fatalf("ParseAndReplace(%v, %v) returned %#v; want %#v", input, envVars, act, exp) 46 } 47 } 48 49 func TestDriverArgs_ParseAndReplaceChainedEnv(t *testing.T) { 50 input := fmt.Sprintf("-foo $%s$%s", ipKey, portKey) 51 exp := []string{"-foo", fmt.Sprintf("%s%s", ipVal, portVal)} 52 act, err := ParseAndReplace(input, envVars) 53 if err != nil { 54 t.Fatalf("Failed to parse valid input args %v: %v", input, err) 55 } 56 57 if !reflect.DeepEqual(act, exp) { 58 t.Fatalf("ParseAndReplace(%v, %v) returned %#v; want %#v", input, envVars, act, exp) 59 } 60 } 61 62 func TestDriverArgs_ParseAndReplaceInvalidArgEscape(t *testing.T) { 63 input := "-c \"echo \"foo\\\" > bar.txt\"" 64 if _, err := ParseAndReplace(input, envVars); err == nil { 65 t.Fatalf("ParseAndReplace(%v, %v) should have failed", input, envVars) 66 } 67 } 68 69 func TestDriverArgs_ParseAndReplaceValidArgEscape(t *testing.T) { 70 input := "-c \"echo \\\"foo\\\" > bar.txt\"" 71 exp := []string{"-c", "echo \"foo\" > bar.txt"} 72 act, err := ParseAndReplace(input, envVars) 73 if err != nil { 74 t.Fatalf("Failed to parse valid input args %v: %v", input, err) 75 } 76 77 if !reflect.DeepEqual(act, exp) { 78 t.Fatalf("ParseAndReplace(%v, %v) returned %#v; want %#v", input, envVars, act, exp) 79 } 80 }