Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(177)

Side by Side Diff: webrtc/p2p/base/p2ptransportchannel_unittest.cc

Issue 2416023002: Introduce rtc::PacketTransportInterface and let cricket::TransportChannel inherit. (Closed)
Patch Set: Rebase. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2009 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2009 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
11 #include <algorithm> 11 #include <algorithm>
12 #include <memory> 12 #include <memory>
13 13
14 #include "webrtc/api/fakemetricsobserver.h" 14 #include "webrtc/api/fakemetricsobserver.h"
15 #include "webrtc/p2p/base/fakeportallocator.h" 15 #include "webrtc/p2p/base/fakeportallocator.h"
16 #include "webrtc/p2p/base/packettransportinterface.h"
16 #include "webrtc/p2p/base/p2ptransportchannel.h" 17 #include "webrtc/p2p/base/p2ptransportchannel.h"
17 #include "webrtc/p2p/base/testrelayserver.h" 18 #include "webrtc/p2p/base/testrelayserver.h"
18 #include "webrtc/p2p/base/teststunserver.h" 19 #include "webrtc/p2p/base/teststunserver.h"
19 #include "webrtc/p2p/base/testturnserver.h" 20 #include "webrtc/p2p/base/testturnserver.h"
20 #include "webrtc/p2p/client/basicportallocator.h" 21 #include "webrtc/p2p/client/basicportallocator.h"
21 #include "webrtc/base/dscp.h" 22 #include "webrtc/base/dscp.h"
22 #include "webrtc/base/fakeclock.h" 23 #include "webrtc/base/fakeclock.h"
23 #include "webrtc/base/fakenetwork.h" 24 #include "webrtc/base/fakenetwork.h"
24 #include "webrtc/base/firewallsocketserver.h" 25 #include "webrtc/base/firewallsocketserver.h"
25 #include "webrtc/base/gunit.h" 26 #include "webrtc/base/gunit.h"
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 TransportChannel* channel; 274 TransportChannel* channel;
274 Candidates candidates; 275 Candidates candidates;
275 }; 276 };
276 277
277 struct Endpoint { 278 struct Endpoint {
278 Endpoint() 279 Endpoint()
279 : role_(ICEROLE_UNKNOWN), 280 : role_(ICEROLE_UNKNOWN),
280 tiebreaker_(0), 281 tiebreaker_(0),
281 role_conflict_(false), 282 role_conflict_(false),
282 save_candidates_(false) {} 283 save_candidates_(false) {}
283 bool HasChannel(TransportChannel* ch) { 284 bool HasTransport(const rtc::PacketTransportInterface* transport) {
284 return (ch == cd1_.ch_.get() || ch == cd2_.ch_.get()); 285 return (transport == cd1_.ch_.get() || transport == cd2_.ch_.get());
285 } 286 }
286 ChannelData* GetChannelData(TransportChannel* ch) { 287 ChannelData* GetChannelData(rtc::PacketTransportInterface* transport) {
287 if (!HasChannel(ch)) return NULL; 288 if (!HasTransport(transport))
288 if (cd1_.ch_.get() == ch) 289 return NULL;
290 if (cd1_.ch_.get() == transport)
289 return &cd1_; 291 return &cd1_;
290 else 292 else
291 return &cd2_; 293 return &cd2_;
292 } 294 }
293 295
294 void SetIceRole(IceRole role) { role_ = role; } 296 void SetIceRole(IceRole role) { role_ = role; }
295 IceRole ice_role() { return role_; } 297 IceRole ice_role() { return role_; }
296 void SetIceTiebreaker(uint64_t tiebreaker) { tiebreaker_ = tiebreaker; } 298 void SetIceTiebreaker(uint64_t tiebreaker) { tiebreaker_ = tiebreaker; }
297 uint64_t GetIceTiebreaker() { return tiebreaker_; } 299 uint64_t GetIceTiebreaker() { return tiebreaker_; }
298 void OnRoleConflict(bool role_conflict) { role_conflict_ = role_conflict; } 300 void OnRoleConflict(bool role_conflict) { role_conflict_ = role_conflict; }
(...skipping 13 matching lines...) Expand all
312 ChannelData cd1_; 314 ChannelData cd1_;
313 ChannelData cd2_; 315 ChannelData cd2_;
314 IceRole role_; 316 IceRole role_;
315 uint64_t tiebreaker_; 317 uint64_t tiebreaker_;
316 bool role_conflict_; 318 bool role_conflict_;
317 bool save_candidates_; 319 bool save_candidates_;
318 std::vector<std::unique_ptr<CandidatesData>> saved_candidates_; 320 std::vector<std::unique_ptr<CandidatesData>> saved_candidates_;
319 bool ready_to_send_ = false; 321 bool ready_to_send_ = false;
320 }; 322 };
321 323
322 ChannelData* GetChannelData(TransportChannel* channel) { 324 ChannelData* GetChannelData(rtc::PacketTransportInterface* transport) {
323 if (ep1_.HasChannel(channel)) 325 if (ep1_.HasTransport(transport))
324 return ep1_.GetChannelData(channel); 326 return ep1_.GetChannelData(transport);
325 else 327 else
326 return ep2_.GetChannelData(channel); 328 return ep2_.GetChannelData(transport);
327 } 329 }
328 330
329 IceParameters IceParamsWithRenomination(const IceParameters& ice, 331 IceParameters IceParamsWithRenomination(const IceParameters& ice,
330 bool renomination) { 332 bool renomination) {
331 IceParameters new_ice = ice; 333 IceParameters new_ice = ice;
332 new_ice.renomination = renomination; 334 new_ice.renomination = renomination;
333 return new_ice; 335 return new_ice;
334 } 336 }
335 337
336 void CreateChannels(const IceConfig& ep1_config, 338 void CreateChannels(const IceConfig& ep1_config,
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
663 ep2_ch1()->receiving() && 665 ep2_ch1()->receiving() &&
664 ep2_ch1()->writable(), 666 ep2_ch1()->writable(),
665 1000); 667 1000);
666 668
667 EXPECT_TRUE(ep1_ch1()->selected_connection() && 669 EXPECT_TRUE(ep1_ch1()->selected_connection() &&
668 ep2_ch1()->selected_connection()); 670 ep2_ch1()->selected_connection());
669 671
670 TestSendRecv(); 672 TestSendRecv();
671 } 673 }
672 674
673 void OnReadyToSend(TransportChannel* ch) { 675 void OnReadyToSend(rtc::PacketTransportInterface* transport) {
674 GetEndpoint(ch)->ready_to_send_ = true; 676 GetEndpoint(transport)->ready_to_send_ = true;
675 } 677 }
676 678
677 // We pass the candidates directly to the other side. 679 // We pass the candidates directly to the other side.
678 void OnCandidateGathered(TransportChannelImpl* ch, const Candidate& c) { 680 void OnCandidateGathered(TransportChannelImpl* ch, const Candidate& c) {
679 if (force_relay_ && c.type() != RELAY_PORT_TYPE) 681 if (force_relay_ && c.type() != RELAY_PORT_TYPE)
680 return; 682 return;
681 683
682 if (GetEndpoint(ch)->save_candidates_) { 684 if (GetEndpoint(ch)->save_candidates_) {
683 GetEndpoint(ch)->saved_candidates_.push_back( 685 GetEndpoint(ch)->saved_candidates_.push_back(
684 std::unique_ptr<CandidatesData>(new CandidatesData(ch, c))); 686 std::unique_ptr<CandidatesData>(new CandidatesData(ch, c)));
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 return; 772 return;
771 } 773 }
772 for (Candidate& c : data->candidates) { 774 for (Candidate& c : data->candidates) {
773 LOG(LS_INFO) << "Removed remote candidate " << c.ToString(); 775 LOG(LS_INFO) << "Removed remote candidate " << c.ToString();
774 rch->RemoveRemoteCandidate(c); 776 rch->RemoveRemoteCandidate(c);
775 } 777 }
776 break; 778 break;
777 } 779 }
778 } 780 }
779 } 781 }
780 void OnReadPacket(TransportChannel* channel, 782
783 void OnReadPacket(rtc::PacketTransportInterface* transport,
781 const char* data, 784 const char* data,
782 size_t len, 785 size_t len,
783 const rtc::PacketTime& packet_time, 786 const rtc::PacketTime& packet_time,
784 int flags) { 787 int flags) {
785 std::list<std::string>& packets = GetPacketList(channel); 788 std::list<std::string>& packets = GetPacketList(transport);
786 packets.push_front(std::string(data, len)); 789 packets.push_front(std::string(data, len));
787 } 790 }
791
788 void OnRoleConflict(TransportChannelImpl* channel) { 792 void OnRoleConflict(TransportChannelImpl* channel) {
789 GetEndpoint(channel)->OnRoleConflict(true); 793 GetEndpoint(channel)->OnRoleConflict(true);
790 IceRole new_role = GetEndpoint(channel)->ice_role() == ICEROLE_CONTROLLING 794 IceRole new_role = GetEndpoint(channel)->ice_role() == ICEROLE_CONTROLLING
791 ? ICEROLE_CONTROLLED 795 ? ICEROLE_CONTROLLED
792 : ICEROLE_CONTROLLING; 796 : ICEROLE_CONTROLLING;
793 channel->SetIceRole(new_role); 797 channel->SetIceRole(new_role);
794 } 798 }
795 799
796 int SendData(TransportChannel* channel, const char* data, size_t len) { 800 int SendData(TransportChannel* channel, const char* data, size_t len) {
797 rtc::PacketOptions options; 801 rtc::PacketOptions options;
798 return channel->SendPacket(data, len, options, 0); 802 return channel->SendPacket(data, len, options, 0);
799 } 803 }
800 bool CheckDataOnChannel(TransportChannel* channel, 804 bool CheckDataOnChannel(TransportChannel* channel,
801 const char* data, 805 const char* data,
802 int len) { 806 int len) {
803 return GetChannelData(channel)->CheckData(data, len); 807 return GetChannelData(channel)->CheckData(data, len);
804 } 808 }
805 static const Candidate* LocalCandidate(P2PTransportChannel* ch) { 809 static const Candidate* LocalCandidate(P2PTransportChannel* ch) {
806 return (ch && ch->selected_connection()) 810 return (ch && ch->selected_connection())
807 ? &ch->selected_connection()->local_candidate() 811 ? &ch->selected_connection()->local_candidate()
808 : NULL; 812 : NULL;
809 } 813 }
810 static const Candidate* RemoteCandidate(P2PTransportChannel* ch) { 814 static const Candidate* RemoteCandidate(P2PTransportChannel* ch) {
811 return (ch && ch->selected_connection()) 815 return (ch && ch->selected_connection())
812 ? &ch->selected_connection()->remote_candidate() 816 ? &ch->selected_connection()->remote_candidate()
813 : NULL; 817 : NULL;
814 } 818 }
815 Endpoint* GetEndpoint(TransportChannel* ch) { 819 Endpoint* GetEndpoint(rtc::PacketTransportInterface* transport) {
816 if (ep1_.HasChannel(ch)) { 820 if (ep1_.HasTransport(transport)) {
817 return &ep1_; 821 return &ep1_;
818 } else if (ep2_.HasChannel(ch)) { 822 } else if (ep2_.HasTransport(transport)) {
819 return &ep2_; 823 return &ep2_;
820 } else { 824 } else {
821 return NULL; 825 return NULL;
822 } 826 }
823 } 827 }
824 P2PTransportChannel* GetRemoteChannel(TransportChannel* ch) { 828 P2PTransportChannel* GetRemoteChannel(TransportChannel* ch) {
825 if (ch == ep1_ch1()) 829 if (ch == ep1_ch1())
826 return ep2_ch1(); 830 return ep2_ch1();
827 else if (ch == ep1_ch2()) 831 else if (ch == ep1_ch2())
828 return ep2_ch2(); 832 return ep2_ch2();
829 else if (ch == ep2_ch1()) 833 else if (ch == ep2_ch1())
830 return ep1_ch1(); 834 return ep1_ch1();
831 else if (ch == ep2_ch2()) 835 else if (ch == ep2_ch2())
832 return ep1_ch2(); 836 return ep1_ch2();
833 else 837 else
834 return NULL; 838 return NULL;
835 } 839 }
836 std::list<std::string>& GetPacketList(TransportChannel* ch) { 840 std::list<std::string>& GetPacketList(
837 return GetChannelData(ch)->ch_packets_; 841 rtc::PacketTransportInterface* transport) {
842 return GetChannelData(transport)->ch_packets_;
838 } 843 }
839 844
840 enum RemoteIceParameterSource { FROM_CANDIDATE, FROM_SETICEPARAMETERS }; 845 enum RemoteIceParameterSource { FROM_CANDIDATE, FROM_SETICEPARAMETERS };
841 846
842 // How does the test pass ICE parameters to the P2PTransportChannel? 847 // How does the test pass ICE parameters to the P2PTransportChannel?
843 // On the candidate itself, or through SetRemoteIceParameters? 848 // On the candidate itself, or through SetRemoteIceParameters?
844 // Goes through the candidate itself by default. 849 // Goes through the candidate itself by default.
845 void set_remote_ice_parameter_source(RemoteIceParameterSource source) { 850 void set_remote_ice_parameter_source(RemoteIceParameterSource source) {
846 remote_ice_parameter_source_ = source; 851 remote_ice_parameter_source_ = source;
847 } 852 }
(...skipping 2054 matching lines...) Expand 10 before | Expand all | Expand 10 after
2902 new StunUInt32Attribute(STUN_ATTR_NOMINATION, nomination)); 2907 new StunUInt32Attribute(STUN_ATTR_NOMINATION, nomination));
2903 } 2908 }
2904 msg.SetTransactionID(rtc::CreateRandomString(kStunTransactionIdLength)); 2909 msg.SetTransactionID(rtc::CreateRandomString(kStunTransactionIdLength));
2905 msg.AddMessageIntegrity(conn->local_candidate().password()); 2910 msg.AddMessageIntegrity(conn->local_candidate().password());
2906 msg.AddFingerprint(); 2911 msg.AddFingerprint();
2907 rtc::ByteBufferWriter buf; 2912 rtc::ByteBufferWriter buf;
2908 msg.Write(&buf); 2913 msg.Write(&buf);
2909 conn->OnReadPacket(buf.Data(), buf.Length(), rtc::CreatePacketTime(0)); 2914 conn->OnReadPacket(buf.Data(), buf.Length(), rtc::CreatePacketTime(0));
2910 } 2915 }
2911 2916
2912 void OnReadyToSend(TransportChannel* channel) { 2917 void OnReadyToSend(rtc::PacketTransportInterface* transport) {
2913 channel_ready_to_send_ = true; 2918 channel_ready_to_send_ = true;
2914 } 2919 }
2915 void OnChannelStateChanged(TransportChannelImpl* channel) { 2920 void OnChannelStateChanged(TransportChannelImpl* channel) {
2916 channel_state_ = channel->GetState(); 2921 channel_state_ = channel->GetState();
2917 } 2922 }
2918 2923
2919 CandidatePairInterface* last_selected_candidate_pair() { 2924 CandidatePairInterface* last_selected_candidate_pair() {
2920 return last_selected_candidate_pair_; 2925 return last_selected_candidate_pair_;
2921 } 2926 }
2922 int last_sent_packet_id() { return last_sent_packet_id_; } 2927 int last_sent_packet_id() { return last_sent_packet_id_; }
(...skipping 1293 matching lines...) Expand 10 before | Expand all | Expand 10 after
4216 4221
4217 // TCP Relay/Relay is the next. 4222 // TCP Relay/Relay is the next.
4218 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE, 4223 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE,
4219 TCP_PROTOCOL_NAME); 4224 TCP_PROTOCOL_NAME);
4220 4225
4221 // Finally, Local/Relay will be pinged. 4226 // Finally, Local/Relay will be pinged.
4222 VerifyNextPingableConnection(LOCAL_PORT_TYPE, RELAY_PORT_TYPE); 4227 VerifyNextPingableConnection(LOCAL_PORT_TYPE, RELAY_PORT_TYPE);
4223 } 4228 }
4224 4229
4225 } // namespace cricket { 4230 } // namespace cricket {
OLDNEW
« no previous file with comments | « webrtc/p2p/base/dtlstransportchannel_unittest.cc ('k') | webrtc/p2p/base/packettransportinterface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698