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
|
return d
|
||||||
}
|
}
|
||||||
pickDelegator[closeNotifier] = func(d *responseWriterDelegator) delegator { // 1
|
pickDelegator[closeNotifier] = func(d *responseWriterDelegator) delegator { // 1
|
||||||
return closeNotifierDelegator{d}
|
return &closeNotifierDelegator{d}
|
||||||
}
|
}
|
||||||
pickDelegator[flusher] = func(d *responseWriterDelegator) delegator { // 2
|
pickDelegator[flusher] = func(d *responseWriterDelegator) delegator { // 2
|
||||||
return flusherDelegator{d}
|
return &flusherDelegator{d}
|
||||||
}
|
}
|
||||||
pickDelegator[flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 3
|
pickDelegator[flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 3
|
||||||
return struct {
|
return struct {
|
||||||
|
|
|
@ -28,7 +28,7 @@ func (d *pusherDelegator) Push(target string, opts *http.PushOptions) error {
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
pickDelegator[pusher] = func(d *responseWriterDelegator) delegator { // 16
|
pickDelegator[pusher] = func(d *responseWriterDelegator) delegator { // 16
|
||||||
return pusherDelegator{d}
|
return &pusherDelegator{d}
|
||||||
}
|
}
|
||||||
pickDelegator[pusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 17
|
pickDelegator[pusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 17
|
||||||
return struct {
|
return struct {
|
||||||
|
|
|
@ -281,6 +281,16 @@ func (t *testResponseWriter) ReadFrom(io.Reader) (int64, error) {
|
||||||
return 0, nil
|
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) {
|
func TestInterfaceUpgrade(t *testing.T) {
|
||||||
w := &testResponseWriter{}
|
w := &testResponseWriter{}
|
||||||
d := newDelegator(w, nil)
|
d := newDelegator(w, nil)
|
||||||
|
@ -299,6 +309,22 @@ func TestInterfaceUpgrade(t *testing.T) {
|
||||||
if _, ok := d.(http.Hijacker); ok {
|
if _, ok := d.(http.Hijacker); ok {
|
||||||
t.Error("delegator unexpectedly implements http.Hijacker")
|
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() {
|
func ExampleInstrumentHandlerDuration() {
|
||||||
|
|
Loading…
Reference in New Issue