Skip to content

Commit

Permalink
add request data for uploading task
Browse files Browse the repository at this point in the history
  • Loading branch information
vfadc committed Jun 24, 2024
1 parent b16e53a commit 36aee48
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 0 deletions.
56 changes: 56 additions & 0 deletions Example/SBTUITestTunnel_Tests/MonitorTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,62 @@ class MonitorTests: XCTestCase {
XCTAssert(app.monitorRequestRemoveAll())
}

func testMonitorUploadRequestWithHTTPBodyShouldHaveRequestData() {
app.monitorRequests(matching: SBTRequestMatch(url: "httpbin.org", method: "POST"))

let largeBody = String(repeating: "a", count: 200)

_ = request.uploadTaskNetwork(urlString: "https://httpbin.org/post", data: largeBody.data(using: .utf8))

let requests = app.monitoredRequestsFlushAll()
XCTAssertEqual(requests.count, 1)
print(requests.map(\.debugDescription))

for request in requests {
guard let httpBody = request.requestData else {
XCTFail("Missing http body")
continue
}

XCTAssertEqual(String(data: httpBody, encoding: .utf8), largeBody)

XCTAssert((request.responseString()!).contains("httpbin.org"))
XCTAssert(request.timestamp > 0.0)
XCTAssert(request.requestTime > 0.0)
}

XCTAssert(app.stubRequestsRemoveAll())
XCTAssert(app.monitorRequestRemoveAll())
}

func testMonitorUploadRequestWithLargeHTTPBodyShouldHaveRequestData() {
app.monitorRequests(matching: SBTRequestMatch(url: "httpbin.org", method: "POST"))

let largeBody = String(repeating: "a", count: 20000)

_ = request.uploadTaskNetwork(urlString: "https://httpbin.org/post", data: largeBody.data(using: .utf8))

let requests = app.monitoredRequestsFlushAll()
XCTAssertEqual(requests.count, 1)
print(requests.map(\.debugDescription))

for request in requests {
guard let httpBody = request.requestData else {
XCTFail("Missing http body")
continue
}

XCTAssertEqual(String(data: httpBody, encoding: .utf8), largeBody)

XCTAssert((request.responseString()!).contains("httpbin.org"))
XCTAssert(request.timestamp > 0.0)
XCTAssert(request.requestTime > 0.0)
}

XCTAssert(app.stubRequestsRemoveAll())
XCTAssert(app.monitorRequestRemoveAll())
}

func testSyncWaitForMonitoredRequestsDoesNotTimeout() {
app.monitorRequests(matching: SBTRequestMatch(url: "httpbin.org"))

Expand Down
2 changes: 2 additions & 0 deletions Sources/SBTUITestTunnelCommon/SBTMonitoredNetworkRequest.m
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ - (instancetype)initWithCoder:(NSCoder *)decoder
self.responseData = [decoder decodeObjectOfClass:[NSData class] forKey:NSStringFromSelector(@selector(responseData))];
self.isStubbed = [decoder decodeBoolForKey:NSStringFromSelector(@selector(isStubbed))];
self.isRewritten = [decoder decodeBoolForKey:NSStringFromSelector(@selector(isRewritten))];
self.requestData = [decoder decodeObjectOfClass:[NSData class] forKey:NSStringFromSelector(@selector(requestData))];
}

return self;
Expand All @@ -57,6 +58,7 @@ - (void)encodeWithCoder:(NSCoder *)encoder

[encoder encodeObject:self.response forKey:NSStringFromSelector(@selector(response))];
[encoder encodeObject:self.responseData forKey:NSStringFromSelector(@selector(responseData))];
[encoder encodeObject:self.requestData forKey:NSStringFromSelector(@selector(requestData))];
[encoder encodeBool:self.isStubbed forKey:NSStringFromSelector(@selector(isStubbed))];
[encoder encodeBool:self.isRewritten forKey:NSStringFromSelector(@selector(isRewritten))];
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
@property (nullable, nonatomic, strong) NSHTTPURLResponse *response;

@property (nullable, nonatomic, strong) NSData *responseData;
@property (nullable, nonatomic, strong) NSData *requestData;

@property (nonatomic, assign) BOOL isStubbed;
@property (nonatomic, assign) BOOL isRewritten;
Expand Down
8 changes: 8 additions & 0 deletions Sources/SBTUITestTunnelServer/private/SBTProxyURLProtocol.m
Original file line number Diff line number Diff line change
Expand Up @@ -432,6 +432,10 @@ - (void)startLoading
monitoredRequest.isStubbed = YES;
monitoredRequest.isRewritten = NO;

NSData *bodyData = ([monitoredRequest.originalRequest sbt_isUploadTaskRequest]) ? [monitoredRequest.originalRequest sbt_uploadHTTPBody] : monitoredRequest.originalRequest.HTTPBody;

monitoredRequest.requestData = bodyData;

dispatch_sync([SBTProxyURLProtocol sharedInstance].monitoredRequestsSyncQueue, ^{
[[SBTProxyURLProtocol sharedInstance].monitoredRequests addObject:monitoredRequest];
});
Expand Down Expand Up @@ -603,6 +607,10 @@ - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didComp
monitoredRequest.isStubbed = NO;
monitoredRequest.isRewritten = isRequestRewritten;

NSData *bodyData = ([monitoredRequest.originalRequest sbt_isUploadTaskRequest]) ? [monitoredRequest.originalRequest sbt_uploadHTTPBody] : monitoredRequest.originalRequest.HTTPBody;

monitoredRequest.requestData = bodyData;

dispatch_sync([SBTProxyURLProtocol sharedInstance].monitoredRequestsSyncQueue, ^{
[[SBTProxyURLProtocol sharedInstance].monitoredRequests addObject:monitoredRequest];
});
Expand Down

0 comments on commit 36aee48

Please sign in to comment.