Ensure timeout test handlers don't complete before timing out.
TestTimeoutRequestHeaders and TestTimeoutWithLogging are designed to catch data races on request headers and include an HTTP handler that triggers timeout then repeatedly mutates request headers. Sometimes, the request header mutation loop could complete before the timeout filter observed the timeout, resulting in a test failure. The mutation loop now runs until the test ends. Kubernetes-commit: e5a15c87e9d83ee19ba93aa356dfbb7b33a013c8
This commit is contained in:
parent
0d8046157b
commit
302a5c27a6
|
@ -272,6 +272,8 @@ func TestTimeoutRequestHeaders(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
testDone := make(chan struct{})
|
||||
defer close(testDone)
|
||||
ts := httptest.NewServer(
|
||||
withDeadline(
|
||||
WithTimeoutForNonLongRunningRequests(
|
||||
|
@ -280,8 +282,13 @@ func TestTimeoutRequestHeaders(t *testing.T) {
|
|||
cancel()
|
||||
// mutate request Headers
|
||||
// Authorization filter does it for example
|
||||
for j := 0; j < 10000; j++ {
|
||||
req.Header.Set("Test", "post")
|
||||
for {
|
||||
select {
|
||||
case <-testDone:
|
||||
return
|
||||
default:
|
||||
req.Header.Set("Test", "post")
|
||||
}
|
||||
}
|
||||
}),
|
||||
func(r *http.Request, requestInfo *request.RequestInfo) bool {
|
||||
|
@ -301,8 +308,8 @@ func TestTimeoutRequestHeaders(t *testing.T) {
|
|||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if res.StatusCode != http.StatusGatewayTimeout {
|
||||
t.Errorf("got res.StatusCde %d; expected %d", res.StatusCode, http.StatusServiceUnavailable)
|
||||
if actual, expected := res.StatusCode, http.StatusGatewayTimeout; actual != expected {
|
||||
t.Errorf("got status code %d; expected %d", actual, expected)
|
||||
}
|
||||
res.Body.Close()
|
||||
}
|
||||
|
@ -323,6 +330,8 @@ func TestTimeoutWithLogging(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
testDone := make(chan struct{})
|
||||
defer close(testDone)
|
||||
ts := httptest.NewServer(
|
||||
WithHTTPLogging(
|
||||
withDeadline(
|
||||
|
@ -332,8 +341,13 @@ func TestTimeoutWithLogging(t *testing.T) {
|
|||
cancel()
|
||||
// mutate request Headers
|
||||
// Authorization filter does it for example
|
||||
for j := 0; j < 10000; j++ {
|
||||
req.Header.Set("Test", "post")
|
||||
for {
|
||||
select {
|
||||
case <-testDone:
|
||||
return
|
||||
default:
|
||||
req.Header.Set("Test", "post")
|
||||
}
|
||||
}
|
||||
}),
|
||||
func(r *http.Request, requestInfo *request.RequestInfo) bool {
|
||||
|
@ -354,8 +368,8 @@ func TestTimeoutWithLogging(t *testing.T) {
|
|||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if res.StatusCode != http.StatusGatewayTimeout {
|
||||
t.Errorf("got res.StatusCode %d; expected %d", res.StatusCode, http.StatusServiceUnavailable)
|
||||
if actual, expected := res.StatusCode, http.StatusGatewayTimeout; actual != expected {
|
||||
t.Errorf("got status code %d; expected %d", actual, expected)
|
||||
}
|
||||
res.Body.Close()
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue