diff --git a/command/server.go b/command/server.go index 72680c9a5..a228859b9 100644 --- a/command/server.go +++ b/command/server.go @@ -267,17 +267,6 @@ func (c *ServerCommand) Run(args []string) int { lns = append(lns, ln) } - if verifyOnly { - return 0 - } - - // Initialize the HTTP server - server := &http.Server{} - server.Handler = vaulthttp.Handler(core) - for _, ln := range lns { - go server.Serve(ln) - } - infoKeys = append(infoKeys, "version") info["version"] = version.GetVersion().String() @@ -293,6 +282,20 @@ func (c *ServerCommand) Run(args []string) int { } c.Ui.Output("") + if verifyOnly { + for _, listener := range lns { + listener.Close() + } + return 0 + } + + // Initialize the HTTP server + server := &http.Server{} + server.Handler = vaulthttp.Handler(core) + for _, ln := range lns { + go server.Serve(ln) + } + // Output the header that the server has started c.Ui.Output("==> Vault server started! Log data will stream in below:\n") diff --git a/command/server_test.go b/command/server_test.go index 8f4fb634b..6ae3b752d 100644 --- a/command/server_test.go +++ b/command/server_test.go @@ -1,5 +1,15 @@ +// +build !race package command +import ( + "io/ioutil" + "os" + "strings" + "testing" + + "github.com/mitchellh/cli" +) + var ( basehcl = ` disable_mlock = true @@ -30,8 +40,35 @@ ha_backend "file" { ` ) -//FIXME: Re-enable once the go-metrics/exp manager race condition is sorted -/* +// The following tests have a go-metrics/exp manager race condition +func TestServer_CommonHA(t *testing.T) { + ui := new(cli.MockUi) + c := &ServerCommand{ + Meta: Meta{ + Ui: ui, + }, + } + + tmpfile, err := ioutil.TempFile("", "") + if err != nil { + t.Fatalf("error creating temp dir: %v", err) + } + + tmpfile.WriteString(basehcl + consulhcl) + tmpfile.Close() + defer os.Remove(tmpfile.Name()) + + args := []string{"-config", tmpfile.Name(), "-verify-only", "true"} + + if code := c.Run(args); code != 0 { + t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String()) + } + + if !strings.Contains(ui.OutputWriter.String(), "(HA available)") { + t.Fatalf("did not find HA available: %s", ui.OutputWriter.String()) + } +} + func TestServer_GoodSeparateHA(t *testing.T) { ui := new(cli.MockUi) c := &ServerCommand{ @@ -54,6 +91,10 @@ func TestServer_GoodSeparateHA(t *testing.T) { if code := c.Run(args); code != 0 { t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String()) } + + if !strings.Contains(ui.OutputWriter.String(), "HA Backend:") { + t.Fatalf("did not find HA Backend: %s", ui.OutputWriter.String()) + } } func TestServer_BadSeparateHA(t *testing.T) { @@ -79,4 +120,3 @@ func TestServer_BadSeparateHA(t *testing.T) { t.Fatalf("bad: should have gotten an error on a bad HA config") } } -*/