OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 21 matching lines...) Expand all Loading... |
32 #include "webrtc/api/test/testsdpstrings.h" | 32 #include "webrtc/api/test/testsdpstrings.h" |
33 #include "webrtc/api/videocapturertracksource.h" | 33 #include "webrtc/api/videocapturertracksource.h" |
34 #include "webrtc/api/videotrack.h" | 34 #include "webrtc/api/videotrack.h" |
35 #include "webrtc/base/gunit.h" | 35 #include "webrtc/base/gunit.h" |
36 #include "webrtc/base/ssladapter.h" | 36 #include "webrtc/base/ssladapter.h" |
37 #include "webrtc/base/sslstreamadapter.h" | 37 #include "webrtc/base/sslstreamadapter.h" |
38 #include "webrtc/base/stringutils.h" | 38 #include "webrtc/base/stringutils.h" |
39 #include "webrtc/base/thread.h" | 39 #include "webrtc/base/thread.h" |
40 #include "webrtc/media/base/fakevideocapturer.h" | 40 #include "webrtc/media/base/fakevideocapturer.h" |
41 #include "webrtc/media/sctp/sctpdataengine.h" | 41 #include "webrtc/media/sctp/sctpdataengine.h" |
42 #include "webrtc/p2p/base/fakeportallocator.h" | 42 #include "webrtc/p2p/client/fakeportallocator.h" |
43 #include "webrtc/pc/mediasession.h" | 43 #include "webrtc/pc/mediasession.h" |
44 | 44 |
45 static const char kStreamLabel1[] = "local_stream_1"; | 45 static const char kStreamLabel1[] = "local_stream_1"; |
46 static const char kStreamLabel2[] = "local_stream_2"; | 46 static const char kStreamLabel2[] = "local_stream_2"; |
47 static const char kStreamLabel3[] = "local_stream_3"; | 47 static const char kStreamLabel3[] = "local_stream_3"; |
48 static const int kDefaultStunPort = 3478; | 48 static const int kDefaultStunPort = 3478; |
49 static const char kStunAddressOnly[] = "stun:address"; | 49 static const char kStunAddressOnly[] = "stun:address"; |
50 static const char kStunInvalidPort[] = "stun:address:-1"; | 50 static const char kStunInvalidPort[] = "stun:address:-1"; |
51 static const char kStunAddressPortAndMore1[] = "stun:address:port:more"; | 51 static const char kStunAddressPortAndMore1[] = "stun:address:port:more"; |
52 static const char kStunAddressPortAndMore2[] = "stun:address:port more"; | 52 static const char kStunAddressPortAndMore2[] = "stun:address:port more"; |
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
544 } | 544 } |
545 | 545 |
546 virtual void SetUp() { | 546 virtual void SetUp() { |
547 pc_factory_ = webrtc::CreatePeerConnectionFactory( | 547 pc_factory_ = webrtc::CreatePeerConnectionFactory( |
548 rtc::Thread::Current(), rtc::Thread::Current(), NULL, NULL, | 548 rtc::Thread::Current(), rtc::Thread::Current(), NULL, NULL, |
549 NULL); | 549 NULL); |
550 ASSERT_TRUE(pc_factory_.get() != NULL); | 550 ASSERT_TRUE(pc_factory_.get() != NULL); |
551 } | 551 } |
552 | 552 |
553 void CreatePeerConnection() { | 553 void CreatePeerConnection() { |
554 CreatePeerConnection(PeerConnectionInterface::RTCConfiguration(), nullptr); | 554 CreatePeerConnection("", "", NULL); |
555 } | 555 } |
556 | 556 |
557 void CreatePeerConnection(webrtc::MediaConstraintsInterface* constraints) { | 557 void CreatePeerConnection(webrtc::MediaConstraintsInterface* constraints) { |
558 CreatePeerConnection(PeerConnectionInterface::RTCConfiguration(), | 558 CreatePeerConnection("", "", constraints); |
559 constraints); | |
560 } | 559 } |
561 | 560 |
562 void CreatePeerConnectionWithIceTransportsType( | 561 void CreatePeerConnection(const std::string& uri, |
563 PeerConnectionInterface::IceTransportsType type) { | 562 const std::string& password, |
564 PeerConnectionInterface::RTCConfiguration config; | 563 webrtc::MediaConstraintsInterface* constraints) { |
565 config.type = type; | |
566 return CreatePeerConnection(config, nullptr); | |
567 } | |
568 | |
569 void CreatePeerConnectionWithIceServer(const std::string& uri, | |
570 const std::string& password) { | |
571 PeerConnectionInterface::RTCConfiguration config; | 564 PeerConnectionInterface::RTCConfiguration config; |
572 PeerConnectionInterface::IceServer server; | 565 PeerConnectionInterface::IceServer server; |
573 server.uri = uri; | 566 if (!uri.empty()) { |
574 server.password = password; | 567 server.uri = uri; |
575 config.servers.push_back(server); | 568 server.password = password; |
576 CreatePeerConnection(config, nullptr); | 569 config.servers.push_back(server); |
577 } | 570 } |
578 | 571 |
579 void CreatePeerConnection(PeerConnectionInterface::RTCConfiguration config, | |
580 webrtc::MediaConstraintsInterface* constraints) { | |
581 std::unique_ptr<cricket::FakePortAllocator> port_allocator( | 572 std::unique_ptr<cricket::FakePortAllocator> port_allocator( |
582 new cricket::FakePortAllocator(rtc::Thread::Current(), nullptr)); | 573 new cricket::FakePortAllocator(rtc::Thread::Current(), nullptr)); |
583 port_allocator_ = port_allocator.get(); | 574 port_allocator_ = port_allocator.get(); |
584 | 575 |
585 // DTLS does not work in a loopback call, so is disabled for most of the | 576 // DTLS does not work in a loopback call, so is disabled for most of the |
586 // tests in this file. We only create a FakeIdentityService if the test | 577 // tests in this file. We only create a FakeIdentityService if the test |
587 // explicitly sets the constraint. | 578 // explicitly sets the constraint. |
588 FakeConstraints default_constraints; | 579 FakeConstraints default_constraints; |
589 if (!constraints) { | 580 if (!constraints) { |
590 constraints = &default_constraints; | 581 constraints = &default_constraints; |
(...skipping 24 matching lines...) Expand all Loading... |
615 server.uri = uri; | 606 server.uri = uri; |
616 config.servers.push_back(server); | 607 config.servers.push_back(server); |
617 | 608 |
618 scoped_refptr<PeerConnectionInterface> pc; | 609 scoped_refptr<PeerConnectionInterface> pc; |
619 pc = pc_factory_->CreatePeerConnection(config, nullptr, nullptr, nullptr, | 610 pc = pc_factory_->CreatePeerConnection(config, nullptr, nullptr, nullptr, |
620 &observer_); | 611 &observer_); |
621 EXPECT_EQ(nullptr, pc); | 612 EXPECT_EQ(nullptr, pc); |
622 } | 613 } |
623 | 614 |
624 void CreatePeerConnectionWithDifferentConfigurations() { | 615 void CreatePeerConnectionWithDifferentConfigurations() { |
625 CreatePeerConnectionWithIceServer(kStunAddressOnly, ""); | 616 CreatePeerConnection(kStunAddressOnly, "", NULL); |
626 EXPECT_EQ(1u, port_allocator_->stun_servers().size()); | 617 EXPECT_EQ(1u, port_allocator_->stun_servers().size()); |
627 EXPECT_EQ(0u, port_allocator_->turn_servers().size()); | 618 EXPECT_EQ(0u, port_allocator_->turn_servers().size()); |
628 EXPECT_EQ("address", port_allocator_->stun_servers().begin()->hostname()); | 619 EXPECT_EQ("address", port_allocator_->stun_servers().begin()->hostname()); |
629 EXPECT_EQ(kDefaultStunPort, | 620 EXPECT_EQ(kDefaultStunPort, |
630 port_allocator_->stun_servers().begin()->port()); | 621 port_allocator_->stun_servers().begin()->port()); |
631 | 622 |
632 CreatePeerConnectionExpectFail(kStunInvalidPort); | 623 CreatePeerConnectionExpectFail(kStunInvalidPort); |
633 CreatePeerConnectionExpectFail(kStunAddressPortAndMore1); | 624 CreatePeerConnectionExpectFail(kStunAddressPortAndMore1); |
634 CreatePeerConnectionExpectFail(kStunAddressPortAndMore2); | 625 CreatePeerConnectionExpectFail(kStunAddressPortAndMore2); |
635 | 626 |
636 CreatePeerConnectionWithIceServer(kTurnIceServerUri, kTurnPassword); | 627 CreatePeerConnection(kTurnIceServerUri, kTurnPassword, NULL); |
637 EXPECT_EQ(0u, port_allocator_->stun_servers().size()); | 628 EXPECT_EQ(0u, port_allocator_->stun_servers().size()); |
638 EXPECT_EQ(1u, port_allocator_->turn_servers().size()); | 629 EXPECT_EQ(1u, port_allocator_->turn_servers().size()); |
639 EXPECT_EQ(kTurnUsername, | 630 EXPECT_EQ(kTurnUsername, |
640 port_allocator_->turn_servers()[0].credentials.username); | 631 port_allocator_->turn_servers()[0].credentials.username); |
641 EXPECT_EQ(kTurnPassword, | 632 EXPECT_EQ(kTurnPassword, |
642 port_allocator_->turn_servers()[0].credentials.password); | 633 port_allocator_->turn_servers()[0].credentials.password); |
643 EXPECT_EQ(kTurnHostname, | 634 EXPECT_EQ(kTurnHostname, |
644 port_allocator_->turn_servers()[0].ports[0].address.hostname()); | 635 port_allocator_->turn_servers()[0].ports[0].address.hostname()); |
645 } | 636 } |
646 | 637 |
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1016 CreateAnswerWithOneAudioStream(); | 1007 CreateAnswerWithOneAudioStream(); |
1017 EXPECT_NE(GetFirstAudioStreamCname(answer1.get()), | 1008 EXPECT_NE(GetFirstAudioStreamCname(answer1.get()), |
1018 GetFirstAudioStreamCname(answer2.get())); | 1009 GetFirstAudioStreamCname(answer2.get())); |
1019 } | 1010 } |
1020 | 1011 |
1021 TEST_F(PeerConnectionInterfaceTest, | 1012 TEST_F(PeerConnectionInterfaceTest, |
1022 CreatePeerConnectionWithDifferentConfigurations) { | 1013 CreatePeerConnectionWithDifferentConfigurations) { |
1023 CreatePeerConnectionWithDifferentConfigurations(); | 1014 CreatePeerConnectionWithDifferentConfigurations(); |
1024 } | 1015 } |
1025 | 1016 |
1026 TEST_F(PeerConnectionInterfaceTest, | |
1027 CreatePeerConnectionWithDifferentIceTransportsTypes) { | |
1028 CreatePeerConnectionWithIceTransportsType(PeerConnectionInterface::kNone); | |
1029 EXPECT_EQ(cricket::CF_NONE, port_allocator_->candidate_filter()); | |
1030 CreatePeerConnectionWithIceTransportsType(PeerConnectionInterface::kRelay); | |
1031 EXPECT_EQ(cricket::CF_RELAY, port_allocator_->candidate_filter()); | |
1032 CreatePeerConnectionWithIceTransportsType(PeerConnectionInterface::kNoHost); | |
1033 EXPECT_EQ(cricket::CF_ALL & ~cricket::CF_HOST, | |
1034 port_allocator_->candidate_filter()); | |
1035 CreatePeerConnectionWithIceTransportsType(PeerConnectionInterface::kAll); | |
1036 EXPECT_EQ(cricket::CF_ALL, port_allocator_->candidate_filter()); | |
1037 } | |
1038 | |
1039 // Test that when a PeerConnection is created with a nonzero candidate pool | |
1040 // size, the pooled PortAllocatorSession is created with all the attributes | |
1041 // in the RTCConfiguration. | |
1042 TEST_F(PeerConnectionInterfaceTest, CreatePeerConnectionWithPooledCandidates) { | |
1043 PeerConnectionInterface::RTCConfiguration config; | |
1044 PeerConnectionInterface::IceServer server; | |
1045 server.uri = kStunAddressOnly; | |
1046 config.servers.push_back(server); | |
1047 config.type = PeerConnectionInterface::kRelay; | |
1048 config.disable_ipv6 = true; | |
1049 config.tcp_candidate_policy = | |
1050 PeerConnectionInterface::kTcpCandidatePolicyDisabled; | |
1051 config.ice_candidate_pool_size = 1; | |
1052 CreatePeerConnection(config, nullptr); | |
1053 | |
1054 const cricket::FakePortAllocatorSession* session = | |
1055 static_cast<const cricket::FakePortAllocatorSession*>( | |
1056 port_allocator_->GetPooledSession()); | |
1057 ASSERT_NE(nullptr, session); | |
1058 EXPECT_EQ(1UL, session->stun_servers().size()); | |
1059 EXPECT_EQ(0U, session->flags() & cricket::PORTALLOCATOR_ENABLE_IPV6); | |
1060 EXPECT_LT(0U, session->flags() & cricket::PORTALLOCATOR_DISABLE_TCP); | |
1061 EXPECT_EQ(cricket::CF_RELAY, session->candidate_filter()); | |
1062 } | |
1063 | |
1064 TEST_F(PeerConnectionInterfaceTest, AddStreams) { | 1017 TEST_F(PeerConnectionInterfaceTest, AddStreams) { |
1065 CreatePeerConnection(); | 1018 CreatePeerConnection(); |
1066 AddVideoStream(kStreamLabel1); | 1019 AddVideoStream(kStreamLabel1); |
1067 AddVoiceStream(kStreamLabel2); | 1020 AddVoiceStream(kStreamLabel2); |
1068 ASSERT_EQ(2u, pc_->local_streams()->count()); | 1021 ASSERT_EQ(2u, pc_->local_streams()->count()); |
1069 | 1022 |
1070 // Test we can add multiple local streams to one peerconnection. | 1023 // Test we can add multiple local streams to one peerconnection. |
1071 scoped_refptr<MediaStreamInterface> stream( | 1024 scoped_refptr<MediaStreamInterface> stream( |
1072 pc_factory_->CreateLocalMediaStream(kStreamLabel3)); | 1025 pc_factory_->CreateLocalMediaStream(kStreamLabel3)); |
1073 scoped_refptr<AudioTrackInterface> audio_track( | 1026 scoped_refptr<AudioTrackInterface> audio_track( |
(...skipping 873 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1947 PeerConnectionInterface::IceServer server; | 1900 PeerConnectionInterface::IceServer server; |
1948 server.uri = "stun:test_hostname"; | 1901 server.uri = "stun:test_hostname"; |
1949 config.servers.push_back(server); | 1902 config.servers.push_back(server); |
1950 EXPECT_TRUE(pc_->SetConfiguration(config)); | 1903 EXPECT_TRUE(pc_->SetConfiguration(config)); |
1951 | 1904 |
1952 EXPECT_EQ(1u, port_allocator_->stun_servers().size()); | 1905 EXPECT_EQ(1u, port_allocator_->stun_servers().size()); |
1953 EXPECT_EQ("test_hostname", | 1906 EXPECT_EQ("test_hostname", |
1954 port_allocator_->stun_servers().begin()->hostname()); | 1907 port_allocator_->stun_servers().begin()->hostname()); |
1955 } | 1908 } |
1956 | 1909 |
1957 TEST_F(PeerConnectionInterfaceTest, SetConfigurationChangesCandidateFilter) { | |
1958 CreatePeerConnection(); | |
1959 PeerConnectionInterface::RTCConfiguration config; | |
1960 config.type = PeerConnectionInterface::kRelay; | |
1961 EXPECT_TRUE(pc_->SetConfiguration(config)); | |
1962 EXPECT_EQ(cricket::CF_RELAY, port_allocator_->candidate_filter()); | |
1963 } | |
1964 | |
1965 // Test that when SetConfiguration changes both the pool size and other | |
1966 // attributes, the pooled session is created with the updated attributes. | |
1967 TEST_F(PeerConnectionInterfaceTest, | |
1968 SetConfigurationCreatesPooledSessionCorrectly) { | |
1969 CreatePeerConnection(); | |
1970 PeerConnectionInterface::RTCConfiguration config; | |
1971 config.ice_candidate_pool_size = 1; | |
1972 PeerConnectionInterface::IceServer server; | |
1973 server.uri = kStunAddressOnly; | |
1974 config.servers.push_back(server); | |
1975 config.type = PeerConnectionInterface::kRelay; | |
1976 CreatePeerConnection(config, nullptr); | |
1977 | |
1978 const cricket::FakePortAllocatorSession* session = | |
1979 static_cast<const cricket::FakePortAllocatorSession*>( | |
1980 port_allocator_->GetPooledSession()); | |
1981 ASSERT_NE(nullptr, session); | |
1982 EXPECT_EQ(1UL, session->stun_servers().size()); | |
1983 EXPECT_EQ(cricket::CF_RELAY, session->candidate_filter()); | |
1984 } | |
1985 | |
1986 // Test that PeerConnection::Close changes the states to closed and all remote | 1910 // Test that PeerConnection::Close changes the states to closed and all remote |
1987 // tracks change state to ended. | 1911 // tracks change state to ended. |
1988 TEST_F(PeerConnectionInterfaceTest, CloseAndTestStreamsAndStates) { | 1912 TEST_F(PeerConnectionInterfaceTest, CloseAndTestStreamsAndStates) { |
1989 // Initialize a PeerConnection and negotiate local and remote session | 1913 // Initialize a PeerConnection and negotiate local and remote session |
1990 // description. | 1914 // description. |
1991 InitiateCall(); | 1915 InitiateCall(); |
1992 ASSERT_EQ(1u, pc_->local_streams()->count()); | 1916 ASSERT_EQ(1u, pc_->local_streams()->count()); |
1993 ASSERT_EQ(1u, pc_->remote_streams()->count()); | 1917 ASSERT_EQ(1u, pc_->remote_streams()->count()); |
1994 | 1918 |
1995 pc_->Close(); | 1919 pc_->Close(); |
(...skipping 810 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2806 FakeConstraints updated_answer_c; | 2730 FakeConstraints updated_answer_c; |
2807 answer_c.SetMandatoryReceiveAudio(false); | 2731 answer_c.SetMandatoryReceiveAudio(false); |
2808 answer_c.SetMandatoryReceiveVideo(false); | 2732 answer_c.SetMandatoryReceiveVideo(false); |
2809 | 2733 |
2810 cricket::MediaSessionOptions updated_answer_options; | 2734 cricket::MediaSessionOptions updated_answer_options; |
2811 EXPECT_TRUE( | 2735 EXPECT_TRUE( |
2812 ParseConstraintsForAnswer(&updated_answer_c, &updated_answer_options)); | 2736 ParseConstraintsForAnswer(&updated_answer_c, &updated_answer_options)); |
2813 EXPECT_TRUE(updated_answer_options.has_audio()); | 2737 EXPECT_TRUE(updated_answer_options.has_audio()); |
2814 EXPECT_TRUE(updated_answer_options.has_video()); | 2738 EXPECT_TRUE(updated_answer_options.has_video()); |
2815 } | 2739 } |
OLD | NEW |