From b18da29b3841066c1860ff615ffe207ca533043f Mon Sep 17 00:00:00 2001 From: Tim Hall Date: Sun, 29 Mar 2015 13:27:16 -0400 Subject: [PATCH] Handle resolve error, 208615, as timeout --- specs/Specs_WebClient.bas | 38 ++++++++++++++++++++++++++++++++++++++ src/WebClient.cls | 4 +++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/specs/Specs_WebClient.bas b/specs/Specs_WebClient.bas index 52ebd6ea..baa42ac2 100644 --- a/specs/Specs_WebClient.bas +++ b/specs/Specs_WebClient.bas @@ -294,3 +294,41 @@ Public Function Specs() As SpecSuite InlineRunner.RunSuite Specs End Function +Public Function OfflineSpecs() As SpecSuite + ' Disconnect from the internet before running these specs + + Set OfflineSpecs = New SpecSuite + OfflineSpecs.Description = "WebClient - Offline" + + Dim Client As New WebClient + Dim Request As WebRequest + Dim Response As WebResponse + + Client.BaseUrl = HttpbinBaseUrl + + With OfflineSpecs.It("should handle resolve errors as timeout") + Client.TimeoutMs = 500 + + Set Request = New WebRequest + Request.Resource = "/get" + + Set Response = Client.Execute(Request) + .Expect(Response.StatusCode).ToEqual 408 + .Expect(Response.StatusDescription).ToEqual "Request Timeout" + End With + + With OfflineSpecs.It("should not crash with auto-proxy resolve error") + Client.EnableAutoProxy = True + Client.TimeoutMs = 500 + + Set Request = New WebRequest + Request.Resource = "/get" + + Set Response = Client.Execute(Request) + .Expect(Response.StatusCode).ToEqual 408 + .Expect(Response.StatusDescription).ToEqual "Request Timeout" + End With + + InlineRunner.RunSuite OfflineSpecs +End Function + diff --git a/src/WebClient.cls b/src/WebClient.cls index ad12e2f6..e1bb6f41 100644 --- a/src/WebClient.cls +++ b/src/WebClient.cls @@ -262,6 +262,8 @@ Public Function Execute(Request As WebRequest) As WebResponse Case 5, 6, 7 ' 5 = CURLE_COULDNT_RESOLVE_PROXY ' 6 = CURLE_COULDNT_RESOLVE_HOST + Err.Raise 208615 + vbObjectError, "WebClient.Execute", "The server name or address could not be resolved" + Case 7 ' 7 = CURLE_COULDNT_CONNECT Err.Raise 208637 + vbObjectError, "WebClient.Execute", "A connection with the server could not be established" Case 12, 28 @@ -304,7 +306,7 @@ web_ErrorHandling: Dim web_ErrorDescription As String Select Case Err.Number - vbObjectError - Case 208610, 208637 + Case 208610, 208615, 208637 ' Return 408 web_Response.StatusCode = WebStatusCode.RequestTimeout web_Response.StatusDescription = "Request Timeout"