Merge pull request #374 from prometheus/beorn7/http
Fix more interface upgrade bugs
This commit is contained in:
commit
9bb6ab929d
|
@ -102,10 +102,10 @@ func init() {
|
|||
return d
|
||||
}
|
||||
pickDelegator[closeNotifier] = func(d *responseWriterDelegator) delegator { // 1
|
||||
return closeNotifierDelegator{d}
|
||||
return &closeNotifierDelegator{d}
|
||||
}
|
||||
pickDelegator[flusher] = func(d *responseWriterDelegator) delegator { // 2
|
||||
return flusherDelegator{d}
|
||||
return &flusherDelegator{d}
|
||||
}
|
||||
pickDelegator[flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 3
|
||||
return struct {
|
||||
|
|
|
@ -28,7 +28,7 @@ func (d *pusherDelegator) Push(target string, opts *http.PushOptions) error {
|
|||
|
||||
func init() {
|
||||
pickDelegator[pusher] = func(d *responseWriterDelegator) delegator { // 16
|
||||
return pusherDelegator{d}
|
||||
return &pusherDelegator{d}
|
||||
}
|
||||
pickDelegator[pusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 17
|
||||
return struct {
|
||||
|
|
|
@ -281,6 +281,16 @@ func (t *testResponseWriter) ReadFrom(io.Reader) (int64, error) {
|
|||
return 0, nil
|
||||
}
|
||||
|
||||
// testFlusher is an http.ResponseWriter that also implements http.Flusher.
|
||||
type testFlusher struct {
|
||||
flushCalled bool
|
||||
}
|
||||
|
||||
func (t *testFlusher) Header() http.Header { return nil }
|
||||
func (t *testFlusher) Write([]byte) (int, error) { return 0, nil }
|
||||
func (t *testFlusher) WriteHeader(int) {}
|
||||
func (t *testFlusher) Flush() { t.flushCalled = true }
|
||||
|
||||
func TestInterfaceUpgrade(t *testing.T) {
|
||||
w := &testResponseWriter{}
|
||||
d := newDelegator(w, nil)
|
||||
|
@ -299,6 +309,22 @@ func TestInterfaceUpgrade(t *testing.T) {
|
|||
if _, ok := d.(http.Hijacker); ok {
|
||||
t.Error("delegator unexpectedly implements http.Hijacker")
|
||||
}
|
||||
|
||||
f := &testFlusher{}
|
||||
d = newDelegator(f, nil)
|
||||
if _, ok := d.(http.CloseNotifier); ok {
|
||||
t.Error("delegator unexpectedly implements http.CloseNotifier")
|
||||
}
|
||||
d.(http.Flusher).Flush()
|
||||
if !w.flushCalled {
|
||||
t.Error("Flush not called")
|
||||
}
|
||||
if _, ok := d.(io.ReaderFrom); ok {
|
||||
t.Error("delegator unexpectedly implements io.ReaderFrom")
|
||||
}
|
||||
if _, ok := d.(http.Hijacker); ok {
|
||||
t.Error("delegator unexpectedly implements http.Hijacker")
|
||||
}
|
||||
}
|
||||
|
||||
func ExampleInstrumentHandlerDuration() {
|
||||
|
|
Loading…
Reference in New Issue