pull/10505/head
Muxi Yan 8 years ago
parent 56369ea4a2
commit e1ed771210
  1. 95
      src/objective-c/tests/InteropTests.m

@ -457,4 +457,99 @@
[self waitForExpectationsWithTimeout:TEST_TIMEOUT handler:nil];
}
- (void)testAlternateDispatchQueue {
XCTAssertNotNil(self.class.host);
__weak XCTestExpectation *expectation1 = [self expectationWithDescription:@"AlternateDispatchQueue1"];
NSArray *requests = @[@27182, @8, @1828, @45904];
NSArray *responses = @[@31415, @9, @2653, @58979];
// Set the default dispatch queue
NSString *queue1_label = @"test.queue1";
NSString *queue2_label = @"test.queue2";
dispatch_queue_t queue1 = dispatch_queue_create([queue1_label UTF8String], DISPATCH_QUEUE_SERIAL);
dispatch_queue_t queue2 = dispatch_queue_create([queue2_label UTF8String], DISPATCH_QUEUE_SERIAL);
[_service setDefaultResponseDispatchQueue:queue1];
GRXBufferedPipe *requestsBuffer1 = [[GRXBufferedPipe alloc] init];
__block int index = 0;
id request = [RMTStreamingOutputCallRequest messageWithPayloadSize:requests[index]
requestedResponseSize:responses[index]];
[requestsBuffer1 writeValue:request];
[_service fullDuplexCallWithRequestsWriter:requestsBuffer1
eventHandler:^(BOOL done,
RMTStreamingOutputCallResponse *response,
NSError *error) {
XCTAssertNil(error, @"Finished with unexpected error: %@", error);
XCTAssertTrue(done || response, @"Event handler called without an event.");
NSString *label = [NSString stringWithUTF8String:dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL)];
XCTAssert([label isEqualToString:queue1_label]);
if (response) {
XCTAssertLessThan(index, 4, @"More than 4 responses received.");
id expected = [RMTStreamingOutputCallResponse messageWithPayloadSize:responses[index]];
XCTAssertEqualObjects(response, expected);
index += 1;
if (index < 4) {
id request = [RMTStreamingOutputCallRequest messageWithPayloadSize:requests[index]
requestedResponseSize:responses[index]];
[requestsBuffer1 writeValue:request];
} else {
[requestsBuffer1 writesFinishedWithError:nil];
}
}
if (done) {
XCTAssertEqual(index, 4, @"Received %i responses instead of 4.", index);
[expectation1 fulfill];
}
}];
[self waitForExpectationsWithTimeout:TEST_TIMEOUT handler:nil];
// Test overriding default queue with another queue
__weak XCTestExpectation *expectation2 = [self expectationWithDescription:@"AlternateDispatchQueue2"];
GRXBufferedPipe *requestsBuffer2 = [[GRXBufferedPipe alloc] init];
index = 0;
[requestsBuffer2 writeValue:request];
GRPCProtoCall *rpc = [_service RPCToFullDuplexCallWithRequestsWriter:requestsBuffer2
eventHandler:^(BOOL done,
RMTStreamingOutputCallResponse *response,
NSError *error) {
XCTAssertNil(error, @"Finished with unexpected error: %@", error);
XCTAssertTrue(done || response, @"Event handler called without an event.");
NSString *label = [NSString stringWithUTF8String:dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL)];
XCTAssert([label isEqualToString:queue2_label]);
if (response) {
XCTAssertLessThan(index, 4, @"More than 4 responses received.");
id expected = [RMTStreamingOutputCallResponse messageWithPayloadSize:responses[index]];
XCTAssertEqualObjects(response, expected);
index += 1;
if (index < 4) {
id request = [RMTStreamingOutputCallRequest messageWithPayloadSize:requests[index]
requestedResponseSize:responses[index]];
[requestsBuffer2 writeValue:request];
} else {
[requestsBuffer2 writesFinishedWithError:nil];
}
}
if (done) {
XCTAssertEqual(index, 4, @"Received %i responses instead of 4.", index);
[expectation2 fulfill];
}
}];
[rpc setResponseDispatchQueue:queue2];
[rpc start];
[self waitForExpectationsWithTimeout:TEST_TIMEOUT handler:nil];
[_service setDefaultResponseDispatchQueue:dispatch_get_main_queue()];
}
@end

Loading…
Cancel
Save