tor-browser

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

TestSocketTransportService.cpp (7046B)


      1 #include "gtest/gtest.h"
      2 
      3 #include "nsCOMPtr.h"
      4 #include "nsISocketTransport.h"
      5 #include "nsString.h"
      6 #include "nsComponentManagerUtils.h"
      7 #include "../../base/nsSocketTransportService2.h"
      8 #include "nsServiceManagerUtils.h"
      9 #include "nsThreadUtils.h"
     10 
     11 namespace mozilla {
     12 namespace net {
     13 
     14 TEST(TestSocketTransportService, PortRemappingPreferenceReading)
     15 {
     16  nsCOMPtr<nsISocketTransportService> service =
     17      do_GetService("@mozilla.org/network/socket-transport-service;1");
     18  ASSERT_TRUE(service);
     19 
     20  auto* sts = gSocketTransportService;
     21  ASSERT_TRUE(sts);
     22 
     23  NS_DispatchAndSpinEventLoopUntilComplete(
     24      "test"_ns, sts, NS_NewRunnableFunction("test", [&]() {
     25        auto CheckPortRemap = [&](uint16_t input, uint16_t output) -> bool {
     26          sts->ApplyPortRemap(&input);
     27          return input == output;
     28        };
     29 
     30        // Ill-formed prefs
     31        ASSERT_FALSE(sts->UpdatePortRemapPreference(";"_ns));
     32        ASSERT_FALSE(sts->UpdatePortRemapPreference(" ;"_ns));
     33        ASSERT_FALSE(sts->UpdatePortRemapPreference("; "_ns));
     34        ASSERT_FALSE(sts->UpdatePortRemapPreference("foo"_ns));
     35        ASSERT_FALSE(sts->UpdatePortRemapPreference(" foo"_ns));
     36        ASSERT_FALSE(sts->UpdatePortRemapPreference(" foo "_ns));
     37        ASSERT_FALSE(sts->UpdatePortRemapPreference("10=20;"_ns));
     38 
     39        ASSERT_FALSE(sts->UpdatePortRemapPreference("1"_ns));
     40        ASSERT_FALSE(sts->UpdatePortRemapPreference("1="_ns));
     41        ASSERT_FALSE(sts->UpdatePortRemapPreference("1,="_ns));
     42        ASSERT_FALSE(sts->UpdatePortRemapPreference("1-="_ns));
     43        ASSERT_FALSE(sts->UpdatePortRemapPreference("1-,="_ns));
     44 
     45        ASSERT_FALSE(sts->UpdatePortRemapPreference("1=2,"_ns));
     46        ASSERT_FALSE(sts->UpdatePortRemapPreference("1=2-3"_ns));
     47        ASSERT_FALSE(sts->UpdatePortRemapPreference("1-2,=3"_ns));
     48        ASSERT_FALSE(sts->UpdatePortRemapPreference("1-2,3"_ns));
     49        ASSERT_FALSE(sts->UpdatePortRemapPreference("1-2,3-4"_ns));
     50        ASSERT_FALSE(sts->UpdatePortRemapPreference("1-2,3-4,"_ns));
     51        ASSERT_FALSE(sts->UpdatePortRemapPreference("1-2,3-4="_ns));
     52        ASSERT_FALSE(sts->UpdatePortRemapPreference("10000000=10"_ns));
     53 
     54        ASSERT_FALSE(sts->UpdatePortRemapPreference("1=2;3"_ns));
     55        ASSERT_FALSE(sts->UpdatePortRemapPreference("1-4=2;3"_ns));
     56        ASSERT_FALSE(sts->UpdatePortRemapPreference("1-4=2;3="_ns));
     57        ASSERT_FALSE(sts->UpdatePortRemapPreference("1-foo=2;3=15"_ns));
     58        ASSERT_FALSE(sts->UpdatePortRemapPreference("1-4=foo;3=15"_ns));
     59        ASSERT_FALSE(sts->UpdatePortRemapPreference("1-4=2;foo=15"_ns));
     60        ASSERT_FALSE(sts->UpdatePortRemapPreference("1-4=2;3=foo"_ns));
     61        ASSERT_FALSE(sts->UpdatePortRemapPreference("1-4=2x3=15"_ns));
     62        ASSERT_FALSE(sts->UpdatePortRemapPreference("1+4=2;3=15"_ns));
     63 
     64        // Well-formed prefs
     65        ASSERT_TRUE(sts->UpdatePortRemapPreference("1=2"_ns));
     66        ASSERT_TRUE(CheckPortRemap(1, 2));
     67        ASSERT_TRUE(CheckPortRemap(2, 2));
     68        ASSERT_TRUE(CheckPortRemap(3, 3));
     69 
     70        ASSERT_TRUE(sts->UpdatePortRemapPreference("10=20"_ns));
     71        ASSERT_TRUE(CheckPortRemap(1, 1));
     72        ASSERT_TRUE(CheckPortRemap(2, 2));
     73        ASSERT_TRUE(CheckPortRemap(3, 3));
     74        ASSERT_TRUE(CheckPortRemap(10, 20));
     75 
     76        ASSERT_TRUE(sts->UpdatePortRemapPreference("100-200=1000"_ns));
     77        ASSERT_TRUE(CheckPortRemap(10, 10));
     78        ASSERT_TRUE(CheckPortRemap(99, 99));
     79        ASSERT_TRUE(CheckPortRemap(100, 1000));
     80        ASSERT_TRUE(CheckPortRemap(101, 1000));
     81        ASSERT_TRUE(CheckPortRemap(200, 1000));
     82        ASSERT_TRUE(CheckPortRemap(201, 201));
     83 
     84        ASSERT_TRUE(sts->UpdatePortRemapPreference("100-200,500=1000"_ns));
     85        ASSERT_TRUE(CheckPortRemap(10, 10));
     86        ASSERT_TRUE(CheckPortRemap(99, 99));
     87        ASSERT_TRUE(CheckPortRemap(100, 1000));
     88        ASSERT_TRUE(CheckPortRemap(101, 1000));
     89        ASSERT_TRUE(CheckPortRemap(200, 1000));
     90        ASSERT_TRUE(CheckPortRemap(201, 201));
     91        ASSERT_TRUE(CheckPortRemap(499, 499));
     92        ASSERT_TRUE(CheckPortRemap(500, 1000));
     93        ASSERT_TRUE(CheckPortRemap(501, 501));
     94 
     95        ASSERT_TRUE(sts->UpdatePortRemapPreference("1-3=10;5-8,12=20"_ns));
     96        ASSERT_TRUE(CheckPortRemap(1, 10));
     97        ASSERT_TRUE(CheckPortRemap(2, 10));
     98        ASSERT_TRUE(CheckPortRemap(3, 10));
     99        ASSERT_TRUE(CheckPortRemap(4, 4));
    100        ASSERT_TRUE(CheckPortRemap(5, 20));
    101        ASSERT_TRUE(CheckPortRemap(8, 20));
    102        ASSERT_TRUE(CheckPortRemap(11, 11));
    103        ASSERT_TRUE(CheckPortRemap(12, 20));
    104 
    105        ASSERT_TRUE(sts->UpdatePortRemapPreference("80=8080;443=8080"_ns));
    106        ASSERT_TRUE(CheckPortRemap(80, 8080));
    107        ASSERT_TRUE(CheckPortRemap(443, 8080));
    108 
    109        // Later rules rewrite earlier rules
    110        ASSERT_TRUE(sts->UpdatePortRemapPreference("10=100;10=200"_ns));
    111        ASSERT_TRUE(CheckPortRemap(10, 200));
    112 
    113        ASSERT_TRUE(sts->UpdatePortRemapPreference("10-20=100;10-20=200"_ns));
    114        ASSERT_TRUE(CheckPortRemap(10, 200));
    115        ASSERT_TRUE(CheckPortRemap(20, 200));
    116 
    117        ASSERT_TRUE(sts->UpdatePortRemapPreference("10-20=100;15=200"_ns));
    118        ASSERT_TRUE(CheckPortRemap(10, 100));
    119        ASSERT_TRUE(CheckPortRemap(15, 200));
    120        ASSERT_TRUE(CheckPortRemap(20, 100));
    121 
    122        ASSERT_TRUE(sts->UpdatePortRemapPreference(
    123            " 100 - 200 = 1000 ; 150 = 2000 "_ns));
    124        ASSERT_TRUE(CheckPortRemap(100, 1000));
    125        ASSERT_TRUE(CheckPortRemap(150, 2000));
    126        ASSERT_TRUE(CheckPortRemap(200, 1000));
    127 
    128        // Turn off any mapping
    129        ASSERT_TRUE(sts->UpdatePortRemapPreference(""_ns));
    130        for (uint32_t port = 0; port < 65536; ++port) {
    131          ASSERT_TRUE(CheckPortRemap((uint16_t)port, (uint16_t)port));
    132        }
    133      }));
    134 }
    135 
    136 TEST(TestSocketTransportService, StatusValues)
    137 {
    138  static_assert(static_cast<nsresult>(nsISocketTransport::STATUS_RESOLVING) ==
    139                NS_NET_STATUS_RESOLVING_HOST);
    140  static_assert(static_cast<nsresult>(nsISocketTransport::STATUS_RESOLVED) ==
    141                NS_NET_STATUS_RESOLVED_HOST);
    142  static_assert(
    143      static_cast<nsresult>(nsISocketTransport::STATUS_CONNECTING_TO) ==
    144      NS_NET_STATUS_CONNECTING_TO);
    145  static_assert(
    146      static_cast<nsresult>(nsISocketTransport::STATUS_CONNECTED_TO) ==
    147      NS_NET_STATUS_CONNECTED_TO);
    148  static_assert(static_cast<nsresult>(nsISocketTransport::STATUS_SENDING_TO) ==
    149                NS_NET_STATUS_SENDING_TO);
    150  static_assert(static_cast<nsresult>(nsISocketTransport::STATUS_WAITING_FOR) ==
    151                NS_NET_STATUS_WAITING_FOR);
    152  static_assert(
    153      static_cast<nsresult>(nsISocketTransport::STATUS_RECEIVING_FROM) ==
    154      NS_NET_STATUS_RECEIVING_FROM);
    155  static_assert(static_cast<nsresult>(
    156                    nsISocketTransport::STATUS_TLS_HANDSHAKE_STARTING) ==
    157                NS_NET_STATUS_TLS_HANDSHAKE_STARTING);
    158  static_assert(
    159      static_cast<nsresult>(nsISocketTransport::STATUS_TLS_HANDSHAKE_ENDED) ==
    160      NS_NET_STATUS_TLS_HANDSHAKE_ENDED);
    161 }
    162 
    163 }  // namespace net
    164 }  // namespace mozilla