Skip to content

Commit

Permalink
Merge pull request #97 from nwidger/master
Browse files Browse the repository at this point in the history
(Combined)LoggingHandler: Add Go 1.8 http.Pusher support
  • Loading branch information
kisielk committed Feb 9, 2017
2 parents 3a5767c + 602b326 commit 6d39a51
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 1 deletion.
2 changes: 1 addition & 1 deletion handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ func makeLogger(w http.ResponseWriter) loggingResponseWriter {
return logger
}

type loggingResponseWriter interface {
type commonLoggingResponseWriter interface {
http.ResponseWriter
http.Flusher
Status() int
Expand Down
21 changes: 21 additions & 0 deletions handlers_go18.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// +build go1.8

package handlers

import (
"fmt"
"net/http"
)

type loggingResponseWriter interface {
commonLoggingResponseWriter
http.Pusher
}

func (l *responseLogger) Push(target string, opts *http.PushOptions) error {
p, ok := l.w.(http.Pusher)
if !ok {
return fmt.Errorf("responseLogger does not implement http.Pusher")
}
return p.Push(target, opts)
}
34 changes: 34 additions & 0 deletions handlers_go18_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// +build go1.8

package handlers

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

func TestLoggingHandlerWithPush(t *testing.T) {
handler := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
if _, ok := w.(http.Pusher); !ok {
t.Fatalf("%T from LoggingHandler does not satisfy http.Pusher interface when built with Go >=1.8", w)
}
w.WriteHeader(200)
})

logger := LoggingHandler(ioutil.Discard, handler)
logger.ServeHTTP(httptest.NewRecorder(), newRequest("GET", "/"))
}

func TestCombinedLoggingHandlerWithPush(t *testing.T) {
handler := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
if _, ok := w.(http.Pusher); !ok {
t.Fatalf("%T from CombinedLoggingHandler does not satisfy http.Pusher interface when built with Go >=1.8", w)
}
w.WriteHeader(200)
})

logger := CombinedLoggingHandler(ioutil.Discard, handler)
logger.ServeHTTP(httptest.NewRecorder(), newRequest("GET", "/"))
}
7 changes: 7 additions & 0 deletions handlers_pre18.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// +build !go1.8

package handlers

type loggingResponseWriter interface {
commonLoggingResponseWriter
}

0 comments on commit 6d39a51

Please sign in to comment.