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