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

Side by Side Diff: chromeos/attestation/attestation_flow_unittest.cc

Issue 14305009: Enhanced and refactored the AttestationFlow interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased again Created 7 years, 7 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
« no previous file with comments | « chromeos/attestation/attestation_flow.cc ('k') | chromeos/attestation/mock_attestation_flow.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/memory/scoped_ptr.h" 6 #include "base/memory/scoped_ptr.h"
7 #include "base/run_loop.h" 7 #include "base/run_loop.h"
8 #include "chromeos/attestation/mock_attestation_flow.h" 8 #include "chromeos/attestation/mock_attestation_flow.h"
9 #include "chromeos/cryptohome/mock_async_method_caller.h" 9 #include "chromeos/cryptohome/mock_async_method_caller.h"
10 #include "chromeos/dbus/mock_cryptohome_client.h" 10 #include "chromeos/dbus/mock_cryptohome_client.h"
(...skipping 23 matching lines...) Expand all
34 34
35 void DBusCallbackFail(const BoolDBusMethodCallback& callback) { 35 void DBusCallbackFail(const BoolDBusMethodCallback& callback) {
36 MessageLoop::current()->PostTask( 36 MessageLoop::current()->PostTask(
37 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_FAILURE, false)); 37 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_FAILURE, false));
38 } 38 }
39 39
40 void AsyncCallbackFalse(cryptohome::AsyncMethodCaller::Callback callback) { 40 void AsyncCallbackFalse(cryptohome::AsyncMethodCaller::Callback callback) {
41 callback.Run(false, cryptohome::MOUNT_ERROR_NONE); 41 callback.Run(false, cryptohome::MOUNT_ERROR_NONE);
42 } 42 }
43 43
44 class FakeDBusData {
45 public:
46 explicit FakeDBusData(const std::string& data) : data_(data) {}
47
48 void operator() (const CryptohomeClient::DataMethodCallback& callback) {
49 MessageLoop::current()->PostTask(
50 FROM_HERE,
51 base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true, data_));
52 }
53
54 private:
55 std::string data_;
56 };
57
44 } // namespace 58 } // namespace
45 59
46 class AttestationFlowTest : public testing::Test { 60 class AttestationFlowTest : public testing::Test {
47 protected: 61 protected:
48 void Run() { 62 void Run() {
49 base::RunLoop run_loop; 63 base::RunLoop run_loop;
50 run_loop.RunUntilIdle(); 64 run_loop.RunUntilIdle();
51 } 65 }
52 MessageLoop message_loop_; 66 MessageLoop message_loop_;
53 }; 67 };
(...skipping 22 matching lines...) Expand all
76 _)).Times(1) 90 _)).Times(1)
77 .InSequence(flow_order); 91 .InSequence(flow_order);
78 92
79 std::string fake_enroll_response = 93 std::string fake_enroll_response =
80 cryptohome::MockAsyncMethodCaller::kFakeAttestationEnrollRequest; 94 cryptohome::MockAsyncMethodCaller::kFakeAttestationEnrollRequest;
81 fake_enroll_response += "_response"; 95 fake_enroll_response += "_response";
82 EXPECT_CALL(async_caller, AsyncTpmAttestationEnroll(fake_enroll_response, _)) 96 EXPECT_CALL(async_caller, AsyncTpmAttestationEnroll(fake_enroll_response, _))
83 .Times(1) 97 .Times(1)
84 .InSequence(flow_order); 98 .InSequence(flow_order);
85 99
86 int options = CryptohomeClient::INCLUDE_DEVICE_STATE; 100 EXPECT_CALL(
87 EXPECT_CALL(async_caller, 101 async_caller,
88 AsyncTpmAttestationCreateCertRequest(options, _)) 102 AsyncTpmAttestationCreateCertRequest(CERTIFICATE_INCLUDE_DEVICE_STATE, _))
89 .Times(1) 103 .Times(1)
90 .InSequence(flow_order); 104 .InSequence(flow_order);
91 105
92 EXPECT_CALL(*proxy, SendCertificateRequest( 106 EXPECT_CALL(*proxy, SendCertificateRequest(
93 cryptohome::MockAsyncMethodCaller::kFakeAttestationCertRequest, 107 cryptohome::MockAsyncMethodCaller::kFakeAttestationCertRequest,
94 _)).Times(1) 108 _)).Times(1)
95 .InSequence(flow_order); 109 .InSequence(flow_order);
96 110
97 std::string fake_cert_response = 111 std::string fake_cert_response =
98 cryptohome::MockAsyncMethodCaller::kFakeAttestationCertRequest; 112 cryptohome::MockAsyncMethodCaller::kFakeAttestationCertRequest;
99 fake_cert_response += "_response"; 113 fake_cert_response += "_response";
100 EXPECT_CALL(async_caller, 114 EXPECT_CALL(async_caller,
101 AsyncTpmAttestationFinishCertRequest(fake_cert_response, 115 AsyncTpmAttestationFinishCertRequest(fake_cert_response,
102 CryptohomeClient::USER_KEY, 116 KEY_USER,
103 "test", 117 kEnterpriseUserKey,
104 _)) 118 _))
105 .Times(1) 119 .Times(1)
106 .InSequence(flow_order); 120 .InSequence(flow_order);
107 121
108 StrictMock<MockObserver> observer; 122 StrictMock<MockObserver> observer;
109 EXPECT_CALL(observer, MockCertificateCallback( 123 EXPECT_CALL(observer, MockCertificateCallback(
110 true, 124 true,
111 cryptohome::MockAsyncMethodCaller::kFakeAttestationCert)) 125 cryptohome::MockAsyncMethodCaller::kFakeAttestationCert))
112 .Times(1) 126 .Times(1)
113 .InSequence(flow_order); 127 .InSequence(flow_order);
114 AttestationFlow::CertificateCallback mock_callback = base::Bind( 128 AttestationFlow::CertificateCallback mock_callback = base::Bind(
115 &MockObserver::MockCertificateCallback, 129 &MockObserver::MockCertificateCallback,
116 base::Unretained(&observer)); 130 base::Unretained(&observer));
117 131
118 scoped_ptr<ServerProxy> proxy_interface(proxy.release()); 132 scoped_ptr<ServerProxy> proxy_interface(proxy.release());
119 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass()); 133 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass());
120 flow.GetCertificate("test", mock_callback); 134 flow.GetCertificate(PROFILE_ENTERPRISE_USER_CERTIFICATE, true, mock_callback);
121 Run(); 135 Run();
122 } 136 }
123 137
124 TEST_F(AttestationFlowTest, GetCertificate_NoEK) { 138 TEST_F(AttestationFlowTest, GetCertificate_NoEK) {
125 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller; 139 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller;
126 async_caller.SetUp(false, cryptohome::MOUNT_ERROR_NONE); 140 async_caller.SetUp(false, cryptohome::MOUNT_ERROR_NONE);
127 EXPECT_CALL(async_caller, AsyncTpmAttestationCreateEnrollRequest(_)) 141 EXPECT_CALL(async_caller, AsyncTpmAttestationCreateEnrollRequest(_))
128 .Times(1); 142 .Times(1);
129 143
130 chromeos::MockCryptohomeClient client; 144 chromeos::MockCryptohomeClient client;
131 EXPECT_CALL(client, TpmAttestationIsEnrolled(_)) 145 EXPECT_CALL(client, TpmAttestationIsEnrolled(_))
132 .WillRepeatedly(Invoke(DBusCallbackFalse)); 146 .WillRepeatedly(Invoke(DBusCallbackFalse));
133 147
134 // We're not expecting any server calls in this case; StrictMock will verify. 148 // We're not expecting any server calls in this case; StrictMock will verify.
135 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>()); 149 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>());
136 150
137 StrictMock<MockObserver> observer; 151 StrictMock<MockObserver> observer;
138 EXPECT_CALL(observer, MockCertificateCallback(false, "")) 152 EXPECT_CALL(observer, MockCertificateCallback(false, ""))
139 .Times(1); 153 .Times(1);
140 AttestationFlow::CertificateCallback mock_callback = base::Bind( 154 AttestationFlow::CertificateCallback mock_callback = base::Bind(
141 &MockObserver::MockCertificateCallback, 155 &MockObserver::MockCertificateCallback,
142 base::Unretained(&observer)); 156 base::Unretained(&observer));
143 157
144 scoped_ptr<ServerProxy> proxy_interface(proxy.release()); 158 scoped_ptr<ServerProxy> proxy_interface(proxy.release());
145 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass()); 159 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass());
146 flow.GetCertificate("test", mock_callback); 160 flow.GetCertificate(PROFILE_ENTERPRISE_USER_CERTIFICATE, true, mock_callback);
147 Run(); 161 Run();
148 } 162 }
149 163
150 TEST_F(AttestationFlowTest, GetCertificate_EKRejected) { 164 TEST_F(AttestationFlowTest, GetCertificate_EKRejected) {
151 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller; 165 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller;
152 async_caller.SetUp(true, cryptohome::MOUNT_ERROR_NONE); 166 async_caller.SetUp(true, cryptohome::MOUNT_ERROR_NONE);
153 EXPECT_CALL(async_caller, AsyncTpmAttestationCreateEnrollRequest(_)) 167 EXPECT_CALL(async_caller, AsyncTpmAttestationCreateEnrollRequest(_))
154 .Times(1); 168 .Times(1);
155 169
156 chromeos::MockCryptohomeClient client; 170 chromeos::MockCryptohomeClient client;
157 EXPECT_CALL(client, TpmAttestationIsEnrolled(_)) 171 EXPECT_CALL(client, TpmAttestationIsEnrolled(_))
158 .WillRepeatedly(Invoke(DBusCallbackFalse)); 172 .WillRepeatedly(Invoke(DBusCallbackFalse));
159 173
160 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>()); 174 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>());
161 proxy->DeferToFake(false); 175 proxy->DeferToFake(false);
162 EXPECT_CALL(*proxy, SendEnrollRequest( 176 EXPECT_CALL(*proxy, SendEnrollRequest(
163 cryptohome::MockAsyncMethodCaller::kFakeAttestationEnrollRequest, 177 cryptohome::MockAsyncMethodCaller::kFakeAttestationEnrollRequest,
164 _)).Times(1); 178 _)).Times(1);
165 179
166 StrictMock<MockObserver> observer; 180 StrictMock<MockObserver> observer;
167 EXPECT_CALL(observer, MockCertificateCallback(false, "")) 181 EXPECT_CALL(observer, MockCertificateCallback(false, ""))
168 .Times(1); 182 .Times(1);
169 AttestationFlow::CertificateCallback mock_callback = base::Bind( 183 AttestationFlow::CertificateCallback mock_callback = base::Bind(
170 &MockObserver::MockCertificateCallback, 184 &MockObserver::MockCertificateCallback,
171 base::Unretained(&observer)); 185 base::Unretained(&observer));
172 186
173 scoped_ptr<ServerProxy> proxy_interface(proxy.release()); 187 scoped_ptr<ServerProxy> proxy_interface(proxy.release());
174 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass()); 188 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass());
175 flow.GetCertificate("test", mock_callback); 189 flow.GetCertificate(PROFILE_ENTERPRISE_USER_CERTIFICATE, true, mock_callback);
176 Run(); 190 Run();
177 } 191 }
178 192
179 TEST_F(AttestationFlowTest, GetCertificate_FailEnroll) { 193 TEST_F(AttestationFlowTest, GetCertificate_FailEnroll) {
180 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller; 194 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller;
181 async_caller.SetUp(true, cryptohome::MOUNT_ERROR_NONE); 195 async_caller.SetUp(true, cryptohome::MOUNT_ERROR_NONE);
182 EXPECT_CALL(async_caller, AsyncTpmAttestationCreateEnrollRequest(_)) 196 EXPECT_CALL(async_caller, AsyncTpmAttestationCreateEnrollRequest(_))
183 .Times(1); 197 .Times(1);
184 std::string fake_enroll_response = 198 std::string fake_enroll_response =
185 cryptohome::MockAsyncMethodCaller::kFakeAttestationEnrollRequest; 199 cryptohome::MockAsyncMethodCaller::kFakeAttestationEnrollRequest;
(...skipping 12 matching lines...) Expand all
198 _)).Times(1); 212 _)).Times(1);
199 213
200 StrictMock<MockObserver> observer; 214 StrictMock<MockObserver> observer;
201 EXPECT_CALL(observer, MockCertificateCallback(false, "")).Times(1); 215 EXPECT_CALL(observer, MockCertificateCallback(false, "")).Times(1);
202 AttestationFlow::CertificateCallback mock_callback = base::Bind( 216 AttestationFlow::CertificateCallback mock_callback = base::Bind(
203 &MockObserver::MockCertificateCallback, 217 &MockObserver::MockCertificateCallback,
204 base::Unretained(&observer)); 218 base::Unretained(&observer));
205 219
206 scoped_ptr<ServerProxy> proxy_interface(proxy.release()); 220 scoped_ptr<ServerProxy> proxy_interface(proxy.release());
207 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass()); 221 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass());
208 flow.GetCertificate("test", mock_callback); 222 flow.GetCertificate(PROFILE_ENTERPRISE_USER_CERTIFICATE, true, mock_callback);
209 Run(); 223 Run();
210 } 224 }
211 225
212 TEST_F(AttestationFlowTest, GetOwnerCertificateAlreadyEnrolled) { 226 TEST_F(AttestationFlowTest, GetMachineCertificateAlreadyEnrolled) {
213 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller; 227 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller;
214 async_caller.SetUp(true, cryptohome::MOUNT_ERROR_NONE); 228 async_caller.SetUp(true, cryptohome::MOUNT_ERROR_NONE);
215 int options = CryptohomeClient::INCLUDE_DEVICE_STATE | 229 int options = CERTIFICATE_INCLUDE_DEVICE_STATE |
216 CryptohomeClient::INCLUDE_STABLE_ID; 230 CERTIFICATE_INCLUDE_STABLE_ID;
217 EXPECT_CALL(async_caller, AsyncTpmAttestationCreateCertRequest(options, _)) 231 EXPECT_CALL(async_caller, AsyncTpmAttestationCreateCertRequest(options, _))
218 .Times(1); 232 .Times(1);
219 std::string fake_cert_response = 233 std::string fake_cert_response =
220 cryptohome::MockAsyncMethodCaller::kFakeAttestationCertRequest; 234 cryptohome::MockAsyncMethodCaller::kFakeAttestationCertRequest;
221 fake_cert_response += "_response"; 235 fake_cert_response += "_response";
222 EXPECT_CALL(async_caller, 236 EXPECT_CALL(async_caller,
223 AsyncTpmAttestationFinishCertRequest(fake_cert_response, 237 AsyncTpmAttestationFinishCertRequest(fake_cert_response,
224 CryptohomeClient::DEVICE_KEY, 238 KEY_DEVICE,
225 "attest-ent-machine", 239 kEnterpriseMachineKey,
226 _)) 240 _))
227 .Times(1); 241 .Times(1);
228 242
229 chromeos::MockCryptohomeClient client; 243 chromeos::MockCryptohomeClient client;
230 EXPECT_CALL(client, TpmAttestationIsEnrolled(_)) 244 EXPECT_CALL(client, TpmAttestationIsEnrolled(_))
231 .WillRepeatedly(Invoke(DBusCallbackTrue)); 245 .WillRepeatedly(Invoke(DBusCallbackTrue));
232 246
233 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>()); 247 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>());
234 proxy->DeferToFake(true); 248 proxy->DeferToFake(true);
235 EXPECT_CALL(*proxy, SendCertificateRequest( 249 EXPECT_CALL(*proxy, SendCertificateRequest(
236 cryptohome::MockAsyncMethodCaller::kFakeAttestationCertRequest, 250 cryptohome::MockAsyncMethodCaller::kFakeAttestationCertRequest,
237 _)).Times(1); 251 _)).Times(1);
238 252
239 StrictMock<MockObserver> observer; 253 StrictMock<MockObserver> observer;
240 EXPECT_CALL(observer, MockCertificateCallback( 254 EXPECT_CALL(observer, MockCertificateCallback(
241 true, 255 true,
242 cryptohome::MockAsyncMethodCaller::kFakeAttestationCert)).Times(1); 256 cryptohome::MockAsyncMethodCaller::kFakeAttestationCert)).Times(1);
243 AttestationFlow::CertificateCallback mock_callback = base::Bind( 257 AttestationFlow::CertificateCallback mock_callback = base::Bind(
244 &MockObserver::MockCertificateCallback, 258 &MockObserver::MockCertificateCallback,
245 base::Unretained(&observer)); 259 base::Unretained(&observer));
246 260
247 scoped_ptr<ServerProxy> proxy_interface(proxy.release()); 261 scoped_ptr<ServerProxy> proxy_interface(proxy.release());
248 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass()); 262 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass());
249 flow.GetCertificate("attest-ent-machine", mock_callback); 263 flow.GetCertificate(PROFILE_ENTERPRISE_MACHINE_CERTIFICATE,
264 true, mock_callback);
250 Run(); 265 Run();
251 } 266 }
252 267
253 TEST_F(AttestationFlowTest, GetCertificate_FailCreateCertRequest) { 268 TEST_F(AttestationFlowTest, GetCertificate_FailCreateCertRequest) {
254 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller; 269 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller;
255 async_caller.SetUp(false, cryptohome::MOUNT_ERROR_NONE); 270 async_caller.SetUp(false, cryptohome::MOUNT_ERROR_NONE);
256 int options = CryptohomeClient::INCLUDE_DEVICE_STATE; 271 int options = CERTIFICATE_INCLUDE_DEVICE_STATE;
257 EXPECT_CALL(async_caller, 272 EXPECT_CALL(async_caller,
258 AsyncTpmAttestationCreateCertRequest(options, _)) 273 AsyncTpmAttestationCreateCertRequest(options, _))
259 .Times(1); 274 .Times(1);
260 275
261 chromeos::MockCryptohomeClient client; 276 chromeos::MockCryptohomeClient client;
262 EXPECT_CALL(client, TpmAttestationIsEnrolled(_)) 277 EXPECT_CALL(client, TpmAttestationIsEnrolled(_))
263 .WillRepeatedly(Invoke(DBusCallbackTrue)); 278 .WillRepeatedly(Invoke(DBusCallbackTrue));
264 279
265 // We're not expecting any server calls in this case; StrictMock will verify. 280 // We're not expecting any server calls in this case; StrictMock will verify.
266 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>()); 281 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>());
267 282
268 StrictMock<MockObserver> observer; 283 StrictMock<MockObserver> observer;
269 EXPECT_CALL(observer, MockCertificateCallback(false, "")).Times(1); 284 EXPECT_CALL(observer, MockCertificateCallback(false, "")).Times(1);
270 AttestationFlow::CertificateCallback mock_callback = base::Bind( 285 AttestationFlow::CertificateCallback mock_callback = base::Bind(
271 &MockObserver::MockCertificateCallback, 286 &MockObserver::MockCertificateCallback,
272 base::Unretained(&observer)); 287 base::Unretained(&observer));
273 288
274 scoped_ptr<ServerProxy> proxy_interface(proxy.release()); 289 scoped_ptr<ServerProxy> proxy_interface(proxy.release());
275 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass()); 290 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass());
276 flow.GetCertificate("test", mock_callback); 291 flow.GetCertificate(PROFILE_ENTERPRISE_USER_CERTIFICATE, true, mock_callback);
277 Run(); 292 Run();
278 } 293 }
279 294
280 TEST_F(AttestationFlowTest, GetCertificate_CertRequestRejected) { 295 TEST_F(AttestationFlowTest, GetCertificate_CertRequestRejected) {
281 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller; 296 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller;
282 async_caller.SetUp(true, cryptohome::MOUNT_ERROR_NONE); 297 async_caller.SetUp(true, cryptohome::MOUNT_ERROR_NONE);
283 int options = CryptohomeClient::INCLUDE_DEVICE_STATE; 298 int options = CERTIFICATE_INCLUDE_DEVICE_STATE;
284 EXPECT_CALL(async_caller, 299 EXPECT_CALL(async_caller,
285 AsyncTpmAttestationCreateCertRequest(options, _)) 300 AsyncTpmAttestationCreateCertRequest(options, _))
286 .Times(1); 301 .Times(1);
287 302
288 chromeos::MockCryptohomeClient client; 303 chromeos::MockCryptohomeClient client;
289 EXPECT_CALL(client, TpmAttestationIsEnrolled(_)) 304 EXPECT_CALL(client, TpmAttestationIsEnrolled(_))
290 .WillRepeatedly(Invoke(DBusCallbackTrue)); 305 .WillRepeatedly(Invoke(DBusCallbackTrue));
291 306
292 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>()); 307 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>());
293 proxy->DeferToFake(false); 308 proxy->DeferToFake(false);
294 EXPECT_CALL(*proxy, SendCertificateRequest( 309 EXPECT_CALL(*proxy, SendCertificateRequest(
295 cryptohome::MockAsyncMethodCaller::kFakeAttestationCertRequest, 310 cryptohome::MockAsyncMethodCaller::kFakeAttestationCertRequest,
296 _)).Times(1); 311 _)).Times(1);
297 312
298 StrictMock<MockObserver> observer; 313 StrictMock<MockObserver> observer;
299 EXPECT_CALL(observer, MockCertificateCallback(false, "")).Times(1); 314 EXPECT_CALL(observer, MockCertificateCallback(false, "")).Times(1);
300 AttestationFlow::CertificateCallback mock_callback = base::Bind( 315 AttestationFlow::CertificateCallback mock_callback = base::Bind(
301 &MockObserver::MockCertificateCallback, 316 &MockObserver::MockCertificateCallback,
302 base::Unretained(&observer)); 317 base::Unretained(&observer));
303 318
304 scoped_ptr<ServerProxy> proxy_interface(proxy.release()); 319 scoped_ptr<ServerProxy> proxy_interface(proxy.release());
305 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass()); 320 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass());
306 flow.GetCertificate("test", mock_callback); 321 flow.GetCertificate(PROFILE_ENTERPRISE_USER_CERTIFICATE, true, mock_callback);
307 Run(); 322 Run();
308 } 323 }
309 324
310 TEST_F(AttestationFlowTest, GetCertificate_FailIsEnrolled) { 325 TEST_F(AttestationFlowTest, GetCertificate_FailIsEnrolled) {
311 // We're not expecting any server calls in this case; StrictMock will verify. 326 // We're not expecting any async calls in this case; StrictMock will verify.
312 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller; 327 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller;
313 328
314 chromeos::MockCryptohomeClient client; 329 chromeos::MockCryptohomeClient client;
315 EXPECT_CALL(client, TpmAttestationIsEnrolled(_)) 330 EXPECT_CALL(client, TpmAttestationIsEnrolled(_))
316 .WillRepeatedly(Invoke(DBusCallbackFail)); 331 .WillRepeatedly(Invoke(DBusCallbackFail));
317 332
318 // We're not expecting any server calls in this case; StrictMock will verify. 333 // We're not expecting any server calls in this case; StrictMock will verify.
319 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>()); 334 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>());
320 335
321 StrictMock<MockObserver> observer; 336 StrictMock<MockObserver> observer;
322 EXPECT_CALL(observer, MockCertificateCallback(false, "")).Times(1); 337 EXPECT_CALL(observer, MockCertificateCallback(false, "")).Times(1);
323 AttestationFlow::CertificateCallback mock_callback = base::Bind( 338 AttestationFlow::CertificateCallback mock_callback = base::Bind(
324 &MockObserver::MockCertificateCallback, 339 &MockObserver::MockCertificateCallback,
325 base::Unretained(&observer)); 340 base::Unretained(&observer));
326 341
327 scoped_ptr<ServerProxy> proxy_interface(proxy.release()); 342 scoped_ptr<ServerProxy> proxy_interface(proxy.release());
328 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass()); 343 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass());
329 flow.GetCertificate("test", mock_callback); 344 flow.GetCertificate(PROFILE_ENTERPRISE_USER_CERTIFICATE, true, mock_callback);
330 Run(); 345 Run();
331 } 346 }
332 347
348 TEST_F(AttestationFlowTest, GetCertificate_CheckExisting) {
349 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller;
350 async_caller.SetUp(true, cryptohome::MOUNT_ERROR_NONE);
351 int options = CERTIFICATE_INCLUDE_DEVICE_STATE;
352 EXPECT_CALL(async_caller, AsyncTpmAttestationCreateCertRequest(options, _))
353 .Times(1);
354 std::string fake_cert_response =
355 cryptohome::MockAsyncMethodCaller::kFakeAttestationCertRequest;
356 fake_cert_response += "_response";
357 EXPECT_CALL(async_caller,
358 AsyncTpmAttestationFinishCertRequest(fake_cert_response,
359 KEY_USER,
360 kEnterpriseUserKey,
361 _))
362 .Times(1);
363
364 chromeos::MockCryptohomeClient client;
365 EXPECT_CALL(client, TpmAttestationIsEnrolled(_))
366 .WillRepeatedly(Invoke(DBusCallbackTrue));
367 EXPECT_CALL(client,
368 TpmAttestationDoesKeyExist(KEY_USER, kEnterpriseUserKey, _))
369 .WillRepeatedly(WithArgs<2>(Invoke(DBusCallbackFalse)));
370
371 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>());
372 proxy->DeferToFake(true);
373 EXPECT_CALL(*proxy, SendCertificateRequest(
374 cryptohome::MockAsyncMethodCaller::kFakeAttestationCertRequest,
375 _)).Times(1);
376
377 StrictMock<MockObserver> observer;
378 EXPECT_CALL(observer, MockCertificateCallback(
379 true,
380 cryptohome::MockAsyncMethodCaller::kFakeAttestationCert)).Times(1);
381 AttestationFlow::CertificateCallback mock_callback = base::Bind(
382 &MockObserver::MockCertificateCallback,
383 base::Unretained(&observer));
384
385 scoped_ptr<ServerProxy> proxy_interface(proxy.release());
386 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass());
387 flow.GetCertificate(PROFILE_ENTERPRISE_USER_CERTIFICATE,
388 false, mock_callback);
389 Run();
390 }
391
392 TEST_F(AttestationFlowTest, GetCertificate_AlreadyExists) {
393 // We're not expecting any async calls in this case; StrictMock will verify.
394 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller;
395
396 chromeos::MockCryptohomeClient client;
397 EXPECT_CALL(client, TpmAttestationIsEnrolled(_))
398 .WillRepeatedly(Invoke(DBusCallbackTrue));
399 EXPECT_CALL(client,
400 TpmAttestationDoesKeyExist(KEY_USER, kEnterpriseUserKey, _))
401 .WillRepeatedly(WithArgs<2>(Invoke(DBusCallbackTrue)));
402 EXPECT_CALL(client,
403 TpmAttestationGetCertificate(KEY_USER, kEnterpriseUserKey, _))
404 .WillRepeatedly(WithArgs<2>(Invoke(FakeDBusData("fake_cert"))));
405
406 // We're not expecting any server calls in this case; StrictMock will verify.
407 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>());
408
409 StrictMock<MockObserver> observer;
410 EXPECT_CALL(observer, MockCertificateCallback(true, "fake_cert")).Times(1);
411 AttestationFlow::CertificateCallback mock_callback = base::Bind(
412 &MockObserver::MockCertificateCallback,
413 base::Unretained(&observer));
414
415 scoped_ptr<ServerProxy> proxy_interface(proxy.release());
416 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass());
417 flow.GetCertificate(PROFILE_ENTERPRISE_USER_CERTIFICATE,
418 false, mock_callback);
419 Run();
420 }
421
333 } // namespace attestation 422 } // namespace attestation
334 } // namespace chromeos 423 } // namespace chromeos
OLDNEW
« no previous file with comments | « chromeos/attestation/attestation_flow.cc ('k') | chromeos/attestation/mock_attestation_flow.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698