Home | History | Annotate | Download | only in base
      1 /*
      2  *  Copyright 2004 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 "webrtc/base/gunit.h"
     12 #include "webrtc/base/httpcommon-inl.h"
     13 #include "webrtc/base/httpcommon.h"
     14 
     15 namespace rtc {
     16 
     17 #define TEST_PROTOCOL "http://"
     18 #define TEST_HOST "www.google.com"
     19 #define TEST_PATH "/folder/file.html"
     20 #define TEST_QUERY "?query=x&attr=y"
     21 #define TEST_URL TEST_PROTOCOL TEST_HOST TEST_PATH TEST_QUERY
     22 
     23 TEST(Url, DecomposesUrls) {
     24   Url<char> url(TEST_URL);
     25   EXPECT_TRUE(url.valid());
     26   EXPECT_FALSE(url.secure());
     27   EXPECT_STREQ(TEST_HOST, url.host().c_str());
     28   EXPECT_EQ(80, url.port());
     29   EXPECT_STREQ(TEST_PATH, url.path().c_str());
     30   EXPECT_STREQ(TEST_QUERY, url.query().c_str());
     31   EXPECT_STREQ(TEST_HOST, url.address().c_str());
     32   EXPECT_STREQ(TEST_PATH TEST_QUERY, url.full_path().c_str());
     33   EXPECT_STREQ(TEST_URL, url.url().c_str());
     34 }
     35 
     36 TEST(Url, ComposesUrls) {
     37   // Set in constructor
     38   Url<char> url(TEST_PATH TEST_QUERY, TEST_HOST, 80);
     39   EXPECT_TRUE(url.valid());
     40   EXPECT_FALSE(url.secure());
     41   EXPECT_STREQ(TEST_HOST, url.host().c_str());
     42   EXPECT_EQ(80, url.port());
     43   EXPECT_STREQ(TEST_PATH, url.path().c_str());
     44   EXPECT_STREQ(TEST_QUERY, url.query().c_str());
     45   EXPECT_STREQ(TEST_HOST, url.address().c_str());
     46   EXPECT_STREQ(TEST_PATH TEST_QUERY, url.full_path().c_str());
     47   EXPECT_STREQ(TEST_URL, url.url().c_str());
     48 
     49   url.clear();
     50   EXPECT_FALSE(url.valid());
     51   EXPECT_FALSE(url.secure());
     52   EXPECT_STREQ("", url.host().c_str());
     53   EXPECT_EQ(80, url.port());
     54   EXPECT_STREQ("/", url.path().c_str());
     55   EXPECT_STREQ("", url.query().c_str());
     56 
     57   // Set component-wise
     58   url.set_host(TEST_HOST);
     59   url.set_port(80);
     60   url.set_path(TEST_PATH);
     61   url.set_query(TEST_QUERY);
     62   EXPECT_TRUE(url.valid());
     63   EXPECT_FALSE(url.secure());
     64   EXPECT_STREQ(TEST_HOST, url.host().c_str());
     65   EXPECT_EQ(80, url.port());
     66   EXPECT_STREQ(TEST_PATH, url.path().c_str());
     67   EXPECT_STREQ(TEST_QUERY, url.query().c_str());
     68   EXPECT_STREQ(TEST_HOST, url.address().c_str());
     69   EXPECT_STREQ(TEST_PATH TEST_QUERY, url.full_path().c_str());
     70   EXPECT_STREQ(TEST_URL, url.url().c_str());
     71 }
     72 
     73 TEST(Url, EnsuresNonEmptyPath) {
     74   Url<char> url(TEST_PROTOCOL TEST_HOST);
     75   EXPECT_TRUE(url.valid());
     76   EXPECT_STREQ("/", url.path().c_str());
     77 
     78   url.clear();
     79   EXPECT_STREQ("/", url.path().c_str());
     80   url.set_path("");
     81   EXPECT_STREQ("/", url.path().c_str());
     82 
     83   url.clear();
     84   EXPECT_STREQ("/", url.path().c_str());
     85   url.set_full_path("");
     86   EXPECT_STREQ("/", url.path().c_str());
     87 }
     88 
     89 TEST(Url, GetQueryAttributes) {
     90   Url<char> url(TEST_URL);
     91   std::string value;
     92   EXPECT_TRUE(url.get_attribute("query", &value));
     93   EXPECT_STREQ("x", value.c_str());
     94   value.clear();
     95   EXPECT_TRUE(url.get_attribute("attr", &value));
     96   EXPECT_STREQ("y", value.c_str());
     97   value.clear();
     98   EXPECT_FALSE(url.get_attribute("Query", &value));
     99   EXPECT_TRUE(value.empty());
    100 }
    101 
    102 TEST(Url, SkipsUserAndPassword) {
    103   Url<char> url("https://mail.google.com:pwd@badsite.com:12345/asdf");
    104   EXPECT_TRUE(url.valid());
    105   EXPECT_TRUE(url.secure());
    106   EXPECT_STREQ("badsite.com", url.host().c_str());
    107   EXPECT_EQ(12345, url.port());
    108   EXPECT_STREQ("/asdf", url.path().c_str());
    109   EXPECT_STREQ("badsite.com:12345", url.address().c_str());
    110 }
    111 
    112 TEST(Url, SkipsUser) {
    113   Url<char> url("https://mail.google.com@badsite.com:12345/asdf");
    114   EXPECT_TRUE(url.valid());
    115   EXPECT_TRUE(url.secure());
    116   EXPECT_STREQ("badsite.com", url.host().c_str());
    117   EXPECT_EQ(12345, url.port());
    118   EXPECT_STREQ("/asdf", url.path().c_str());
    119   EXPECT_STREQ("badsite.com:12345", url.address().c_str());
    120 }
    121 
    122 TEST(HttpResponseData, parseLeaderHttp1_0) {
    123   static const char kResponseString[] = "HTTP/1.0 200 OK";
    124   HttpResponseData response;
    125   EXPECT_EQ(HE_NONE, response.parseLeader(kResponseString,
    126                                           sizeof(kResponseString) - 1));
    127   EXPECT_EQ(HVER_1_0, response.version);
    128   EXPECT_EQ(200U, response.scode);
    129 }
    130 
    131 TEST(HttpResponseData, parseLeaderHttp1_1) {
    132   static const char kResponseString[] = "HTTP/1.1 200 OK";
    133   HttpResponseData response;
    134   EXPECT_EQ(HE_NONE, response.parseLeader(kResponseString,
    135                                           sizeof(kResponseString) - 1));
    136   EXPECT_EQ(HVER_1_1, response.version);
    137   EXPECT_EQ(200U, response.scode);
    138 }
    139 
    140 TEST(HttpResponseData, parseLeaderHttpUnknown) {
    141   static const char kResponseString[] = "HTTP 200 OK";
    142   HttpResponseData response;
    143   EXPECT_EQ(HE_NONE, response.parseLeader(kResponseString,
    144                                           sizeof(kResponseString) - 1));
    145   EXPECT_EQ(HVER_UNKNOWN, response.version);
    146   EXPECT_EQ(200U, response.scode);
    147 }
    148 
    149 TEST(HttpResponseData, parseLeaderHttpFailure) {
    150   static const char kResponseString[] = "HTTP/1.1 503 Service Unavailable";
    151   HttpResponseData response;
    152   EXPECT_EQ(HE_NONE, response.parseLeader(kResponseString,
    153                                           sizeof(kResponseString) - 1));
    154   EXPECT_EQ(HVER_1_1, response.version);
    155   EXPECT_EQ(503U, response.scode);
    156 }
    157 
    158 TEST(HttpResponseData, parseLeaderHttpInvalid) {
    159   static const char kResponseString[] = "Durrrrr, what's HTTP?";
    160   HttpResponseData response;
    161   EXPECT_EQ(HE_PROTOCOL, response.parseLeader(kResponseString,
    162                                               sizeof(kResponseString) - 1));
    163 }
    164 
    165 } // namespace rtc
    166