tor-browser

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

tmmbn_unittest.cc (3670B)


      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/tmmbn.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::IsEmpty;
     23 using ::testing::make_tuple;
     24 using webrtc::rtcp::TmmbItem;
     25 using webrtc::rtcp::Tmmbn;
     26 
     27 namespace webrtc {
     28 namespace {
     29 constexpr uint32_t kSenderSsrc = 0x12345678;
     30 constexpr uint32_t kRemoteSsrc = 0x23456789;
     31 constexpr uint32_t kBitrateBps = 312000;
     32 constexpr uint16_t kOverhead = 0x1fe;
     33 constexpr uint8_t kPacket[] = {0x84, 205,  0x00, 0x04, 0x12, 0x34, 0x56,
     34                               0x78, 0x00, 0x00, 0x00, 0x00, 0x23, 0x45,
     35                               0x67, 0x89, 0x0a, 0x61, 0x61, 0xfe};
     36 }  // namespace
     37 
     38 TEST(RtcpPacketTmmbnTest, Create) {
     39  Tmmbn tmmbn;
     40  tmmbn.SetSenderSsrc(kSenderSsrc);
     41  tmmbn.AddTmmbr(TmmbItem(kRemoteSsrc, kBitrateBps, kOverhead));
     42 
     43  Buffer packet = tmmbn.Build();
     44 
     45  EXPECT_THAT(make_tuple(packet.data(), packet.size()),
     46              ElementsAreArray(kPacket));
     47 }
     48 
     49 TEST(RtcpPacketTmmbnTest, Parse) {
     50  Tmmbn tmmbn;
     51  EXPECT_TRUE(test::ParseSinglePacket(kPacket, &tmmbn));
     52 
     53  const Tmmbn& parsed = tmmbn;
     54 
     55  EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
     56  ASSERT_EQ(1u, parsed.items().size());
     57  EXPECT_EQ(kRemoteSsrc, parsed.items().front().ssrc());
     58  EXPECT_EQ(kBitrateBps, parsed.items().front().bitrate_bps());
     59  EXPECT_EQ(kOverhead, parsed.items().front().packet_overhead());
     60 }
     61 
     62 TEST(RtcpPacketTmmbnTest, CreateAndParseWithoutItems) {
     63  Tmmbn tmmbn;
     64  tmmbn.SetSenderSsrc(kSenderSsrc);
     65 
     66  Buffer packet = tmmbn.Build();
     67  Tmmbn parsed;
     68  EXPECT_TRUE(test::ParseSinglePacket(packet, &parsed));
     69 
     70  EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
     71  EXPECT_THAT(parsed.items(), IsEmpty());
     72 }
     73 
     74 TEST(RtcpPacketTmmbnTest, CreateAndParseWithTwoItems) {
     75  Tmmbn tmmbn;
     76  tmmbn.SetSenderSsrc(kSenderSsrc);
     77  tmmbn.AddTmmbr(TmmbItem(kRemoteSsrc, kBitrateBps, kOverhead));
     78  tmmbn.AddTmmbr(TmmbItem(kRemoteSsrc + 1, 4 * kBitrateBps, 40));
     79 
     80  Buffer packet = tmmbn.Build();
     81  Tmmbn parsed;
     82  EXPECT_TRUE(test::ParseSinglePacket(packet, &parsed));
     83 
     84  EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
     85  EXPECT_EQ(2u, parsed.items().size());
     86  EXPECT_EQ(kRemoteSsrc, parsed.items()[0].ssrc());
     87  EXPECT_EQ(kBitrateBps, parsed.items()[0].bitrate_bps());
     88  EXPECT_EQ(kOverhead, parsed.items()[0].packet_overhead());
     89  EXPECT_EQ(kRemoteSsrc + 1, parsed.items()[1].ssrc());
     90  EXPECT_EQ(4 * kBitrateBps, parsed.items()[1].bitrate_bps());
     91  EXPECT_EQ(40U, parsed.items()[1].packet_overhead());
     92 }
     93 
     94 TEST(RtcpPacketTmmbnTest, ParseFailsOnTooSmallPacket) {
     95  const uint8_t kSmallPacket[] = {0x84, 205,  0x00, 0x01,
     96                                  0x12, 0x34, 0x56, 0x78};
     97  Tmmbn tmmbn;
     98  EXPECT_FALSE(test::ParseSinglePacket(kSmallPacket, &tmmbn));
     99 }
    100 
    101 TEST(RtcpPacketTmmbnTest, ParseFailsOnUnAlignedPacket) {
    102  const uint8_t kUnalignedPacket[] = {0x84, 205,  0x00, 0x03, 0x12, 0x34,
    103                                      0x56, 0x78, 0x00, 0x00, 0x00, 0x00,
    104                                      0x23, 0x45, 0x67, 0x89};
    105 
    106  Tmmbn tmmbn;
    107  EXPECT_FALSE(test::ParseSinglePacket(kUnalignedPacket, &tmmbn));
    108 }
    109 }  // namespace webrtc