File tree Expand file tree Collapse file tree
STNetTaskQueueTest.xcodeproj Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1212
1313@property (nonatomic , strong ) NSError *error;
1414@property (nonatomic , assign ) BOOL pending;
15+ @property (nonatomic , assign ) NSUInteger retryCount;
1516
1617- (NSString *)uri ;
1718- (void )didResponse : (NSObject *)response ;
1819- (void )didFail ;
20+ - (void )didRetry ;
21+
22+ - (NSUInteger )maxRetryCount ;
23+ - (BOOL )shouldRetryForError : (NSError *)error ;
1924
2025@end
Original file line number Diff line number Diff line change @@ -25,4 +25,19 @@ - (void)didFail
2525
2626}
2727
28+ - (void )didRetry
29+ {
30+
31+ }
32+
33+ - (NSUInteger )maxRetryCount
34+ {
35+ return 0 ;
36+ }
37+
38+ - (BOOL )shouldRetryForError : (NSError *)error
39+ {
40+ return YES ;
41+ }
42+
2843@end
Original file line number Diff line number Diff line change @@ -96,6 +96,17 @@ - (void)cancelTask:(STNetTask *)task
9696 }];
9797}
9898
99+ - (BOOL )retryTask : (STNetTask *)task error : (NSError *)error
100+ {
101+ if ([task shouldRetryForError: error] && task.retryCount < task.maxRetryCount ) {
102+ task.retryCount ++;
103+ [task didRetry ];
104+ [self addTask: task];
105+ return YES ;
106+ }
107+ return NO ;
108+ }
109+
99110- (void )didResponse : (NSObject *)response taskId : (int )taskId
100111{
101112 __weak STNetTaskQueue *weakSelf = self;
@@ -118,7 +129,13 @@ - (void)didResponse:(NSObject *)response taskId:(int)taskId
118129 NSError *error = [NSError errorWithDomain: STNetTaskQueueErrorUnknown
119130 code: -1
120131 userInfo: @{ @" msg" : @" Unknown Error" }];
132+
133+ if ([self retryTask: task error: error]) {
134+ return ;
135+ }
136+
121137 task.error = error;
138+ [task didFail ];
122139 }
123140
124141 [weakSelf netTaskDidEnd: task];
@@ -142,6 +159,10 @@ - (void)didFailWithError:(NSError *)error taskId:(int)taskId
142159 [weakSelf.tasks removeObjectForKey: @(taskId)];
143160 }
144161
162+ if ([self retryTask: task error: error]) {
163+ return ;
164+ }
165+
145166 task.error = error;
146167 [task didFail ];
147168 [weakSelf netTaskDidEnd: task];
Load Diff Large diffs are not rendered by default.
Original file line number Diff line number Diff line change 1+ <?xml version =" 1.0" encoding =" UTF-8" ?>
2+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+ <plist version =" 1.0" >
4+ <dict >
5+ <key >CFBundleDevelopmentRegion </key >
6+ <string >en </string >
7+ <key >CFBundleExecutable </key >
8+ <string >$(EXECUTABLE_NAME) </string >
9+ <key >CFBundleIdentifier </key >
10+ <string >me.sth4.$(PRODUCT_NAME:rfc1034identifier) </string >
11+ <key >CFBundleInfoDictionaryVersion </key >
12+ <string >6.0 </string >
13+ <key >CFBundleName </key >
14+ <string >$(PRODUCT_NAME) </string >
15+ <key >CFBundlePackageType </key >
16+ <string >BNDL </string >
17+ <key >CFBundleShortVersionString </key >
18+ <string >1.0 </string >
19+ <key >CFBundleSignature </key >
20+ <string >???? </string >
21+ <key >CFBundleVersion </key >
22+ <string >1 </string >
23+ </dict >
24+ </plist >
Original file line number Diff line number Diff line change 1+ //
2+ // STNetTaskQueueTest.m
3+ // STNetTaskQueueTest
4+ //
5+ // Created by Kevin Lin on 14/7/15.
6+ //
7+ //
8+
9+ #import < UIKit/UIKit.h>
10+ #import < XCTest/XCTest.h>
11+ #import " STHTTPNetTaskQueueHandler.h"
12+ #import " STTestRetryNetTask.h"
13+
14+ @interface STNetTaskQueueTest : XCTestCase <STNetTaskDelegate>
15+
16+ @end
17+
18+ @implementation STNetTaskQueueTest
19+ {
20+ XCTestExpectation *_expectation;
21+ }
22+
23+ - (void )setUp
24+ {
25+ [super setUp ];
26+
27+ STHTTPNetTaskQueueHandler *httpHandler = [[STHTTPNetTaskQueueHandler alloc ] initWithBaseURL: [NSURL URLWithString: @" https://www.google.com" ]];
28+ [STNetTaskQueue sharedQueue ].handler = httpHandler;
29+ }
30+
31+ - (void )tearDown
32+ {
33+ [super tearDown ];
34+ }
35+
36+ - (void )testRetryNetTask
37+ {
38+ _expectation = [self expectationWithDescription: @" testRetryNetTask" ];
39+
40+ STTestRetryNetTask *testRetryTask = [STTestRetryNetTask new ];
41+ [[STNetTaskQueue sharedQueue ] addTaskDelegate: self uri: testRetryTask.uri];
42+ [[STNetTaskQueue sharedQueue ] addTask: testRetryTask];
43+
44+ [self waitForExpectationsWithTimeout: 10 handler: nil ];
45+ }
46+
47+ - (void )netTaskDidEnd : (STNetTask *)task
48+ {
49+ if ([task isKindOfClass: [STTestRetryNetTask class ]]) {
50+ [_expectation fulfill ];
51+ if (task.retryCount != task.maxRetryCount ) {
52+ XCTFail (@" testRetryNetTask failed" );
53+ }
54+ }
55+ }
56+
57+ @end
Original file line number Diff line number Diff line change 1+ //
2+ // STTestRetryNetTask.h
3+ // STNetTaskQueueTest
4+ //
5+ // Created by Kevin Lin on 14/7/15.
6+ //
7+ //
8+
9+ #import " STHTTPNetTask.h"
10+
11+ @interface STTestRetryNetTask : STHTTPNetTask
12+
13+ @end
Original file line number Diff line number Diff line change 1+ //
2+ // STTestRetryNetTask.m
3+ // STNetTaskQueueTest
4+ //
5+ // Created by Kevin Lin on 14/7/15.
6+ //
7+ //
8+
9+ #import " STTestRetryNetTask.h"
10+
11+ @implementation STTestRetryNetTask
12+
13+ - (NSString *)uri
14+ {
15+ return @" nonexist_uri" ;
16+ }
17+
18+ - (void )didRetry
19+ {
20+ NSLog (@" retryCount: %ld " , self.retryCount );
21+ }
22+
23+ - (NSUInteger )maxRetryCount
24+ {
25+ return 5 ;
26+ }
27+
28+ @end
You can’t perform that action at this time.
0 commit comments