github.com/kardianos/nomad@v0.1.3-0.20151022182107-b13df73ee850/command/validate_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 TestValidateCommand_Implements(t *testing.T) { 13 var _ cli.Command = &ValidateCommand{} 14 } 15 16 func TestValidateCommand(t *testing.T) { 17 ui := new(cli.MockUi) 18 cmd := &ValidateCommand{Meta: Meta{Ui: ui}} 19 20 fh, err := ioutil.TempFile("", "nomad") 21 if err != nil { 22 t.Fatalf("err: %s", err) 23 } 24 defer os.Remove(fh.Name()) 25 _, err = fh.WriteString(` 26 job "job1" { 27 datacenters = [ "dc1" ] 28 group "group1" { 29 count = 1 30 task "task1" { 31 driver = "exec" 32 resources = { 33 cpu = 1000 34 mem = 512 35 } 36 } 37 } 38 }`) 39 if err != nil { 40 t.Fatalf("err: %s", err) 41 } 42 if code := cmd.Run([]string{fh.Name()}); code != 0 { 43 t.Fatalf("expect exit 0, got: %d: %s", code, ui.ErrorWriter.String()) 44 } 45 } 46 47 func TestValidateCommand_Fails(t *testing.T) { 48 ui := new(cli.MockUi) 49 cmd := &ValidateCommand{Meta: Meta{Ui: ui}} 50 51 // Fails on misuse 52 if code := cmd.Run([]string{"some", "bad", "args"}); code != 1 { 53 t.Fatalf("expected exit code 1, got: %d", code) 54 } 55 if out := ui.ErrorWriter.String(); !strings.Contains(out, cmd.Help()) { 56 t.Fatalf("expected help output, got: %s", out) 57 } 58 ui.ErrorWriter.Reset() 59 60 // Fails when specified file does not exist 61 if code := cmd.Run([]string{"/unicorns/leprechauns"}); code != 1 { 62 t.Fatalf("expect exit 1, got: %d", code) 63 } 64 if out := ui.ErrorWriter.String(); !strings.Contains(out, "Error parsing") { 65 t.Fatalf("expect parsing error, got: %s", out) 66 } 67 ui.ErrorWriter.Reset() 68 69 // Fails on invalid HCL 70 fh1, err := ioutil.TempFile("", "nomad") 71 if err != nil { 72 t.Fatalf("err: %s", err) 73 } 74 defer os.Remove(fh1.Name()) 75 if _, err := fh1.WriteString("nope"); err != nil { 76 t.Fatalf("err: %s", err) 77 } 78 if code := cmd.Run([]string{fh1.Name()}); code != 1 { 79 t.Fatalf("expect exit 1, got: %d", code) 80 } 81 if out := ui.ErrorWriter.String(); !strings.Contains(out, "Error parsing") { 82 t.Fatalf("expect parsing error, got: %s", err) 83 } 84 ui.ErrorWriter.Reset() 85 86 // Fails on invalid job spec 87 fh2, err := ioutil.TempFile("", "nomad") 88 if err != nil { 89 t.Fatalf("err: %s", err) 90 } 91 defer os.Remove(fh2.Name()) 92 if _, err := fh2.WriteString(`job "job1" {}`); err != nil { 93 t.Fatalf("err: %s", err) 94 } 95 if code := cmd.Run([]string{fh2.Name()}); code != 1 { 96 t.Fatalf("expect exit 1, got: %d", code) 97 } 98 if out := ui.ErrorWriter.String(); !strings.Contains(out, "Error validating") { 99 t.Fatalf("expect validation error, got: %s", out) 100 } 101 ui.ErrorWriter.Reset() 102 }