EMASCurlTests/EMASCurlTimeoutTest.m (50 lines of code) (raw):

// // EMASCurlTimeoutTest.m // EMASCurlTests // // Created by xuyecan on 2024/12/25. // #import <Foundation/Foundation.h> #import <XCTest/XCTest.h> #import <EMASCurl/EMASCurl.h> #import "EMASCurlTestConstants.h" static NSURLSession *session; @interface EMASCurlTimeoutTest : XCTestCase @end @implementation EMASCurlTimeoutTest + (void)setUp { [super setUp]; [EMASCurlProtocol setDebugLogEnabled:YES]; NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; config.HTTPShouldUsePipelining = YES; config.HTTPShouldSetCookies = YES; [EMASCurlProtocol installIntoSessionConfiguration:config]; session = [NSURLSession sessionWithConfiguration:config delegate:nil delegateQueue:nil]; } - (void)testConnectTimeout { NSURL *url = [NSURL URLWithString:TIMEOUT_TEST_ENDPOINT]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; [EMASCurlProtocol setConnectTimeoutIntervalForRequest:request connectTimeoutInterval:1]; dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); __block NSError *receivedError = nil; NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { receivedError = error; dispatch_semaphore_signal(semaphore); }]; [task resume]; XCTAssertEqual(dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC)), 0, @"Request timed out"); XCTAssertNotNil(receivedError, @"Expected timeout error"); XCTAssertEqual(receivedError.code, 56, @"Expected timeout error code"); } - (void)testRequestTimeout { NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", HTTP11_ENDPOINT, PATH_TIMEOUT_REQUEST]]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; request.timeoutInterval = 1; dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); __block NSError *receivedError = nil; NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { receivedError = error; dispatch_semaphore_signal(semaphore); }]; [task resume]; XCTAssertEqual(dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC)), 0, @"Request timed out"); XCTAssertNotNil(receivedError, @"Expected timeout error"); XCTAssertEqual(receivedError.code, -1001, @"Expected timeout error code"); } @end