Skip to content

Instantly share code, notes, and snippets.

@cespare
Created February 20, 2013 03:05

Revisions

  1. cespare created this gist Feb 20, 2013.
    19 changes: 19 additions & 0 deletions main.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,19 @@
    package main

    import (
    "log"
    "myserver"
    "net/http"
    )

    const addr = "localhost:12345"

    func main() {
    mux := http.NewServeMux()
    handler := &myserver.MyHandler{}
    mux.Handle("/favicon.ico", http.NotFoundHandler())
    mux.Handle("/", handler)
    log.Printf("Now listening on %s...\n", addr)
    server := http.Server{Handler: mux, Addr: addr}
    log.Fatal(server.ListenAndServe())
    }
    22 changes: 22 additions & 0 deletions myserver.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,22 @@
    package myserver

    import (
    "fmt"
    "net/http"
    "sync"
    )

    type MyHandler struct {
    sync.Mutex
    count int
    }

    func (h *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    var count int
    h.Lock()
    h.count++
    count = h.count
    h.Unlock()

    fmt.Fprintf(w, "Visitor count: %d.", count)
    }
    33 changes: 33 additions & 0 deletions myserver_test.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,33 @@
    package myserver

    import (
    "fmt"
    "io/ioutil"
    "net/http"
    "net/http/httptest"
    "testing"
    )

    func TestMyHandler(t *testing.T) {
    handler := &MyHandler{}
    server := httptest.NewServer(handler)
    defer server.Close()

    for _, i := range []int{1, 2} {
    resp, err := http.Get(server.URL)
    if err != nil {
    t.Fatal(err)
    }
    if resp.StatusCode != 200 {
    t.Fatalf("Received non-200 response: %d\n", resp.StatusCode)
    }
    expected := fmt.Sprintf("Visitor count: %d.", i)
    actual, err := ioutil.ReadAll(resp.Body)
    if err != nil {
    t.Fatal(err)
    }
    if expected != string(actual) {
    t.Errorf("Expected the message '%s'\n", expected)
    }
    }
    }