| Index: webrtc/pc/dtlssrtptransport_unittest.cc
|
| diff --git a/webrtc/pc/dtlssrtptransport_unittest.cc b/webrtc/pc/dtlssrtptransport_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ccd4ffd02d90b12fe911c0545fea0ee3e82b63d8
|
| --- /dev/null
|
| +++ b/webrtc/pc/dtlssrtptransport_unittest.cc
|
| @@ -0,0 +1,100 @@
|
| +/*
|
| + * Copyright 2017 The WebRTC project authors. All Rights Reserved.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license
|
| + * that can be found in the LICENSE file in the root of the source
|
| + * tree. An additional intellectual property rights grant can be found
|
| + * in the file PATENTS. All contributing project authors may
|
| + * be found in the AUTHORS file in the root of the source tree.
|
| + */
|
| +
|
| +#include "webrtc/pc/dtlssrtptransport.h"
|
| +
|
| +#include <memory>
|
| +#include <utility>
|
| +
|
| +#include "webrtc/p2p/base/dtlstransportinternal.h"
|
| +#include "webrtc/p2p/base/fakedtlstransport.h"
|
| +#include "webrtc/p2p/base/fakepackettransport.h"
|
| +#include "webrtc/pc/rtptransport.h"
|
| +#include "webrtc/pc/rtptransporttestutil.h"
|
| +#include "webrtc/rtc_base/asyncpacketsocket.h"
|
| +#include "webrtc/rtc_base/gunit.h"
|
| +#include "webrtc/rtc_base/ptr_util.h"
|
| +#include "webrtc/rtc_base/sslstreamadapter.h"
|
| +
|
| +using cricket::FakeDtlsTransport;
|
| +using cricket::FakeIceTransport;
|
| +using webrtc::DtlsSrtpTransport;
|
| +using webrtc::SrtpTransport;
|
| +using webrtc::RtpTransport;
|
| +
|
| +class DtlsSrtpTransportTest : public testing::Test,
|
| + public sigslot::has_slots<> {
|
| + protected:
|
| + DtlsSrtpTransportTest() {
|
| + bool rtcp_mux_enabled = true;
|
| + bool rtcp = true;
|
| + // Setup RtpTransport.
|
| + auto rtp_transport1 = rtc::MakeUnique<RtpTransport>(rtcp_mux_enabled);
|
| + auto rtp_transport2 = rtc::MakeUnique<RtpTransport>(rtcp_mux_enabled);
|
| + fake_ice_transport1_ =
|
| + rtc::MakeUnique<FakeIceTransport>("fake_ice_transport1", 1);
|
| + fake_ice_transport2_ =
|
| + rtc::MakeUnique<FakeIceTransport>("fake_ice_transport2", 1);
|
| +
|
| + fake_dtls_transport1_ =
|
| + rtc::MakeUnique<FakeDtlsTransport>(fake_ice_transport1_.get());
|
| + fake_dtls_transport2_ =
|
| + rtc::MakeUnique<FakeDtlsTransport>(fake_ice_transport2_.get());
|
| + rtp_transport1->SetRtpPacketTransport(fake_dtls_transport1_.get());
|
| + rtp_transport2->SetRtpPacketTransport(fake_dtls_transport2_.get());
|
| + // Add payload type for RTP packet and RTCP packet.
|
| + rtp_transport1->AddHandledPayloadType(0x00);
|
| + rtp_transport2->AddHandledPayloadType(0x00);
|
| + rtp_transport1->AddHandledPayloadType(0xc9);
|
| + rtp_transport2->AddHandledPayloadType(0xc9);
|
| +
|
| + // Setup the SrtpTransport wrapping an RtpTransport.
|
| + auto srtp_transport1 =
|
| + rtc::MakeUnique<SrtpTransport>(std::move(rtp_transport1), "content");
|
| + auto srtp_transport2 =
|
| + rtc::MakeUnique<SrtpTransport>(std::move(rtp_transport2), "content");
|
| +
|
| + // Setup the DtlsSrtpTransport wrapping an SrtpTransport.
|
| + dtls_srtp_transport1_ = rtc::MakeUnique<DtlsSrtpTransport>(
|
| + std::move(srtp_transport1), "content");
|
| + dtls_srtp_transport2_ = rtc::MakeUnique<DtlsSrtpTransport>(
|
| + std::move(srtp_transport2), "content");
|
| + // Using RtcpMux.
|
| + dtls_srtp_transport1_->SetDtlsTransport(rtcp, fake_dtls_transport1_.get());
|
| + dtls_srtp_transport1_->SetDtlsTransport(!rtcp, fake_dtls_transport1_.get());
|
| + dtls_srtp_transport2_->SetDtlsTransport(rtcp, fake_dtls_transport2_.get());
|
| + dtls_srtp_transport2_->SetDtlsTransport(!rtcp, fake_dtls_transport2_.get());
|
| + }
|
| +
|
| + std::unique_ptr<DtlsSrtpTransport> dtls_srtp_transport1_;
|
| + std::unique_ptr<DtlsSrtpTransport> dtls_srtp_transport2_;
|
| + std::unique_ptr<FakeDtlsTransport> fake_dtls_transport1_;
|
| + std::unique_ptr<FakeDtlsTransport> fake_dtls_transport2_;
|
| + std::unique_ptr<FakeIceTransport> fake_ice_transport1_;
|
| + std::unique_ptr<FakeIceTransport> fake_ice_transport2_;
|
| +};
|
| +
|
| +TEST_F(DtlsSrtpTransportTest, SetupDtlsSrtp) {
|
| + // Setting certifications for DtlsTransport.
|
| + auto cert1 = rtc::RTCCertificate::Create(std::unique_ptr<rtc::SSLIdentity>(
|
| + rtc::SSLIdentity::Generate("session1", rtc::KT_DEFAULT)));
|
| + fake_dtls_transport1_->SetLocalCertificate(cert1);
|
| + auto cert2 = rtc::RTCCertificate::Create(std::unique_ptr<rtc::SSLIdentity>(
|
| + rtc::SSLIdentity::Generate("session1", rtc::KT_DEFAULT)));
|
| + fake_dtls_transport2_->SetLocalCertificate(cert2);
|
| + fake_dtls_transport1_->SetDestination(fake_dtls_transport2_.get());
|
| + bool rtcp = true;
|
| + EXPECT_TRUE(dtls_srtp_transport1_->SetupDtlsSrtp(rtcp));
|
| + EXPECT_TRUE(dtls_srtp_transport2_->SetupDtlsSrtp(rtcp));
|
| + EXPECT_TRUE(dtls_srtp_transport1_->SetupDtlsSrtp(!rtcp));
|
| + EXPECT_TRUE(dtls_srtp_transport2_->SetupDtlsSrtp(!rtcp));
|
| + EXPECT_TRUE(dtls_srtp_transport1_->IsActive());
|
| + EXPECT_TRUE(dtls_srtp_transport2_->IsActive());
|
| +}
|
|
|