EMASCurlTests/EMASCurlCookieTest.m (59 lines of code) (raw):
//
// EMASCurlCookieTest.m
// EMASCurlTests
//
// Created by xuyecan on 2025/2/3.
//
#import <XCTest/XCTest.h>
#import <EMASCurl/EMASCurl.h>
#import "EMASCurlTestConstants.h"
@interface EMASCurlCookieTest : XCTestCase
@property (nonatomic, strong) NSURLSession *session;
@end
@implementation EMASCurlCookieTest
- (void)setUp {
[super setUp];
[EMASCurlProtocol setDebugLogEnabled:YES];
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
[EMASCurlProtocol installIntoSessionConfiguration:config];
_session = [NSURLSession sessionWithConfiguration:config delegate:nil delegateQueue:nil];
}
- (void)tearDown {
// 清理所有 cookies
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray<NSHTTPCookie *> *cookies = [storage cookies];
for (NSHTTPCookie *cookie in cookies) {
[storage deleteCookie:cookie];
}
[super tearDown];
}
- (void)testCookiePersistence {
// 1. 首先获取 cookie
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
NSString *urlString = [NSString stringWithFormat:@"%@%@", HTTP11_ENDPOINT, PATH_COOKIE_SET];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
__block NSString *setCookieHeader = nil;
[[self.session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
XCTAssertNil(error, @"Request failed with error: %@", error);
XCTAssertNotNil(response, @"No response received");
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
XCTAssertEqual(httpResponse.statusCode, 200, @"Expected 200 status code");
NSDictionary *headers = [httpResponse allHeaderFields];
setCookieHeader = headers[@"Set-Cookie"];
XCTAssertNotNil(setCookieHeader, @"No Set-Cookie header received");
dispatch_semaphore_signal(semaphore);
}] resume];
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
// 2. 验证 cookie 是否被正确设置
NSString *verifyUrlString = [NSString stringWithFormat:@"%@%@", HTTP11_ENDPOINT, PATH_COOKIE_VERIFY];
NSURL *verifyUrl = [NSURL URLWithString:verifyUrlString];
NSMutableURLRequest *verifyRequest = [NSMutableURLRequest requestWithURL:verifyUrl];
semaphore = dispatch_semaphore_create(0);
__block BOOL cookieValid = NO;
[[self.session dataTaskWithRequest:verifyRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
XCTAssertNil(error, @"Verify request failed with error: %@", error);
XCTAssertNotNil(response, @"No response received for verify request");
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
XCTAssertEqual(httpResponse.statusCode, 200, @"Expected 200 status code for verify request");
if (data) {
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
cookieValid = [json[@"status"] isEqualToString:@"valid_cookie"];
}
dispatch_semaphore_signal(semaphore);
}] resume];
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
XCTAssertTrue(cookieValid, @"Cookie validation failed");
}
@end