github.com/janma/nomad@v0.11.3/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 } 91 92 func TestInitCommand_customFilename(t *testing.T) { 93 t.Parallel() 94 ui := new(cli.MockUi) 95 cmd := &JobInitCommand{Meta: Meta{Ui: ui}} 96 filename := "custom.nomad" 97 98 // Ensure we change the cwd back 99 origDir, err := os.Getwd() 100 if err != nil { 101 t.Fatalf("err: %s", err) 102 } 103 defer os.Chdir(origDir) 104 105 // Create a temp dir and change into it 106 dir, err := ioutil.TempDir("", "nomad") 107 if err != nil { 108 t.Fatalf("err: %s", err) 109 } 110 defer os.RemoveAll(dir) 111 if err := os.Chdir(dir); err != nil { 112 t.Fatalf("err: %s", err) 113 } 114 115 // Works if the file doesn't exist 116 if code := cmd.Run([]string{filename}); code != 0 { 117 t.Fatalf("expect exit code 0, got: %d", code) 118 } 119 content, err := ioutil.ReadFile(filename) 120 if err != nil { 121 t.Fatalf("err: %s", err) 122 } 123 defaultJob, _ := Asset("command/assets/example.nomad") 124 if string(content) != string(defaultJob) { 125 t.Fatalf("unexpected file content\n\n%s", string(content)) 126 } 127 128 // Works with -short flag 129 os.Remove(filename) 130 if code := cmd.Run([]string{"-short", filename}); code != 0 { 131 require.Zero(t, code, "unexpected exit code: %d", code) 132 } 133 content, err = ioutil.ReadFile(filename) 134 require.NoError(t, err) 135 shortJob, _ := Asset("command/assets/example-short.nomad") 136 require.Equal(t, string(content), string(shortJob)) 137 138 // Fails if the file exists 139 if code := cmd.Run([]string{filename}); code != 1 { 140 t.Fatalf("expect exit code 1, got: %d", code) 141 } 142 if out := ui.ErrorWriter.String(); !strings.Contains(out, "exists") { 143 t.Fatalf("expect file exists error, got: %s", out) 144 } 145 }