tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

tmmbr_unittest.cc (3150B)


      1 /*
      2 *  Copyright (c) 2016 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 "modules/rtp_rtcp/source/rtcp_packet/tmmbr.h"
     12 
     13 #include <cstdint>
     14 
     15 #include "modules/rtp_rtcp/source/rtcp_packet/tmmb_item.h"
     16 #include "rtc_base/buffer.h"
     17 #include "test/gmock.h"
     18 #include "test/gtest.h"
     19 #include "test/rtcp_packet_parser.h"
     20 
     21 using ::testing::ElementsAreArray;
     22 using ::testing::make_tuple;
     23 using webrtc::rtcp::TmmbItem;
     24 using webrtc::rtcp::Tmmbr;
     25 
     26 namespace webrtc {
     27 namespace {
     28 constexpr uint32_t kSenderSsrc = 0x12345678;
     29 constexpr uint32_t kRemoteSsrc = 0x23456789;
     30 constexpr uint32_t kBitrateBps = 312000;
     31 constexpr uint16_t kOverhead = 0x1fe;
     32 constexpr uint8_t kPacket[] = {0x83, 205,  0x00, 0x04, 0x12, 0x34, 0x56,
     33                               0x78, 0x00, 0x00, 0x00, 0x00, 0x23, 0x45,
     34                               0x67, 0x89, 0x0a, 0x61, 0x61, 0xfe};
     35 }  // namespace
     36 
     37 TEST(RtcpPacketTmmbrTest, Create) {
     38  Tmmbr tmmbr;
     39  tmmbr.SetSenderSsrc(kSenderSsrc);
     40  tmmbr.AddTmmbr(TmmbItem(kRemoteSsrc, kBitrateBps, kOverhead));
     41 
     42  Buffer packet = tmmbr.Build();
     43 
     44  EXPECT_THAT(make_tuple(packet.data(), packet.size()),
     45              ElementsAreArray(kPacket));
     46 }
     47 
     48 TEST(RtcpPacketTmmbrTest, Parse) {
     49  Tmmbr tmmbr;
     50  EXPECT_TRUE(test::ParseSinglePacket(kPacket, &tmmbr));
     51  const Tmmbr& parsed = tmmbr;
     52 
     53  EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
     54  ASSERT_EQ(1u, parsed.requests().size());
     55  EXPECT_EQ(kRemoteSsrc, parsed.requests().front().ssrc());
     56  EXPECT_EQ(kBitrateBps, parsed.requests().front().bitrate_bps());
     57  EXPECT_EQ(kOverhead, parsed.requests().front().packet_overhead());
     58 }
     59 
     60 TEST(RtcpPacketTmmbrTest, CreateAndParseWithTwoEntries) {
     61  Tmmbr tmmbr;
     62  tmmbr.SetSenderSsrc(kSenderSsrc);
     63  tmmbr.AddTmmbr(TmmbItem(kRemoteSsrc, kBitrateBps, kOverhead));
     64  tmmbr.AddTmmbr(TmmbItem(kRemoteSsrc + 1, 4 * kBitrateBps, kOverhead + 1));
     65 
     66  Buffer packet = tmmbr.Build();
     67 
     68  Tmmbr parsed;
     69  EXPECT_TRUE(test::ParseSinglePacket(packet, &parsed));
     70 
     71  EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
     72  EXPECT_EQ(2u, parsed.requests().size());
     73  EXPECT_EQ(kRemoteSsrc, parsed.requests()[0].ssrc());
     74  EXPECT_EQ(kRemoteSsrc + 1, parsed.requests()[1].ssrc());
     75 }
     76 
     77 TEST(RtcpPacketTmmbrTest, ParseFailsWithoutItems) {
     78  const uint8_t kZeroItemsPacket[] = {0x83, 205,  0x00, 0x02, 0x12, 0x34,
     79                                      0x56, 0x78, 0x00, 0x00, 0x00, 0x00};
     80 
     81  Tmmbr tmmbr;
     82  EXPECT_FALSE(test::ParseSinglePacket(kZeroItemsPacket, &tmmbr));
     83 }
     84 
     85 TEST(RtcpPacketTmmbrTest, ParseFailsOnUnAlignedPacket) {
     86  const uint8_t kUnalignedPacket[] = {
     87      0x83, 205,  0x00, 0x05, 0x12, 0x34, 0x56, 0x78, 0x00, 0x00, 0x00, 0x00,
     88      0x23, 0x45, 0x67, 0x89, 0x0a, 0x61, 0x61, 0xfe, 0x34, 0x56, 0x78, 0x9a};
     89 
     90  Tmmbr tmmbr;
     91  EXPECT_FALSE(test::ParseSinglePacket(kUnalignedPacket, &tmmbr));
     92 }
     93 }  // namespace webrtc