summaryrefslogtreecommitdiffstats
path: root/commands
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-04-11 09:38:58 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-04-11 09:51:07 +0200
commita7d00fc39e87a5cac99b3a2380f5cc8c135d2b4b (patch)
tree952bd16111a0a56225d2b6dc2c726556e4392503 /commands
parent1e233b1c4598fd8cbce7da8a67bf2c4918c6047e (diff)
commands: Add basic server test
See #4598
Diffstat (limited to 'commands')
-rw-r--r--commands/gendoc.go2
-rw-r--r--commands/server.go24
-rw-r--r--commands/server_test.go49
3 files changed, 72 insertions, 3 deletions
diff --git a/commands/gendoc.go b/commands/gendoc.go
index 3446c2622..8312191f2 100644
--- a/commands/gendoc.go
+++ b/commands/gendoc.go
@@ -66,7 +66,7 @@ for rendering in Hugo.`,
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))
diff --git a/commands/server.go b/commands/server.go
index 6ede49417..5500526e8 100644
--- a/commands/server.go
+++ b/commands/server.go
@@ -39,6 +39,11 @@ import (
)
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,7 +60,11 @@ type serverCmd struct {
}
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",
@@ -394,9 +403,20 @@ func (c *commandeer) serve(s *serverCmd) error {
}()
}
+ 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
}
diff --git a/commands/server_test.go b/commands/server_test.go
index 8940eb078..b17addf6b 100644
--- a/commands/server_test.go
+++ b/commands/server_test.go
@@ -14,11 +14,60 @@
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 {
TestName string