github.com/karlem/nomad@v0.10.2-rc1/command/job_init_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 "github.com/stretchr/testify/require" 11 ) 12 13 func TestInitCommand_Implements(t *testing.T) { 14 t.Parallel() 15 var _ cli.Command = &JobInitCommand{} 16 } 17 18 func TestInitCommand_Run(t *testing.T) { 19 t.Parallel() 20 ui := new(cli.MockUi) 21 cmd := &JobInitCommand{Meta: Meta{Ui: ui}} 22 23 // Fails on misuse 24 if code := cmd.Run([]string{"some", "bad", "args"}); code != 1 { 25 t.Fatalf("expect exit code 1, got: %d", code) 26 } 27 if out := ui.ErrorWriter.String(); !strings.Contains(out, commandErrorText(cmd)) { 28 t.Fatalf("expect help output, got: %s", out) 29 } 30 ui.ErrorWriter.Reset() 31 32 // Ensure we change the cwd back 33 origDir, err := os.Getwd() 34 if err != nil { 35 t.Fatalf("err: %s", err) 36 } 37 defer os.Chdir(origDir) 38 39 // Create a temp dir and change into it 40 dir, err := ioutil.TempDir("", "nomad") 41 if err != nil { 42 t.Fatalf("err: %s", err) 43 } 44 defer os.RemoveAll(dir) 45 if err := os.Chdir(dir); err != nil { 46 t.Fatalf("err: %s", err) 47 } 48 49 // Works if the file doesn't exist 50 if code := cmd.Run([]string{}); code != 0 { 51 t.Fatalf("expect exit code 0, got: %d", code) 52 } 53 content, err := ioutil.ReadFile(DefaultInitName) 54 if err != nil { 55 t.Fatalf("err: %s", err) 56 } 57 defaultJob, _ := Asset("command/assets/example.nomad") 58 if string(content) != string(defaultJob) { 59 t.Fatalf("unexpected file content\n\n%s", string(content)) 60 } 61 62 // Works with -short flag 63 os.Remove(DefaultInitName) 64 if code := cmd.Run([]string{"-short"}); code != 0 { 65 require.Zero(t, code, "unexpected exit code: %d", code) 66 } 67 content, err = ioutil.ReadFile(DefaultInitName) 68 require.NoError(t, err) 69 shortJob, _ := Asset("command/assets/example-short.nomad") 70 require.Equal(t, string(content), string(shortJob)) 71 72 // Fails if the file exists 73 if code := cmd.Run([]string{}); code != 1 { 74 t.Fatalf("expect exit code 1, got: %d", code) 75 } 76 if out := ui.ErrorWriter.String(); !strings.Contains(out, "exists") { 77 t.Fatalf("expect file exists error, got: %s", out) 78 } 79 } 80 81 func TestInitCommand_defaultJob(t *testing.T) { 82 t.Parallel() 83 // Ensure the job file is always written with spaces instead of tabs. Since 84 // the default job file is embedded in the go file, it's easy for tabs to 85 // slip in. 86 defaultJob, _ := Asset("command/assets/example.nomad") 87 if strings.Contains(string(defaultJob), "\t") { 88 t.Error("default job contains tab character - please convert to spaces") 89 } 90 }