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