ref: a7d00fc39e87a5cac99b3a2380f5cc8c135d2b4b
parent: 1e233b1c4598fd8cbce7da8a67bf2c4918c6047e
author: Bjørn Erik Pedersen <[email protected]>
date: Wed Apr 11 05:38:58 EDT 2018
commands: Add basic server test See #4598
--- a/commands/gendoc.go
+++ b/commands/gendoc.go
@@ -66,7 +66,7 @@
return err
}
}
- now := time.Now().Format(time.RFC3339)
+ now := time.Now().Format("2006-01-02")
prepender := func(filename string) string {
name := filepath.Base(filename)
base := strings.TrimSuffix(name, path.Ext(name))
--- a/commands/server.go
+++ b/commands/server.go
@@ -39,6 +39,11 @@
)
type serverCmd struct {
+ // Can be used to stop the server. Useful in tests
+ stop <-chan bool
+ // Can be used to receive notification about when the server is started. Useful in tests.
+ started chan<- bool
+
disableLiveReload bool
navigateToChanged bool
renderToDisk bool
@@ -55,8 +60,12 @@
}
func newServerCmd() *serverCmd {
- cc := &serverCmd{}
+ return newServerCmdSignaled(nil, nil)
+}
+func newServerCmdSignaled(stop <-chan bool, started chan<- bool) *serverCmd {
+ cc := &serverCmd{stop: stop, started: started}
+
cc.baseBuilderCmd = newBuilderCmd(&cobra.Command{
Use: "server",
Aliases: []string{"serve"},
@@ -394,9 +403,20 @@
}()
}
+ if s.started != nil {
+ s.started <- true
+ }
+
jww.FEEDBACK.Println("Press Ctrl+C to stop")
- <-sigs
+ if s.stop != nil {
+ select {
+ case <-sigs:
+ case <-s.stop:
+ }
+ } else {
+ <-sigs
+ }
return nil
}
--- a/commands/server_test.go
+++ b/commands/server_test.go
@@ -14,10 +14,59 @@
package commands
import (
+ "fmt"
+ "net/http"
+ "os"
"testing"
+ "time"
+ "github.com/gohugoio/hugo/helpers"
+
"github.com/spf13/viper"
+ "github.com/stretchr/testify/require"
)
+
+func TestServer(t *testing.T) {
+ assert := require.New(t)
+ dir, err := createSimpleTestSite(t)
+ assert.NoError(err)
+
+ // Let us hope that this port is available on all systems ...
+ port := 1331
+
+ defer func() {
+ os.RemoveAll(dir)
+ }()
+
+ stop, started := make(chan bool), make(chan bool)
+
+ scmd := newServerCmdSignaled(stop, started)
+
+ cmd := scmd.getCommand()
+ cmd.SetArgs([]string{"-s=" + dir, fmt.Sprintf("-p=%d", port)})
+
+ go func() {
+ _, err = cmd.ExecuteC()
+ assert.NoError(err)
+ }()
+
+ select {
+ case <-started:
+ case <-time.After(2 * time.Second):
+ t.Fatal("server start took too long")
+ }
+
+ resp, err := http.Get("http://localhost:1331/")
+ assert.NoError(err)
+ defer resp.Body.Close()
+ homeContent := helpers.ReaderToString(resp.Body)
+
+ assert.Contains(homeContent, "List: Hugo Commands")
+
+ // Stop the server.
+ stop <- true
+
+}
func TestFixURL(t *testing.T) {
type data struct {