github.com/hernad/nomad@v1.6.112/command/integration_test.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: MPL-2.0 3 4 package command 5 6 import ( 7 "bytes" 8 "encoding/json" 9 "fmt" 10 "os/exec" 11 "strings" 12 "testing" 13 14 "github.com/hernad/nomad/api" 15 "github.com/hernad/nomad/ci" 16 "github.com/hernad/nomad/client/testutil" 17 "github.com/stretchr/testify/assert" 18 ) 19 20 func TestIntegration_Command_NomadInit(t *testing.T) { 21 ci.Parallel(t) 22 tmpDir := t.TempDir() 23 24 { 25 cmd := exec.Command("nomad", "job", "init") 26 cmd.Dir = tmpDir 27 if err := cmd.Run(); err != nil { 28 t.Fatalf("error running init: %v", err) 29 } 30 } 31 32 { 33 cmd := exec.Command("nomad", "job", "validate", "example.nomad.hcl") 34 cmd.Dir = tmpDir 35 cmd.Env = []string{`NOMAD_ADDR=http://127.0.0.1:0`} 36 if err := cmd.Run(); err != nil { 37 t.Fatalf("error validating example.nomad.hcl: %v", err) 38 } 39 } 40 } 41 42 func TestIntegration_Command_RoundTripJob(t *testing.T) { 43 ci.Parallel(t) 44 testutil.DockerCompatible(t) 45 46 assert := assert.New(t) 47 tmpDir := t.TempDir() 48 49 // Start in dev mode so we get a node registration 50 srv, client, url := testServer(t, true, nil) 51 defer srv.Shutdown() 52 53 { 54 cmd := exec.Command("nomad", "job", "init", "-short") 55 cmd.Dir = tmpDir 56 assert.Nil(cmd.Run()) 57 } 58 59 { 60 cmd := exec.Command("nomad", "job", "run", "example.nomad.hcl") 61 cmd.Dir = tmpDir 62 cmd.Env = []string{fmt.Sprintf("NOMAD_ADDR=%s", url)} 63 err := cmd.Run() 64 if err != nil && !strings.Contains(err.Error(), "exit status 2") { 65 t.Fatalf("error running example.nomad.hcl: %v", err) 66 } 67 } 68 69 { 70 cmd := exec.Command("nomad", "job", "inspect", "example") 71 cmd.Dir = tmpDir 72 cmd.Env = []string{fmt.Sprintf("NOMAD_ADDR=%s", url)} 73 out, err := cmd.Output() 74 assert.Nil(err) 75 76 var req api.JobRegisterRequest 77 dec := json.NewDecoder(bytes.NewReader(out)) 78 assert.Nil(dec.Decode(&req)) 79 80 var resp api.JobRegisterResponse 81 _, err = client.Raw().Write("/v1/jobs", req, &resp, nil) 82 assert.Nil(err) 83 assert.NotZero(resp.EvalID) 84 } 85 86 { 87 cmd := exec.Command("nomad", "job", "stop", "example") 88 cmd.Dir = tmpDir 89 cmd.Env = []string{fmt.Sprintf("NOMAD_ADDR=%s", url)} 90 _, err := cmd.Output() 91 assert.Nil(err) 92 } 93 }