1*d9f75844SAndroid Build Coastguard Worker/* 2*d9f75844SAndroid Build Coastguard Worker * Copyright 2015 The WebRTC project authors. All Rights Reserved. 3*d9f75844SAndroid Build Coastguard Worker * 4*d9f75844SAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*d9f75844SAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*d9f75844SAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*d9f75844SAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*d9f75844SAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*d9f75844SAndroid Build Coastguard Worker */ 10*d9f75844SAndroid Build Coastguard Worker 11*d9f75844SAndroid Build Coastguard Worker#import <Foundation/Foundation.h> 12*d9f75844SAndroid Build Coastguard Worker#import <XCTest/XCTest.h> 13*d9f75844SAndroid Build Coastguard Worker 14*d9f75844SAndroid Build Coastguard Worker#include <vector> 15*d9f75844SAndroid Build Coastguard Worker 16*d9f75844SAndroid Build Coastguard Worker#include "rtc_base/gunit.h" 17*d9f75844SAndroid Build Coastguard Worker 18*d9f75844SAndroid Build Coastguard Worker#import "api/peerconnection/RTCConfiguration+Private.h" 19*d9f75844SAndroid Build Coastguard Worker#import "api/peerconnection/RTCConfiguration.h" 20*d9f75844SAndroid Build Coastguard Worker#import "api/peerconnection/RTCIceServer.h" 21*d9f75844SAndroid Build Coastguard Worker#import "helpers/NSString+StdString.h" 22*d9f75844SAndroid Build Coastguard Worker 23*d9f75844SAndroid Build Coastguard Worker@interface RTCConfigurationTest : XCTestCase 24*d9f75844SAndroid Build Coastguard Worker@end 25*d9f75844SAndroid Build Coastguard Worker 26*d9f75844SAndroid Build Coastguard Worker@implementation RTCConfigurationTest 27*d9f75844SAndroid Build Coastguard Worker 28*d9f75844SAndroid Build Coastguard Worker- (void)testConversionToNativeConfiguration { 29*d9f75844SAndroid Build Coastguard Worker NSArray *urlStrings = @[ @"stun:stun1.example.net" ]; 30*d9f75844SAndroid Build Coastguard Worker RTC_OBJC_TYPE(RTCIceServer) *server = 31*d9f75844SAndroid Build Coastguard Worker [[RTC_OBJC_TYPE(RTCIceServer) alloc] initWithURLStrings:urlStrings]; 32*d9f75844SAndroid Build Coastguard Worker 33*d9f75844SAndroid Build Coastguard Worker RTC_OBJC_TYPE(RTCConfiguration) *config = [[RTC_OBJC_TYPE(RTCConfiguration) alloc] init]; 34*d9f75844SAndroid Build Coastguard Worker config.iceServers = @[ server ]; 35*d9f75844SAndroid Build Coastguard Worker config.iceTransportPolicy = RTCIceTransportPolicyRelay; 36*d9f75844SAndroid Build Coastguard Worker config.bundlePolicy = RTCBundlePolicyMaxBundle; 37*d9f75844SAndroid Build Coastguard Worker config.rtcpMuxPolicy = RTCRtcpMuxPolicyNegotiate; 38*d9f75844SAndroid Build Coastguard Worker config.tcpCandidatePolicy = RTCTcpCandidatePolicyDisabled; 39*d9f75844SAndroid Build Coastguard Worker config.candidateNetworkPolicy = RTCCandidateNetworkPolicyLowCost; 40*d9f75844SAndroid Build Coastguard Worker const int maxPackets = 60; 41*d9f75844SAndroid Build Coastguard Worker const int timeout = 1; 42*d9f75844SAndroid Build Coastguard Worker const int interval = 2; 43*d9f75844SAndroid Build Coastguard Worker config.audioJitterBufferMaxPackets = maxPackets; 44*d9f75844SAndroid Build Coastguard Worker config.audioJitterBufferFastAccelerate = YES; 45*d9f75844SAndroid Build Coastguard Worker config.iceConnectionReceivingTimeout = timeout; 46*d9f75844SAndroid Build Coastguard Worker config.iceBackupCandidatePairPingInterval = interval; 47*d9f75844SAndroid Build Coastguard Worker config.continualGatheringPolicy = 48*d9f75844SAndroid Build Coastguard Worker RTCContinualGatheringPolicyGatherContinually; 49*d9f75844SAndroid Build Coastguard Worker config.shouldPruneTurnPorts = YES; 50*d9f75844SAndroid Build Coastguard Worker config.cryptoOptions = 51*d9f75844SAndroid Build Coastguard Worker [[RTC_OBJC_TYPE(RTCCryptoOptions) alloc] initWithSrtpEnableGcmCryptoSuites:YES 52*d9f75844SAndroid Build Coastguard Worker srtpEnableAes128Sha1_32CryptoCipher:YES 53*d9f75844SAndroid Build Coastguard Worker srtpEnableEncryptedRtpHeaderExtensions:YES 54*d9f75844SAndroid Build Coastguard Worker sframeRequireFrameEncryption:YES]; 55*d9f75844SAndroid Build Coastguard Worker config.rtcpAudioReportIntervalMs = 2500; 56*d9f75844SAndroid Build Coastguard Worker config.rtcpVideoReportIntervalMs = 3750; 57*d9f75844SAndroid Build Coastguard Worker 58*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<webrtc::PeerConnectionInterface::RTCConfiguration> 59*d9f75844SAndroid Build Coastguard Worker nativeConfig([config createNativeConfiguration]); 60*d9f75844SAndroid Build Coastguard Worker EXPECT_TRUE(nativeConfig.get()); 61*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(1u, nativeConfig->servers.size()); 62*d9f75844SAndroid Build Coastguard Worker webrtc::PeerConnectionInterface::IceServer nativeServer = 63*d9f75844SAndroid Build Coastguard Worker nativeConfig->servers.front(); 64*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(1u, nativeServer.urls.size()); 65*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("stun:stun1.example.net", nativeServer.urls.front()); 66*d9f75844SAndroid Build Coastguard Worker 67*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(webrtc::PeerConnectionInterface::kRelay, nativeConfig->type); 68*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(webrtc::PeerConnectionInterface::kBundlePolicyMaxBundle, 69*d9f75844SAndroid Build Coastguard Worker nativeConfig->bundle_policy); 70*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(webrtc::PeerConnectionInterface::kRtcpMuxPolicyNegotiate, 71*d9f75844SAndroid Build Coastguard Worker nativeConfig->rtcp_mux_policy); 72*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(webrtc::PeerConnectionInterface::kTcpCandidatePolicyDisabled, 73*d9f75844SAndroid Build Coastguard Worker nativeConfig->tcp_candidate_policy); 74*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(webrtc::PeerConnectionInterface::kCandidateNetworkPolicyLowCost, 75*d9f75844SAndroid Build Coastguard Worker nativeConfig->candidate_network_policy); 76*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(maxPackets, nativeConfig->audio_jitter_buffer_max_packets); 77*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(true, nativeConfig->audio_jitter_buffer_fast_accelerate); 78*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(timeout, nativeConfig->ice_connection_receiving_timeout); 79*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(interval, nativeConfig->ice_backup_candidate_pair_ping_interval); 80*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(webrtc::PeerConnectionInterface::GATHER_CONTINUALLY, 81*d9f75844SAndroid Build Coastguard Worker nativeConfig->continual_gathering_policy); 82*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(true, nativeConfig->prune_turn_ports); 83*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(true, nativeConfig->crypto_options->srtp.enable_gcm_crypto_suites); 84*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(true, nativeConfig->crypto_options->srtp.enable_aes128_sha1_32_crypto_cipher); 85*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(true, nativeConfig->crypto_options->srtp.enable_encrypted_rtp_header_extensions); 86*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(true, nativeConfig->crypto_options->sframe.require_frame_encryption); 87*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(2500, nativeConfig->audio_rtcp_report_interval_ms()); 88*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(3750, nativeConfig->video_rtcp_report_interval_ms()); 89*d9f75844SAndroid Build Coastguard Worker} 90*d9f75844SAndroid Build Coastguard Worker 91*d9f75844SAndroid Build Coastguard Worker- (void)testNativeConversionToConfiguration { 92*d9f75844SAndroid Build Coastguard Worker NSArray *urlStrings = @[ @"stun:stun1.example.net" ]; 93*d9f75844SAndroid Build Coastguard Worker RTC_OBJC_TYPE(RTCIceServer) *server = 94*d9f75844SAndroid Build Coastguard Worker [[RTC_OBJC_TYPE(RTCIceServer) alloc] initWithURLStrings:urlStrings]; 95*d9f75844SAndroid Build Coastguard Worker 96*d9f75844SAndroid Build Coastguard Worker RTC_OBJC_TYPE(RTCConfiguration) *config = [[RTC_OBJC_TYPE(RTCConfiguration) alloc] init]; 97*d9f75844SAndroid Build Coastguard Worker config.iceServers = @[ server ]; 98*d9f75844SAndroid Build Coastguard Worker config.iceTransportPolicy = RTCIceTransportPolicyRelay; 99*d9f75844SAndroid Build Coastguard Worker config.bundlePolicy = RTCBundlePolicyMaxBundle; 100*d9f75844SAndroid Build Coastguard Worker config.rtcpMuxPolicy = RTCRtcpMuxPolicyNegotiate; 101*d9f75844SAndroid Build Coastguard Worker config.tcpCandidatePolicy = RTCTcpCandidatePolicyDisabled; 102*d9f75844SAndroid Build Coastguard Worker config.candidateNetworkPolicy = RTCCandidateNetworkPolicyLowCost; 103*d9f75844SAndroid Build Coastguard Worker const int maxPackets = 60; 104*d9f75844SAndroid Build Coastguard Worker const int timeout = 1; 105*d9f75844SAndroid Build Coastguard Worker const int interval = 2; 106*d9f75844SAndroid Build Coastguard Worker config.audioJitterBufferMaxPackets = maxPackets; 107*d9f75844SAndroid Build Coastguard Worker config.audioJitterBufferFastAccelerate = YES; 108*d9f75844SAndroid Build Coastguard Worker config.iceConnectionReceivingTimeout = timeout; 109*d9f75844SAndroid Build Coastguard Worker config.iceBackupCandidatePairPingInterval = interval; 110*d9f75844SAndroid Build Coastguard Worker config.continualGatheringPolicy = 111*d9f75844SAndroid Build Coastguard Worker RTCContinualGatheringPolicyGatherContinually; 112*d9f75844SAndroid Build Coastguard Worker config.shouldPruneTurnPorts = YES; 113*d9f75844SAndroid Build Coastguard Worker config.cryptoOptions = 114*d9f75844SAndroid Build Coastguard Worker [[RTC_OBJC_TYPE(RTCCryptoOptions) alloc] initWithSrtpEnableGcmCryptoSuites:YES 115*d9f75844SAndroid Build Coastguard Worker srtpEnableAes128Sha1_32CryptoCipher:NO 116*d9f75844SAndroid Build Coastguard Worker srtpEnableEncryptedRtpHeaderExtensions:NO 117*d9f75844SAndroid Build Coastguard Worker sframeRequireFrameEncryption:NO]; 118*d9f75844SAndroid Build Coastguard Worker config.rtcpAudioReportIntervalMs = 1500; 119*d9f75844SAndroid Build Coastguard Worker config.rtcpVideoReportIntervalMs = 2150; 120*d9f75844SAndroid Build Coastguard Worker 121*d9f75844SAndroid Build Coastguard Worker webrtc::PeerConnectionInterface::RTCConfiguration *nativeConfig = 122*d9f75844SAndroid Build Coastguard Worker [config createNativeConfiguration]; 123*d9f75844SAndroid Build Coastguard Worker RTC_OBJC_TYPE(RTCConfiguration) *newConfig = 124*d9f75844SAndroid Build Coastguard Worker [[RTC_OBJC_TYPE(RTCConfiguration) alloc] initWithNativeConfiguration:*nativeConfig]; 125*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ([config.iceServers count], newConfig.iceServers.count); 126*d9f75844SAndroid Build Coastguard Worker RTC_OBJC_TYPE(RTCIceServer) *newServer = newConfig.iceServers[0]; 127*d9f75844SAndroid Build Coastguard Worker RTC_OBJC_TYPE(RTCIceServer) *origServer = config.iceServers[0]; 128*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(origServer.urlStrings.count, server.urlStrings.count); 129*d9f75844SAndroid Build Coastguard Worker std::string origUrl = origServer.urlStrings.firstObject.UTF8String; 130*d9f75844SAndroid Build Coastguard Worker std::string url = newServer.urlStrings.firstObject.UTF8String; 131*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(origUrl, url); 132*d9f75844SAndroid Build Coastguard Worker 133*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(config.iceTransportPolicy, newConfig.iceTransportPolicy); 134*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(config.bundlePolicy, newConfig.bundlePolicy); 135*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(config.rtcpMuxPolicy, newConfig.rtcpMuxPolicy); 136*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(config.tcpCandidatePolicy, newConfig.tcpCandidatePolicy); 137*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(config.candidateNetworkPolicy, newConfig.candidateNetworkPolicy); 138*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(config.audioJitterBufferMaxPackets, newConfig.audioJitterBufferMaxPackets); 139*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(config.audioJitterBufferFastAccelerate, newConfig.audioJitterBufferFastAccelerate); 140*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(config.iceConnectionReceivingTimeout, newConfig.iceConnectionReceivingTimeout); 141*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(config.iceBackupCandidatePairPingInterval, 142*d9f75844SAndroid Build Coastguard Worker newConfig.iceBackupCandidatePairPingInterval); 143*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(config.continualGatheringPolicy, newConfig.continualGatheringPolicy); 144*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(config.shouldPruneTurnPorts, newConfig.shouldPruneTurnPorts); 145*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(config.cryptoOptions.srtpEnableGcmCryptoSuites, 146*d9f75844SAndroid Build Coastguard Worker newConfig.cryptoOptions.srtpEnableGcmCryptoSuites); 147*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(config.cryptoOptions.srtpEnableAes128Sha1_32CryptoCipher, 148*d9f75844SAndroid Build Coastguard Worker newConfig.cryptoOptions.srtpEnableAes128Sha1_32CryptoCipher); 149*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(config.cryptoOptions.srtpEnableEncryptedRtpHeaderExtensions, 150*d9f75844SAndroid Build Coastguard Worker newConfig.cryptoOptions.srtpEnableEncryptedRtpHeaderExtensions); 151*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(config.cryptoOptions.sframeRequireFrameEncryption, 152*d9f75844SAndroid Build Coastguard Worker newConfig.cryptoOptions.sframeRequireFrameEncryption); 153*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(config.rtcpAudioReportIntervalMs, newConfig.rtcpAudioReportIntervalMs); 154*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(config.rtcpVideoReportIntervalMs, newConfig.rtcpVideoReportIntervalMs); 155*d9f75844SAndroid Build Coastguard Worker} 156*d9f75844SAndroid Build Coastguard Worker 157*d9f75844SAndroid Build Coastguard Worker- (void)testDefaultValues { 158*d9f75844SAndroid Build Coastguard Worker RTC_OBJC_TYPE(RTCConfiguration) *config = [[RTC_OBJC_TYPE(RTCConfiguration) alloc] init]; 159*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(config.cryptoOptions, nil); 160*d9f75844SAndroid Build Coastguard Worker} 161*d9f75844SAndroid Build Coastguard Worker 162*d9f75844SAndroid Build Coastguard Worker@end 163