Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(58)

Side by Side Diff: net/ssl/channel_id_service_unittest.cc

Issue 356713005: Rename ServerBoundCert => ChannelID to reflect the current name (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Upload stashed changes Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #include "net/ssl/server_bound_cert_service.h" 5 #include "net/ssl/channel_id_service.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
12 #include "base/message_loop/message_loop.h" 12 #include "base/message_loop/message_loop.h"
13 #include "base/message_loop/message_loop_proxy.h" 13 #include "base/message_loop/message_loop_proxy.h"
14 #include "base/task_runner.h" 14 #include "base/task_runner.h"
15 #include "crypto/ec_private_key.h" 15 #include "crypto/ec_private_key.h"
16 #include "net/base/net_errors.h" 16 #include "net/base/net_errors.h"
17 #include "net/base/test_completion_callback.h" 17 #include "net/base/test_completion_callback.h"
18 #include "net/cert/asn1_util.h" 18 #include "net/cert/asn1_util.h"
19 #include "net/cert/x509_certificate.h" 19 #include "net/cert/x509_certificate.h"
20 #include "net/ssl/default_server_bound_cert_store.h" 20 #include "net/ssl/default_channel_id_store.h"
21 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
22 22
23 namespace net { 23 namespace net {
24 24
25 namespace { 25 namespace {
26 26
27 void FailTest(int /* result */) { 27 void FailTest(int /* result */) {
28 FAIL(); 28 FAIL();
29 } 29 }
30 30
(...skipping 12 matching lines...) Expand all
43 43
44 virtual bool RunsTasksOnCurrentThread() const OVERRIDE { return true; } 44 virtual bool RunsTasksOnCurrentThread() const OVERRIDE { return true; }
45 45
46 protected: 46 protected:
47 virtual ~FailingTaskRunner() {} 47 virtual ~FailingTaskRunner() {}
48 48
49 private: 49 private:
50 DISALLOW_COPY_AND_ASSIGN(FailingTaskRunner); 50 DISALLOW_COPY_AND_ASSIGN(FailingTaskRunner);
51 }; 51 };
52 52
53 class MockServerBoundCertStoreWithAsyncGet 53 class MockChannelIDStoreWithAsyncGet
54 : public DefaultServerBoundCertStore { 54 : public DefaultChannelIDStore {
55 public: 55 public:
56 MockServerBoundCertStoreWithAsyncGet() 56 MockChannelIDStoreWithAsyncGet()
57 : DefaultServerBoundCertStore(NULL), cert_count_(0) {} 57 : DefaultChannelIDStore(NULL), channel_id_count_(0) {}
58 58
59 virtual int GetServerBoundCert(const std::string& server_identifier, 59 virtual int GetChannelID(const std::string& server_identifier,
60 base::Time* expiration_time, 60 base::Time* expiration_time,
61 std::string* private_key_result, 61 std::string* private_key_result,
62 std::string* cert_result, 62 std::string* cert_result,
63 const GetCertCallback& callback) OVERRIDE; 63 const GetChannelIDCallback& callback) OVERRIDE;
64 64
65 virtual void SetServerBoundCert(const std::string& server_identifier, 65 virtual void SetChannelID(const std::string& server_identifier,
66 base::Time creation_time, 66 base::Time creation_time,
67 base::Time expiration_time, 67 base::Time expiration_time,
68 const std::string& private_key, 68 const std::string& private_key,
69 const std::string& cert) OVERRIDE { 69 const std::string& cert) OVERRIDE {
70 cert_count_ = 1; 70 channel_id_count_ = 1;
71 } 71 }
72 72
73 virtual int GetCertCount() OVERRIDE { return cert_count_; } 73 virtual int GetChannelIDCount() OVERRIDE { return channel_id_count_; }
74 74
75 void CallGetServerBoundCertCallbackWithResult(int err, 75 void CallGetChannelIDCallbackWithResult(int err,
76 base::Time expiration_time, 76 base::Time expiration_time,
77 const std::string& private_key, 77 const std::string& private_key,
78 const std::string& cert); 78 const std::string& cert);
79 79
80 private: 80 private:
81 GetCertCallback callback_; 81 GetChannelIDCallback callback_;
82 std::string server_identifier_; 82 std::string server_identifier_;
83 int cert_count_; 83 int channel_id_count_;
84 }; 84 };
85 85
86 int MockServerBoundCertStoreWithAsyncGet::GetServerBoundCert( 86 int MockChannelIDStoreWithAsyncGet::GetChannelID(
87 const std::string& server_identifier, 87 const std::string& server_identifier,
88 base::Time* expiration_time, 88 base::Time* expiration_time,
89 std::string* private_key_result, 89 std::string* private_key_result,
90 std::string* cert_result, 90 std::string* cert_result,
91 const GetCertCallback& callback) { 91 const GetChannelIDCallback& callback) {
92 server_identifier_ = server_identifier; 92 server_identifier_ = server_identifier;
93 callback_ = callback; 93 callback_ = callback;
94 // Reset the cert count, it'll get incremented in either SetServerBoundCert or 94 // Reset the cert count, it'll get incremented in either SetChannelID or
95 // CallGetServerBoundCertCallbackWithResult. 95 // CallGetChannelIDCallbackWithResult.
96 cert_count_ = 0; 96 channel_id_count_ = 0;
97 // Do nothing else: the results to be provided will be specified through 97 // Do nothing else: the results to be provided will be specified through
98 // CallGetServerBoundCertCallbackWithResult. 98 // CallGetChannelIDCallbackWithResult.
99 return ERR_IO_PENDING; 99 return ERR_IO_PENDING;
100 } 100 }
101 101
102 void 102 void
103 MockServerBoundCertStoreWithAsyncGet::CallGetServerBoundCertCallbackWithResult( 103 MockChannelIDStoreWithAsyncGet::CallGetChannelIDCallbackWithResult(
104 int err, 104 int err,
105 base::Time expiration_time, 105 base::Time expiration_time,
106 const std::string& private_key, 106 const std::string& private_key,
107 const std::string& cert) { 107 const std::string& cert) {
108 if (err == OK) 108 if (err == OK)
109 cert_count_ = 1; 109 channel_id_count_ = 1;
110 base::MessageLoop::current()->PostTask(FROM_HERE, 110 base::MessageLoop::current()->PostTask(FROM_HERE,
111 base::Bind(callback_, 111 base::Bind(callback_,
112 err, 112 err,
113 server_identifier_, 113 server_identifier_,
114 expiration_time, 114 expiration_time,
115 private_key, 115 private_key,
116 cert)); 116 cert));
117 } 117 }
118 118
119 class ServerBoundCertServiceTest : public testing::Test { 119 class ChannelIDServiceTest : public testing::Test {
120 public: 120 public:
121 ServerBoundCertServiceTest() 121 ChannelIDServiceTest()
122 : service_(new ServerBoundCertService( 122 : service_(new ChannelIDService(
123 new DefaultServerBoundCertStore(NULL), 123 new DefaultChannelIDStore(NULL),
124 base::MessageLoopProxy::current())) { 124 base::MessageLoopProxy::current())) {
125 } 125 }
126 126
127 protected: 127 protected:
128 scoped_ptr<ServerBoundCertService> service_; 128 scoped_ptr<ChannelIDService> service_;
129 }; 129 };
130 130
131 TEST_F(ServerBoundCertServiceTest, GetDomainForHost) { 131 TEST_F(ChannelIDServiceTest, GetDomainForHost) {
132 EXPECT_EQ("google.com", 132 EXPECT_EQ("google.com",
133 ServerBoundCertService::GetDomainForHost("google.com")); 133 ChannelIDService::GetDomainForHost("google.com"));
134 EXPECT_EQ("google.com", 134 EXPECT_EQ("google.com",
135 ServerBoundCertService::GetDomainForHost("www.google.com")); 135 ChannelIDService::GetDomainForHost("www.google.com"));
136 EXPECT_EQ("foo.appspot.com", 136 EXPECT_EQ("foo.appspot.com",
137 ServerBoundCertService::GetDomainForHost("foo.appspot.com")); 137 ChannelIDService::GetDomainForHost("foo.appspot.com"));
138 EXPECT_EQ("bar.appspot.com", 138 EXPECT_EQ("bar.appspot.com",
139 ServerBoundCertService::GetDomainForHost("foo.bar.appspot.com")); 139 ChannelIDService::GetDomainForHost("foo.bar.appspot.com"));
140 EXPECT_EQ("appspot.com", 140 EXPECT_EQ("appspot.com",
141 ServerBoundCertService::GetDomainForHost("appspot.com")); 141 ChannelIDService::GetDomainForHost("appspot.com"));
142 EXPECT_EQ("google.com", 142 EXPECT_EQ("google.com",
143 ServerBoundCertService::GetDomainForHost("www.mail.google.com")); 143 ChannelIDService::GetDomainForHost("www.mail.google.com"));
144 EXPECT_EQ("goto", 144 EXPECT_EQ("goto",
145 ServerBoundCertService::GetDomainForHost("goto")); 145 ChannelIDService::GetDomainForHost("goto"));
146 EXPECT_EQ("127.0.0.1", 146 EXPECT_EQ("127.0.0.1",
147 ServerBoundCertService::GetDomainForHost("127.0.0.1")); 147 ChannelIDService::GetDomainForHost("127.0.0.1"));
148 } 148 }
149 149
150 TEST_F(ServerBoundCertServiceTest, GetCacheMiss) { 150 TEST_F(ChannelIDServiceTest, GetCacheMiss) {
151 std::string host("encrypted.google.com"); 151 std::string host("encrypted.google.com");
152 152
153 int error; 153 int error;
154 TestCompletionCallback callback; 154 TestCompletionCallback callback;
155 ServerBoundCertService::RequestHandle request_handle; 155 ChannelIDService::RequestHandle request_handle;
156 156
157 // Synchronous completion, because the store is initialized. 157 // Synchronous completion, because the store is initialized.
158 std::string private_key, der_cert; 158 std::string private_key, der_cert;
159 EXPECT_EQ(0, service_->cert_count()); 159 EXPECT_EQ(0, service_->cert_count());
160 error = service_->GetDomainBoundCert( 160 error = service_->GetChannelID(
161 host, &private_key, &der_cert, callback.callback(), &request_handle); 161 host, &private_key, &der_cert, callback.callback(), &request_handle);
162 EXPECT_EQ(ERR_FILE_NOT_FOUND, error); 162 EXPECT_EQ(ERR_FILE_NOT_FOUND, error);
163 EXPECT_FALSE(request_handle.is_active()); 163 EXPECT_FALSE(request_handle.is_active());
164 EXPECT_EQ(0, service_->cert_count()); 164 EXPECT_EQ(0, service_->cert_count());
165 EXPECT_TRUE(der_cert.empty()); 165 EXPECT_TRUE(der_cert.empty());
166 } 166 }
167 167
168 TEST_F(ServerBoundCertServiceTest, CacheHit) { 168 TEST_F(ChannelIDServiceTest, CacheHit) {
169 std::string host("encrypted.google.com"); 169 std::string host("encrypted.google.com");
170 170
171 int error; 171 int error;
172 TestCompletionCallback callback; 172 TestCompletionCallback callback;
173 ServerBoundCertService::RequestHandle request_handle; 173 ChannelIDService::RequestHandle request_handle;
174 174
175 // Asynchronous completion. 175 // Asynchronous completion.
176 std::string private_key_info1, der_cert1; 176 std::string private_key_info1, der_cert1;
177 EXPECT_EQ(0, service_->cert_count()); 177 EXPECT_EQ(0, service_->cert_count());
178 error = service_->GetOrCreateDomainBoundCert( 178 error = service_->GetOrCreateChannelID(
179 host, &private_key_info1, &der_cert1, 179 host, &private_key_info1, &der_cert1,
180 callback.callback(), &request_handle); 180 callback.callback(), &request_handle);
181 EXPECT_EQ(ERR_IO_PENDING, error); 181 EXPECT_EQ(ERR_IO_PENDING, error);
182 EXPECT_TRUE(request_handle.is_active()); 182 EXPECT_TRUE(request_handle.is_active());
183 error = callback.WaitForResult(); 183 error = callback.WaitForResult();
184 EXPECT_EQ(OK, error); 184 EXPECT_EQ(OK, error);
185 EXPECT_EQ(1, service_->cert_count()); 185 EXPECT_EQ(1, service_->cert_count());
186 EXPECT_FALSE(private_key_info1.empty()); 186 EXPECT_FALSE(private_key_info1.empty());
187 EXPECT_FALSE(der_cert1.empty()); 187 EXPECT_FALSE(der_cert1.empty());
188 EXPECT_FALSE(request_handle.is_active()); 188 EXPECT_FALSE(request_handle.is_active());
189 189
190 // Synchronous completion. 190 // Synchronous completion.
191 std::string private_key_info2, der_cert2; 191 std::string private_key_info2, der_cert2;
192 error = service_->GetOrCreateDomainBoundCert( 192 error = service_->GetOrCreateChannelID(
193 host, &private_key_info2, &der_cert2, 193 host, &private_key_info2, &der_cert2,
194 callback.callback(), &request_handle); 194 callback.callback(), &request_handle);
195 EXPECT_FALSE(request_handle.is_active()); 195 EXPECT_FALSE(request_handle.is_active());
196 EXPECT_EQ(OK, error); 196 EXPECT_EQ(OK, error);
197 EXPECT_EQ(1, service_->cert_count()); 197 EXPECT_EQ(1, service_->cert_count());
198 EXPECT_EQ(private_key_info1, private_key_info2); 198 EXPECT_EQ(private_key_info1, private_key_info2);
199 EXPECT_EQ(der_cert1, der_cert2); 199 EXPECT_EQ(der_cert1, der_cert2);
200 200
201 // Synchronous get. 201 // Synchronous get.
202 std::string private_key_info3, der_cert3; 202 std::string private_key_info3, der_cert3;
203 error = service_->GetDomainBoundCert( 203 error = service_->GetChannelID(
204 host, &private_key_info3, &der_cert3, callback.callback(), 204 host, &private_key_info3, &der_cert3, callback.callback(),
205 &request_handle); 205 &request_handle);
206 EXPECT_FALSE(request_handle.is_active()); 206 EXPECT_FALSE(request_handle.is_active());
207 EXPECT_EQ(OK, error); 207 EXPECT_EQ(OK, error);
208 EXPECT_EQ(1, service_->cert_count()); 208 EXPECT_EQ(1, service_->cert_count());
209 EXPECT_EQ(der_cert1, der_cert3); 209 EXPECT_EQ(der_cert1, der_cert3);
210 EXPECT_EQ(private_key_info1, private_key_info3); 210 EXPECT_EQ(private_key_info1, private_key_info3);
211 211
212 EXPECT_EQ(3u, service_->requests()); 212 EXPECT_EQ(3u, service_->requests());
213 EXPECT_EQ(2u, service_->cert_store_hits()); 213 EXPECT_EQ(2u, service_->cert_store_hits());
214 EXPECT_EQ(0u, service_->inflight_joins()); 214 EXPECT_EQ(0u, service_->inflight_joins());
215 } 215 }
216 216
217 TEST_F(ServerBoundCertServiceTest, StoreCerts) { 217 TEST_F(ChannelIDServiceTest, StoreChannelIDs) {
218 int error; 218 int error;
219 TestCompletionCallback callback; 219 TestCompletionCallback callback;
220 ServerBoundCertService::RequestHandle request_handle; 220 ChannelIDService::RequestHandle request_handle;
221 221
222 std::string host1("encrypted.google.com"); 222 std::string host1("encrypted.google.com");
223 std::string private_key_info1, der_cert1; 223 std::string private_key_info1, der_cert1;
224 EXPECT_EQ(0, service_->cert_count()); 224 EXPECT_EQ(0, service_->cert_count());
225 error = service_->GetOrCreateDomainBoundCert( 225 error = service_->GetOrCreateChannelID(
226 host1, &private_key_info1, &der_cert1, 226 host1, &private_key_info1, &der_cert1,
227 callback.callback(), &request_handle); 227 callback.callback(), &request_handle);
228 EXPECT_EQ(ERR_IO_PENDING, error); 228 EXPECT_EQ(ERR_IO_PENDING, error);
229 EXPECT_TRUE(request_handle.is_active()); 229 EXPECT_TRUE(request_handle.is_active());
230 error = callback.WaitForResult(); 230 error = callback.WaitForResult();
231 EXPECT_EQ(OK, error); 231 EXPECT_EQ(OK, error);
232 EXPECT_EQ(1, service_->cert_count()); 232 EXPECT_EQ(1, service_->cert_count());
233 233
234 std::string host2("www.verisign.com"); 234 std::string host2("www.verisign.com");
235 std::string private_key_info2, der_cert2; 235 std::string private_key_info2, der_cert2;
236 error = service_->GetOrCreateDomainBoundCert( 236 error = service_->GetOrCreateChannelID(
237 host2, &private_key_info2, &der_cert2, 237 host2, &private_key_info2, &der_cert2,
238 callback.callback(), &request_handle); 238 callback.callback(), &request_handle);
239 EXPECT_EQ(ERR_IO_PENDING, error); 239 EXPECT_EQ(ERR_IO_PENDING, error);
240 EXPECT_TRUE(request_handle.is_active()); 240 EXPECT_TRUE(request_handle.is_active());
241 error = callback.WaitForResult(); 241 error = callback.WaitForResult();
242 EXPECT_EQ(OK, error); 242 EXPECT_EQ(OK, error);
243 EXPECT_EQ(2, service_->cert_count()); 243 EXPECT_EQ(2, service_->cert_count());
244 244
245 std::string host3("www.twitter.com"); 245 std::string host3("www.twitter.com");
246 std::string private_key_info3, der_cert3; 246 std::string private_key_info3, der_cert3;
247 error = service_->GetOrCreateDomainBoundCert( 247 error = service_->GetOrCreateChannelID(
248 host3, &private_key_info3, &der_cert3, 248 host3, &private_key_info3, &der_cert3,
249 callback.callback(), &request_handle); 249 callback.callback(), &request_handle);
250 EXPECT_EQ(ERR_IO_PENDING, error); 250 EXPECT_EQ(ERR_IO_PENDING, error);
251 EXPECT_TRUE(request_handle.is_active()); 251 EXPECT_TRUE(request_handle.is_active());
252 error = callback.WaitForResult(); 252 error = callback.WaitForResult();
253 EXPECT_EQ(OK, error); 253 EXPECT_EQ(OK, error);
254 EXPECT_EQ(3, service_->cert_count()); 254 EXPECT_EQ(3, service_->cert_count());
255 255
256 EXPECT_NE(private_key_info1, private_key_info2); 256 EXPECT_NE(private_key_info1, private_key_info2);
257 EXPECT_NE(der_cert1, der_cert2); 257 EXPECT_NE(der_cert1, der_cert2);
258 EXPECT_NE(private_key_info1, private_key_info3); 258 EXPECT_NE(private_key_info1, private_key_info3);
259 EXPECT_NE(der_cert1, der_cert3); 259 EXPECT_NE(der_cert1, der_cert3);
260 EXPECT_NE(private_key_info2, private_key_info3); 260 EXPECT_NE(private_key_info2, private_key_info3);
261 EXPECT_NE(der_cert2, der_cert3); 261 EXPECT_NE(der_cert2, der_cert3);
262 } 262 }
263 263
264 // Tests an inflight join. 264 // Tests an inflight join.
265 TEST_F(ServerBoundCertServiceTest, InflightJoin) { 265 TEST_F(ChannelIDServiceTest, InflightJoin) {
266 std::string host("encrypted.google.com"); 266 std::string host("encrypted.google.com");
267 int error; 267 int error;
268 268
269 std::string private_key_info1, der_cert1; 269 std::string private_key_info1, der_cert1;
270 TestCompletionCallback callback1; 270 TestCompletionCallback callback1;
271 ServerBoundCertService::RequestHandle request_handle1; 271 ChannelIDService::RequestHandle request_handle1;
272 272
273 std::string private_key_info2, der_cert2; 273 std::string private_key_info2, der_cert2;
274 TestCompletionCallback callback2; 274 TestCompletionCallback callback2;
275 ServerBoundCertService::RequestHandle request_handle2; 275 ChannelIDService::RequestHandle request_handle2;
276 276
277 error = service_->GetOrCreateDomainBoundCert( 277 error = service_->GetOrCreateChannelID(
278 host, &private_key_info1, &der_cert1, 278 host, &private_key_info1, &der_cert1,
279 callback1.callback(), &request_handle1); 279 callback1.callback(), &request_handle1);
280 EXPECT_EQ(ERR_IO_PENDING, error); 280 EXPECT_EQ(ERR_IO_PENDING, error);
281 EXPECT_TRUE(request_handle1.is_active()); 281 EXPECT_TRUE(request_handle1.is_active());
282 // Should join with the original request. 282 // Should join with the original request.
283 error = service_->GetOrCreateDomainBoundCert( 283 error = service_->GetOrCreateChannelID(
284 host, &private_key_info2, &der_cert2, 284 host, &private_key_info2, &der_cert2,
285 callback2.callback(), &request_handle2); 285 callback2.callback(), &request_handle2);
286 EXPECT_EQ(ERR_IO_PENDING, error); 286 EXPECT_EQ(ERR_IO_PENDING, error);
287 EXPECT_TRUE(request_handle2.is_active()); 287 EXPECT_TRUE(request_handle2.is_active());
288 288
289 error = callback1.WaitForResult(); 289 error = callback1.WaitForResult();
290 EXPECT_EQ(OK, error); 290 EXPECT_EQ(OK, error);
291 error = callback2.WaitForResult(); 291 error = callback2.WaitForResult();
292 EXPECT_EQ(OK, error); 292 EXPECT_EQ(OK, error);
293 293
294 EXPECT_EQ(2u, service_->requests()); 294 EXPECT_EQ(2u, service_->requests());
295 EXPECT_EQ(0u, service_->cert_store_hits()); 295 EXPECT_EQ(0u, service_->cert_store_hits());
296 EXPECT_EQ(1u, service_->inflight_joins()); 296 EXPECT_EQ(1u, service_->inflight_joins());
297 EXPECT_EQ(1u, service_->workers_created()); 297 EXPECT_EQ(1u, service_->workers_created());
298 } 298 }
299 299
300 // Tests an inflight join of a Get request to a GetOrCreate request. 300 // Tests an inflight join of a Get request to a GetOrCreate request.
301 TEST_F(ServerBoundCertServiceTest, InflightJoinGetOrCreateAndGet) { 301 TEST_F(ChannelIDServiceTest, InflightJoinGetOrCreateAndGet) {
302 std::string host("encrypted.google.com"); 302 std::string host("encrypted.google.com");
303 int error; 303 int error;
304 304
305 std::string private_key_info1, der_cert1; 305 std::string private_key_info1, der_cert1;
306 TestCompletionCallback callback1; 306 TestCompletionCallback callback1;
307 ServerBoundCertService::RequestHandle request_handle1; 307 ChannelIDService::RequestHandle request_handle1;
308 308
309 std::string private_key_info2; 309 std::string private_key_info2;
310 std::string der_cert2; 310 std::string der_cert2;
311 TestCompletionCallback callback2; 311 TestCompletionCallback callback2;
312 ServerBoundCertService::RequestHandle request_handle2; 312 ChannelIDService::RequestHandle request_handle2;
313 313
314 error = service_->GetOrCreateDomainBoundCert( 314 error = service_->GetOrCreateChannelID(
315 host, &private_key_info1, &der_cert1, 315 host, &private_key_info1, &der_cert1,
316 callback1.callback(), &request_handle1); 316 callback1.callback(), &request_handle1);
317 EXPECT_EQ(ERR_IO_PENDING, error); 317 EXPECT_EQ(ERR_IO_PENDING, error);
318 EXPECT_TRUE(request_handle1.is_active()); 318 EXPECT_TRUE(request_handle1.is_active());
319 // Should join with the original request. 319 // Should join with the original request.
320 error = service_->GetDomainBoundCert( 320 error = service_->GetChannelID(
321 host, &private_key_info2, &der_cert2, callback2.callback(), 321 host, &private_key_info2, &der_cert2, callback2.callback(),
322 &request_handle2); 322 &request_handle2);
323 EXPECT_EQ(ERR_IO_PENDING, error); 323 EXPECT_EQ(ERR_IO_PENDING, error);
324 EXPECT_TRUE(request_handle2.is_active()); 324 EXPECT_TRUE(request_handle2.is_active());
325 325
326 error = callback1.WaitForResult(); 326 error = callback1.WaitForResult();
327 EXPECT_EQ(OK, error); 327 EXPECT_EQ(OK, error);
328 error = callback2.WaitForResult(); 328 error = callback2.WaitForResult();
329 EXPECT_EQ(OK, error); 329 EXPECT_EQ(OK, error);
330 EXPECT_EQ(der_cert1, der_cert2); 330 EXPECT_EQ(der_cert1, der_cert2);
331 331
332 EXPECT_EQ(2u, service_->requests()); 332 EXPECT_EQ(2u, service_->requests());
333 EXPECT_EQ(0u, service_->cert_store_hits()); 333 EXPECT_EQ(0u, service_->cert_store_hits());
334 EXPECT_EQ(1u, service_->inflight_joins()); 334 EXPECT_EQ(1u, service_->inflight_joins());
335 EXPECT_EQ(1u, service_->workers_created()); 335 EXPECT_EQ(1u, service_->workers_created());
336 } 336 }
337 337
338 TEST_F(ServerBoundCertServiceTest, ExtractValuesFromBytesEC) { 338 TEST_F(ChannelIDServiceTest, ExtractValuesFromBytesEC) {
339 std::string host("encrypted.google.com"); 339 std::string host("encrypted.google.com");
340 std::string private_key_info, der_cert; 340 std::string private_key_info, der_cert;
341 int error; 341 int error;
342 TestCompletionCallback callback; 342 TestCompletionCallback callback;
343 ServerBoundCertService::RequestHandle request_handle; 343 ChannelIDService::RequestHandle request_handle;
344 344
345 error = service_->GetOrCreateDomainBoundCert( 345 error = service_->GetOrCreateChannelID(
346 host, &private_key_info, &der_cert, callback.callback(), 346 host, &private_key_info, &der_cert, callback.callback(),
347 &request_handle); 347 &request_handle);
348 EXPECT_EQ(ERR_IO_PENDING, error); 348 EXPECT_EQ(ERR_IO_PENDING, error);
349 EXPECT_TRUE(request_handle.is_active()); 349 EXPECT_TRUE(request_handle.is_active());
350 error = callback.WaitForResult(); 350 error = callback.WaitForResult();
351 EXPECT_EQ(OK, error); 351 EXPECT_EQ(OK, error);
352 352
353 base::StringPiece spki_piece; 353 base::StringPiece spki_piece;
354 ASSERT_TRUE(asn1::ExtractSPKIFromDERCert(der_cert, &spki_piece)); 354 ASSERT_TRUE(asn1::ExtractSPKIFromDERCert(der_cert, &spki_piece));
355 std::vector<uint8> spki( 355 std::vector<uint8> spki(
356 spki_piece.data(), 356 spki_piece.data(),
357 spki_piece.data() + spki_piece.size()); 357 spki_piece.data() + spki_piece.size());
358 358
359 // Check that we can retrieve the key from the bytes. 359 // Check that we can retrieve the key from the bytes.
360 std::vector<uint8> key_vec(private_key_info.begin(), private_key_info.end()); 360 std::vector<uint8> key_vec(private_key_info.begin(), private_key_info.end());
361 scoped_ptr<crypto::ECPrivateKey> private_key( 361 scoped_ptr<crypto::ECPrivateKey> private_key(
362 crypto::ECPrivateKey::CreateFromEncryptedPrivateKeyInfo( 362 crypto::ECPrivateKey::CreateFromEncryptedPrivateKeyInfo(
363 ServerBoundCertService::kEPKIPassword, key_vec, spki)); 363 ChannelIDService::kEPKIPassword, key_vec, spki));
364 EXPECT_TRUE(private_key != NULL); 364 EXPECT_TRUE(private_key != NULL);
365 365
366 // Check that we can retrieve the cert from the bytes. 366 // Check that we can retrieve the cert from the bytes.
367 scoped_refptr<X509Certificate> x509cert( 367 scoped_refptr<X509Certificate> x509cert(
368 X509Certificate::CreateFromBytes(der_cert.data(), der_cert.size())); 368 X509Certificate::CreateFromBytes(der_cert.data(), der_cert.size()));
369 EXPECT_TRUE(x509cert.get() != NULL); 369 EXPECT_TRUE(x509cert.get() != NULL);
370 } 370 }
371 371
372 // Tests that the callback of a canceled request is never made. 372 // Tests that the callback of a canceled request is never made.
373 TEST_F(ServerBoundCertServiceTest, CancelRequest) { 373 TEST_F(ChannelIDServiceTest, CancelRequest) {
374 std::string host("encrypted.google.com"); 374 std::string host("encrypted.google.com");
375 std::string private_key_info, der_cert; 375 std::string private_key_info, der_cert;
376 int error; 376 int error;
377 ServerBoundCertService::RequestHandle request_handle; 377 ChannelIDService::RequestHandle request_handle;
378 378
379 error = service_->GetOrCreateDomainBoundCert(host, 379 error = service_->GetOrCreateChannelID(host,
380 &private_key_info, 380 &private_key_info,
381 &der_cert, 381 &der_cert,
382 base::Bind(&FailTest), 382 base::Bind(&FailTest),
383 &request_handle); 383 &request_handle);
384 EXPECT_EQ(ERR_IO_PENDING, error); 384 EXPECT_EQ(ERR_IO_PENDING, error);
385 EXPECT_TRUE(request_handle.is_active()); 385 EXPECT_TRUE(request_handle.is_active());
386 request_handle.Cancel(); 386 request_handle.Cancel();
387 EXPECT_FALSE(request_handle.is_active()); 387 EXPECT_FALSE(request_handle.is_active());
388 388
389 // Wait for reply from ServerBoundCertServiceWorker to be posted back to the 389 // Wait for reply from ChannelIDServiceWorker to be posted back to the
390 // ServerBoundCertService. 390 // ChannelIDService.
391 base::MessageLoop::current()->RunUntilIdle(); 391 base::MessageLoop::current()->RunUntilIdle();
392 392
393 // Even though the original request was cancelled, the service will still 393 // Even though the original request was cancelled, the service will still
394 // store the result, it just doesn't call the callback. 394 // store the result, it just doesn't call the callback.
395 EXPECT_EQ(1, service_->cert_count()); 395 EXPECT_EQ(1, service_->cert_count());
396 } 396 }
397 397
398 // Tests that destructing the RequestHandle cancels the request. 398 // Tests that destructing the RequestHandle cancels the request.
399 TEST_F(ServerBoundCertServiceTest, CancelRequestByHandleDestruction) { 399 TEST_F(ChannelIDServiceTest, CancelRequestByHandleDestruction) {
400 std::string host("encrypted.google.com"); 400 std::string host("encrypted.google.com");
401 std::string private_key_info, der_cert; 401 std::string private_key_info, der_cert;
402 int error; 402 int error;
403 { 403 {
404 ServerBoundCertService::RequestHandle request_handle; 404 ChannelIDService::RequestHandle request_handle;
405 405
406 error = service_->GetOrCreateDomainBoundCert(host, 406 error = service_->GetOrCreateChannelID(host,
407 &private_key_info, 407 &private_key_info,
408 &der_cert, 408 &der_cert,
409 base::Bind(&FailTest), 409 base::Bind(&FailTest),
410 &request_handle); 410 &request_handle);
wtc 2014/07/22 22:49:32 Fix the indentation of these arguments.
Ryan Hamilton 2014/07/22 23:32:54 Done.
411 EXPECT_EQ(ERR_IO_PENDING, error); 411 EXPECT_EQ(ERR_IO_PENDING, error);
412 EXPECT_TRUE(request_handle.is_active()); 412 EXPECT_TRUE(request_handle.is_active());
413 } 413 }
414 414
415 // Wait for reply from ServerBoundCertServiceWorker to be posted back to the 415 // Wait for reply from ChannelIDServiceWorker to be posted back to the
416 // ServerBoundCertService. 416 // ChannelIDService.
417 base::MessageLoop::current()->RunUntilIdle(); 417 base::MessageLoop::current()->RunUntilIdle();
418 418
419 // Even though the original request was cancelled, the service will still 419 // Even though the original request was cancelled, the service will still
420 // store the result, it just doesn't call the callback. 420 // store the result, it just doesn't call the callback.
421 EXPECT_EQ(1, service_->cert_count()); 421 EXPECT_EQ(1, service_->cert_count());
422 } 422 }
423 423
424 TEST_F(ServerBoundCertServiceTest, DestructionWithPendingRequest) { 424 TEST_F(ChannelIDServiceTest, DestructionWithPendingRequest) {
425 std::string host("encrypted.google.com"); 425 std::string host("encrypted.google.com");
426 std::string private_key_info, der_cert; 426 std::string private_key_info, der_cert;
427 int error; 427 int error;
428 ServerBoundCertService::RequestHandle request_handle; 428 ChannelIDService::RequestHandle request_handle;
429 429
430 error = service_->GetOrCreateDomainBoundCert(host, 430 error = service_->GetOrCreateChannelID(host,
431 &private_key_info, 431 &private_key_info,
432 &der_cert, 432 &der_cert,
433 base::Bind(&FailTest), 433 base::Bind(&FailTest),
434 &request_handle); 434 &request_handle);
wtc 2014/07/22 22:49:32 Fix the indentation of these arguments.
Ryan Hamilton 2014/07/22 23:32:53 Done.
435 EXPECT_EQ(ERR_IO_PENDING, error); 435 EXPECT_EQ(ERR_IO_PENDING, error);
436 EXPECT_TRUE(request_handle.is_active()); 436 EXPECT_TRUE(request_handle.is_active());
437 437
438 // Cancel request and destroy the ServerBoundCertService. 438 // Cancel request and destroy the ChannelIDService.
439 request_handle.Cancel(); 439 request_handle.Cancel();
440 service_.reset(); 440 service_.reset();
441 441
442 // ServerBoundCertServiceWorker should not post anything back to the 442 // ChannelIDServiceWorker should not post anything back to the
443 // non-existent ServerBoundCertService, but run the loop just to be sure it 443 // non-existent ChannelIDService, but run the loop just to be sure it
444 // doesn't. 444 // doesn't.
445 base::MessageLoop::current()->RunUntilIdle(); 445 base::MessageLoop::current()->RunUntilIdle();
446 446
447 // If we got here without crashing or a valgrind error, it worked. 447 // If we got here without crashing or a valgrind error, it worked.
448 } 448 }
449 449
450 // Tests that shutting down the sequenced worker pool and then making new 450 // Tests that shutting down the sequenced worker pool and then making new
451 // requests gracefully fails. 451 // requests gracefully fails.
452 // This is a regression test for http://crbug.com/236387 452 // This is a regression test for http://crbug.com/236387
453 TEST_F(ServerBoundCertServiceTest, RequestAfterPoolShutdown) { 453 TEST_F(ChannelIDServiceTest, RequestAfterPoolShutdown) {
454 scoped_refptr<FailingTaskRunner> task_runner(new FailingTaskRunner); 454 scoped_refptr<FailingTaskRunner> task_runner(new FailingTaskRunner);
455 service_.reset(new ServerBoundCertService( 455 service_.reset(new ChannelIDService(
456 new DefaultServerBoundCertStore(NULL), task_runner)); 456 new DefaultChannelIDStore(NULL), task_runner));
457 457
458 // Make a request that will force synchronous completion. 458 // Make a request that will force synchronous completion.
459 std::string host("encrypted.google.com"); 459 std::string host("encrypted.google.com");
460 std::string private_key_info, der_cert; 460 std::string private_key_info, der_cert;
461 int error; 461 int error;
462 ServerBoundCertService::RequestHandle request_handle; 462 ChannelIDService::RequestHandle request_handle;
463 463
464 error = service_->GetOrCreateDomainBoundCert(host, 464 error = service_->GetOrCreateChannelID(host,
465 &private_key_info, 465 &private_key_info,
466 &der_cert, 466 &der_cert,
467 base::Bind(&FailTest), 467 base::Bind(&FailTest),
468 &request_handle); 468 &request_handle);
wtc 2014/07/22 22:49:32 Fix the indentation of these arguments.
Ryan Hamilton 2014/07/22 23:32:53 Done.
469 // If we got here without crashing or a valgrind error, it worked. 469 // If we got here without crashing or a valgrind error, it worked.
470 ASSERT_EQ(ERR_INSUFFICIENT_RESOURCES, error); 470 ASSERT_EQ(ERR_INSUFFICIENT_RESOURCES, error);
471 EXPECT_FALSE(request_handle.is_active()); 471 EXPECT_FALSE(request_handle.is_active());
472 } 472 }
473 473
474 // Tests that simultaneous creation of different certs works. 474 // Tests that simultaneous creation of different certs works.
475 TEST_F(ServerBoundCertServiceTest, SimultaneousCreation) { 475 TEST_F(ChannelIDServiceTest, SimultaneousCreation) {
476 int error; 476 int error;
477 477
478 std::string host1("encrypted.google.com"); 478 std::string host1("encrypted.google.com");
479 std::string private_key_info1, der_cert1; 479 std::string private_key_info1, der_cert1;
480 TestCompletionCallback callback1; 480 TestCompletionCallback callback1;
481 ServerBoundCertService::RequestHandle request_handle1; 481 ChannelIDService::RequestHandle request_handle1;
482 482
483 std::string host2("foo.com"); 483 std::string host2("foo.com");
484 std::string private_key_info2, der_cert2; 484 std::string private_key_info2, der_cert2;
485 TestCompletionCallback callback2; 485 TestCompletionCallback callback2;
486 ServerBoundCertService::RequestHandle request_handle2; 486 ChannelIDService::RequestHandle request_handle2;
487 487
488 std::string host3("bar.com"); 488 std::string host3("bar.com");
489 std::string private_key_info3, der_cert3; 489 std::string private_key_info3, der_cert3;
490 TestCompletionCallback callback3; 490 TestCompletionCallback callback3;
491 ServerBoundCertService::RequestHandle request_handle3; 491 ChannelIDService::RequestHandle request_handle3;
492 492
493 error = service_->GetOrCreateDomainBoundCert(host1, 493 error = service_->GetOrCreateChannelID(host1,
494 &private_key_info1, 494 &private_key_info1,
495 &der_cert1, 495 &der_cert1,
496 callback1.callback(), 496 callback1.callback(),
497 &request_handle1); 497 &request_handle1);
wtc 2014/07/22 22:49:32 Fix the indentation of these arguments.
Ryan Hamilton 2014/07/22 23:32:54 Done.
498 EXPECT_EQ(ERR_IO_PENDING, error); 498 EXPECT_EQ(ERR_IO_PENDING, error);
499 EXPECT_TRUE(request_handle1.is_active()); 499 EXPECT_TRUE(request_handle1.is_active());
500 500
501 error = service_->GetOrCreateDomainBoundCert(host2, 501 error = service_->GetOrCreateChannelID(host2,
502 &private_key_info2, 502 &private_key_info2,
503 &der_cert2, 503 &der_cert2,
504 callback2.callback(), 504 callback2.callback(),
505 &request_handle2); 505 &request_handle2);
wtc 2014/07/22 22:49:32 Fix the indentation of these arguments.
Ryan Hamilton 2014/07/22 23:32:54 Done.
506 EXPECT_EQ(ERR_IO_PENDING, error); 506 EXPECT_EQ(ERR_IO_PENDING, error);
507 EXPECT_TRUE(request_handle2.is_active()); 507 EXPECT_TRUE(request_handle2.is_active());
508 508
509 error = service_->GetOrCreateDomainBoundCert(host3, 509 error = service_->GetOrCreateChannelID(host3,
510 &private_key_info3, 510 &private_key_info3,
511 &der_cert3, 511 &der_cert3,
512 callback3.callback(), 512 callback3.callback(),
513 &request_handle3); 513 &request_handle3);
wtc 2014/07/22 22:49:32 Fix the indentation of these arguments.
Ryan Hamilton 2014/07/22 23:32:53 Done.
514 EXPECT_EQ(ERR_IO_PENDING, error); 514 EXPECT_EQ(ERR_IO_PENDING, error);
515 EXPECT_TRUE(request_handle3.is_active()); 515 EXPECT_TRUE(request_handle3.is_active());
516 516
517 error = callback1.WaitForResult(); 517 error = callback1.WaitForResult();
518 EXPECT_EQ(OK, error); 518 EXPECT_EQ(OK, error);
519 EXPECT_FALSE(private_key_info1.empty()); 519 EXPECT_FALSE(private_key_info1.empty());
520 EXPECT_FALSE(der_cert1.empty()); 520 EXPECT_FALSE(der_cert1.empty());
521 521
522 error = callback2.WaitForResult(); 522 error = callback2.WaitForResult();
523 EXPECT_EQ(OK, error); 523 EXPECT_EQ(OK, error);
(...skipping 10 matching lines...) Expand all
534 534
535 EXPECT_NE(private_key_info1, private_key_info3); 535 EXPECT_NE(private_key_info1, private_key_info3);
536 EXPECT_NE(der_cert1, der_cert3); 536 EXPECT_NE(der_cert1, der_cert3);
537 537
538 EXPECT_NE(private_key_info2, private_key_info3); 538 EXPECT_NE(private_key_info2, private_key_info3);
539 EXPECT_NE(der_cert2, der_cert3); 539 EXPECT_NE(der_cert2, der_cert3);
540 540
541 EXPECT_EQ(3, service_->cert_count()); 541 EXPECT_EQ(3, service_->cert_count());
542 } 542 }
543 543
544 TEST_F(ServerBoundCertServiceTest, Expiration) { 544 TEST_F(ChannelIDServiceTest, Expiration) {
545 ServerBoundCertStore* store = service_->GetCertStore(); 545 ChannelIDStore* store = service_->GetChannelIDStore();
546 base::Time now = base::Time::Now(); 546 base::Time now = base::Time::Now();
547 store->SetServerBoundCert("good", 547 store->SetChannelID("good",
548 now, 548 now,
549 now + base::TimeDelta::FromDays(1), 549 now + base::TimeDelta::FromDays(1),
550 "a", 550 "a",
551 "b"); 551 "b");
552 store->SetServerBoundCert("expired", 552 store->SetChannelID("expired",
553 now - base::TimeDelta::FromDays(2), 553 now - base::TimeDelta::FromDays(2),
554 now - base::TimeDelta::FromDays(1), 554 now - base::TimeDelta::FromDays(1),
555 "c", 555 "c",
556 "d"); 556 "d");
557 EXPECT_EQ(2, service_->cert_count()); 557 EXPECT_EQ(2, service_->cert_count());
558 558
559 int error; 559 int error;
560 TestCompletionCallback callback; 560 TestCompletionCallback callback;
561 ServerBoundCertService::RequestHandle request_handle; 561 ChannelIDService::RequestHandle request_handle;
562 562
563 // Cert is valid - synchronous completion. 563 // Cert is valid - synchronous completion.
564 std::string private_key_info1, der_cert1; 564 std::string private_key_info1, der_cert1;
565 error = service_->GetOrCreateDomainBoundCert( 565 error = service_->GetOrCreateChannelID(
566 "good", &private_key_info1, &der_cert1, 566 "good", &private_key_info1, &der_cert1,
567 callback.callback(), &request_handle); 567 callback.callback(), &request_handle);
568 EXPECT_EQ(OK, error); 568 EXPECT_EQ(OK, error);
569 EXPECT_FALSE(request_handle.is_active()); 569 EXPECT_FALSE(request_handle.is_active());
570 EXPECT_EQ(2, service_->cert_count()); 570 EXPECT_EQ(2, service_->cert_count());
571 EXPECT_STREQ("a", private_key_info1.c_str()); 571 EXPECT_STREQ("a", private_key_info1.c_str());
572 EXPECT_STREQ("b", der_cert1.c_str()); 572 EXPECT_STREQ("b", der_cert1.c_str());
573 573
574 // Expired cert is valid as well - synchronous completion. 574 // Expired cert is valid as well - synchronous completion.
575 std::string private_key_info2, der_cert2; 575 std::string private_key_info2, der_cert2;
576 error = service_->GetOrCreateDomainBoundCert( 576 error = service_->GetOrCreateChannelID(
577 "expired", &private_key_info2, &der_cert2, 577 "expired", &private_key_info2, &der_cert2,
578 callback.callback(), &request_handle); 578 callback.callback(), &request_handle);
579 EXPECT_EQ(OK, error); 579 EXPECT_EQ(OK, error);
580 EXPECT_FALSE(request_handle.is_active()); 580 EXPECT_FALSE(request_handle.is_active());
581 EXPECT_EQ(2, service_->cert_count()); 581 EXPECT_EQ(2, service_->cert_count());
582 EXPECT_STREQ("c", private_key_info2.c_str()); 582 EXPECT_STREQ("c", private_key_info2.c_str());
583 EXPECT_STREQ("d", der_cert2.c_str()); 583 EXPECT_STREQ("d", der_cert2.c_str());
584 } 584 }
585 585
586 TEST_F(ServerBoundCertServiceTest, AsyncStoreGetOrCreateNoCertsInStore) { 586 TEST_F(ChannelIDServiceTest, AsyncStoreGetOrCreateNoChannelIDsInStore) {
587 MockServerBoundCertStoreWithAsyncGet* mock_store = 587 MockChannelIDStoreWithAsyncGet* mock_store =
588 new MockServerBoundCertStoreWithAsyncGet(); 588 new MockChannelIDStoreWithAsyncGet();
589 service_ = scoped_ptr<ServerBoundCertService>(new ServerBoundCertService( 589 service_ = scoped_ptr<ChannelIDService>(new ChannelIDService(
590 mock_store, base::MessageLoopProxy::current())); 590 mock_store, base::MessageLoopProxy::current()));
591 591
592 std::string host("encrypted.google.com"); 592 std::string host("encrypted.google.com");
593 593
594 int error; 594 int error;
595 TestCompletionCallback callback; 595 TestCompletionCallback callback;
596 ServerBoundCertService::RequestHandle request_handle; 596 ChannelIDService::RequestHandle request_handle;
597 597
598 // Asynchronous completion with no certs in the store. 598 // Asynchronous completion with no certs in the store.
599 std::string private_key_info, der_cert; 599 std::string private_key_info, der_cert;
600 EXPECT_EQ(0, service_->cert_count()); 600 EXPECT_EQ(0, service_->cert_count());
601 error = service_->GetOrCreateDomainBoundCert( 601 error = service_->GetOrCreateChannelID(
602 host, &private_key_info, &der_cert, callback.callback(), &request_handle); 602 host, &private_key_info, &der_cert, callback.callback(), &request_handle);
603 EXPECT_EQ(ERR_IO_PENDING, error); 603 EXPECT_EQ(ERR_IO_PENDING, error);
604 EXPECT_TRUE(request_handle.is_active()); 604 EXPECT_TRUE(request_handle.is_active());
605 605
606 mock_store->CallGetServerBoundCertCallbackWithResult( 606 mock_store->CallGetChannelIDCallbackWithResult(
607 ERR_FILE_NOT_FOUND, base::Time(), std::string(), std::string()); 607 ERR_FILE_NOT_FOUND, base::Time(), std::string(), std::string());
608 608
609 error = callback.WaitForResult(); 609 error = callback.WaitForResult();
610 EXPECT_EQ(OK, error); 610 EXPECT_EQ(OK, error);
611 EXPECT_EQ(1, service_->cert_count()); 611 EXPECT_EQ(1, service_->cert_count());
612 EXPECT_FALSE(private_key_info.empty()); 612 EXPECT_FALSE(private_key_info.empty());
613 EXPECT_FALSE(der_cert.empty()); 613 EXPECT_FALSE(der_cert.empty());
614 EXPECT_FALSE(request_handle.is_active()); 614 EXPECT_FALSE(request_handle.is_active());
615 } 615 }
616 616
617 TEST_F(ServerBoundCertServiceTest, AsyncStoreGetNoCertsInStore) { 617 TEST_F(ChannelIDServiceTest, AsyncStoreGetNoChannelIDsInStore) {
618 MockServerBoundCertStoreWithAsyncGet* mock_store = 618 MockChannelIDStoreWithAsyncGet* mock_store =
619 new MockServerBoundCertStoreWithAsyncGet(); 619 new MockChannelIDStoreWithAsyncGet();
620 service_ = scoped_ptr<ServerBoundCertService>(new ServerBoundCertService( 620 service_ = scoped_ptr<ChannelIDService>(new ChannelIDService(
621 mock_store, base::MessageLoopProxy::current())); 621 mock_store, base::MessageLoopProxy::current()));
622 622
623 std::string host("encrypted.google.com"); 623 std::string host("encrypted.google.com");
624 624
625 int error; 625 int error;
626 TestCompletionCallback callback; 626 TestCompletionCallback callback;
627 ServerBoundCertService::RequestHandle request_handle; 627 ChannelIDService::RequestHandle request_handle;
628 628
629 // Asynchronous completion with no certs in the store. 629 // Asynchronous completion with no certs in the store.
630 std::string private_key, der_cert; 630 std::string private_key, der_cert;
631 EXPECT_EQ(0, service_->cert_count()); 631 EXPECT_EQ(0, service_->cert_count());
632 error = service_->GetDomainBoundCert( 632 error = service_->GetChannelID(
633 host, &private_key, &der_cert, callback.callback(), &request_handle); 633 host, &private_key, &der_cert, callback.callback(), &request_handle);
634 EXPECT_EQ(ERR_IO_PENDING, error); 634 EXPECT_EQ(ERR_IO_PENDING, error);
635 EXPECT_TRUE(request_handle.is_active()); 635 EXPECT_TRUE(request_handle.is_active());
636 636
637 mock_store->CallGetServerBoundCertCallbackWithResult( 637 mock_store->CallGetChannelIDCallbackWithResult(
638 ERR_FILE_NOT_FOUND, base::Time(), std::string(), std::string()); 638 ERR_FILE_NOT_FOUND, base::Time(), std::string(), std::string());
639 639
640 error = callback.WaitForResult(); 640 error = callback.WaitForResult();
641 EXPECT_EQ(ERR_FILE_NOT_FOUND, error); 641 EXPECT_EQ(ERR_FILE_NOT_FOUND, error);
642 EXPECT_EQ(0, service_->cert_count()); 642 EXPECT_EQ(0, service_->cert_count());
643 EXPECT_EQ(0u, service_->workers_created()); 643 EXPECT_EQ(0u, service_->workers_created());
644 EXPECT_TRUE(der_cert.empty()); 644 EXPECT_TRUE(der_cert.empty());
645 EXPECT_FALSE(request_handle.is_active()); 645 EXPECT_FALSE(request_handle.is_active());
646 } 646 }
647 647
648 TEST_F(ServerBoundCertServiceTest, AsyncStoreGetOrCreateOneCertInStore) { 648 TEST_F(ChannelIDServiceTest, AsyncStoreGetOrCreateOneCertInStore) {
649 MockServerBoundCertStoreWithAsyncGet* mock_store = 649 MockChannelIDStoreWithAsyncGet* mock_store =
650 new MockServerBoundCertStoreWithAsyncGet(); 650 new MockChannelIDStoreWithAsyncGet();
651 service_ = scoped_ptr<ServerBoundCertService>(new ServerBoundCertService( 651 service_ = scoped_ptr<ChannelIDService>(new ChannelIDService(
652 mock_store, base::MessageLoopProxy::current())); 652 mock_store, base::MessageLoopProxy::current()));
653 653
654 std::string host("encrypted.google.com"); 654 std::string host("encrypted.google.com");
655 655
656 int error; 656 int error;
657 TestCompletionCallback callback; 657 TestCompletionCallback callback;
658 ServerBoundCertService::RequestHandle request_handle; 658 ChannelIDService::RequestHandle request_handle;
659 659
660 // Asynchronous completion with a cert in the store. 660 // Asynchronous completion with a cert in the store.
661 std::string private_key_info, der_cert; 661 std::string private_key_info, der_cert;
662 EXPECT_EQ(0, service_->cert_count()); 662 EXPECT_EQ(0, service_->cert_count());
663 error = service_->GetOrCreateDomainBoundCert( 663 error = service_->GetOrCreateChannelID(
664 host, &private_key_info, &der_cert, callback.callback(), &request_handle); 664 host, &private_key_info, &der_cert, callback.callback(), &request_handle);
665 EXPECT_EQ(ERR_IO_PENDING, error); 665 EXPECT_EQ(ERR_IO_PENDING, error);
666 EXPECT_TRUE(request_handle.is_active()); 666 EXPECT_TRUE(request_handle.is_active());
667 667
668 mock_store->CallGetServerBoundCertCallbackWithResult( 668 mock_store->CallGetChannelIDCallbackWithResult(
669 OK, base::Time(), "ab", "cd"); 669 OK, base::Time(), "ab", "cd");
670 670
671 error = callback.WaitForResult(); 671 error = callback.WaitForResult();
672 EXPECT_EQ(OK, error); 672 EXPECT_EQ(OK, error);
673 EXPECT_EQ(1, service_->cert_count()); 673 EXPECT_EQ(1, service_->cert_count());
674 EXPECT_EQ(1u, service_->requests()); 674 EXPECT_EQ(1u, service_->requests());
675 EXPECT_EQ(1u, service_->cert_store_hits()); 675 EXPECT_EQ(1u, service_->cert_store_hits());
676 // Because the cert was found in the store, no new workers should have been 676 // Because the cert was found in the store, no new workers should have been
677 // created. 677 // created.
678 EXPECT_EQ(0u, service_->workers_created()); 678 EXPECT_EQ(0u, service_->workers_created());
679 EXPECT_STREQ("ab", private_key_info.c_str()); 679 EXPECT_STREQ("ab", private_key_info.c_str());
680 EXPECT_STREQ("cd", der_cert.c_str()); 680 EXPECT_STREQ("cd", der_cert.c_str());
681 EXPECT_FALSE(request_handle.is_active()); 681 EXPECT_FALSE(request_handle.is_active());
682 } 682 }
683 683
684 TEST_F(ServerBoundCertServiceTest, AsyncStoreGetOneCertInStore) { 684 TEST_F(ChannelIDServiceTest, AsyncStoreGetOneCertInStore) {
685 MockServerBoundCertStoreWithAsyncGet* mock_store = 685 MockChannelIDStoreWithAsyncGet* mock_store =
686 new MockServerBoundCertStoreWithAsyncGet(); 686 new MockChannelIDStoreWithAsyncGet();
687 service_ = scoped_ptr<ServerBoundCertService>(new ServerBoundCertService( 687 service_ = scoped_ptr<ChannelIDService>(new ChannelIDService(
688 mock_store, base::MessageLoopProxy::current())); 688 mock_store, base::MessageLoopProxy::current()));
689 689
690 std::string host("encrypted.google.com"); 690 std::string host("encrypted.google.com");
691 691
692 int error; 692 int error;
693 TestCompletionCallback callback; 693 TestCompletionCallback callback;
694 ServerBoundCertService::RequestHandle request_handle; 694 ChannelIDService::RequestHandle request_handle;
695 695
696 // Asynchronous completion with a cert in the store. 696 // Asynchronous completion with a cert in the store.
697 std::string private_key, der_cert; 697 std::string private_key, der_cert;
698 EXPECT_EQ(0, service_->cert_count()); 698 EXPECT_EQ(0, service_->cert_count());
699 error = service_->GetDomainBoundCert( 699 error = service_->GetChannelID(
700 host, &private_key, &der_cert, callback.callback(), &request_handle); 700 host, &private_key, &der_cert, callback.callback(), &request_handle);
701 EXPECT_EQ(ERR_IO_PENDING, error); 701 EXPECT_EQ(ERR_IO_PENDING, error);
702 EXPECT_TRUE(request_handle.is_active()); 702 EXPECT_TRUE(request_handle.is_active());
703 703
704 mock_store->CallGetServerBoundCertCallbackWithResult( 704 mock_store->CallGetChannelIDCallbackWithResult(
705 OK, base::Time(), "ab", "cd"); 705 OK, base::Time(), "ab", "cd");
706 706
707 error = callback.WaitForResult(); 707 error = callback.WaitForResult();
708 EXPECT_EQ(OK, error); 708 EXPECT_EQ(OK, error);
709 EXPECT_EQ(1, service_->cert_count()); 709 EXPECT_EQ(1, service_->cert_count());
710 EXPECT_EQ(1u, service_->requests()); 710 EXPECT_EQ(1u, service_->requests());
711 EXPECT_EQ(1u, service_->cert_store_hits()); 711 EXPECT_EQ(1u, service_->cert_store_hits());
712 // Because the cert was found in the store, no new workers should have been 712 // Because the cert was found in the store, no new workers should have been
713 // created. 713 // created.
714 EXPECT_EQ(0u, service_->workers_created()); 714 EXPECT_EQ(0u, service_->workers_created());
715 EXPECT_STREQ("cd", der_cert.c_str()); 715 EXPECT_STREQ("cd", der_cert.c_str());
716 EXPECT_FALSE(request_handle.is_active()); 716 EXPECT_FALSE(request_handle.is_active());
717 } 717 }
718 718
719 TEST_F(ServerBoundCertServiceTest, AsyncStoreGetThenCreateNoCertsInStore) { 719 TEST_F(ChannelIDServiceTest, AsyncStoreGetThenCreateNoCertsInStore) {
720 MockServerBoundCertStoreWithAsyncGet* mock_store = 720 MockChannelIDStoreWithAsyncGet* mock_store =
721 new MockServerBoundCertStoreWithAsyncGet(); 721 new MockChannelIDStoreWithAsyncGet();
722 service_ = scoped_ptr<ServerBoundCertService>(new ServerBoundCertService( 722 service_ = scoped_ptr<ChannelIDService>(new ChannelIDService(
723 mock_store, base::MessageLoopProxy::current())); 723 mock_store, base::MessageLoopProxy::current()));
724 724
725 std::string host("encrypted.google.com"); 725 std::string host("encrypted.google.com");
726 726
727 int error; 727 int error;
728 728
729 // Asynchronous get with no certs in the store. 729 // Asynchronous get with no certs in the store.
730 TestCompletionCallback callback1; 730 TestCompletionCallback callback1;
731 ServerBoundCertService::RequestHandle request_handle1; 731 ChannelIDService::RequestHandle request_handle1;
732 std::string private_key1, der_cert1; 732 std::string private_key1, der_cert1;
733 EXPECT_EQ(0, service_->cert_count()); 733 EXPECT_EQ(0, service_->cert_count());
734 error = service_->GetDomainBoundCert( 734 error = service_->GetChannelID(
735 host, &private_key1, &der_cert1, callback1.callback(), &request_handle1); 735 host, &private_key1, &der_cert1, callback1.callback(), &request_handle1);
736 EXPECT_EQ(ERR_IO_PENDING, error); 736 EXPECT_EQ(ERR_IO_PENDING, error);
737 EXPECT_TRUE(request_handle1.is_active()); 737 EXPECT_TRUE(request_handle1.is_active());
738 738
739 // Asynchronous get/create with no certs in the store. 739 // Asynchronous get/create with no certs in the store.
740 TestCompletionCallback callback2; 740 TestCompletionCallback callback2;
741 ServerBoundCertService::RequestHandle request_handle2; 741 ChannelIDService::RequestHandle request_handle2;
742 std::string private_key2, der_cert2; 742 std::string private_key2, der_cert2;
743 EXPECT_EQ(0, service_->cert_count()); 743 EXPECT_EQ(0, service_->cert_count());
744 error = service_->GetOrCreateDomainBoundCert( 744 error = service_->GetOrCreateChannelID(
745 host, &private_key2, &der_cert2, callback2.callback(), &request_handle2); 745 host, &private_key2, &der_cert2, callback2.callback(), &request_handle2);
746 EXPECT_EQ(ERR_IO_PENDING, error); 746 EXPECT_EQ(ERR_IO_PENDING, error);
747 EXPECT_TRUE(request_handle2.is_active()); 747 EXPECT_TRUE(request_handle2.is_active());
748 748
749 mock_store->CallGetServerBoundCertCallbackWithResult( 749 mock_store->CallGetChannelIDCallbackWithResult(
750 ERR_FILE_NOT_FOUND, base::Time(), std::string(), std::string()); 750 ERR_FILE_NOT_FOUND, base::Time(), std::string(), std::string());
751 751
752 // Even though the first request didn't ask to create a cert, it gets joined 752 // Even though the first request didn't ask to create a cert, it gets joined
753 // by the second, which does, so both succeed. 753 // by the second, which does, so both succeed.
754 error = callback1.WaitForResult(); 754 error = callback1.WaitForResult();
755 EXPECT_EQ(OK, error); 755 EXPECT_EQ(OK, error);
756 error = callback2.WaitForResult(); 756 error = callback2.WaitForResult();
757 EXPECT_EQ(OK, error); 757 EXPECT_EQ(OK, error);
758 758
759 // One cert is created, one request is joined. 759 // One cert is created, one request is joined.
760 EXPECT_EQ(2U, service_->requests()); 760 EXPECT_EQ(2U, service_->requests());
761 EXPECT_EQ(1, service_->cert_count()); 761 EXPECT_EQ(1, service_->cert_count());
762 EXPECT_EQ(1u, service_->workers_created()); 762 EXPECT_EQ(1u, service_->workers_created());
763 EXPECT_EQ(1u, service_->inflight_joins()); 763 EXPECT_EQ(1u, service_->inflight_joins());
764 EXPECT_FALSE(der_cert1.empty()); 764 EXPECT_FALSE(der_cert1.empty());
765 EXPECT_EQ(der_cert1, der_cert2); 765 EXPECT_EQ(der_cert1, der_cert2);
766 EXPECT_FALSE(private_key1.empty()); 766 EXPECT_FALSE(private_key1.empty());
767 EXPECT_EQ(private_key1, private_key2); 767 EXPECT_EQ(private_key1, private_key2);
768 EXPECT_FALSE(request_handle1.is_active()); 768 EXPECT_FALSE(request_handle1.is_active());
769 EXPECT_FALSE(request_handle2.is_active()); 769 EXPECT_FALSE(request_handle2.is_active());
770 } 770 }
771 771
772 } // namespace 772 } // namespace
773 773
774 } // namespace net 774 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698