package handlers import ( "fmt" "net/http" "net/http/httptest" "testing" ) func TestUnauth(t *testing.T) { h := BasicAuthHandler(StaticFileHandler("./testdata/script.js"), func(u, pwd string) (interface{}, bool) { if u == "me" && pwd == "you" { return u, true } return nil, false }, "foo") s := httptest.NewServer(h) defer s.Close() res, err := http.Get(s.URL) if err != nil { panic(err) } assertStatus(http.StatusUnauthorized, res.StatusCode, t) assertHeader("Www-Authenticate", `Basic realm="foo"`, res, t) } func TestGzippedAuth(t *testing.T) { h := GZIPHandler(BasicAuthHandler(http.HandlerFunc( func(w http.ResponseWriter, r *http.Request) { usr, ok := GetUser(w) if assertTrue(ok, "expected authenticated user, got false", t) { assertTrue(usr.(string) == "meyou", fmt.Sprintf("expected user data to be 'meyou', got '%s'", usr), t) } usr, ok = GetUserName(w) if assertTrue(ok, "expected authenticated user name, got false", t) { assertTrue(usr == "me", fmt.Sprintf("expected user name to be 'me', got '%s'", usr), t) } w.Header().Set("Content-Type", "text/plain") w.Write([]byte(usr.(string))) }), func(u, pwd string) (interface{}, bool) { if u == "me" && pwd == "you" { return u + pwd, true } return nil, false }, ""), nil) s := httptest.NewServer(h) defer s.Close() req, err := http.NewRequest("GET", "http://me:you@"+s.URL[7:], nil) if err != nil { panic(err) } req.Header.Set("Accept-Encoding", "gzip") res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } assertStatus(http.StatusOK, res.StatusCode, t) assertGzippedBody([]byte("me"), res, t) }