Artificial delay for testing
This commit is contained in:
14
view/json.go
14
view/json.go
@@ -11,6 +11,7 @@ import (
|
||||
"log"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"golang.org/x/time/rate"
|
||||
)
|
||||
@@ -60,6 +61,10 @@ func jsonHandler(g storage.RateLimitedGraph) http.Handler {
|
||||
foo := route.foo
|
||||
auth := !route.noauth
|
||||
mux.HandleFunc(route.path, func(w http.ResponseWriter, r *http.Request) {
|
||||
if err := delay(w, r); err != nil {
|
||||
http.Error(w, err.Error(), 499)
|
||||
}
|
||||
|
||||
if auth {
|
||||
if err := Auth(g, w, r); err != nil {
|
||||
return
|
||||
@@ -134,3 +139,12 @@ func version(_ storage.RateLimitedGraph, w http.ResponseWriter, _ *http.Request)
|
||||
enc.SetIndent("", " ")
|
||||
return enc.Encode(map[string]string{"version": GitCommit})
|
||||
}
|
||||
|
||||
func delay(w http.ResponseWriter, r *http.Request) error {
|
||||
select {
|
||||
case <-time.After(config.New().Delay):
|
||||
case <-r.Context().Done():
|
||||
return errors.New("client DCd")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -125,3 +125,35 @@ func TestVersion(t *testing.T) {
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestDelay(t *testing.T) {
|
||||
defer func() {
|
||||
os.Setenv("DELAY", "0ms")
|
||||
}()
|
||||
os.Args = os.Args[:1]
|
||||
os.Setenv("DELAY", "100ms")
|
||||
|
||||
r := httptest.NewRequest("GET", "/", nil)
|
||||
w := httptest.NewRecorder()
|
||||
|
||||
start := time.Now()
|
||||
if err := delay(w, r); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if since := time.Since(start); since < time.Millisecond*100 {
|
||||
t.Fatal(since)
|
||||
}
|
||||
|
||||
r = httptest.NewRequest("GET", "/", nil)
|
||||
ctx, can := context.WithCancel(r.Context())
|
||||
can()
|
||||
r = r.WithContext(ctx)
|
||||
w = httptest.NewRecorder()
|
||||
start = time.Now()
|
||||
if err := delay(w, r); err == nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if since := time.Since(start); since > time.Millisecond*99 {
|
||||
t.Fatal(since)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user