github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/command/var_init_test.go (about) 1 package command 2 3 import ( 4 "os" 5 "path" 6 "testing" 7 8 "github.com/hashicorp/nomad/ci" 9 "github.com/mitchellh/cli" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestVarInitCommand_Implements(t *testing.T) { 14 ci.Parallel(t) 15 var _ cli.Command = &VarInitCommand{} 16 } 17 18 func TestVarInitCommand_Run(t *testing.T) { 19 ci.Parallel(t) 20 dir := t.TempDir() 21 origDir, err := os.Getwd() 22 require.NoError(t, err) 23 err = os.Chdir(dir) 24 require.NoError(t, err) 25 t.Cleanup(func() { os.Chdir(origDir) }) 26 27 t.Run("hcl", func(t *testing.T) { 28 ci.Parallel(t) 29 dir := dir 30 ui := cli.NewMockUi() 31 cmd := &VarInitCommand{Meta: Meta{Ui: ui}} 32 33 // Fails on misuse 34 ec := cmd.Run([]string{"some", "bad", "args"}) 35 require.Equal(t, 1, ec) 36 require.Contains(t, ui.ErrorWriter.String(), commandErrorText(cmd)) 37 require.Empty(t, ui.OutputWriter.String()) 38 reset(ui) 39 40 // Works if the file doesn't exist 41 ec = cmd.Run([]string{"-out", "hcl"}) 42 require.Empty(t, ui.ErrorWriter.String()) 43 require.Equal(t, "Example variable specification written to spec.nv.hcl\n", ui.OutputWriter.String()) 44 require.Zero(t, ec) 45 reset(ui) 46 t.Cleanup(func() { os.Remove(path.Join(dir, "spec.nv.hcl")) }) 47 48 content, err := os.ReadFile(DefaultHclVarInitName) 49 require.NoError(t, err) 50 require.Equal(t, defaultHclVarSpec, string(content)) 51 52 // Fails if the file exists 53 ec = cmd.Run([]string{"-out", "hcl"}) 54 require.Contains(t, ui.ErrorWriter.String(), "exists") 55 require.Empty(t, ui.OutputWriter.String()) 56 require.Equal(t, 1, ec) 57 reset(ui) 58 59 // Works if file is passed 60 ec = cmd.Run([]string{"-out", "hcl", "myTest.hcl"}) 61 require.Empty(t, ui.ErrorWriter.String()) 62 require.Equal(t, "Example variable specification written to myTest.hcl\n", ui.OutputWriter.String()) 63 require.Zero(t, ec) 64 reset(ui) 65 66 t.Cleanup(func() { os.Remove(path.Join(dir, "myTest.hcl")) }) 67 content, err = os.ReadFile("myTest.hcl") 68 require.NoError(t, err) 69 require.Equal(t, defaultHclVarSpec, string(content)) 70 }) 71 t.Run("json", func(t *testing.T) { 72 ci.Parallel(t) 73 dir := dir 74 ui := cli.NewMockUi() 75 cmd := &VarInitCommand{Meta: Meta{Ui: ui}} 76 77 // Fails on misuse 78 code := cmd.Run([]string{"some", "bad", "args"}) 79 require.Equal(t, 1, code) 80 require.Contains(t, ui.ErrorWriter.String(), "This command takes no arguments or one") 81 require.Empty(t, ui.OutputWriter.String()) 82 reset(ui) 83 84 // Works if the file doesn't exist 85 code = cmd.Run([]string{"-out", "json"}) 86 require.Contains(t, ui.ErrorWriter.String(), "REMINDER: While keys") 87 require.Contains(t, ui.OutputWriter.String(), "Example variable specification written to spec.nv.json\n") 88 require.Zero(t, code) 89 reset(ui) 90 91 t.Cleanup(func() { os.Remove(path.Join(dir, "spec.nv.json")) }) 92 content, err := os.ReadFile(DefaultJsonVarInitName) 93 require.NoError(t, err) 94 require.Equal(t, defaultJsonVarSpec, string(content)) 95 96 // Fails if the file exists 97 code = cmd.Run([]string{"-out", "json"}) 98 require.Contains(t, ui.ErrorWriter.String(), "exists") 99 require.Empty(t, ui.OutputWriter.String()) 100 require.Equal(t, 1, code) 101 reset(ui) 102 103 // Works if file is passed 104 code = cmd.Run([]string{"-out", "json", "myTest.json"}) 105 require.Contains(t, ui.ErrorWriter.String(), "REMINDER: While keys") 106 require.Contains(t, ui.OutputWriter.String(), "Example variable specification written to myTest.json\n") 107 require.Zero(t, code) 108 reset(ui) 109 110 t.Cleanup(func() { os.Remove(path.Join(dir, "myTest.json")) }) 111 content, err = os.ReadFile("myTest.json") 112 require.NoError(t, err) 113 require.Equal(t, defaultJsonVarSpec, string(content)) 114 }) 115 } 116 117 func reset(ui *cli.MockUi) { 118 ui.OutputWriter.Reset() 119 ui.ErrorWriter.Reset() 120 }