Files
narco/logger_test.go

61 lines
1.3 KiB
Go

package narco
import (
"bytes"
"fmt"
"log"
"net/http"
"net/http/httptest"
. "gopkg.in/check.v1"
)
type LogSuite struct {
*NarcoSuite
l *Logger
buffer bytes.Buffer
}
var _ = Suite(&LogSuite{NarcoSuite: NewNarcoSuite()})
func (s *LogSuite) SetUpSuite(c *C) {
s.l = NewLogger()
s.l.Logger = log.New(&s.buffer, "[narco] ", log.LstdFlags)
s.chain = s.chain.Append(s.l.Wrap())
c.Assert(s.chain, NotNil)
}
func (s *LogSuite) SetUpTest(c *C) {
s.buffer.Reset()
}
func (s *LogSuite) TestLogFormat(c *C) {
rec := httptest.NewRecorder()
req, err := http.NewRequest("GET", "http://"+httptest.DefaultRemoteAddr+"/", nil)
req.RemoteAddr = "foo"
c.Assert(err, IsNil, Commentf("Got error: %s", err))
data := map[string]http.HandlerFunc{
`\[narco\] .* Requested GET on / from foo \(User-Agent: \<unknown\>\)
\[narco\] .* returned 200: OK, size: 1B in .*
`: func(rw http.ResponseWriter, req *http.Request) {
fmt.Fprintf(rw, req.URL.Path)
},
`\[narco\] .* Requested GET on / from foo \(User-Agent: \<unknown\>\)
\[narco\] .* returned 404: Not Found, size: 10B in .*
`: func(rw http.ResponseWriter, req *http.Request) {
http.Error(rw, "foo error", http.StatusNotFound)
},
}
for matchString, fn := range data {
s.buffer.Reset()
s.ServeHTTP(rec, req, fn)
c.Assert(s.buffer.String(), Matches, matchString)
}
}