diff options
author | Kevin Burke <kev@inburke.com> | 2017-07-17 11:16:06 -0700 |
---|---|---|
committer | Kevin Burke <kev@inburke.com> | 2017-10-26 16:49:03 +0000 |
commit | cad53bf66e7328f5f6bdf7bf02113464370f16a4 (patch) | |
tree | 0bab1e266b5a6612b8f41d49fa831b7f4a1f126c | |
parent | 18a9253a5fd13205b04beed8e8ca009547b12c1f (diff) |
blog: user- and test-friendly local server
Log a short message when the blog starts explaining that it's
listening and what port it's listening on. This is helpful to avoid
errors if you start the blog and refresh the page before the server
has started listening on the port.
Add a basic homepage rendering test that should help protect against
regressions.
Change-Id: Ic86c30652714230b730cd4a254e69c10d019246b
Reviewed-on: https://go-review.googlesource.com/49292
Reviewed-by: Chris Broadfoot <cbro@golang.org>
-rw-r--r-- | blog/local.go | 37 | ||||
-rw-r--r-- | blog/local_test.go | 33 |
2 files changed, 59 insertions, 11 deletions
diff --git a/blog/local.go b/blog/local.go index 2e7ab54..676acb5 100644 --- a/blog/local.go +++ b/blog/local.go @@ -11,6 +11,7 @@ package main import ( "flag" "log" + "net" "net/http" "golang.org/x/tools/blog" @@ -24,22 +25,36 @@ var ( reload = flag.Bool("reload", false, "reload content on each page load") ) -func main() { - flag.Parse() - config.ContentPath = *contentPath - config.TemplatePath = *templatePath - if *reload { - http.HandleFunc("/", reloadingBlogServer) +func newServer(reload bool, staticPath string, config blog.Config) (http.Handler, error) { + mux := http.NewServeMux() + if reload { + mux.HandleFunc("/", reloadingBlogServer) } else { s, err := blog.NewServer(config) if err != nil { - log.Fatal(err) + return nil, err } - http.Handle("/", s) + mux.Handle("/", s) + } + fs := http.FileServer(http.Dir(staticPath)) + mux.Handle("/static/", http.StripPrefix("/static/", fs)) + return mux, nil +} + +func main() { + flag.Parse() + config.ContentPath = *contentPath + config.TemplatePath = *templatePath + mux, err := newServer(*reload, *staticPath, config) + if err != nil { + log.Fatal(err) + } + ln, err := net.Listen("tcp", *httpAddr) + if err != nil { + log.Fatal(err) } - fs := http.FileServer(http.Dir(*staticPath)) - http.Handle("/static/", http.StripPrefix("/static/", fs)) - log.Fatal(http.ListenAndServe(*httpAddr, nil)) + log.Println("Listening on addr", *httpAddr) + log.Fatal(http.Serve(ln, mux)) } // reloadingBlogServer is an handler that restarts the blog server on each page diff --git a/blog/local_test.go b/blog/local_test.go new file mode 100644 index 0000000..b2a4419 --- /dev/null +++ b/blog/local_test.go @@ -0,0 +1,33 @@ +// +build !appengine + +package main + +import ( + "net/http/httptest" + "strings" + "testing" + + "golang.org/x/tools/blog" +) + +func TestServer(t *testing.T) { + mux, err := newServer(false, "/static", blog.Config{ + TemplatePath: "../template", + }) + if err != nil { + t.Fatal(err) + } + r := httptest.NewRequest("GET", "/", nil) + w := httptest.NewRecorder() + mux.ServeHTTP(w, r) + if w.Code != 200 { + t.Errorf("GET /: want code 200, got %d") + } + want := "The Go Programming Language Blog" + if !strings.Contains(w.Body.String(), want) { + t.Errorf("GET /: want to find %q, got\n\n%q", want, w.Body.String()) + } + if hdr := w.Header().Get("Content-Type"); hdr != "text/html; charset=utf-8" { + t.Errorf("GET /: want text/html content-type, got %q", hdr) + } +} |