OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 // | 4 // |
5 | 5 |
6 #include "base/logging.h" | 6 #include "base/logging.h" |
7 #include "base/time.h" | 7 #include "base/time.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 #include "chrome/browser/safe_browsing/protocol_manager.h" | 9 #include "chrome/browser/safe_browsing/protocol_manager.h" |
10 | 10 |
11 using base::Time; | 11 using base::Time; |
12 using base::TimeDelta; | 12 using base::TimeDelta; |
13 | 13 |
| 14 static const char kInfoUrlPrefix[] = "http://info.prefix.com/foo"; |
| 15 static const char kMacKeyUrlPrefix[] = "https://key.prefix.com/bar"; |
| 16 static const char kClient[] = "unittest"; |
| 17 static const char kAppVer[] = "1.0"; |
| 18 static const char kClientKey[] = "SCg9lcLHd0dfksXgYsacwQ=="; |
| 19 static const char kWrappedKey[] = |
| 20 "AKEgNisjLl7iRYrjWHmpd_XwCiilxrw8nNaYH47tiQ7pDe9cEErjVHGZaPPUau5h61tbXSDqA" |
| 21 "BiJZnDFByc_g8B5vTwxkhBf9g=="; |
| 22 static const char kAdditionalQuery[] = "&additional_query"; |
| 23 |
14 class SafeBrowsingProtocolManagerTest : public testing::Test { | 24 class SafeBrowsingProtocolManagerTest : public testing::Test { |
15 }; | 25 }; |
16 | 26 |
17 // Ensure that we respect section 5 of the SafeBrowsing protocol specification. | 27 // Ensure that we respect section 5 of the SafeBrowsing protocol specification. |
18 TEST_F(SafeBrowsingProtocolManagerTest, TestBackOffTimes) { | 28 TEST_F(SafeBrowsingProtocolManagerTest, TestBackOffTimes) { |
19 SafeBrowsingProtocolManager pm(NULL, "", "", "", NULL); | 29 SafeBrowsingProtocolManager pm(NULL, kClient, kClientKey, kWrappedKey, NULL, |
| 30 kInfoUrlPrefix, kMacKeyUrlPrefix, false); |
20 pm.next_update_sec_ = 1800; | 31 pm.next_update_sec_ = 1800; |
21 DCHECK(pm.back_off_fuzz_ >= 0.0 && pm.back_off_fuzz_ <= 1.0); | 32 DCHECK(pm.back_off_fuzz_ >= 0.0 && pm.back_off_fuzz_ <= 1.0); |
22 | 33 |
23 // No errors received so far. | 34 // No errors received so far. |
24 EXPECT_EQ(pm.GetNextUpdateTime(false), 1800 * 1000); | 35 EXPECT_EQ(pm.GetNextUpdateTime(false), 1800 * 1000); |
25 | 36 |
26 // 1 error. | 37 // 1 error. |
27 EXPECT_EQ(pm.GetNextUpdateTime(true), 60 * 1000); | 38 EXPECT_EQ(pm.GetNextUpdateTime(true), 60 * 1000); |
28 | 39 |
29 // 2 errors. | 40 // 2 errors. |
(...skipping 17 matching lines...) Expand all Loading... |
47 | 58 |
48 // 7 errors. | 59 // 7 errors. |
49 EXPECT_EQ(pm.GetNextUpdateTime(true), 480 * 60 * 1000); | 60 EXPECT_EQ(pm.GetNextUpdateTime(true), 480 * 60 * 1000); |
50 | 61 |
51 // Received a successful response. | 62 // Received a successful response. |
52 EXPECT_EQ(pm.GetNextUpdateTime(false), 1800 * 1000); | 63 EXPECT_EQ(pm.GetNextUpdateTime(false), 1800 * 1000); |
53 } | 64 } |
54 | 65 |
55 // Test string combinations with and without MAC. | 66 // Test string combinations with and without MAC. |
56 TEST_F(SafeBrowsingProtocolManagerTest, TestChunkStrings) { | 67 TEST_F(SafeBrowsingProtocolManagerTest, TestChunkStrings) { |
57 SafeBrowsingProtocolManager pm(NULL, "", "", "", NULL); | 68 SafeBrowsingProtocolManager pm(NULL, kClient, kClientKey, kWrappedKey, NULL, |
| 69 kInfoUrlPrefix, kMacKeyUrlPrefix, false); |
58 | 70 |
59 // Add and Sub chunks. | 71 // Add and Sub chunks. |
60 SBListChunkRanges phish("goog-phish-shavar"); | 72 SBListChunkRanges phish("goog-phish-shavar"); |
61 phish.adds = "1,4,6,8-20,99"; | 73 phish.adds = "1,4,6,8-20,99"; |
62 phish.subs = "16,32,64-96"; | 74 phish.subs = "16,32,64-96"; |
63 EXPECT_EQ(pm.FormatList(phish, false), | 75 EXPECT_EQ(pm.FormatList(phish, false), |
64 "goog-phish-shavar;a:1,4,6,8-20,99:s:16,32,64-96\n"); | 76 "goog-phish-shavar;a:1,4,6,8-20,99:s:16,32,64-96\n"); |
65 EXPECT_EQ(pm.FormatList(phish, true), | 77 EXPECT_EQ(pm.FormatList(phish, true), |
66 "goog-phish-shavar;a:1,4,6,8-20,99:s:16,32,64-96:mac\n"); | 78 "goog-phish-shavar;a:1,4,6,8-20,99:s:16,32,64-96:mac\n"); |
67 | 79 |
(...skipping 12 matching lines...) Expand all Loading... |
80 "goog-phish-shavar;s:16,32,64-96:mac\n"); | 92 "goog-phish-shavar;s:16,32,64-96:mac\n"); |
81 | 93 |
82 // No chunks of either type. | 94 // No chunks of either type. |
83 phish.adds = ""; | 95 phish.adds = ""; |
84 phish.subs = ""; | 96 phish.subs = ""; |
85 EXPECT_EQ(pm.FormatList(phish, false), "goog-phish-shavar;\n"); | 97 EXPECT_EQ(pm.FormatList(phish, false), "goog-phish-shavar;\n"); |
86 EXPECT_EQ(pm.FormatList(phish, true), "goog-phish-shavar;mac\n"); | 98 EXPECT_EQ(pm.FormatList(phish, true), "goog-phish-shavar;mac\n"); |
87 } | 99 } |
88 | 100 |
89 TEST_F(SafeBrowsingProtocolManagerTest, TestGetHashBackOffTimes) { | 101 TEST_F(SafeBrowsingProtocolManagerTest, TestGetHashBackOffTimes) { |
90 SafeBrowsingProtocolManager pm(NULL, "", "", "", NULL); | 102 SafeBrowsingProtocolManager pm(NULL, kClient, kClientKey, kWrappedKey, NULL, |
| 103 kInfoUrlPrefix, kMacKeyUrlPrefix, false); |
91 | 104 |
92 // No errors or back off time yet. | 105 // No errors or back off time yet. |
93 EXPECT_EQ(pm.gethash_error_count_, 0); | 106 EXPECT_EQ(pm.gethash_error_count_, 0); |
94 EXPECT_TRUE(pm.next_gethash_time_.is_null()); | 107 EXPECT_TRUE(pm.next_gethash_time_.is_null()); |
95 | 108 |
96 Time now = Time::Now(); | 109 Time now = Time::Now(); |
97 | 110 |
98 // 1 error. | 111 // 1 error. |
99 pm.HandleGetHashError(now); | 112 pm.HandleGetHashError(now); |
100 EXPECT_EQ(pm.gethash_error_count_, 1); | 113 EXPECT_EQ(pm.gethash_error_count_, 1); |
(...skipping 29 matching lines...) Expand all Loading... |
130 // 6 errors, reached max backoff. | 143 // 6 errors, reached max backoff. |
131 pm.HandleGetHashError(now); | 144 pm.HandleGetHashError(now); |
132 EXPECT_EQ(pm.gethash_error_count_, 6); | 145 EXPECT_EQ(pm.gethash_error_count_, 6); |
133 EXPECT_TRUE(pm.next_gethash_time_ == now + TimeDelta::FromMinutes(480)); | 146 EXPECT_TRUE(pm.next_gethash_time_ == now + TimeDelta::FromMinutes(480)); |
134 | 147 |
135 // 7 errors. | 148 // 7 errors. |
136 pm.HandleGetHashError(now); | 149 pm.HandleGetHashError(now); |
137 EXPECT_EQ(pm.gethash_error_count_, 7); | 150 EXPECT_EQ(pm.gethash_error_count_, 7); |
138 EXPECT_TRUE(pm.next_gethash_time_== now + TimeDelta::FromMinutes(480)); | 151 EXPECT_TRUE(pm.next_gethash_time_== now + TimeDelta::FromMinutes(480)); |
139 } | 152 } |
| 153 |
| 154 TEST_F(SafeBrowsingProtocolManagerTest, TestGetHashUrl) { |
| 155 SafeBrowsingProtocolManager pm(NULL, kClient, kClientKey, kWrappedKey, NULL, |
| 156 kInfoUrlPrefix, kMacKeyUrlPrefix, false); |
| 157 pm.version_ = kAppVer; |
| 158 EXPECT_EQ("http://info.prefix.com/foo/gethash?client=unittest&appver=1.0&" |
| 159 "pver=2.2", pm.GetHashUrl(false).spec()); |
| 160 EXPECT_EQ("http://info.prefix.com/foo/gethash?client=unittest&appver=1.0&" |
| 161 "pver=2.2&wrkey=AKEgNisjLl7iRYrjWHmpd_XwCiilxrw8nNaYH47tiQ7pDe9cE" |
| 162 "ErjVHGZaPPUau5h61tbXSDqABiJZnDFByc_g8B5vTwxkhBf9g==", |
| 163 pm.GetHashUrl(true).spec()); |
| 164 |
| 165 pm.set_additional_query("&additional_query"); |
| 166 EXPECT_EQ("http://info.prefix.com/foo/gethash?client=unittest&appver=1.0&" |
| 167 "pver=2.2&additional_query", |
| 168 pm.GetHashUrl(false).spec()); |
| 169 EXPECT_EQ("http://info.prefix.com/foo/gethash?client=unittest&appver=1.0&" |
| 170 "pver=2.2&additional_query&wrkey=AKEgNisjLl7iRYrjWHmpd_XwCiilxrw8" |
| 171 "nNaYH47tiQ7pDe9cEErjVHGZaPPUau5h61tbXSDqABiJZnDFByc_g8B5vTwxkhBf" |
| 172 "9g==", pm.GetHashUrl(true).spec()); |
| 173 } |
| 174 |
| 175 TEST_F(SafeBrowsingProtocolManagerTest, TestUpdateUrl) { |
| 176 SafeBrowsingProtocolManager pm(NULL, kClient, kClientKey, kWrappedKey, NULL, |
| 177 kInfoUrlPrefix, kMacKeyUrlPrefix, false); |
| 178 pm.version_ = kAppVer; |
| 179 |
| 180 EXPECT_EQ("http://info.prefix.com/foo/downloads?client=unittest&appver=1.0&" |
| 181 "pver=2.2", pm.UpdateUrl(false).spec()); |
| 182 EXPECT_EQ("http://info.prefix.com/foo/downloads?client=unittest&appver=1.0&" |
| 183 "pver=2.2&wrkey=AKEgNisjLl7iRYrjWHmpd_XwCiilxrw8nNaYH47tiQ7pDe9cE" |
| 184 "ErjVHGZaPPUau5h61tbXSDqABiJZnDFByc_g8B5vTwxkhBf9g==", |
| 185 pm.UpdateUrl(true).spec()); |
| 186 |
| 187 pm.set_additional_query("&additional_query"); |
| 188 EXPECT_EQ("http://info.prefix.com/foo/downloads?client=unittest&appver=1.0&" |
| 189 "pver=2.2&additional_query", pm.UpdateUrl(false).spec()); |
| 190 EXPECT_EQ("http://info.prefix.com/foo/downloads?client=unittest&appver=1.0&" |
| 191 "pver=2.2&additional_query&wrkey=AKEgNisjLl7iRYrjWHmpd_XwCiilxrw8" |
| 192 "nNaYH47tiQ7pDe9cEErjVHGZaPPUau5h61tbXSDqABiJZnDFByc_g8B5vTwxkhBf" |
| 193 "9g==", pm.UpdateUrl(true).spec()); |
| 194 } |
| 195 |
| 196 TEST_F(SafeBrowsingProtocolManagerTest, TestMalwareReportUrl) { |
| 197 SafeBrowsingProtocolManager pm(NULL, kClient, kClientKey, kWrappedKey, NULL, |
| 198 kInfoUrlPrefix, kMacKeyUrlPrefix, false); |
| 199 pm.version_ = kAppVer; |
| 200 |
| 201 GURL malware_url("http://malware.url.com"); |
| 202 GURL page_url("http://page.url.com"); |
| 203 GURL referrer_url("http://referrer.url.com"); |
| 204 EXPECT_EQ("http://info.prefix.com/foo/report?client=unittest&appver=1.0&" |
| 205 "pver=2.2&evts=malblhit&evtd=http%3A%2F%2Fmalware.url.com%2F&" |
| 206 "evtr=http%3A%2F%2Fpage.url.com%2F&evhr=http%3A%2F%2Freferrer." |
| 207 "url.com%2F", |
| 208 pm.MalwareReportUrl(malware_url, page_url, referrer_url).spec()); |
| 209 |
| 210 pm.set_additional_query("&additional_query"); |
| 211 EXPECT_EQ("http://info.prefix.com/foo/report?client=unittest&appver=1.0&" |
| 212 "pver=2.2&additional_query&evts=malblhit&" |
| 213 "evtd=http%3A%2F%2Fmalware.url.com%2F&" |
| 214 "evtr=http%3A%2F%2Fpage.url.com%2F&evhr=http%3A%2F%2Freferrer." |
| 215 "url.com%2F", |
| 216 pm.MalwareReportUrl(malware_url, page_url, referrer_url).spec()); |
| 217 } |
| 218 |
| 219 TEST_F(SafeBrowsingProtocolManagerTest, TestMacKeyUrl) { |
| 220 SafeBrowsingProtocolManager pm(NULL, kClient, kClientKey, kWrappedKey, NULL, |
| 221 kInfoUrlPrefix, kMacKeyUrlPrefix, false); |
| 222 pm.version_ = kAppVer; |
| 223 |
| 224 EXPECT_EQ("https://key.prefix.com/bar/newkey?client=unittest&appver=1.0&" |
| 225 "pver=2.2", pm.MacKeyUrl().spec()); |
| 226 |
| 227 pm.set_additional_query("&additional_query"); |
| 228 EXPECT_EQ("https://key.prefix.com/bar/newkey?client=unittest&appver=1.0&" |
| 229 "pver=2.2&additional_query", pm.MacKeyUrl().spec()); |
| 230 } |
| 231 |
| 232 TEST_F(SafeBrowsingProtocolManagerTest, TestNextChunkUrl) { |
| 233 SafeBrowsingProtocolManager pm(NULL, kClient, kClientKey, kWrappedKey, NULL, |
| 234 kInfoUrlPrefix, kMacKeyUrlPrefix, false); |
| 235 pm.version_ = kAppVer; |
| 236 |
| 237 std::string url_partial = "localhost:1234/foo/bar?foo"; |
| 238 std::string url_http_full = "http://localhost:1234/foo/bar?foo"; |
| 239 std::string url_https_full = "https://localhost:1234/foo/bar?foo"; |
| 240 |
| 241 EXPECT_EQ("http://localhost:1234/foo/bar?foo", |
| 242 pm.NextChunkUrl(url_partial).spec()); |
| 243 EXPECT_EQ("http://localhost:1234/foo/bar?foo", |
| 244 pm.NextChunkUrl(url_http_full).spec()); |
| 245 EXPECT_EQ("https://localhost:1234/foo/bar?foo", |
| 246 pm.NextChunkUrl(url_https_full).spec()); |
| 247 |
| 248 pm.set_additional_query("&additional_query"); |
| 249 EXPECT_EQ("http://localhost:1234/foo/bar?foo&additional_query", |
| 250 pm.NextChunkUrl(url_partial).spec()); |
| 251 EXPECT_EQ("http://localhost:1234/foo/bar?foo&additional_query", |
| 252 pm.NextChunkUrl(url_http_full).spec()); |
| 253 EXPECT_EQ("https://localhost:1234/foo/bar?foo&additional_query", |
| 254 pm.NextChunkUrl(url_https_full).spec()); |
| 255 } |
OLD | NEW |