diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2022-03-14 16:34:23 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2022-03-14 19:38:17 +0100 |
commit | 31fbc081c98d55a6e4b9da38c2ff29777da0b0c0 (patch) | |
tree | 7039efd599b810eb62b286e3894e009cfd2e6840 /commands/server_test.go | |
parent | cebd886ac137b9832ff26781d3d13ecf69d608a7 (diff) |
Improve server startup/shutdown
Closes #9671
Diffstat (limited to 'commands/server_test.go')
-rw-r--r-- | commands/server_test.go | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/commands/server_test.go b/commands/server_test.go index 0806c57d0..5b91ff9db 100644 --- a/commands/server_test.go +++ b/commands/server_test.go @@ -25,6 +25,8 @@ import ( "github.com/gohugoio/hugo/config" "github.com/gohugoio/hugo/helpers" + "golang.org/x/net/context" + "golang.org/x/sync/errgroup" qt "github.com/frankban/quicktest" ) @@ -107,14 +109,14 @@ func runServerTest(c *qt.C, config string, args ...string) (result serverTestRes defer clean() c.Assert(err, qt.IsNil) - // Let us hope that this port is available on all systems ... - port := 1331 + sp, err := helpers.FindAvailablePort() + c.Assert(err, qt.IsNil) + port := sp.Port defer func() { os.RemoveAll(dir) }() - errors := make(chan error) stop := make(chan bool) b := newCommandsBuilder() @@ -124,24 +126,26 @@ func runServerTest(c *qt.C, config string, args ...string) (result serverTestRes args = append([]string{"-s=" + dir, fmt.Sprintf("-p=%d", port)}, args...) cmd.SetArgs(args) - go func() { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + wg, ctx := errgroup.WithContext(ctx) + + wg.Go(func() error { _, err := cmd.ExecuteC() - if err != nil { - errors <- err - } - }() + return err + }) select { // There is no way to know exactly when the server is ready for connections. // We could improve by something like https://golang.org/pkg/net/http/httptest/#Server // But for now, let us sleep and pray! case <-time.After(2 * time.Second): - case err := <-errors: - result.err = err + case <-ctx.Done(): + result.err = wg.Wait() return } - resp, err := http.Get("http://localhost:1331/") + resp, err := http.Get(fmt.Sprintf("http://localhost:%d/", port)) c.Assert(err, qt.IsNil) defer resp.Body.Close() homeContent := helpers.ReaderToString(resp.Body) @@ -158,6 +162,7 @@ func runServerTest(c *qt.C, config string, args ...string) (result serverTestRes result.publicDirnames[f.Name()] = true } + result.err = wg.Wait() return } |