Add a GN target for unit tests, get them working again and added a test.

BUG=webrtc:3417

Review-Url: https://codereview.webrtc.org/2050153003
Cr-Commit-Position: refs/heads/master@{#14959}
This commit is contained in:
adam.fedor
2016-11-07 14:53:28 -08:00
committed by Commit bot
parent d83bf06167
commit bcc5d87f09
4 changed files with 106 additions and 12 deletions

View File

@ -1,6 +1,7 @@
# Names should be added to this file like so:
# Name or Organization <email address>
Adam Fedor <adam.fedor@gmail.com>
Alexander Brauckmann <a.brauckmann@gmail.com>
Andrew MacDonald <andrew@webrtc.org>
Anil Kumar <an1kumar@gmail.com>

View File

@ -389,6 +389,33 @@ if (is_ios || (is_mac && target_cpu != "x86")) {
"icucore",
]
}
if (rtc_include_tests) {
config("rtc_apprtcmobile_config") {
defines = [ "GTEST_RELATIVE_PATH" ]
}
rtc_test("apprtcmobile_tests") {
deps = [
":apprtc_signaling",
"//testing/gtest",
"//third_party/ocmock",
]
sources = [
"objc/AppRTCMobile/tests/ARDAppClientTest.mm",
]
if (is_ios) {
info_plist = "objc/AppRTCMobile/ios/Info.plist"
}
configs += [
":rtc_apprtcmobile_config",
"//build/config/compiler:enable_arc",
]
}
}
}
if (is_linux || is_win) {

View File

@ -318,7 +318,9 @@ static int64_t const kARDAppClientRtcEventLogMaxSizeInBytes = 5e6; // 5 MB.
_peerConnection = nil;
self.state = kARDAppClientStateDisconnected;
#if defined(WEBRTC_IOS)
RTCStopInternalCapture();
if (kARDAppClientEnableTracing) {
RTCStopInternalCapture();
}
#endif
}

View File

@ -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 @@
- (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 @@
[[[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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@ TEST_F(SignalingTest, SessionTest) {
}
}
#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 @@ TEST_F(SignalingTest, SDPTest) {
}
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}