blob: 997d6e31e1f655aa2b81087dfdb4c12a456f5f4f [file] [log] [blame]
deadbeeff137e972017-03-23 15:45:49 -07001/*
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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#include "rtc_base/httpcommon.h"
12#include "rtc_base/gunit.h"
13#include "rtc_base/httpcommon-inl.h"
deadbeeff137e972017-03-23 15:45:49 -070014
15namespace 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
23TEST(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
36TEST(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
73TEST(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
89TEST(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
102TEST(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
112TEST(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
122TEST(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
131TEST(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
140TEST(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
149TEST(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
158TEST(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