From 2559ab72b168a4ff107ecf770187c8dc5a74a3e2 Mon Sep 17 00:00:00 2001 From: Michael Schurter Date: Fri, 7 Jul 2017 15:34:26 -0700 Subject: [PATCH] Validate job type Fixes #2722 --- nomad/structs/structs.go | 6 +++++- nomad/structs/structs_test.go | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/nomad/structs/structs.go b/nomad/structs/structs.go index 2a92c4b44..9657a6c0e 100644 --- a/nomad/structs/structs.go +++ b/nomad/structs/structs.go @@ -1587,8 +1587,12 @@ func (j *Job) Validate() error { if j.Name == "" { mErr.Errors = append(mErr.Errors, errors.New("Missing job name")) } - if j.Type == "" { + switch j.Type { + case JobTypeCore, JobTypeService, JobTypeBatch, JobTypeSystem: + case "": mErr.Errors = append(mErr.Errors, errors.New("Missing job type")) + default: + mErr.Errors = append(mErr.Errors, fmt.Errorf("Invalid job type: %q", j.Type)) } if j.Priority < JobMinPriority || j.Priority > JobMaxPriority { mErr.Errors = append(mErr.Errors, fmt.Errorf("Job priority must be between [%d, %d]", JobMinPriority, JobMaxPriority)) diff --git a/nomad/structs/structs_test.go b/nomad/structs/structs_test.go index 00516b9d5..c9e4e78b8 100644 --- a/nomad/structs/structs_test.go +++ b/nomad/structs/structs_test.go @@ -38,6 +38,14 @@ func TestJob_Validate(t *testing.T) { t.Fatalf("err: %s", err) } + j = &Job{ + Type: "invalid-job-type", + } + err = j.Validate() + if expected := `Invalid job type: "invalid-job-type"`; !strings.Contains(err.Error(), expected) { + t.Errorf("expected %s but found: %v", expected, err) + } + j = &Job{ Type: JobTypeService, Periodic: &PeriodicConfig{