blob: 6cc4ee7d6592c8c4c6403bfa57bd52d43bf7f5a8 [file] [log] [blame]
zstein398c3fd2017-07-19 13:38:02 -07001/*
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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#include "pc/srtptransport.h"
zstein398c3fd2017-07-19 13:38:02 -070012
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020013#include "pc/rtptransport.h"
14#include "pc/rtptransporttestutil.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020015#include "rtc_base/asyncpacketsocket.h"
16#include "rtc_base/gunit.h"
17#include "rtc_base/ptr_util.h"
zhihuangeb23e172017-09-19 01:12:52 -070018#include "test/gmock.h"
zstein398c3fd2017-07-19 13:38:02 -070019
20namespace webrtc {
21
zhihuangeb23e172017-09-19 01:12:52 -070022using testing::_;
23using testing::Return;
zstein398c3fd2017-07-19 13:38:02 -070024
zhihuangeb23e172017-09-19 01:12:52 -070025class MockRtpTransport : public RtpTransport {
26 public:
27 MockRtpTransport() : RtpTransport(true) {}
zstein398c3fd2017-07-19 13:38:02 -070028
zhihuangeb23e172017-09-19 01:12:52 -070029 MOCK_METHOD4(SendPacket,
30 bool(bool rtcp,
31 rtc::CopyOnWriteBuffer* packet,
32 const rtc::PacketOptions& options,
33 int flags));
zstein398c3fd2017-07-19 13:38:02 -070034
zhihuangeb23e172017-09-19 01:12:52 -070035 void PretendReceivedPacket() {
36 bool rtcp = false;
37 rtc::CopyOnWriteBuffer buffer;
38 rtc::PacketTime time;
39 SignalPacketReceived(rtcp, &buffer, time);
zstein398c3fd2017-07-19 13:38:02 -070040 }
41};
42
zhihuangeb23e172017-09-19 01:12:52 -070043TEST(SrtpTransportTest, SendPacket) {
44 auto rtp_transport = rtc::MakeUnique<MockRtpTransport>();
45 EXPECT_CALL(*rtp_transport, SendPacket(_, _, _, _)).WillOnce(Return(true));
zstein398c3fd2017-07-19 13:38:02 -070046
zhihuangeb23e172017-09-19 01:12:52 -070047 SrtpTransport srtp_transport(std::move(rtp_transport), "a");
48
49 const bool rtcp = false;
50 rtc::CopyOnWriteBuffer packet;
51 rtc::PacketOptions options;
52 int flags = 0;
53 EXPECT_TRUE(srtp_transport.SendPacket(rtcp, &packet, options, flags));
54
55 // TODO(zstein): Also verify that the packet received by RtpTransport has been
56 // protected once SrtpTransport handles that.
zstein398c3fd2017-07-19 13:38:02 -070057}
58
zhihuangeb23e172017-09-19 01:12:52 -070059// Test that SrtpTransport fires SignalPacketReceived when the underlying
60// RtpTransport fires SignalPacketReceived.
61TEST(SrtpTransportTest, SignalPacketReceived) {
62 auto rtp_transport = rtc::MakeUnique<MockRtpTransport>();
63 MockRtpTransport* rtp_transport_raw = rtp_transport.get();
64 SrtpTransport srtp_transport(std::move(rtp_transport), "a");
zstein398c3fd2017-07-19 13:38:02 -070065
zhihuangeb23e172017-09-19 01:12:52 -070066 SignalPacketReceivedCounter counter(&srtp_transport);
zstein398c3fd2017-07-19 13:38:02 -070067
zhihuangeb23e172017-09-19 01:12:52 -070068 rtp_transport_raw->PretendReceivedPacket();
zstein398c3fd2017-07-19 13:38:02 -070069
zhihuangeb23e172017-09-19 01:12:52 -070070 EXPECT_EQ(1, counter.rtp_count());
zstein398c3fd2017-07-19 13:38:02 -070071
zhihuangeb23e172017-09-19 01:12:52 -070072 // TODO(zstein): Also verify that the packet is unprotected once SrtpTransport
73 // handles that.
zstein398c3fd2017-07-19 13:38:02 -070074}
75
76} // namespace webrtc