OLD | NEW |
---|---|
(Empty) | |
1 /* | |
2 * Copyright 2017 The WebRTC project authors. All Rights Reserved. | |
3 * | |
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 | |
6 * tree. An additional intellectual property rights grant can be found | |
7 * in the file PATENTS. All contributing project authors may | |
8 * be found in the AUTHORS file in the root of the source tree. | |
9 */ | |
10 | |
11 #include "pc/dtlssrtptransport.h" | |
12 | |
13 #include <memory> | |
14 #include <utility> | |
15 | |
16 #include "p2p/base/dtlstransportinternal.h" | |
17 #include "p2p/base/fakedtlstransport.h" | |
18 #include "p2p/base/fakepackettransport.h" | |
19 #include "pc/rtptransport.h" | |
20 #include "pc/rtptransporttestutil.h" | |
21 #include "rtc_base/asyncpacketsocket.h" | |
22 #include "rtc_base/gunit.h" | |
23 #include "rtc_base/ptr_util.h" | |
24 #include "rtc_base/sslstreamadapter.h" | |
25 | |
26 using cricket::FakeDtlsTransport; | |
27 using cricket::FakeIceTransport; | |
28 using webrtc::DtlsSrtpTransport; | |
29 using webrtc::SrtpTransport; | |
30 using webrtc::RtpTransport; | |
31 | |
32 class DtlsSrtpTransportTest : public testing::Test, | |
33 public sigslot::has_slots<> { | |
34 protected: | |
35 DtlsSrtpTransportTest() { | |
36 bool rtcp_mux_enabled = true; | |
37 // Setup RtpTransport. | |
38 auto rtp_transport1 = rtc::MakeUnique<RtpTransport>(rtcp_mux_enabled); | |
39 auto rtp_transport2 = rtc::MakeUnique<RtpTransport>(rtcp_mux_enabled); | |
40 fake_ice_transport1_ = | |
41 rtc::MakeUnique<FakeIceTransport>("fake_ice_transport1", 1); | |
42 fake_ice_transport2_ = | |
43 rtc::MakeUnique<FakeIceTransport>("fake_ice_transport2", 1); | |
44 | |
45 fake_dtls_transport1_ = | |
46 rtc::MakeUnique<FakeDtlsTransport>(fake_ice_transport1_.get()); | |
47 fake_dtls_transport2_ = | |
48 rtc::MakeUnique<FakeDtlsTransport>(fake_ice_transport2_.get()); | |
49 rtp_transport1->SetRtpPacketTransport(fake_dtls_transport1_.get()); | |
50 rtp_transport2->SetRtpPacketTransport(fake_dtls_transport2_.get()); | |
51 // Add payload type for RTP packet and RTCP packet. | |
52 rtp_transport1->AddHandledPayloadType(0x00); | |
53 rtp_transport2->AddHandledPayloadType(0x00); | |
54 rtp_transport1->AddHandledPayloadType(0xc9); | |
55 rtp_transport2->AddHandledPayloadType(0xc9); | |
56 | |
57 // Setup the SrtpTransport wrapping an RtpTransport. | |
58 auto srtp_transport1 = | |
59 rtc::MakeUnique<SrtpTransport>(std::move(rtp_transport1), "content"); | |
60 auto srtp_transport2 = | |
61 rtc::MakeUnique<SrtpTransport>(std::move(rtp_transport2), "content"); | |
62 | |
63 // Setup the DtlsSrtpTransport wrapping an SrtpTransport. | |
64 dtls_srtp_transport1_ = | |
65 rtc::MakeUnique<DtlsSrtpTransport>(std::move(srtp_transport1)); | |
66 dtls_srtp_transport2_ = | |
67 rtc::MakeUnique<DtlsSrtpTransport>(std::move(srtp_transport2)); | |
68 // Using RtcpMux. | |
69 dtls_srtp_transport1_->SetRtcpDtlsTransport(fake_dtls_transport1_.get()); | |
70 dtls_srtp_transport1_->SetRtpDtlsTransport(fake_dtls_transport1_.get()); | |
71 dtls_srtp_transport2_->SetRtcpDtlsTransport(fake_dtls_transport2_.get()); | |
72 dtls_srtp_transport2_->SetRtpDtlsTransport(fake_dtls_transport2_.get()); | |
73 } | |
74 | |
75 std::unique_ptr<DtlsSrtpTransport> dtls_srtp_transport1_; | |
76 std::unique_ptr<DtlsSrtpTransport> dtls_srtp_transport2_; | |
77 std::unique_ptr<FakeDtlsTransport> fake_dtls_transport1_; | |
78 std::unique_ptr<FakeDtlsTransport> fake_dtls_transport2_; | |
79 std::unique_ptr<FakeIceTransport> fake_ice_transport1_; | |
80 std::unique_ptr<FakeIceTransport> fake_ice_transport2_; | |
81 }; | |
82 | |
83 TEST_F(DtlsSrtpTransportTest, SetupDtlsSrtp) { | |
84 // Setting certifications for DtlsTransport. | |
85 auto cert1 = rtc::RTCCertificate::Create(std::unique_ptr<rtc::SSLIdentity>( | |
86 rtc::SSLIdentity::Generate("session1", rtc::KT_DEFAULT))); | |
87 fake_dtls_transport1_->SetLocalCertificate(cert1); | |
88 auto cert2 = rtc::RTCCertificate::Create(std::unique_ptr<rtc::SSLIdentity>( | |
89 rtc::SSLIdentity::Generate("session1", rtc::KT_DEFAULT))); | |
90 fake_dtls_transport2_->SetLocalCertificate(cert2); | |
91 fake_dtls_transport1_->SetDestination(fake_dtls_transport2_.get()); | |
92 bool rtcp = true; | |
93 EXPECT_TRUE(dtls_srtp_transport1_->SetupDtlsSrtp(rtcp)); | |
94 EXPECT_TRUE(dtls_srtp_transport2_->SetupDtlsSrtp(rtcp)); | |
95 EXPECT_TRUE(dtls_srtp_transport1_->SetupDtlsSrtp(!rtcp)); | |
96 EXPECT_TRUE(dtls_srtp_transport2_->SetupDtlsSrtp(!rtcp)); | |
97 EXPECT_TRUE(dtls_srtp_transport1_->IsActive()); | |
98 EXPECT_TRUE(dtls_srtp_transport2_->IsActive()); | |
99 } | |
Taylor Brandstetter
2017/09/27 23:54:48
Should also test sending some packets; this doesn'
| |
OLD | NEW |