chore: initial commit
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
type observedDeadlineWriter struct {
|
||||
*httptest.ResponseRecorder
|
||||
writes, reads int
|
||||
deadline time.Time
|
||||
}
|
||||
|
||||
func (w *observedDeadlineWriter) SetWriteDeadline(d time.Time) error {
|
||||
w.writes++
|
||||
w.deadline = d
|
||||
return nil
|
||||
}
|
||||
func (w *observedDeadlineWriter) SetReadDeadline(d time.Time) error { w.reads++; return nil }
|
||||
|
||||
func TestResponseWriteDeadlines(t *testing.T) {
|
||||
raw := &observedDeadlineWriter{ResponseRecorder: httptest.NewRecorder()}
|
||||
w := &deadlineWriter{ResponseWriter: raw}
|
||||
w.WriteHeader(200)
|
||||
if raw.writes != 1 || !raw.deadline.After(time.Now()) {
|
||||
t.Fatal("headers lack deadline")
|
||||
}
|
||||
if _, err := w.Write([]byte("body")); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := w.FlushError(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if raw.writes != 3 {
|
||||
t.Fatal("write/flush must refresh deadline", raw.writes)
|
||||
}
|
||||
if err := http.NewResponseController(w).SetReadDeadline(time.Time{}); err != nil || raw.reads != 1 {
|
||||
t.Fatal("wrapper must preserve read deadline control", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNonStreamResponseHasWriteDeadline(t *testing.T) {
|
||||
s := testServer(t)
|
||||
raw := &observedDeadlineWriter{ResponseRecorder: httptest.NewRecorder()}
|
||||
s.ServeHTTP(raw, httptest.NewRequest("GET", "/admin/api/session", nil))
|
||||
if raw.Code != 200 || raw.writes == 0 || !raw.deadline.After(time.Now()) {
|
||||
t.Fatal("nonstream response lacks write deadline")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user