1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "net/quic/quic_server_id.h"
6
7#include "testing/gtest/include/gtest/gtest.h"
8
9using std::string;
10
11namespace net {
12
13namespace {
14
15TEST(QuicServerIdTest, ToString) {
16  HostPortPair google_host_port_pair("google.com", 10);
17
18  QuicServerId google_http_server_id(google_host_port_pair, false,
19                                     PRIVACY_MODE_DISABLED);
20  string google_http_server_id_str = google_http_server_id.ToString();
21  EXPECT_EQ("http://google.com:10", google_http_server_id_str);
22
23  QuicServerId google_https_server_id(google_host_port_pair, true,
24                                      PRIVACY_MODE_DISABLED);
25  string google_https_server_id_str = google_https_server_id.ToString();
26  EXPECT_EQ("https://google.com:10", google_https_server_id_str);
27
28  QuicServerId private_http_server_id(google_host_port_pair, false,
29                                      PRIVACY_MODE_ENABLED);
30  string private_http_server_id_str = private_http_server_id.ToString();
31  EXPECT_EQ("http://google.com:10/private", private_http_server_id_str);
32
33  QuicServerId private_https_server_id(google_host_port_pair, true,
34                                       PRIVACY_MODE_ENABLED);
35  string private_https_server_id_str = private_https_server_id.ToString();
36  EXPECT_EQ("https://google.com:10/private", private_https_server_id_str);
37}
38
39TEST(QuicServerIdTest, LessThan) {
40  QuicServerId a_10_http(HostPortPair("a.com", 10), false,
41                         PRIVACY_MODE_DISABLED);
42  QuicServerId a_10_https(HostPortPair("a.com", 10), true,
43                          PRIVACY_MODE_DISABLED);
44  QuicServerId a_11_http(HostPortPair("a.com", 11), false,
45                         PRIVACY_MODE_DISABLED);
46  QuicServerId a_11_https(HostPortPair("a.com", 11), true,
47                          PRIVACY_MODE_DISABLED);
48  QuicServerId b_10_http(HostPortPair("b.com", 10), false,
49                         PRIVACY_MODE_DISABLED);
50  QuicServerId b_10_https(HostPortPair("b.com", 10), true,
51                          PRIVACY_MODE_DISABLED);
52  QuicServerId b_11_http(HostPortPair("b.com", 11), false,
53                         PRIVACY_MODE_DISABLED);
54  QuicServerId b_11_https(HostPortPair("b.com", 11), true,
55                          PRIVACY_MODE_DISABLED);
56
57  QuicServerId a_10_http_private(HostPortPair("a.com", 10), false,
58                                 PRIVACY_MODE_ENABLED);
59  QuicServerId a_10_https_private(HostPortPair("a.com", 10), true,
60                                  PRIVACY_MODE_ENABLED);
61  QuicServerId a_11_http_private(HostPortPair("a.com", 11), false,
62                                 PRIVACY_MODE_ENABLED);
63  QuicServerId a_11_https_private(HostPortPair("a.com", 11), true,
64                                  PRIVACY_MODE_ENABLED);
65  QuicServerId b_10_http_private(HostPortPair("b.com", 10), false,
66                                 PRIVACY_MODE_ENABLED);
67  QuicServerId b_10_https_private(HostPortPair("b.com", 10), true,
68                                  PRIVACY_MODE_ENABLED);
69  QuicServerId b_11_http_private(HostPortPair("b.com", 11), false,
70                                 PRIVACY_MODE_ENABLED);
71  QuicServerId b_11_https_private(HostPortPair("b.com", 11), true,
72                                  PRIVACY_MODE_ENABLED);
73
74  // Test combinations of host, port, https and privacy being same on left and
75  // right side of less than.
76  EXPECT_FALSE(a_10_http  < a_10_http);
77  EXPECT_TRUE(a_10_http   < a_10_https);
78  EXPECT_FALSE(a_10_https < a_10_http);
79  EXPECT_FALSE(a_10_https < a_10_https);
80
81  EXPECT_TRUE(a_10_http   < a_10_http_private);
82  EXPECT_TRUE(a_10_http   < a_10_https_private);
83  EXPECT_FALSE(a_10_https < a_10_http_private);
84  EXPECT_TRUE(a_10_https  < a_10_https_private);
85
86  EXPECT_FALSE(a_10_http_private  < a_10_http);
87  EXPECT_TRUE(a_10_http_private   < a_10_https);
88  EXPECT_FALSE(a_10_https_private < a_10_http);
89  EXPECT_FALSE(a_10_https_private < a_10_https);
90
91  EXPECT_FALSE(a_10_http_private  < a_10_http_private);
92  EXPECT_TRUE(a_10_http_private   < a_10_https_private);
93  EXPECT_FALSE(a_10_https_private < a_10_http_private);
94  EXPECT_FALSE(a_10_https_private < a_10_https_private);
95
96  // Test with either host, port or https being different on left and right side
97  // of less than.
98  PrivacyMode left_privacy;
99  PrivacyMode right_privacy;
100  for (int i = 0; i < 4; i++) {
101    left_privacy = static_cast<PrivacyMode>(i / 2);
102    right_privacy = static_cast<PrivacyMode>(i % 2);
103    QuicServerId a_10_http_left_private(HostPortPair("a.com", 10), false,
104                                        left_privacy);
105    QuicServerId a_10_http_right_private(HostPortPair("a.com", 10), false,
106                                         right_privacy);
107    QuicServerId a_10_https_left_private(HostPortPair("a.com", 10), true,
108                                         left_privacy);
109    QuicServerId a_10_https_right_private(HostPortPair("a.com", 10), true,
110                                          right_privacy);
111    QuicServerId a_11_http_left_private(HostPortPair("a.com", 11), false,
112                                        left_privacy);
113    QuicServerId a_11_http_right_private(HostPortPair("a.com", 11), false,
114                                         right_privacy);
115    QuicServerId a_11_https_left_private(HostPortPair("a.com", 11), true,
116                                         left_privacy);
117    QuicServerId a_11_https_right_private(HostPortPair("a.com", 11), true,
118                                          right_privacy);
119
120    QuicServerId b_10_http_left_private(HostPortPair("b.com", 10), false,
121                                        left_privacy);
122    QuicServerId b_10_http_right_private(HostPortPair("b.com", 10), false,
123                                         right_privacy);
124    QuicServerId b_10_https_left_private(HostPortPair("b.com", 10), true,
125                                         left_privacy);
126    QuicServerId b_10_https_right_private(HostPortPair("b.com", 10), true,
127                                          right_privacy);
128    QuicServerId b_11_http_left_private(HostPortPair("b.com", 11), false,
129                                        left_privacy);
130    QuicServerId b_11_http_right_private(HostPortPair("b.com", 11), false,
131                                         right_privacy);
132    QuicServerId b_11_https_left_private(HostPortPair("b.com", 11), true,
133                                         left_privacy);
134    QuicServerId b_11_https_right_private(HostPortPair("b.com", 11), true,
135                                          right_privacy);
136
137    EXPECT_TRUE(a_10_http_left_private  < a_11_http_right_private);
138    EXPECT_TRUE(a_10_http_left_private  < a_11_https_right_private);
139    EXPECT_TRUE(a_10_https_left_private < a_11_http_right_private);
140    EXPECT_TRUE(a_10_https_left_private < a_11_https_right_private);
141
142    EXPECT_TRUE(a_10_http_left_private  < b_10_http_right_private);
143    EXPECT_TRUE(a_10_http_left_private  < b_10_https_right_private);
144    EXPECT_TRUE(a_10_https_left_private < b_10_http_right_private);
145    EXPECT_TRUE(a_10_https_left_private < b_10_https_right_private);
146
147    EXPECT_TRUE(a_10_http_left_private  < b_11_http_right_private);
148    EXPECT_TRUE(a_10_http_left_private  < b_11_https_right_private);
149    EXPECT_TRUE(a_10_https_left_private < b_11_http_right_private);
150    EXPECT_TRUE(a_10_https_left_private < b_11_https_right_private);
151
152    EXPECT_FALSE(a_11_http_left_private  < a_10_http_right_private);
153    EXPECT_FALSE(a_11_http_left_private  < a_10_https_right_private);
154    EXPECT_FALSE(a_11_https_left_private < a_10_http_right_private);
155    EXPECT_FALSE(a_11_https_left_private < a_10_https_right_private);
156
157    EXPECT_FALSE(a_11_http_left_private  < b_10_http_right_private);
158    EXPECT_FALSE(a_11_http_left_private  < b_10_https_right_private);
159    EXPECT_FALSE(a_11_https_left_private < b_10_http_right_private);
160    EXPECT_FALSE(a_11_https_left_private < b_10_https_right_private);
161
162    EXPECT_TRUE(a_11_http_left_private  < b_11_http_right_private);
163    EXPECT_TRUE(a_11_http_left_private  < b_11_https_right_private);
164    EXPECT_TRUE(a_11_https_left_private < b_11_http_right_private);
165    EXPECT_TRUE(a_11_https_left_private < b_11_https_right_private);
166
167    EXPECT_FALSE(b_10_http_left_private  < a_10_http_right_private);
168    EXPECT_FALSE(b_10_http_left_private  < a_10_https_right_private);
169    EXPECT_FALSE(b_10_https_left_private < a_10_http_right_private);
170    EXPECT_FALSE(b_10_https_left_private < a_10_https_right_private);
171
172    EXPECT_TRUE(b_10_http_left_private  < a_11_http_right_private);
173    EXPECT_TRUE(b_10_http_left_private  < a_11_https_right_private);
174    EXPECT_TRUE(b_10_https_left_private < a_11_http_right_private);
175    EXPECT_TRUE(b_10_https_left_private < a_11_https_right_private);
176
177    EXPECT_TRUE(b_10_http_left_private  < b_11_http_right_private);
178    EXPECT_TRUE(b_10_http_left_private  < b_11_https_right_private);
179    EXPECT_TRUE(b_10_https_left_private < b_11_http_right_private);
180    EXPECT_TRUE(b_10_https_left_private < b_11_https_right_private);
181
182    EXPECT_FALSE(b_11_http_left_private  < a_10_http_right_private);
183    EXPECT_FALSE(b_11_http_left_private  < a_10_https_right_private);
184    EXPECT_FALSE(b_11_https_left_private < a_10_http_right_private);
185    EXPECT_FALSE(b_11_https_left_private < a_10_https_right_private);
186
187    EXPECT_FALSE(b_11_http_left_private  < a_11_http_right_private);
188    EXPECT_FALSE(b_11_http_left_private  < a_11_https_right_private);
189    EXPECT_FALSE(b_11_https_left_private < a_11_http_right_private);
190    EXPECT_FALSE(b_11_https_left_private < a_11_https_right_private);
191
192    EXPECT_FALSE(b_11_http_left_private  < b_10_http_right_private);
193    EXPECT_FALSE(b_11_http_left_private  < b_10_https_right_private);
194    EXPECT_FALSE(b_11_https_left_private < b_10_http_right_private);
195    EXPECT_FALSE(b_11_https_left_private < b_10_https_right_private);
196  }
197}
198
199TEST(QuicServerIdTest, Equals) {
200  PrivacyMode left_privacy;
201  PrivacyMode right_privacy;
202  for (int i = 0; i < 2; i++) {
203    left_privacy = right_privacy = static_cast<PrivacyMode>(i);
204    QuicServerId a_10_http_right_private(HostPortPair("a.com", 10), false,
205                                         right_privacy);
206    QuicServerId a_10_https_right_private(HostPortPair("a.com", 10), true,
207                                          right_privacy);
208    QuicServerId a_11_http_right_private(HostPortPair("a.com", 11), false,
209                                         right_privacy);
210    QuicServerId a_11_https_right_private(HostPortPair("a.com", 11), true,
211                                          right_privacy);
212    QuicServerId b_10_http_right_private(HostPortPair("b.com", 10), false,
213                                         right_privacy);
214    QuicServerId b_10_https_right_private(HostPortPair("b.com", 10), true,
215                                          right_privacy);
216    QuicServerId b_11_http_right_private(HostPortPair("b.com", 11), false,
217                                         right_privacy);
218    QuicServerId b_11_https_right_private(HostPortPair("b.com", 11), true,
219                                          right_privacy);
220
221    QuicServerId new_a_10_http_left_private(HostPortPair("a.com", 10), false,
222                                            left_privacy);
223    QuicServerId new_a_10_https_left_private(HostPortPair("a.com", 10), true,
224                                             left_privacy);
225    QuicServerId new_a_11_http_left_private(HostPortPair("a.com", 11), false,
226                                            left_privacy);
227    QuicServerId new_a_11_https_left_private(HostPortPair("a.com", 11), true,
228                                             left_privacy);
229    QuicServerId new_b_10_http_left_private(HostPortPair("b.com", 10), false,
230                                            left_privacy);
231    QuicServerId new_b_10_https_left_private(HostPortPair("b.com", 10), true,
232                                             left_privacy);
233    QuicServerId new_b_11_http_left_private(HostPortPair("b.com", 11), false,
234                                            left_privacy);
235    QuicServerId new_b_11_https_left_private(HostPortPair("b.com", 11), true,
236                                             left_privacy);
237
238    EXPECT_EQ(new_a_10_http_left_private,  a_10_http_right_private);
239    EXPECT_EQ(new_a_10_https_left_private, a_10_https_right_private);
240    EXPECT_EQ(new_a_11_http_left_private,  a_11_http_right_private);
241    EXPECT_EQ(new_a_11_https_left_private, a_11_https_right_private);
242    EXPECT_EQ(new_b_10_http_left_private,  b_10_http_right_private);
243    EXPECT_EQ(new_b_10_https_left_private, b_10_https_right_private);
244    EXPECT_EQ(new_b_11_http_left_private,  b_11_http_right_private);
245    EXPECT_EQ(new_b_11_https_left_private, b_11_https_right_private);
246  }
247
248  for (int i = 0; i < 2; i++) {
249    right_privacy = static_cast<PrivacyMode>(i);
250    QuicServerId a_10_http_right_private(HostPortPair("a.com", 10), false,
251                                         right_privacy);
252    QuicServerId a_10_https_right_private(HostPortPair("a.com", 10), true,
253                                          right_privacy);
254    QuicServerId a_11_http_right_private(HostPortPair("a.com", 11), false,
255                                         right_privacy);
256    QuicServerId a_11_https_right_private(HostPortPair("a.com", 11), true,
257                                          right_privacy);
258    QuicServerId b_10_http_right_private(HostPortPair("b.com", 10), false,
259                                         right_privacy);
260    QuicServerId b_10_https_right_private(HostPortPair("b.com", 10), true,
261                                          right_privacy);
262    QuicServerId b_11_http_right_private(HostPortPair("b.com", 11), false,
263                                         right_privacy);
264    QuicServerId b_11_https_right_private(HostPortPair("b.com", 11), true,
265                                          right_privacy);
266
267    QuicServerId new_a_10_http_left_private(HostPortPair("a.com", 10), false,
268                                            PRIVACY_MODE_DISABLED);
269
270    EXPECT_FALSE(new_a_10_http_left_private == a_10_https_right_private);
271    EXPECT_FALSE(new_a_10_http_left_private == a_11_http_right_private);
272    EXPECT_FALSE(new_a_10_http_left_private == b_10_http_right_private);
273    EXPECT_FALSE(new_a_10_http_left_private == a_11_https_right_private);
274    EXPECT_FALSE(new_a_10_http_left_private == b_10_https_right_private);
275    EXPECT_FALSE(new_a_10_http_left_private == b_11_http_right_private);
276    EXPECT_FALSE(new_a_10_http_left_private == b_11_https_right_private);
277  }
278  QuicServerId a_10_http_private(HostPortPair("a.com", 10), false,
279                                 PRIVACY_MODE_ENABLED);
280  QuicServerId new_a_10_http_no_private(HostPortPair("a.com", 10), false,
281                                        PRIVACY_MODE_DISABLED);
282  EXPECT_FALSE(new_a_10_http_no_private == a_10_http_private);
283}
284
285}  // namespace
286
287}  // namespace net
288