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/RTCIceServer+Private.h" 19*d9f75844SAndroid Build Coastguard Worker#import "api/peerconnection/RTCIceServer.h" 20*d9f75844SAndroid Build Coastguard Worker#import "helpers/NSString+StdString.h" 21*d9f75844SAndroid Build Coastguard Worker 22*d9f75844SAndroid Build Coastguard Worker@interface RTCIceServerTest : XCTestCase 23*d9f75844SAndroid Build Coastguard Worker@end 24*d9f75844SAndroid Build Coastguard Worker 25*d9f75844SAndroid Build Coastguard Worker@implementation RTCIceServerTest 26*d9f75844SAndroid Build Coastguard Worker 27*d9f75844SAndroid Build Coastguard Worker- (void)testOneURLServer { 28*d9f75844SAndroid Build Coastguard Worker RTC_OBJC_TYPE(RTCIceServer) *server = 29*d9f75844SAndroid Build Coastguard Worker [[RTC_OBJC_TYPE(RTCIceServer) alloc] initWithURLStrings:@[ @"stun:stun1.example.net" ]]; 30*d9f75844SAndroid Build Coastguard Worker 31*d9f75844SAndroid Build Coastguard Worker webrtc::PeerConnectionInterface::IceServer iceStruct = server.nativeServer; 32*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(1u, iceStruct.urls.size()); 33*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("stun:stun1.example.net", iceStruct.urls.front()); 34*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("", iceStruct.username); 35*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("", iceStruct.password); 36*d9f75844SAndroid Build Coastguard Worker} 37*d9f75844SAndroid Build Coastguard Worker 38*d9f75844SAndroid Build Coastguard Worker- (void)testTwoURLServer { 39*d9f75844SAndroid Build Coastguard Worker RTC_OBJC_TYPE(RTCIceServer) *server = [[RTC_OBJC_TYPE(RTCIceServer) alloc] 40*d9f75844SAndroid Build Coastguard Worker initWithURLStrings:@[ @"turn1:turn1.example.net", @"turn2:turn2.example.net" ]]; 41*d9f75844SAndroid Build Coastguard Worker 42*d9f75844SAndroid Build Coastguard Worker webrtc::PeerConnectionInterface::IceServer iceStruct = server.nativeServer; 43*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(2u, iceStruct.urls.size()); 44*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("turn1:turn1.example.net", iceStruct.urls.front()); 45*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("turn2:turn2.example.net", iceStruct.urls.back()); 46*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("", iceStruct.username); 47*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("", iceStruct.password); 48*d9f75844SAndroid Build Coastguard Worker} 49*d9f75844SAndroid Build Coastguard Worker 50*d9f75844SAndroid Build Coastguard Worker- (void)testPasswordCredential { 51*d9f75844SAndroid Build Coastguard Worker RTC_OBJC_TYPE(RTCIceServer) *server = 52*d9f75844SAndroid Build Coastguard Worker [[RTC_OBJC_TYPE(RTCIceServer) alloc] initWithURLStrings:@[ @"turn1:turn1.example.net" ] 53*d9f75844SAndroid Build Coastguard Worker username:@"username" 54*d9f75844SAndroid Build Coastguard Worker credential:@"credential"]; 55*d9f75844SAndroid Build Coastguard Worker webrtc::PeerConnectionInterface::IceServer iceStruct = server.nativeServer; 56*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(1u, iceStruct.urls.size()); 57*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("turn1:turn1.example.net", iceStruct.urls.front()); 58*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("username", iceStruct.username); 59*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("credential", iceStruct.password); 60*d9f75844SAndroid Build Coastguard Worker} 61*d9f75844SAndroid Build Coastguard Worker 62*d9f75844SAndroid Build Coastguard Worker- (void)testHostname { 63*d9f75844SAndroid Build Coastguard Worker RTC_OBJC_TYPE(RTCIceServer) *server = 64*d9f75844SAndroid Build Coastguard Worker [[RTC_OBJC_TYPE(RTCIceServer) alloc] initWithURLStrings:@[ @"turn1:turn1.example.net" ] 65*d9f75844SAndroid Build Coastguard Worker username:@"username" 66*d9f75844SAndroid Build Coastguard Worker credential:@"credential" 67*d9f75844SAndroid Build Coastguard Worker tlsCertPolicy:RTCTlsCertPolicySecure 68*d9f75844SAndroid Build Coastguard Worker hostname:@"hostname"]; 69*d9f75844SAndroid Build Coastguard Worker webrtc::PeerConnectionInterface::IceServer iceStruct = server.nativeServer; 70*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(1u, iceStruct.urls.size()); 71*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("turn1:turn1.example.net", iceStruct.urls.front()); 72*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("username", iceStruct.username); 73*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("credential", iceStruct.password); 74*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("hostname", iceStruct.hostname); 75*d9f75844SAndroid Build Coastguard Worker} 76*d9f75844SAndroid Build Coastguard Worker 77*d9f75844SAndroid Build Coastguard Worker- (void)testTlsAlpnProtocols { 78*d9f75844SAndroid Build Coastguard Worker RTC_OBJC_TYPE(RTCIceServer) *server = 79*d9f75844SAndroid Build Coastguard Worker [[RTC_OBJC_TYPE(RTCIceServer) alloc] initWithURLStrings:@[ @"turn1:turn1.example.net" ] 80*d9f75844SAndroid Build Coastguard Worker username:@"username" 81*d9f75844SAndroid Build Coastguard Worker credential:@"credential" 82*d9f75844SAndroid Build Coastguard Worker tlsCertPolicy:RTCTlsCertPolicySecure 83*d9f75844SAndroid Build Coastguard Worker hostname:@"hostname" 84*d9f75844SAndroid Build Coastguard Worker tlsAlpnProtocols:@[ @"proto1", @"proto2" ]]; 85*d9f75844SAndroid Build Coastguard Worker webrtc::PeerConnectionInterface::IceServer iceStruct = server.nativeServer; 86*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(1u, iceStruct.urls.size()); 87*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("turn1:turn1.example.net", iceStruct.urls.front()); 88*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("username", iceStruct.username); 89*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("credential", iceStruct.password); 90*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("hostname", iceStruct.hostname); 91*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(2u, iceStruct.tls_alpn_protocols.size()); 92*d9f75844SAndroid Build Coastguard Worker} 93*d9f75844SAndroid Build Coastguard Worker 94*d9f75844SAndroid Build Coastguard Worker- (void)testTlsEllipticCurves { 95*d9f75844SAndroid Build Coastguard Worker RTC_OBJC_TYPE(RTCIceServer) *server = 96*d9f75844SAndroid Build Coastguard Worker [[RTC_OBJC_TYPE(RTCIceServer) alloc] initWithURLStrings:@[ @"turn1:turn1.example.net" ] 97*d9f75844SAndroid Build Coastguard Worker username:@"username" 98*d9f75844SAndroid Build Coastguard Worker credential:@"credential" 99*d9f75844SAndroid Build Coastguard Worker tlsCertPolicy:RTCTlsCertPolicySecure 100*d9f75844SAndroid Build Coastguard Worker hostname:@"hostname" 101*d9f75844SAndroid Build Coastguard Worker tlsAlpnProtocols:@[ @"proto1", @"proto2" ] 102*d9f75844SAndroid Build Coastguard Worker tlsEllipticCurves:@[ @"curve1", @"curve2" ]]; 103*d9f75844SAndroid Build Coastguard Worker webrtc::PeerConnectionInterface::IceServer iceStruct = server.nativeServer; 104*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(1u, iceStruct.urls.size()); 105*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("turn1:turn1.example.net", iceStruct.urls.front()); 106*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("username", iceStruct.username); 107*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("credential", iceStruct.password); 108*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("hostname", iceStruct.hostname); 109*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(2u, iceStruct.tls_alpn_protocols.size()); 110*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(2u, iceStruct.tls_elliptic_curves.size()); 111*d9f75844SAndroid Build Coastguard Worker} 112*d9f75844SAndroid Build Coastguard Worker 113*d9f75844SAndroid Build Coastguard Worker- (void)testInitFromNativeServer { 114*d9f75844SAndroid Build Coastguard Worker webrtc::PeerConnectionInterface::IceServer nativeServer; 115*d9f75844SAndroid Build Coastguard Worker nativeServer.username = "username"; 116*d9f75844SAndroid Build Coastguard Worker nativeServer.password = "password"; 117*d9f75844SAndroid Build Coastguard Worker nativeServer.urls.push_back("stun:stun.example.net"); 118*d9f75844SAndroid Build Coastguard Worker nativeServer.hostname = "hostname"; 119*d9f75844SAndroid Build Coastguard Worker nativeServer.tls_alpn_protocols.push_back("proto1"); 120*d9f75844SAndroid Build Coastguard Worker nativeServer.tls_alpn_protocols.push_back("proto2"); 121*d9f75844SAndroid Build Coastguard Worker nativeServer.tls_elliptic_curves.push_back("curve1"); 122*d9f75844SAndroid Build Coastguard Worker nativeServer.tls_elliptic_curves.push_back("curve2"); 123*d9f75844SAndroid Build Coastguard Worker 124*d9f75844SAndroid Build Coastguard Worker RTC_OBJC_TYPE(RTCIceServer) *iceServer = 125*d9f75844SAndroid Build Coastguard Worker [[RTC_OBJC_TYPE(RTCIceServer) alloc] initWithNativeServer:nativeServer]; 126*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(1u, iceServer.urlStrings.count); 127*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("stun:stun.example.net", 128*d9f75844SAndroid Build Coastguard Worker [NSString stdStringForString:iceServer.urlStrings.firstObject]); 129*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("username", [NSString stdStringForString:iceServer.username]); 130*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("password", [NSString stdStringForString:iceServer.credential]); 131*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ("hostname", [NSString stdStringForString:iceServer.hostname]); 132*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(2u, iceServer.tlsAlpnProtocols.count); 133*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(2u, iceServer.tlsEllipticCurves.count); 134*d9f75844SAndroid Build Coastguard Worker} 135*d9f75844SAndroid Build Coastguard Worker 136*d9f75844SAndroid Build Coastguard Worker@end 137