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

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: Created 7 years, 8 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 "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"
11 #include "testing/gmock/include/gmock/gmock.h" 11 #include "testing/gmock/include/gmock/gmock.h"
12 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
13 13
14 using testing::_; 14 using testing::_;
15 using testing::Invoke; 15 using testing::Invoke;
16 using testing::NiceMock;
Mattias Nissler (ping if slow) 2013/04/24 12:57:53 unused?
dkrahn 2013/04/25 01:06:52 Done.
16 using testing::Sequence; 17 using testing::Sequence;
17 using testing::StrictMock; 18 using testing::StrictMock;
18 using testing::WithArgs; 19 using testing::WithArgs;
19 20
20 namespace chromeos { 21 namespace chromeos {
21 namespace attestation { 22 namespace attestation {
22 23
23 namespace { 24 namespace {
24 25
25 void DBusCallbackFalse(const BoolDBusMethodCallback& callback) { 26 void DBusCallbackFalse(const BoolDBusMethodCallback& callback) {
26 MessageLoop::current()->PostTask( 27 MessageLoop::current()->PostTask(
27 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false)); 28 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false));
28 } 29 }
29 30
30 void DBusCallbackTrue(const BoolDBusMethodCallback& callback) { 31 void DBusCallbackTrue(const BoolDBusMethodCallback& callback) {
31 MessageLoop::current()->PostTask( 32 MessageLoop::current()->PostTask(
32 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 33 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true));
33 } 34 }
34 35
35 void DBusCallbackFail(const BoolDBusMethodCallback& callback) { 36 void DBusCallbackFail(const BoolDBusMethodCallback& callback) {
36 MessageLoop::current()->PostTask( 37 MessageLoop::current()->PostTask(
37 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_FAILURE, false)); 38 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_FAILURE, false));
38 } 39 }
39 40
40 void AsyncCallbackFalse(cryptohome::AsyncMethodCaller::Callback callback) { 41 void AsyncCallbackFalse(cryptohome::AsyncMethodCaller::Callback callback) {
41 callback.Run(false, cryptohome::MOUNT_ERROR_NONE); 42 callback.Run(false, cryptohome::MOUNT_ERROR_NONE);
42 } 43 }
43 44
45 class FakeDBusData {
46 public:
47 explicit FakeDBusData(const std::string& data) : data_(data) {}
48
49 void operator() (const CryptohomeClient::DataMethodCallback& callback) {
50 MessageLoop::current()->PostTask(
51 FROM_HERE,
52 base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true, data_));
53 }
54
55 private:
56 std::string data_;
57 };
58
44 } // namespace 59 } // namespace
45 60
46 class AttestationFlowTest : public testing::Test { 61 class AttestationFlowTest : public testing::Test {
47 protected: 62 protected:
48 void Run() { 63 void Run() {
49 base::RunLoop run_loop; 64 base::RunLoop run_loop;
50 run_loop.RunUntilIdle(); 65 run_loop.RunUntilIdle();
51 } 66 }
52 MessageLoop message_loop_; 67 MessageLoop message_loop_;
53 }; 68 };
(...skipping 22 matching lines...) Expand all
76 _)).Times(1) 91 _)).Times(1)
77 .InSequence(flow_order); 92 .InSequence(flow_order);
78 93
79 std::string fake_enroll_response = 94 std::string fake_enroll_response =
80 cryptohome::MockAsyncMethodCaller::kFakeAttestationEnrollRequest; 95 cryptohome::MockAsyncMethodCaller::kFakeAttestationEnrollRequest;
81 fake_enroll_response += "_response"; 96 fake_enroll_response += "_response";
82 EXPECT_CALL(async_caller, AsyncTpmAttestationEnroll(fake_enroll_response, _)) 97 EXPECT_CALL(async_caller, AsyncTpmAttestationEnroll(fake_enroll_response, _))
83 .Times(1) 98 .Times(1)
84 .InSequence(flow_order); 99 .InSequence(flow_order);
85 100
86 int options = CryptohomeClient::INCLUDE_DEVICE_STATE;
87 EXPECT_CALL(async_caller, 101 EXPECT_CALL(async_caller,
88 AsyncTpmAttestationCreateCertRequest(options, _)) 102 AsyncTpmAttestationCreateCertRequest(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 USER_KEY,
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(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(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(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(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 = INCLUDE_DEVICE_STATE |
216 CryptohomeClient::INCLUDE_STABLE_ID; 230 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 DEVICE_KEY,
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(ENTERPRISE_MACHINE_CERTIFICATE, true, mock_callback);
250 Run(); 264 Run();
251 } 265 }
252 266
253 TEST_F(AttestationFlowTest, GetCertificate_FailCreateCertRequest) { 267 TEST_F(AttestationFlowTest, GetCertificate_FailCreateCertRequest) {
254 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller; 268 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller;
255 async_caller.SetUp(false, cryptohome::MOUNT_ERROR_NONE); 269 async_caller.SetUp(false, cryptohome::MOUNT_ERROR_NONE);
256 int options = CryptohomeClient::INCLUDE_DEVICE_STATE; 270 int options = INCLUDE_DEVICE_STATE;
257 EXPECT_CALL(async_caller, 271 EXPECT_CALL(async_caller,
258 AsyncTpmAttestationCreateCertRequest(options, _)) 272 AsyncTpmAttestationCreateCertRequest(options, _))
259 .Times(1); 273 .Times(1);
260 274
261 chromeos::MockCryptohomeClient client; 275 chromeos::MockCryptohomeClient client;
262 EXPECT_CALL(client, TpmAttestationIsEnrolled(_)) 276 EXPECT_CALL(client, TpmAttestationIsEnrolled(_))
263 .WillRepeatedly(Invoke(DBusCallbackTrue)); 277 .WillRepeatedly(Invoke(DBusCallbackTrue));
264 278
265 // We're not expecting any server calls in this case; StrictMock will verify. 279 // We're not expecting any server calls in this case; StrictMock will verify.
266 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>()); 280 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>());
267 281
268 StrictMock<MockObserver> observer; 282 StrictMock<MockObserver> observer;
269 EXPECT_CALL(observer, MockCertificateCallback(false, "")).Times(1); 283 EXPECT_CALL(observer, MockCertificateCallback(false, "")).Times(1);
270 AttestationFlow::CertificateCallback mock_callback = base::Bind( 284 AttestationFlow::CertificateCallback mock_callback = base::Bind(
271 &MockObserver::MockCertificateCallback, 285 &MockObserver::MockCertificateCallback,
272 base::Unretained(&observer)); 286 base::Unretained(&observer));
273 287
274 scoped_ptr<ServerProxy> proxy_interface(proxy.release()); 288 scoped_ptr<ServerProxy> proxy_interface(proxy.release());
275 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass()); 289 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass());
276 flow.GetCertificate("test", mock_callback); 290 flow.GetCertificate(ENTERPRISE_USER_CERTIFICATE, true, mock_callback);
277 Run(); 291 Run();
278 } 292 }
279 293
280 TEST_F(AttestationFlowTest, GetCertificate_CertRequestRejected) { 294 TEST_F(AttestationFlowTest, GetCertificate_CertRequestRejected) {
281 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller; 295 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller;
282 async_caller.SetUp(true, cryptohome::MOUNT_ERROR_NONE); 296 async_caller.SetUp(true, cryptohome::MOUNT_ERROR_NONE);
283 int options = CryptohomeClient::INCLUDE_DEVICE_STATE; 297 int options = INCLUDE_DEVICE_STATE;
284 EXPECT_CALL(async_caller, 298 EXPECT_CALL(async_caller,
285 AsyncTpmAttestationCreateCertRequest(options, _)) 299 AsyncTpmAttestationCreateCertRequest(options, _))
286 .Times(1); 300 .Times(1);
287 301
288 chromeos::MockCryptohomeClient client; 302 chromeos::MockCryptohomeClient client;
289 EXPECT_CALL(client, TpmAttestationIsEnrolled(_)) 303 EXPECT_CALL(client, TpmAttestationIsEnrolled(_))
290 .WillRepeatedly(Invoke(DBusCallbackTrue)); 304 .WillRepeatedly(Invoke(DBusCallbackTrue));
291 305
292 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>()); 306 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>());
293 proxy->DeferToFake(false); 307 proxy->DeferToFake(false);
294 EXPECT_CALL(*proxy, SendCertificateRequest( 308 EXPECT_CALL(*proxy, SendCertificateRequest(
295 cryptohome::MockAsyncMethodCaller::kFakeAttestationCertRequest, 309 cryptohome::MockAsyncMethodCaller::kFakeAttestationCertRequest,
296 _)).Times(1); 310 _)).Times(1);
297 311
298 StrictMock<MockObserver> observer; 312 StrictMock<MockObserver> observer;
299 EXPECT_CALL(observer, MockCertificateCallback(false, "")).Times(1); 313 EXPECT_CALL(observer, MockCertificateCallback(false, "")).Times(1);
300 AttestationFlow::CertificateCallback mock_callback = base::Bind( 314 AttestationFlow::CertificateCallback mock_callback = base::Bind(
301 &MockObserver::MockCertificateCallback, 315 &MockObserver::MockCertificateCallback,
302 base::Unretained(&observer)); 316 base::Unretained(&observer));
303 317
304 scoped_ptr<ServerProxy> proxy_interface(proxy.release()); 318 scoped_ptr<ServerProxy> proxy_interface(proxy.release());
305 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass()); 319 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass());
306 flow.GetCertificate("test", mock_callback); 320 flow.GetCertificate(ENTERPRISE_USER_CERTIFICATE, true, mock_callback);
307 Run(); 321 Run();
308 } 322 }
309 323
310 TEST_F(AttestationFlowTest, GetCertificate_FailIsEnrolled) { 324 TEST_F(AttestationFlowTest, GetCertificate_FailIsEnrolled) {
311 // We're not expecting any server calls in this case; StrictMock will verify. 325 // We're not expecting any async calls in this case; StrictMock will verify.
312 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller; 326 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller;
313 327
314 chromeos::MockCryptohomeClient client; 328 chromeos::MockCryptohomeClient client;
315 EXPECT_CALL(client, TpmAttestationIsEnrolled(_)) 329 EXPECT_CALL(client, TpmAttestationIsEnrolled(_))
316 .WillRepeatedly(Invoke(DBusCallbackFail)); 330 .WillRepeatedly(Invoke(DBusCallbackFail));
317 331
318 // We're not expecting any server calls in this case; StrictMock will verify. 332 // We're not expecting any server calls in this case; StrictMock will verify.
319 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>()); 333 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>());
320 334
321 StrictMock<MockObserver> observer; 335 StrictMock<MockObserver> observer;
322 EXPECT_CALL(observer, MockCertificateCallback(false, "")).Times(1); 336 EXPECT_CALL(observer, MockCertificateCallback(false, "")).Times(1);
323 AttestationFlow::CertificateCallback mock_callback = base::Bind( 337 AttestationFlow::CertificateCallback mock_callback = base::Bind(
324 &MockObserver::MockCertificateCallback, 338 &MockObserver::MockCertificateCallback,
325 base::Unretained(&observer)); 339 base::Unretained(&observer));
326 340
327 scoped_ptr<ServerProxy> proxy_interface(proxy.release()); 341 scoped_ptr<ServerProxy> proxy_interface(proxy.release());
328 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass()); 342 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass());
329 flow.GetCertificate("test", mock_callback); 343 flow.GetCertificate(ENTERPRISE_USER_CERTIFICATE, true, mock_callback);
330 Run(); 344 Run();
331 } 345 }
332 346
347 TEST_F(AttestationFlowTest, GetCertificate_CheckExisting) {
348 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller;
349 async_caller.SetUp(true, cryptohome::MOUNT_ERROR_NONE);
350 int options = INCLUDE_DEVICE_STATE;
351 EXPECT_CALL(async_caller, AsyncTpmAttestationCreateCertRequest(options, _))
352 .Times(1);
353 std::string fake_cert_response =
354 cryptohome::MockAsyncMethodCaller::kFakeAttestationCertRequest;
355 fake_cert_response += "_response";
356 EXPECT_CALL(async_caller,
357 AsyncTpmAttestationFinishCertRequest(fake_cert_response,
358 USER_KEY,
359 kEnterpriseUserKey,
360 _))
361 .Times(1);
362
363 chromeos::MockCryptohomeClient client;
364 EXPECT_CALL(client, TpmAttestationIsEnrolled(_))
365 .WillRepeatedly(Invoke(DBusCallbackTrue));
366 EXPECT_CALL(client,
367 TpmAttestationDoesKeyExist(USER_KEY, kEnterpriseUserKey, _))
368 .WillRepeatedly(WithArgs<2>(Invoke(DBusCallbackFalse)));
369
370 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>());
371 proxy->DeferToFake(true);
372 EXPECT_CALL(*proxy, SendCertificateRequest(
373 cryptohome::MockAsyncMethodCaller::kFakeAttestationCertRequest,
374 _)).Times(1);
375
376 StrictMock<MockObserver> observer;
377 EXPECT_CALL(observer, MockCertificateCallback(
378 true,
379 cryptohome::MockAsyncMethodCaller::kFakeAttestationCert)).Times(1);
380 AttestationFlow::CertificateCallback mock_callback = base::Bind(
381 &MockObserver::MockCertificateCallback,
382 base::Unretained(&observer));
383
384 scoped_ptr<ServerProxy> proxy_interface(proxy.release());
385 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass());
386 flow.GetCertificate(ENTERPRISE_USER_CERTIFICATE, false, mock_callback);
387 Run();
388 }
389
390 TEST_F(AttestationFlowTest, GetCertificate_AlreadyExists) {
391 // We're not expecting any async calls in this case; StrictMock will verify.
392 StrictMock<cryptohome::MockAsyncMethodCaller> async_caller;
393
394 chromeos::MockCryptohomeClient client;
395 EXPECT_CALL(client, TpmAttestationIsEnrolled(_))
396 .WillRepeatedly(Invoke(DBusCallbackTrue));
397 EXPECT_CALL(client,
398 TpmAttestationDoesKeyExist(USER_KEY, kEnterpriseUserKey, _))
399 .WillRepeatedly(WithArgs<2>(Invoke(DBusCallbackTrue)));
400 EXPECT_CALL(client,
401 TpmAttestationGetCertificate(USER_KEY, kEnterpriseUserKey, _))
402 .WillRepeatedly(WithArgs<2>(Invoke(FakeDBusData("fake_cert"))));
403
404 // We're not expecting any server calls in this case; StrictMock will verify.
405 scoped_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>());
406
407 StrictMock<MockObserver> observer;
408 EXPECT_CALL(observer, MockCertificateCallback(true, "fake_cert")).Times(1);
409 AttestationFlow::CertificateCallback mock_callback = base::Bind(
410 &MockObserver::MockCertificateCallback,
411 base::Unretained(&observer));
412
413 scoped_ptr<ServerProxy> proxy_interface(proxy.release());
414 AttestationFlow flow(&async_caller, &client, proxy_interface.Pass());
415 flow.GetCertificate(ENTERPRISE_USER_CERTIFICATE, false, mock_callback);
416 Run();
Mattias Nissler (ping if slow) 2013/04/24 12:57:53 Ugh, even more hard-to-read gmock setup. To repeat
dkrahn 2013/04/25 01:06:52 For testing this flow I believe I have a legitimat
Mattias Nissler (ping if slow) 2013/04/25 12:05:26 Yes, these seem reasonable.
417 }
418
333 } // namespace attestation 419 } // namespace attestation
334 } // namespace chromeos 420 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698