tor-browser

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

bye_unittest.cc (4440B)


      1 /*
      2 *  Copyright (c) 2015 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/bye.h"
     12 
     13 #include <cstddef>
     14 #include <cstdint>
     15 #include <string>
     16 #include <vector>
     17 
     18 #include "rtc_base/buffer.h"
     19 #include "test/gmock.h"
     20 #include "test/gtest.h"
     21 #include "test/rtcp_packet_parser.h"
     22 
     23 using ::testing::ElementsAre;
     24 using webrtc::rtcp::Bye;
     25 
     26 namespace webrtc {
     27 namespace {
     28 constexpr uint32_t kSenderSsrc = 0x12345678;
     29 constexpr uint32_t kCsrc1 = 0x22232425;
     30 constexpr uint32_t kCsrc2 = 0x33343536;
     31 }  // namespace
     32 
     33 TEST(RtcpPacketByeTest, CreateAndParseWithoutReason) {
     34  Bye bye;
     35  bye.SetSenderSsrc(kSenderSsrc);
     36 
     37  Buffer raw = bye.Build();
     38  Bye parsed_bye;
     39  EXPECT_TRUE(test::ParseSinglePacket(raw, &parsed_bye));
     40 
     41  EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc());
     42  EXPECT_TRUE(parsed_bye.csrcs().empty());
     43  EXPECT_TRUE(parsed_bye.reason().empty());
     44 }
     45 
     46 TEST(RtcpPacketByeTest, CreateAndParseWithCsrcs) {
     47  Bye bye;
     48  bye.SetSenderSsrc(kSenderSsrc);
     49  EXPECT_TRUE(bye.SetCsrcs({kCsrc1, kCsrc2}));
     50  EXPECT_TRUE(bye.reason().empty());
     51 
     52  Buffer raw = bye.Build();
     53  Bye parsed_bye;
     54  EXPECT_TRUE(test::ParseSinglePacket(raw, &parsed_bye));
     55 
     56  EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc());
     57  EXPECT_THAT(parsed_bye.csrcs(), ElementsAre(kCsrc1, kCsrc2));
     58  EXPECT_TRUE(parsed_bye.reason().empty());
     59 }
     60 
     61 TEST(RtcpPacketByeTest, CreateAndParseWithCsrcsAndAReason) {
     62  Bye bye;
     63  const std::string kReason = "Some Reason";
     64 
     65  bye.SetSenderSsrc(kSenderSsrc);
     66  EXPECT_TRUE(bye.SetCsrcs({kCsrc1, kCsrc2}));
     67  bye.SetReason(kReason);
     68 
     69  Buffer raw = bye.Build();
     70  Bye parsed_bye;
     71  EXPECT_TRUE(test::ParseSinglePacket(raw, &parsed_bye));
     72 
     73  EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc());
     74  EXPECT_THAT(parsed_bye.csrcs(), ElementsAre(kCsrc1, kCsrc2));
     75  EXPECT_EQ(kReason, parsed_bye.reason());
     76 }
     77 
     78 TEST(RtcpPacketByeTest, CreateWithTooManyCsrcs) {
     79  Bye bye;
     80  bye.SetSenderSsrc(kSenderSsrc);
     81  const int kMaxCsrcs = (1 << 5) - 2;  // 5 bit len, first item is sender SSRC.
     82  EXPECT_TRUE(bye.SetCsrcs(std::vector<uint32_t>(kMaxCsrcs, kCsrc1)));
     83  EXPECT_FALSE(bye.SetCsrcs(std::vector<uint32_t>(kMaxCsrcs + 1, kCsrc1)));
     84 }
     85 
     86 TEST(RtcpPacketByeTest, CreateAndParseWithAReason) {
     87  Bye bye;
     88  const std::string kReason = "Some Random Reason";
     89 
     90  bye.SetSenderSsrc(kSenderSsrc);
     91  bye.SetReason(kReason);
     92 
     93  Buffer raw = bye.Build();
     94  Bye parsed_bye;
     95  EXPECT_TRUE(test::ParseSinglePacket(raw, &parsed_bye));
     96 
     97  EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc());
     98  EXPECT_TRUE(parsed_bye.csrcs().empty());
     99  EXPECT_EQ(kReason, parsed_bye.reason());
    100 }
    101 
    102 TEST(RtcpPacketByeTest, CreateAndParseWithReasons) {
    103  // Test that packet creation/parsing behave with reasons of different length
    104  // both when it require padding and when it does not.
    105  for (size_t reminder = 0; reminder < 4; ++reminder) {
    106    const std::string kReason(4 + reminder, 'a' + reminder);
    107    Bye bye;
    108    bye.SetSenderSsrc(kSenderSsrc);
    109    bye.SetReason(kReason);
    110 
    111    Buffer raw = bye.Build();
    112    Bye parsed_bye;
    113    EXPECT_TRUE(test::ParseSinglePacket(raw, &parsed_bye));
    114 
    115    EXPECT_EQ(kReason, parsed_bye.reason());
    116  }
    117 }
    118 
    119 TEST(RtcpPacketByeTest, ParseEmptyPacket) {
    120  uint8_t kEmptyPacket[] = {0x80, Bye::kPacketType, 0, 0};
    121  Bye parsed_bye;
    122  EXPECT_TRUE(test::ParseSinglePacket(kEmptyPacket, &parsed_bye));
    123  EXPECT_EQ(0u, parsed_bye.sender_ssrc());
    124  EXPECT_TRUE(parsed_bye.csrcs().empty());
    125  EXPECT_TRUE(parsed_bye.reason().empty());
    126 }
    127 
    128 TEST(RtcpPacketByeTest, ParseFailOnInvalidSrcCount) {
    129  Bye bye;
    130  bye.SetSenderSsrc(kSenderSsrc);
    131 
    132  Buffer raw = bye.Build();
    133  raw[0]++;  // Damage the packet: increase ssrc count by one.
    134 
    135  Bye parsed_bye;
    136  EXPECT_FALSE(test::ParseSinglePacket(raw, &parsed_bye));
    137 }
    138 
    139 TEST(RtcpPacketByeTest, ParseFailOnInvalidReasonLength) {
    140  Bye bye;
    141  bye.SetSenderSsrc(kSenderSsrc);
    142  bye.SetReason("18 characters long");
    143 
    144  Buffer raw = bye.Build();
    145  // Damage the packet: decrease payload size by 4 bytes
    146  raw[3]--;
    147  raw.SetSize(raw.size() - 4);
    148 
    149  Bye parsed_bye;
    150  EXPECT_FALSE(test::ParseSinglePacket(raw, &parsed_bye));
    151 }
    152 
    153 }  // namespace webrtc