tor-browser

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

rtp_parameters_unittest.cc (13983B)


      1 /*
      2 *  Copyright (c) 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 
     11 #include "api/rtp_parameters.h"
     12 
     13 #include <vector>
     14 
     15 #include "test/gtest.h"
     16 
     17 namespace webrtc {
     18 
     19 
     20 static const char kExtensionUri1[] = "extension-uri1";
     21 static const char kExtensionUri2[] = "extension-uri2";
     22 
     23 static const RtpExtension kExtension1(kExtensionUri1, 1);
     24 static const RtpExtension kExtension1Encrypted(kExtensionUri1, 10, true);
     25 static const RtpExtension kExtension2(kExtensionUri2, 2);
     26 
     27 TEST(RtpExtensionTest, DeduplicateHeaderExtensions) {
     28  std::vector<RtpExtension> extensions;
     29  std::vector<RtpExtension> filtered;
     30 
     31  extensions.clear();
     32  extensions.push_back(kExtension1);
     33  extensions.push_back(kExtension1Encrypted);
     34  filtered = RtpExtension::DeduplicateHeaderExtensions(
     35      extensions, RtpExtension::Filter::kDiscardEncryptedExtension);
     36  EXPECT_EQ(1u, filtered.size());
     37  EXPECT_EQ(std::vector<RtpExtension>{kExtension1}, filtered);
     38 
     39  extensions.clear();
     40  extensions.push_back(kExtension1);
     41  extensions.push_back(kExtension1Encrypted);
     42  filtered = RtpExtension::DeduplicateHeaderExtensions(
     43      extensions, RtpExtension::Filter::kPreferEncryptedExtension);
     44  EXPECT_EQ(1u, filtered.size());
     45  EXPECT_EQ(std::vector<RtpExtension>{kExtension1Encrypted}, filtered);
     46 
     47  extensions.clear();
     48  extensions.push_back(kExtension1);
     49  extensions.push_back(kExtension1Encrypted);
     50  filtered = RtpExtension::DeduplicateHeaderExtensions(
     51      extensions, RtpExtension::Filter::kRequireEncryptedExtension);
     52  EXPECT_EQ(1u, filtered.size());
     53  EXPECT_EQ(std::vector<RtpExtension>{kExtension1Encrypted}, filtered);
     54 
     55  extensions.clear();
     56  extensions.push_back(kExtension1Encrypted);
     57  extensions.push_back(kExtension1);
     58  filtered = RtpExtension::DeduplicateHeaderExtensions(
     59      extensions, RtpExtension::Filter::kDiscardEncryptedExtension);
     60  EXPECT_EQ(1u, filtered.size());
     61  EXPECT_EQ(std::vector<RtpExtension>{kExtension1}, filtered);
     62 
     63  extensions.clear();
     64  extensions.push_back(kExtension1Encrypted);
     65  extensions.push_back(kExtension1);
     66  filtered = RtpExtension::DeduplicateHeaderExtensions(
     67      extensions, RtpExtension::Filter::kPreferEncryptedExtension);
     68  EXPECT_EQ(1u, filtered.size());
     69  EXPECT_EQ(std::vector<RtpExtension>{kExtension1Encrypted}, filtered);
     70 
     71  extensions.clear();
     72  extensions.push_back(kExtension1Encrypted);
     73  extensions.push_back(kExtension1);
     74  filtered = RtpExtension::DeduplicateHeaderExtensions(
     75      extensions, RtpExtension::Filter::kRequireEncryptedExtension);
     76  EXPECT_EQ(1u, filtered.size());
     77  EXPECT_EQ(std::vector<RtpExtension>{kExtension1Encrypted}, filtered);
     78 
     79  extensions.clear();
     80  extensions.push_back(kExtension1);
     81  extensions.push_back(kExtension2);
     82  filtered = RtpExtension::DeduplicateHeaderExtensions(
     83      extensions, RtpExtension::Filter::kDiscardEncryptedExtension);
     84  EXPECT_EQ(2u, filtered.size());
     85  EXPECT_EQ(extensions, filtered);
     86  filtered = RtpExtension::DeduplicateHeaderExtensions(
     87      extensions, RtpExtension::Filter::kPreferEncryptedExtension);
     88  EXPECT_EQ(2u, filtered.size());
     89  EXPECT_EQ(extensions, filtered);
     90  filtered = RtpExtension::DeduplicateHeaderExtensions(
     91      extensions, RtpExtension::Filter::kRequireEncryptedExtension);
     92  EXPECT_EQ(0u, filtered.size());
     93 
     94  extensions.clear();
     95  extensions.push_back(kExtension1);
     96  extensions.push_back(kExtension2);
     97  extensions.push_back(kExtension1Encrypted);
     98  filtered = RtpExtension::DeduplicateHeaderExtensions(
     99      extensions, RtpExtension::Filter::kDiscardEncryptedExtension);
    100  EXPECT_EQ(2u, filtered.size());
    101  EXPECT_EQ((std::vector<RtpExtension>{kExtension1, kExtension2}), filtered);
    102  filtered = RtpExtension::DeduplicateHeaderExtensions(
    103      extensions, RtpExtension::Filter::kPreferEncryptedExtension);
    104  EXPECT_EQ(2u, filtered.size());
    105  EXPECT_EQ((std::vector<RtpExtension>{kExtension1Encrypted, kExtension2}),
    106            filtered);
    107  filtered = RtpExtension::DeduplicateHeaderExtensions(
    108      extensions, RtpExtension::Filter::kRequireEncryptedExtension);
    109  EXPECT_EQ(1u, filtered.size());
    110  EXPECT_EQ((std::vector<RtpExtension>{kExtension1Encrypted}), filtered);
    111 }
    112 
    113 // Test that the filtered vector is sorted so that for a given unsorted array of
    114 // extensions, the filtered vector will always be laied out the same (for easy
    115 // comparison).
    116 TEST(RtpExtensionTest, DeduplicateHeaderExtensionsSorted) {
    117  const std::vector<RtpExtension> extensions = {
    118      RtpExtension("cde1", 11, false), RtpExtension("cde2", 12, true),
    119      RtpExtension("abc1", 3, false),  RtpExtension("abc2", 4, true),
    120      RtpExtension("cde3", 9, true),   RtpExtension("cde4", 10, false),
    121      RtpExtension("abc3", 1, true),   RtpExtension("abc4", 2, false),
    122      RtpExtension("bcd3", 7, false),  RtpExtension("bcd1", 8, true),
    123      RtpExtension("bcd2", 5, true),   RtpExtension("bcd4", 6, false),
    124  };
    125 
    126  auto encrypted = RtpExtension::DeduplicateHeaderExtensions(
    127      extensions, RtpExtension::Filter::kRequireEncryptedExtension);
    128 
    129  const std::vector<RtpExtension> expected_sorted_encrypted = {
    130      RtpExtension("abc2", 4, true),  RtpExtension("abc3", 1, true),
    131      RtpExtension("bcd1", 8, true),  RtpExtension("bcd2", 5, true),
    132      RtpExtension("cde2", 12, true), RtpExtension("cde3", 9, true)};
    133  EXPECT_EQ(expected_sorted_encrypted, encrypted);
    134 
    135  auto unencypted = RtpExtension::DeduplicateHeaderExtensions(
    136      extensions, RtpExtension::Filter::kDiscardEncryptedExtension);
    137 
    138  const std::vector<RtpExtension> expected_sorted_unencrypted = {
    139      RtpExtension("abc1", 3, false),  RtpExtension("abc4", 2, false),
    140      RtpExtension("bcd3", 7, false),  RtpExtension("bcd4", 6, false),
    141      RtpExtension("cde1", 11, false), RtpExtension("cde4", 10, false)};
    142  EXPECT_EQ(expected_sorted_unencrypted, unencypted);
    143 }
    144 
    145 TEST(RtpExtensionTest, FindHeaderExtensionByUriAndEncryption) {
    146  std::vector<RtpExtension> extensions;
    147 
    148  extensions.clear();
    149  EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUriAndEncryption(
    150                         extensions, kExtensionUri1, false));
    151 
    152  extensions.clear();
    153  extensions.push_back(kExtension1);
    154  EXPECT_EQ(kExtension1, *RtpExtension::FindHeaderExtensionByUriAndEncryption(
    155                             extensions, kExtensionUri1, false));
    156  EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUriAndEncryption(
    157                         extensions, kExtensionUri1, true));
    158  EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUriAndEncryption(
    159                         extensions, kExtensionUri2, false));
    160 
    161  extensions.clear();
    162  extensions.push_back(kExtension1);
    163  extensions.push_back(kExtension2);
    164  extensions.push_back(kExtension1Encrypted);
    165  EXPECT_EQ(kExtension1, *RtpExtension::FindHeaderExtensionByUriAndEncryption(
    166                             extensions, kExtensionUri1, false));
    167  EXPECT_EQ(kExtension2, *RtpExtension::FindHeaderExtensionByUriAndEncryption(
    168                             extensions, kExtensionUri2, false));
    169  EXPECT_EQ(kExtension1Encrypted,
    170            *RtpExtension::FindHeaderExtensionByUriAndEncryption(
    171                extensions, kExtensionUri1, true));
    172  EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUriAndEncryption(
    173                         extensions, kExtensionUri2, true));
    174 }
    175 
    176 TEST(RtpExtensionTest, FindHeaderExtensionByUri) {
    177  std::vector<RtpExtension> extensions;
    178 
    179  extensions.clear();
    180  EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUri(
    181                         extensions, kExtensionUri1,
    182                         RtpExtension::Filter::kDiscardEncryptedExtension));
    183  EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUri(
    184                         extensions, kExtensionUri1,
    185                         RtpExtension::Filter::kPreferEncryptedExtension));
    186  EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUri(
    187                         extensions, kExtensionUri1,
    188                         RtpExtension::Filter::kRequireEncryptedExtension));
    189 
    190  extensions.clear();
    191  extensions.push_back(kExtension1);
    192  EXPECT_EQ(kExtension1, *RtpExtension::FindHeaderExtensionByUri(
    193                             extensions, kExtensionUri1,
    194                             RtpExtension::Filter::kDiscardEncryptedExtension));
    195  EXPECT_EQ(kExtension1, *RtpExtension::FindHeaderExtensionByUri(
    196                             extensions, kExtensionUri1,
    197                             RtpExtension::Filter::kPreferEncryptedExtension));
    198  EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUri(
    199                         extensions, kExtensionUri1,
    200                         RtpExtension::Filter::kRequireEncryptedExtension));
    201  EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUri(
    202                         extensions, kExtensionUri2,
    203                         RtpExtension::Filter::kDiscardEncryptedExtension));
    204  EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUri(
    205                         extensions, kExtensionUri2,
    206                         RtpExtension::Filter::kPreferEncryptedExtension));
    207  EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUri(
    208                         extensions, kExtensionUri2,
    209                         RtpExtension::Filter::kRequireEncryptedExtension));
    210 
    211  extensions.clear();
    212  extensions.push_back(kExtension1);
    213  extensions.push_back(kExtension1Encrypted);
    214  EXPECT_EQ(kExtension1, *RtpExtension::FindHeaderExtensionByUri(
    215                             extensions, kExtensionUri1,
    216                             RtpExtension::Filter::kDiscardEncryptedExtension));
    217 
    218  extensions.clear();
    219  extensions.push_back(kExtension1);
    220  extensions.push_back(kExtension1Encrypted);
    221  EXPECT_EQ(kExtension1Encrypted,
    222            *RtpExtension::FindHeaderExtensionByUri(
    223                extensions, kExtensionUri1,
    224                RtpExtension::Filter::kPreferEncryptedExtension));
    225 
    226  extensions.clear();
    227  extensions.push_back(kExtension1);
    228  extensions.push_back(kExtension1Encrypted);
    229  EXPECT_EQ(kExtension1Encrypted,
    230            *RtpExtension::FindHeaderExtensionByUri(
    231                extensions, kExtensionUri1,
    232                RtpExtension::Filter::kRequireEncryptedExtension));
    233 
    234  extensions.clear();
    235  extensions.push_back(kExtension1Encrypted);
    236  extensions.push_back(kExtension1);
    237  EXPECT_EQ(kExtension1, *RtpExtension::FindHeaderExtensionByUri(
    238                             extensions, kExtensionUri1,
    239                             RtpExtension::Filter::kDiscardEncryptedExtension));
    240 
    241  extensions.clear();
    242  extensions.push_back(kExtension1Encrypted);
    243  extensions.push_back(kExtension1);
    244  EXPECT_EQ(kExtension1Encrypted,
    245            *RtpExtension::FindHeaderExtensionByUri(
    246                extensions, kExtensionUri1,
    247                RtpExtension::Filter::kPreferEncryptedExtension));
    248 
    249  extensions.clear();
    250  extensions.push_back(kExtension1Encrypted);
    251  extensions.push_back(kExtension1);
    252  EXPECT_EQ(kExtension1Encrypted,
    253            *RtpExtension::FindHeaderExtensionByUri(
    254                extensions, kExtensionUri1,
    255                RtpExtension::Filter::kRequireEncryptedExtension));
    256 
    257  extensions.clear();
    258  extensions.push_back(kExtension1);
    259  extensions.push_back(kExtension2);
    260  EXPECT_EQ(kExtension1, *RtpExtension::FindHeaderExtensionByUri(
    261                             extensions, kExtensionUri1,
    262                             RtpExtension::Filter::kDiscardEncryptedExtension));
    263  EXPECT_EQ(kExtension1, *RtpExtension::FindHeaderExtensionByUri(
    264                             extensions, kExtensionUri1,
    265                             RtpExtension::Filter::kPreferEncryptedExtension));
    266  EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUri(
    267                         extensions, kExtensionUri1,
    268                         RtpExtension::Filter::kRequireEncryptedExtension));
    269  EXPECT_EQ(kExtension2, *RtpExtension::FindHeaderExtensionByUri(
    270                             extensions, kExtensionUri2,
    271                             RtpExtension::Filter::kDiscardEncryptedExtension));
    272  EXPECT_EQ(kExtension2, *RtpExtension::FindHeaderExtensionByUri(
    273                             extensions, kExtensionUri2,
    274                             RtpExtension::Filter::kPreferEncryptedExtension));
    275  EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUri(
    276                         extensions, kExtensionUri2,
    277                         RtpExtension::Filter::kRequireEncryptedExtension));
    278 
    279  extensions.clear();
    280  extensions.push_back(kExtension1);
    281  extensions.push_back(kExtension2);
    282  extensions.push_back(kExtension1Encrypted);
    283  EXPECT_EQ(kExtension1, *RtpExtension::FindHeaderExtensionByUri(
    284                             extensions, kExtensionUri1,
    285                             RtpExtension::Filter::kDiscardEncryptedExtension));
    286  EXPECT_EQ(kExtension1Encrypted,
    287            *RtpExtension::FindHeaderExtensionByUri(
    288                extensions, kExtensionUri1,
    289                RtpExtension::Filter::kPreferEncryptedExtension));
    290  EXPECT_EQ(kExtension1Encrypted,
    291            *RtpExtension::FindHeaderExtensionByUri(
    292                extensions, kExtensionUri1,
    293                RtpExtension::Filter::kRequireEncryptedExtension));
    294  EXPECT_EQ(kExtension2, *RtpExtension::FindHeaderExtensionByUri(
    295                             extensions, kExtensionUri2,
    296                             RtpExtension::Filter::kDiscardEncryptedExtension));
    297  EXPECT_EQ(kExtension2, *RtpExtension::FindHeaderExtensionByUri(
    298                             extensions, kExtensionUri2,
    299                             RtpExtension::Filter::kPreferEncryptedExtension));
    300  EXPECT_EQ(nullptr, RtpExtension::FindHeaderExtensionByUri(
    301                         extensions, kExtensionUri2,
    302                         RtpExtension::Filter::kRequireEncryptedExtension));
    303 }
    304 }  // namespace webrtc