github.com/dgsb/consul@v1.4.5/command/services/register/register_test.go (about) 1 package register 2 3 import ( 4 "os" 5 "strings" 6 "testing" 7 8 "github.com/hashicorp/consul/agent" 9 "github.com/hashicorp/consul/testutil" 10 "github.com/mitchellh/cli" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func TestCommand_noTabs(t *testing.T) { 15 t.Parallel() 16 if strings.ContainsRune(New(nil).Help(), '\t') { 17 t.Fatal("help has tabs") 18 } 19 } 20 21 func TestCommand_Validation(t *testing.T) { 22 t.Parallel() 23 24 ui := cli.NewMockUi() 25 c := New(ui) 26 27 cases := map[string]struct { 28 args []string 29 output string 30 }{ 31 "no args or id": { 32 []string{}, 33 "at least one", 34 }, 35 "args and -name": { 36 []string{"-name", "web", "foo.json"}, 37 "not both", 38 }, 39 } 40 41 for name, tc := range cases { 42 t.Run(name, func(t *testing.T) { 43 require := require.New(t) 44 45 c.init() 46 47 // Ensure our buffer is always clear 48 if ui.ErrorWriter != nil { 49 ui.ErrorWriter.Reset() 50 } 51 if ui.OutputWriter != nil { 52 ui.OutputWriter.Reset() 53 } 54 55 require.Equal(1, c.Run(tc.args)) 56 output := ui.ErrorWriter.String() 57 require.Contains(output, tc.output) 58 }) 59 } 60 } 61 62 func TestCommand_File(t *testing.T) { 63 t.Parallel() 64 65 require := require.New(t) 66 a := agent.NewTestAgent(t, t.Name(), ``) 67 defer a.Shutdown() 68 client := a.Client() 69 70 ui := cli.NewMockUi() 71 c := New(ui) 72 73 contents := `{ "Service": { "Name": "web" } }` 74 f := testFile(t, "json") 75 defer os.Remove(f.Name()) 76 if _, err := f.WriteString(contents); err != nil { 77 t.Fatalf("err: %#v", err) 78 } 79 80 args := []string{ 81 "-http-addr=" + a.HTTPAddr(), 82 f.Name(), 83 } 84 85 require.Equal(0, c.Run(args), ui.ErrorWriter.String()) 86 87 svcs, err := client.Agent().Services() 88 require.NoError(err) 89 require.Len(svcs, 1) 90 91 svc := svcs["web"] 92 require.NotNil(svc) 93 } 94 95 func TestCommand_Flags(t *testing.T) { 96 t.Parallel() 97 98 require := require.New(t) 99 a := agent.NewTestAgent(t, t.Name(), ``) 100 defer a.Shutdown() 101 client := a.Client() 102 103 ui := cli.NewMockUi() 104 c := New(ui) 105 106 args := []string{ 107 "-http-addr=" + a.HTTPAddr(), 108 "-name", "web", 109 } 110 111 require.Equal(0, c.Run(args), ui.ErrorWriter.String()) 112 113 svcs, err := client.Agent().Services() 114 require.NoError(err) 115 require.Len(svcs, 1) 116 117 svc := svcs["web"] 118 require.NotNil(svc) 119 } 120 121 func testFile(t *testing.T, suffix string) *os.File { 122 f := testutil.TempFile(t, "register-test-file") 123 if err := f.Close(); err != nil { 124 t.Fatalf("err: %s", err) 125 } 126 127 newName := f.Name() + "." + suffix 128 if err := os.Rename(f.Name(), newName); err != nil { 129 os.Remove(f.Name()) 130 t.Fatalf("err: %s", err) 131 } 132 133 f, err := os.Create(newName) 134 if err != nil { 135 os.Remove(newName) 136 t.Fatalf("err: %s", err) 137 } 138 139 return f 140 }