aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar murgatroid99 <mlumish@google.com>2015-08-24 10:56:44 -0700
committerGravatar murgatroid99 <mlumish@google.com>2015-08-24 10:56:44 -0700
commit81b4fcbe84ad644ddd2ff6c293610415859bec03 (patch)
tree4f2544e5844a3a069f4c401324abf05e0959f5c4 /src
parent04715888e60c6195a2c1d9d6b31f7a82f0d717e2 (diff)
Added test for responseHeaders KVO compliance
Diffstat (limited to 'src')
-rw-r--r--src/objective-c/tests/GRPCClientTests.m62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/objective-c/tests/GRPCClientTests.m b/src/objective-c/tests/GRPCClientTests.m
index 06581e7599..fa604211e2 100644
--- a/src/objective-c/tests/GRPCClientTests.m
+++ b/src/objective-c/tests/GRPCClientTests.m
@@ -53,6 +53,37 @@ static ProtoMethod *kInexistentMethod;
static ProtoMethod *kEmptyCallMethod;
static ProtoMethod *kUnaryCallMethod;
+// This is an observer class for testing that responseMetadata is KVO-compliant
+
+@interface PassthroughObserver : NSObject
+
+- (instancetype) initWithCallback:(void (^)(NSString*, id, NSDictionary*))callback;
+
+- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change
+ context:(void *)context;
+@end
+
+@implementation PassthroughObserver {
+ void (^_callback)(NSString*, id, NSDictionary*);
+}
+
+- (instancetype)initWithCallback:(void (^)(NSString *, id, NSDictionary *))callback {
+ self = [super init];
+ if (self) {
+ _callback = callback;
+ }
+ return self;
+
+}
+
+- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
+{
+ _callback(keyPath, object, change);
+ [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
+}
+
+@end
+
@interface GRPCClientTests : XCTestCase
@end
@@ -183,4 +214,35 @@ static ProtoMethod *kUnaryCallMethod;
[self waitForExpectationsWithTimeout:4 handler:nil];
}
+- (void)testResponseMetadataKVO {
+ __weak XCTestExpectation *response = [self expectationWithDescription:@"Empty response received."];
+ __weak XCTestExpectation *completion = [self expectationWithDescription:@"Empty RPC completed."];
+ __weak XCTestExpectation *metadata = [self expectationWithDescription:@"Metadata changed."];
+
+ PassthroughObserver *observer = [[PassthroughObserver alloc] initWithCallback:^(NSString *keypath, id object, NSDictionary * change) {
+ if (keypath == @"responseHeaders") {
+ [expectation fulfill];
+ }
+ }]
+
+ GRPCCall *call = [[GRPCCall alloc] initWithHost:kHostAddress
+ path:kEmptyCallMethod.HTTPPath
+ requestsWriter:[GRXWriter writerWithValue:[NSData data]]];
+
+ [call addObserver:observer forKeyPath:@"responseHeaders" options:0 context:NULL];
+
+ id<GRXWriteable> responsesWriteable = [[GRXWriteable alloc] initWithValueHandler:^(NSData *value) {
+ XCTAssertNotNil(value, @"nil value received as response.");
+ XCTAssertEqual([value length], 0, @"Non-empty response received: %@", value);
+ [response fulfill];
+ } completionHandler:^(NSError *errorOrNil) {
+ XCTAssertNil(errorOrNil, @"Finished with unexpected error: %@", errorOrNil);
+ [completion fulfill];
+ }];
+
+ [call startWithWriteable:responsesWriteable];
+
+ [self waitForExpectationsWithTimeout:8 handler:nil];
+}
+
@end