diff options
-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) + } +} |