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