Artificial delay for testing

This commit is contained in:
breel
2020-07-31 22:07:54 -06:00
parent 8444156866
commit e706548f55
4 changed files with 50 additions and 1 deletions

View File

@@ -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
}

View File

@@ -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)
}
}