| Index: webrtc/examples/objc/AppRTCMobile/tests/ARDAppClientTest.mm
|
| diff --git a/webrtc/examples/objc/AppRTCMobile/tests/ARDAppClientTest.mm b/webrtc/examples/objc/AppRTCMobile/tests/ARDAppClientTest.mm
|
| index c1fc08ca8e94e5b5ae7a6500711e45658165cdae..20a5cf481ea26ef318c838b80002696fbb5ebeca 100644
|
| --- a/webrtc/examples/objc/AppRTCMobile/tests/ARDAppClientTest.mm
|
| +++ b/webrtc/examples/objc/AppRTCMobile/tests/ARDAppClientTest.mm
|
| @@ -10,6 +10,7 @@
|
|
|
| #import <Foundation/Foundation.h>
|
| #import <OCMock/OCMock.h>
|
| +#import <QuartzCore/CoreAnimation.h>
|
|
|
| #include "webrtc/base/gunit.h"
|
| #include "webrtc/base/ssladapter.h"
|
| @@ -23,6 +24,9 @@
|
| #import "ARDMessageResponse+Internal.h"
|
| #import "ARDSDPUtils.h"
|
|
|
| +static NSString *kARDAppClientTestsDomain = @"org.webrtc.ARDAppClientTests";
|
| +static NSInteger kARDAppClientTestsExpectationTimeoutError = 100;
|
| +
|
| // These classes mimic XCTest APIs, to make eventual conversion to XCTest
|
| // easier. Conversion will happen once XCTest is supported well on build bots.
|
| @interface ARDTestExpectation : NSObject
|
| @@ -81,17 +85,20 @@ - (ARDTestExpectation *)expectationWithDescription:(NSString *)description {
|
|
|
| - (void)waitForExpectationsWithTimeout:(NSTimeInterval)timeout
|
| handler:(void (^)(NSError *error))handler {
|
| - NSDate *startDate = [NSDate date];
|
| + CFTimeInterval startTime = CACurrentMediaTime();
|
| + NSError *error = nil;
|
| while (![self areExpectationsFulfilled]) {
|
| - NSTimeInterval duration = [[NSDate date] timeIntervalSinceDate:startDate];
|
| + CFTimeInterval duration = CACurrentMediaTime() - startTime;
|
| if (duration > timeout) {
|
| - NSAssert(NO, @"Expectation timed out.");
|
| + error = [NSError errorWithDomain:kARDAppClientTestsDomain
|
| + code:kARDAppClientTestsExpectationTimeoutError
|
| + userInfo:@{}];
|
| break;
|
| }
|
| [[NSRunLoop currentRunLoop]
|
| runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]];
|
| }
|
| - handler(nil);
|
| + handler(error);
|
| }
|
|
|
| - (BOOL)areExpectationsFulfilled {
|
| @@ -137,7 +144,7 @@ - (id)mockRoomServerClientForRoomId:(NSString *)roomId
|
| [[[mockRoomServerClient stub] andDo:^(NSInvocation *invocation) {
|
| __unsafe_unretained void (^completionHandler)(ARDJoinResponse *response,
|
| NSError *error);
|
| - [invocation getArgument:&completionHandler atIndex:3];
|
| + [invocation getArgument:&completionHandler atIndex:4];
|
| completionHandler(joinResponse, nil);
|
| }] joinRoomWithRoomId:roomId isLoopback:NO completionHandler:[OCMArg any]];
|
|
|
| @@ -203,7 +210,8 @@ - (ARDAppClient *)createAppClientForRoomId:(NSString *)roomId
|
| messages:(NSArray *)messages
|
| messageHandler:
|
| (void (^)(ARDSignalingMessage *message))messageHandler
|
| - connectedHandler:(void (^)(void))connectedHandler {
|
| + connectedHandler:(void (^)(void))connectedHandler
|
| + localVideoTrackHandler:(void (^)(void))localVideoTrackHandler {
|
| id turnClient = [self mockTURNClient];
|
| id signalingChannel = [self mockSignalingChannelForRoomId:roomId
|
| clientId:clientId
|
| @@ -220,6 +228,10 @@ - (ARDAppClient *)createAppClientForRoomId:(NSString *)roomId
|
| connectedHandler();
|
| }] appClient:[OCMArg any]
|
| didChangeConnectionState:RTCIceConnectionStateConnected];
|
| + [[[delegate stub] andDo:^(NSInvocation *invocation) {
|
| + localVideoTrackHandler();
|
| + }] appClient:[OCMArg any]
|
| + didReceiveLocalVideoTrack:[OCMArg any]];
|
|
|
| return [[ARDAppClient alloc] initWithRoomServerClient:roomServerClient
|
| signalingChannel:signalingChannel
|
| @@ -255,8 +267,9 @@ - (void)testSession {
|
| messageHandler:^(ARDSignalingMessage *message) {
|
| ARDAppClient *strongAnswerer = weakAnswerer;
|
| [strongAnswerer channel:strongAnswerer.channel didReceiveMessage:message];
|
| - } connectedHandler:^{
|
| + } connectedHandler:^{
|
| [callerConnectionExpectation fulfill];
|
| + } localVideoTrackHandler:^{
|
| }];
|
| // TODO(tkchin): Figure out why DTLS-SRTP constraint causes thread assertion
|
| // crash in Debug.
|
| @@ -272,8 +285,9 @@ - (void)testSession {
|
| messageHandler:^(ARDSignalingMessage *message) {
|
| ARDAppClient *strongCaller = weakCaller;
|
| [strongCaller channel:strongCaller.channel didReceiveMessage:message];
|
| - } connectedHandler:^{
|
| + } connectedHandler:^{
|
| [answererConnectionExpectation fulfill];
|
| + } localVideoTrackHandler:^{
|
| }];
|
| // TODO(tkchin): Figure out why DTLS-SRTP constraint causes thread assertion
|
| // crash in Debug.
|
| @@ -295,7 +309,44 @@ - (void)testSession {
|
| shouldUseLevelControl:NO];
|
| [self waitForExpectationsWithTimeout:20 handler:^(NSError *error) {
|
| if (error) {
|
| - NSLog(@"Expectations error: %@", error);
|
| + EXPECT_TRUE(0);
|
| + }
|
| + }];
|
| +}
|
| +
|
| +// Test to see that we get a local video connection
|
| +// Note this will currently pass even when no camera is connected as a local
|
| +// video track is created regardless (Perhaps there should be a test for that...)
|
| +- (void)testSessionShouldGetLocalVideoTrackCallback {
|
| + ARDAppClient *caller = nil;
|
| + NSString *roomId = @"testRoom";
|
| + NSString *callerId = @"testCallerId";
|
| +
|
| + ARDTestExpectation *localVideoTrackExpectation =
|
| + [self expectationWithDescription:@"Caller got local video."];
|
| +
|
| + caller = [self createAppClientForRoomId:roomId
|
| + clientId:callerId
|
| + isInitiator:YES
|
| + messages:[NSArray array]
|
| + messageHandler:^(ARDSignalingMessage *message) {
|
| + } connectedHandler:^{
|
| + } localVideoTrackHandler:^{
|
| + [localVideoTrackExpectation fulfill];
|
| + }];
|
| + caller.defaultPeerConnectionConstraints =
|
| + [[RTCMediaConstraints alloc] initWithMandatoryConstraints:nil
|
| + optionalConstraints:nil];
|
| +
|
| + // Kick off connection.
|
| + [caller connectToRoomWithId:roomId
|
| + isLoopback:NO
|
| + isAudioOnly:NO
|
| + shouldMakeAecDump:NO
|
| + shouldUseLevelControl:NO];
|
| + [self waitForExpectationsWithTimeout:20 handler:^(NSError *error) {
|
| + if (error) {
|
| + EXPECT_TRUE(0);
|
| }
|
| }];
|
| }
|
| @@ -318,7 +369,7 @@ - (void)testPreferVideoCodec {
|
| RTCSessionDescription *h264Desc =
|
| [ARDSDPUtils descriptionForDescription:desc
|
| preferredVideoCodec:@"H264"];
|
| - EXPECT_TRUE([h264Desc.description isEqualToString:expectedSdp]);
|
| + EXPECT_TRUE([h264Desc.description rangeOfString:expectedSdp].location != NSNotFound);
|
| }
|
|
|
| @end
|
| @@ -340,6 +391,16 @@ static void TearDownTestCase() {
|
| }
|
| }
|
|
|
| +#if !TARGET_IPHONE_SIMULATOR
|
| +// Expected fail on iOS Simulator due to no camera support
|
| +TEST_F(SignalingTest, SessionLocalVideoCallbackTest) {
|
| + @autoreleasepool {
|
| + ARDAppClientTest *test = [[ARDAppClientTest alloc] init];
|
| + [test testSessionShouldGetLocalVideoTrackCallback];
|
| + }
|
| +}
|
| +#endif
|
| +
|
| TEST_F(SignalingTest, SDPTest) {
|
| @autoreleasepool {
|
| ARDSDPUtilsTest *test = [[ARDSDPUtilsTest alloc] init];
|
| @@ -347,4 +408,7 @@ static void TearDownTestCase() {
|
| }
|
| }
|
|
|
| -
|
| +int main(int argc, char **argv) {
|
| + ::testing::InitGoogleTest(&argc, argv);
|
| + return RUN_ALL_TESTS();
|
| +}
|
|
|