我正在尝试验证go-retryablehttp执行是否按照指定的配置执行重试。
验证方法是创建一个测试
创建一个可重试的客户端
创建一个新请求
使用错误处理程序创建一个新服务器
服务请求
验证重试次数。
以上是我试图在下面的代码块中捕获的内容
//function that returns 500 error
func InternalServerErrorHandler(w http.ResponseWriter, r *http.Request) {
http.Error(w, fmt.Sprintf("test_%d_body", http.StatusInternalServerError), http.StatusInternalServerError)
}
func TestCreateToolsClient(t *testing.T) {
//create a new server
ts := httptest.NewServer(http.HandlerFunc(InternalServerErrorHandler))
defer ts.Close()
//create a request
request, err := retryablehttp.NewRequest(http.MethodGet, ts.URL, nil)
if err != nil {
log.Fatal(err)
}
//create a retryable client
var options retryablehttp.Options
options.RetryWaitMin = 10 * time.Millisecond
options.RetryWaitMax = 50 * time.Millisecond
options.RetryMax = 6
options.Timeout = 60000 * time.Millisecond
retryableClient := retryablehttp.NewClient(options)
retryCount := -1
// to verify from stdout if the # of retry actually is getting counted
retryableClient.RequestLogHook = func(req *http.Request, retryNumber int) {
retryCount = retryNumber
log.Println("Retrying")
}
//execute the request
response, err := retryableClient.Do(request)
if err != nil {
return
}
//verify
require.Equal(t, http.StatusInternalServerError, response.StatusCode)
require.Equal(t, 2, retryCount)
}
我的理解是
retryableClient.Do(request)
如果有错误,每个都应该采取时间=超时
鉴于处理程序返回错误,它应该使重试尝试等于options.RetryMax = 6
次数
我尝试调试代码,结果
// Attempt the request resp, err = c.HTTPClient.Do(req.Request)
这里有 err as nil
。
不确定我做错了什么。
我在这里创建了一个围棋游乐场
翻过高山走不出你
相关分类