Permalink
Browse files

commands: Add basic server test

See #4598
  • Loading branch information...
bep committed Apr 11, 2018
1 parent 1e233b1 commit a7d00fc39e87a5cac99b3a2380f5cc8c135d2b4b
Showing with 72 additions and 3 deletions.
  1. +1 −1 commands/gendoc.go
  2. +22 −2 commands/server.go
  3. +49 −0 commands/server_test.go
View
@@ -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))
View
@@ -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
}
View
@@ -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

0 comments on commit a7d00fc

Please sign in to comment.