commands: Add basic server test

See #4598
This commit is contained in:
Bjørn Erik Pedersen 2018-04-11 09:38:58 +02:00
parent 1e233b1c45
commit a7d00fc39e
No known key found for this signature in database
GPG key ID: 330E6E2BD4859D8F
3 changed files with 72 additions and 3 deletions

View file

@ -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 file

@ -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 file

@ -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