|
5 | 5 | "context"
|
6 | 6 | "encoding/json"
|
7 | 7 | "fmt"
|
| 8 | + "net" |
8 | 9 | "net/http"
|
9 | 10 | "net/http/httptest"
|
10 | 11 | "net/url"
|
@@ -717,6 +718,52 @@ func (suite *RequestSuite) TestCanRetryReceivingRequestECONNRESET() {
|
717 | 718 | suite.Require().NoError(err, "Failed reading response content, err=%+v", err)
|
718 | 719 | }
|
719 | 720 |
|
| 721 | +func (suite *RequestSuite) TestCanRetryReceivingRequestECONNREFUSED() { |
| 722 | + // Start the client in a separate goroutine |
| 723 | + go func() { |
| 724 | + serverURL, _ := url.Parse("http://localhost:1234") |
| 725 | + response, err := request.Send(&request.Options{ |
| 726 | + URL: serverURL, |
| 727 | + Attempts: 2, |
| 728 | + Timeout: 1 * time.Second, |
| 729 | + Logger: suite.Logger, |
| 730 | + }, nil) |
| 731 | + suite.Require().NoError(err, "Failed reading response content, err=%+v", err) |
| 732 | + suite.Assert().Equal("body", string(response.Data)) |
| 733 | + }() |
| 734 | + |
| 735 | + listener, err := net.Listen("tcp", ":1234") |
| 736 | + suite.Require().NoError(err, "Failed starting the listener") |
| 737 | + listener.Close() // that will cause the ECONNREFUSED |
| 738 | + time.Sleep(2 * time.Second) |
| 739 | + |
| 740 | + listener, err = net.Listen("tcp", ":1234") |
| 741 | + suite.Require().NoError(err, "Failed starting the listener") |
| 742 | + defer listener.Close() |
| 743 | + |
| 744 | + // accept the connection |
| 745 | + conn, err := listener.Accept() |
| 746 | + suite.Require().NoError(err, "Failed accepting the connection") |
| 747 | + defer conn.Close() |
| 748 | + |
| 749 | + _, _ = conn.Write([]byte("HTTP/1.1 200 OK\r\nContent-Length: 4\r\n\r\nbody")) |
| 750 | + time.Sleep(1 * time.Second) |
| 751 | +} |
| 752 | + |
| 753 | +func (suite *RequestSuite) TestCanRetryReceivingRequestECONNABORTED() { |
| 754 | + server := CreateEConnAbortedTestServer(suite, 3) |
| 755 | + defer server.Close() |
| 756 | + |
| 757 | + serverURL, _ := url.Parse(server.URL) |
| 758 | + _, err := request.Send(&request.Options{ |
| 759 | + URL: serverURL, |
| 760 | + Attempts: 5, |
| 761 | + Timeout: 1 * time.Second, |
| 762 | + Logger: suite.Logger, |
| 763 | + }, nil) |
| 764 | + suite.Require().NoError(err, "Failed reading response content") |
| 765 | +} |
| 766 | + |
720 | 767 | func (suite *RequestSuite) TestCanRetryReceivingRequestEOF() {
|
721 | 768 | serverURL, _ := url.Parse(suite.Server.URL)
|
722 | 769 | serverURL, _ = serverURL.Parse("/retry_eof")
|
|
0 commit comments