Browse Source

[Issue #1672] Added Request retryCount property to support RequestRetrier.

By adding the retryCount to the Request, the RequestRetrier protocol can use the retryCount to determine whether to continue to retry the Request.
Christian Noon 9 years ago
parent
commit
b98fe26cb8
3 changed files with 10 additions and 3 deletions
  1. 3 0
      Source/Request.swift
  2. 1 0
      Source/SessionManager.swift
  3. 6 3
      Tests/SessionManagerTests.swift

+ 3 - 0
Source/Request.swift

@@ -110,6 +110,9 @@ open class Request {
     /// The response received from the server, if any.
     /// The response received from the server, if any.
     open var response: HTTPURLResponse? { return task?.response as? HTTPURLResponse }
     open var response: HTTPURLResponse? { return task?.response as? HTTPURLResponse }
 
 
+    /// The number of times the request has been retried.
+    open internal(set) var retryCount: UInt = 0
+
     let originalTask: TaskConvertible?
     let originalTask: TaskConvertible?
 
 
     var startTime: CFAbsoluteTime?
     var startTime: CFAbsoluteTime?

+ 1 - 0
Source/SessionManager.swift

@@ -769,6 +769,7 @@ open class SessionManager {
 
 
             request.delegate.task = task // resets all task delegate data
             request.delegate.task = task // resets all task delegate data
 
 
+            request.retryCount += 1
             request.startTime = CFAbsoluteTimeGetCurrent()
             request.startTime = CFAbsoluteTimeGetCurrent()
             request.endTime = nil
             request.endTime = nil
 
 

+ 6 - 3
Tests/SessionManagerTests.swift

@@ -562,7 +562,7 @@ class SessionManagerTestCase: BaseTestCase {
         var response: DataResponse<Any>?
         var response: DataResponse<Any>?
 
 
         // When
         // When
-        sessionManager.request("https://httpbin.org/basic-auth/user/password")
+        let request = sessionManager.request("https://httpbin.org/basic-auth/user/password")
             .validate()
             .validate()
             .responseJSON { jsonResponse in
             .responseJSON { jsonResponse in
                 response = jsonResponse
                 response = jsonResponse
@@ -574,6 +574,7 @@ class SessionManagerTestCase: BaseTestCase {
         // Then
         // Then
         XCTAssertEqual(handler.adaptedCount, 2)
         XCTAssertEqual(handler.adaptedCount, 2)
         XCTAssertEqual(handler.retryCount, 2)
         XCTAssertEqual(handler.retryCount, 2)
+        XCTAssertEqual(request.retryCount, 1)
         XCTAssertEqual(response?.result.isSuccess, false)
         XCTAssertEqual(response?.result.isSuccess, false)
     }
     }
 
 
@@ -590,7 +591,7 @@ class SessionManagerTestCase: BaseTestCase {
         var response: DataResponse<Any>?
         var response: DataResponse<Any>?
 
 
         // When
         // When
-        sessionManager.request("https://httpbin.org/basic-auth/user/password")
+        let request = sessionManager.request("https://httpbin.org/basic-auth/user/password")
             .validate()
             .validate()
             .responseJSON { jsonResponse in
             .responseJSON { jsonResponse in
                 response = jsonResponse
                 response = jsonResponse
@@ -602,6 +603,7 @@ class SessionManagerTestCase: BaseTestCase {
         // Then
         // Then
         XCTAssertEqual(handler.adaptedCount, 2)
         XCTAssertEqual(handler.adaptedCount, 2)
         XCTAssertEqual(handler.retryCount, 1)
         XCTAssertEqual(handler.retryCount, 1)
+        XCTAssertEqual(request.retryCount, 1)
         XCTAssertEqual(response?.result.isSuccess, true)
         XCTAssertEqual(response?.result.isSuccess, true)
     }
     }
 
 
@@ -618,7 +620,7 @@ class SessionManagerTestCase: BaseTestCase {
         var response: DataResponse<Any>?
         var response: DataResponse<Any>?
 
 
         // When
         // When
-        sessionManager.request("https://httpbin.org/basic-auth/user/password")
+        let request = sessionManager.request("https://httpbin.org/basic-auth/user/password")
             .validate()
             .validate()
             .responseJSON { jsonResponse in
             .responseJSON { jsonResponse in
                 response = jsonResponse
                 response = jsonResponse
@@ -630,6 +632,7 @@ class SessionManagerTestCase: BaseTestCase {
         // Then
         // Then
         XCTAssertEqual(handler.adaptedCount, 1)
         XCTAssertEqual(handler.adaptedCount, 1)
         XCTAssertEqual(handler.retryCount, 1)
         XCTAssertEqual(handler.retryCount, 1)
+        XCTAssertEqual(request.retryCount, 0)
         XCTAssertEqual(response?.result.isSuccess, false)
         XCTAssertEqual(response?.result.isSuccess, false)
 
 
         if let error = response?.result.error as? AFError {
         if let error = response?.result.error as? AFError {