mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
commands: Fix server panic regression
And now with a proper server test. Fixes #9518 Fixes #9530 Fixes #9539
This commit is contained in:
parent
4ada09415d
commit
aebde49b88
4 changed files with 45 additions and 15 deletions
|
@ -422,7 +422,7 @@ func (c *commandeer) loadConfig() error {
|
||||||
}
|
}
|
||||||
c.hugoSites = h
|
c.hugoSites = h
|
||||||
// TODO(bep) improve.
|
// TODO(bep) improve.
|
||||||
if c.buildLock == nil {
|
if c.buildLock == nil && h != nil {
|
||||||
c.buildLock = h.LockBuild
|
c.buildLock = h.LockBuild
|
||||||
}
|
}
|
||||||
close(c.created)
|
close(c.created)
|
||||||
|
|
|
@ -329,7 +329,7 @@ type testSiteConfig struct {
|
||||||
contentDir string
|
contentDir string
|
||||||
}
|
}
|
||||||
|
|
||||||
func createSimpleTestSite(t *testing.T, cfg testSiteConfig) (string, func(), error) {
|
func createSimpleTestSite(t testing.TB, cfg testSiteConfig) (string, func(), error) {
|
||||||
d, clean, e := htesting.CreateTempDir(hugofs.Os, "hugo-cli")
|
d, clean, e := htesting.CreateTempDir(hugofs.Os, "hugo-cli")
|
||||||
if e != nil {
|
if e != nil {
|
||||||
return "", nil, e
|
return "", nil, e
|
||||||
|
@ -392,12 +392,12 @@ Environment: {{ hugo.Environment }}
|
||||||
return d, clean, nil
|
return d, clean, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeFile(t *testing.T, filename, content string) {
|
func writeFile(t testing.TB, filename, content string) {
|
||||||
must(t, os.MkdirAll(filepath.Dir(filename), os.FileMode(0755)))
|
must(t, os.MkdirAll(filepath.Dir(filename), os.FileMode(0755)))
|
||||||
must(t, ioutil.WriteFile(filename, []byte(content), os.FileMode(0755)))
|
must(t, ioutil.WriteFile(filename, []byte(content), os.FileMode(0755)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func must(t *testing.T, err error) {
|
func must(t testing.TB, err error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,12 +29,33 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestServer(t *testing.T) {
|
func TestServer(t *testing.T) {
|
||||||
if isWindowsCI() {
|
|
||||||
// TODO(bep) not sure why server tests have started to fail on the Windows CI server.
|
|
||||||
t.Skip("Skip server test on appveyor")
|
|
||||||
}
|
|
||||||
c := qt.New(t)
|
c := qt.New(t)
|
||||||
dir, clean, err := createSimpleTestSite(t, testSiteConfig{})
|
|
||||||
|
homeContent, err := runServerTestAndGetHome(c, "")
|
||||||
|
|
||||||
|
c.Assert(err, qt.IsNil)
|
||||||
|
c.Assert(homeContent, qt.Contains, "List: Hugo Commands")
|
||||||
|
c.Assert(homeContent, qt.Contains, "Environment: development")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Issue 9518
|
||||||
|
func TestServerPanicOnConfigError(t *testing.T) {
|
||||||
|
c := qt.New(t)
|
||||||
|
|
||||||
|
config := `
|
||||||
|
[markup]
|
||||||
|
[markup.highlight]
|
||||||
|
linenos='table'
|
||||||
|
`
|
||||||
|
|
||||||
|
_, err := runServerTestAndGetHome(c, config)
|
||||||
|
|
||||||
|
c.Assert(err, qt.IsNotNil)
|
||||||
|
c.Assert(err.Error(), qt.Contains, "cannot parse 'Highlight.LineNos' as bool:")
|
||||||
|
}
|
||||||
|
|
||||||
|
func runServerTestAndGetHome(c *qt.C, config string) (string, error) {
|
||||||
|
dir, clean, err := createSimpleTestSite(c, testSiteConfig{configTOML: config})
|
||||||
defer clean()
|
defer clean()
|
||||||
c.Assert(err, qt.IsNil)
|
c.Assert(err, qt.IsNil)
|
||||||
|
|
||||||
|
@ -45,6 +66,7 @@ func TestServer(t *testing.T) {
|
||||||
os.RemoveAll(dir)
|
os.RemoveAll(dir)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
errors := make(chan error)
|
||||||
stop := make(chan bool)
|
stop := make(chan bool)
|
||||||
|
|
||||||
b := newCommandsBuilder()
|
b := newCommandsBuilder()
|
||||||
|
@ -54,25 +76,30 @@ func TestServer(t *testing.T) {
|
||||||
cmd.SetArgs([]string{"-s=" + dir, fmt.Sprintf("-p=%d", port)})
|
cmd.SetArgs([]string{"-s=" + dir, fmt.Sprintf("-p=%d", port)})
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
_, err = cmd.ExecuteC()
|
_, err := cmd.ExecuteC()
|
||||||
c.Assert(err, qt.IsNil)
|
if err != nil {
|
||||||
|
errors <- err
|
||||||
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
select {
|
||||||
// There is no way to know exactly when the server is ready for connections.
|
// 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
|
// We could improve by something like https://golang.org/pkg/net/http/httptest/#Server
|
||||||
// But for now, let us sleep and pray!
|
// But for now, let us sleep and pray!
|
||||||
time.Sleep(2 * time.Second)
|
case <-time.After(2 * time.Second):
|
||||||
|
case err := <-errors:
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
resp, err := http.Get("http://localhost:1331/")
|
resp, err := http.Get("http://localhost:1331/")
|
||||||
c.Assert(err, qt.IsNil)
|
c.Assert(err, qt.IsNil)
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
homeContent := helpers.ReaderToString(resp.Body)
|
homeContent := helpers.ReaderToString(resp.Body)
|
||||||
|
|
||||||
c.Assert(homeContent, qt.Contains, "List: Hugo Commands")
|
|
||||||
c.Assert(homeContent, qt.Contains, "Environment: development")
|
|
||||||
|
|
||||||
// Stop the server.
|
// Stop the server.
|
||||||
stop <- true
|
stop <- true
|
||||||
|
|
||||||
|
return homeContent, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestFixURL(t *testing.T) {
|
func TestFixURL(t *testing.T) {
|
||||||
|
|
|
@ -390,6 +390,9 @@ func newHugoSites(cfg deps.DepsCfg, sites ...*Site) (*HugoSites, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
h.Deps = sites[0].Deps
|
h.Deps = sites[0].Deps
|
||||||
|
if h.Deps == nil {
|
||||||
|
return nil, initErr
|
||||||
|
}
|
||||||
|
|
||||||
// Only needed in server mode.
|
// Only needed in server mode.
|
||||||
// TODO(bep) clean up the running vs watching terms
|
// TODO(bep) clean up the running vs watching terms
|
||||||
|
|
Loading…
Reference in a new issue