github.com/ryanslade/nomad@v0.2.4-0.20160128061903-fc95782f2089/command/run_test.go (about) 1 package command 2 3 import ( 4 "io/ioutil" 5 "os" 6 "strings" 7 "testing" 8 9 "github.com/mitchellh/cli" 10 ) 11 12 func TestRunCommand_Implements(t *testing.T) { 13 var _ cli.Command = &RunCommand{} 14 } 15 16 func TestRunCommand_Fails(t *testing.T) { 17 ui := new(cli.MockUi) 18 cmd := &RunCommand{Meta: Meta{Ui: ui}} 19 20 // Fails on misuse 21 if code := cmd.Run([]string{"some", "bad", "args"}); code != 1 { 22 t.Fatalf("expected exit code 1, got: %d", code) 23 } 24 if out := ui.ErrorWriter.String(); !strings.Contains(out, cmd.Help()) { 25 t.Fatalf("expected help output, got: %s", out) 26 } 27 ui.ErrorWriter.Reset() 28 29 // Fails when specified file does not exist 30 if code := cmd.Run([]string{"/unicorns/leprechauns"}); code != 1 { 31 t.Fatalf("expect exit 1, got: %d", code) 32 } 33 if out := ui.ErrorWriter.String(); !strings.Contains(out, "Error parsing") { 34 t.Fatalf("expect parsing error, got: %s", out) 35 } 36 ui.ErrorWriter.Reset() 37 38 // Fails on invalid HCL 39 fh1, err := ioutil.TempFile("", "nomad") 40 if err != nil { 41 t.Fatalf("err: %s", err) 42 } 43 defer os.Remove(fh1.Name()) 44 if _, err := fh1.WriteString("nope"); err != nil { 45 t.Fatalf("err: %s", err) 46 } 47 if code := cmd.Run([]string{fh1.Name()}); code != 1 { 48 t.Fatalf("expect exit 1, got: %d", code) 49 } 50 if out := ui.ErrorWriter.String(); !strings.Contains(out, "Error parsing") { 51 t.Fatalf("expect parsing error, got: %s", err) 52 } 53 ui.ErrorWriter.Reset() 54 55 // Fails on invalid job spec 56 fh2, err := ioutil.TempFile("", "nomad") 57 if err != nil { 58 t.Fatalf("err: %s", err) 59 } 60 defer os.Remove(fh2.Name()) 61 if _, err := fh2.WriteString(`job "job1" {}`); err != nil { 62 t.Fatalf("err: %s", err) 63 } 64 if code := cmd.Run([]string{fh2.Name()}); code != 1 { 65 t.Fatalf("expect exit 1, got: %d", code) 66 } 67 if out := ui.ErrorWriter.String(); !strings.Contains(out, "Error validating") { 68 t.Fatalf("expect validation error, got: %s", out) 69 } 70 ui.ErrorWriter.Reset() 71 72 // Fails on connection failure (requires a valid job) 73 fh3, err := ioutil.TempFile("", "nomad") 74 if err != nil { 75 t.Fatalf("err: %s", err) 76 } 77 defer os.Remove(fh3.Name()) 78 _, err = fh3.WriteString(` 79 job "job1" { 80 type = "service" 81 datacenters = [ "dc1" ] 82 group "group1" { 83 count = 1 84 task "task1" { 85 driver = "exec" 86 resources = { 87 cpu = 1000 88 mem = 512 89 } 90 } 91 } 92 }`) 93 if err != nil { 94 t.Fatalf("err: %s", err) 95 } 96 if code := cmd.Run([]string{"-address=nope", fh3.Name()}); code != 1 { 97 t.Fatalf("expected exit code 1, got: %d", code) 98 } 99 if out := ui.ErrorWriter.String(); !strings.Contains(out, "Error submitting job") { 100 t.Fatalf("expected failed query error, got: %s", out) 101 } 102 }