command/run: validate job before submission

This commit is contained in:
Ryan Uber
2015-09-21 15:08:29 -07:00
parent 31e4e31f91
commit e24e6a3a46
2 changed files with 41 additions and 4 deletions

View File

@@ -79,6 +79,12 @@ func (c *RunCommand) Run(args []string) int {
return 1
}
// Check that the job is valid
if err := job.Validate(); err != nil {
c.Ui.Error(fmt.Sprintf("Error validating job: %s", err))
return 1
}
// Convert it to something we can use
apiJob, err := convertJob(job)
if err != nil {

View File

@@ -35,7 +35,7 @@ func TestRunCommand_Fails(t *testing.T) {
}
ui.ErrorWriter.Reset()
// Fails on invalid job
// Fails on invalid HCL
fh1, err := ioutil.TempFile("", "nomad")
if err != nil {
t.Fatalf("err: %s", err)
@@ -52,16 +52,47 @@ func TestRunCommand_Fails(t *testing.T) {
}
ui.ErrorWriter.Reset()
// Fails on connection failure
// Fails on invalid job spec
fh2, err := ioutil.TempFile("", "nomad")
if err != nil {
t.Fatalf("err: %s", err)
}
defer os.Remove(fh2.Name())
if _, err := fh2.WriteString(`job "hello" {}`); err != nil {
if _, err := fh2.WriteString(`job "job1" {}`); err != nil {
t.Fatalf("err: %s", err)
}
if code := cmd.Run([]string{"-address=nope", fh2.Name()}); code != 1 {
if code := cmd.Run([]string{fh2.Name()}); code != 1 {
t.Fatalf("expect exit 1, got: %d", code)
}
if out := ui.ErrorWriter.String(); !strings.Contains(out, "Error validating") {
t.Fatalf("expect validation error, got: %s", out)
}
ui.ErrorWriter.Reset()
// Fails on connection failure (requires a valid job)
fh3, err := ioutil.TempFile("", "nomad")
if err != nil {
t.Fatalf("err: %s", err)
}
defer os.Remove(fh3.Name())
_, err = fh3.WriteString(`
job "job1" {
datacenters = [ "dc1" ]
group "group1" {
count = 1
task "task1" {
driver = "exec"
resources = {
cpu = 1000
mem = 512
}
}
}
}`)
if err != nil {
t.Fatalf("err: %s", err)
}
if code := cmd.Run([]string{"-address=nope", fh3.Name()}); code != 1 {
t.Fatalf("expected exit code 1, got: %d", code)
}
if out := ui.ErrorWriter.String(); !strings.Contains(out, "Error submitting job") {