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

Side by Side Diff: ios/web/net/cert_verifier_block_adapter_unittest.cc

Issue 1230033005: WKWebView: Added cert verification API to web controller. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Minor cleanup. Created 5 years, 4 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "ios/web/net/cert_verifier_block_adapter.h" 5 #include "ios/web/net/cert_verifier_block_adapter.h"
6 6
7 #include "base/test/ios/wait_util.h" 7 #include "base/test/ios/wait_util.h"
8 #include "net/base/net_errors.h" 8 #include "net/base/net_errors.h"
9 #include "net/cert/cert_verifier.h"
9 #include "net/cert/cert_verify_result.h" 10 #include "net/cert/cert_verify_result.h"
10 #include "net/cert/crl_set.h" 11 #include "net/cert/crl_set.h"
11 #include "net/cert/x509_certificate.h" 12 #include "net/cert/x509_certificate.h"
12 #include "testing/gmock/include/gmock/gmock.h" 13 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/platform_test.h" 14 #include "testing/platform_test.h"
14 15
15 namespace net { 16 namespace net {
16 17
17 using testing::_; 18 using testing::_;
18 19
19 namespace { 20 namespace {
20 21
21 // Test hostname for CertVerifier. 22 // Test hostname for CertVerifier.
22 const char kHostName[] = "chromium.org"; 23 const char kHostName[] = "chromium.org";
23 // Test OCSP response for CertVerifier. 24 // Test OCSP response for CertVerifier.
24 const char kOcspResponse[] = "ocsp"; 25 const char kOcspResponse[] = "ocsp";
25 26
26 // Mocks CertVerifier for CertVerifierBlockAdapter testing. 27 // Mocks CertVerifier for CertVerifierBlockAdapter testing.
27 class CertVerifierMock : public CertVerifier { 28 class CertVerifierMock : public CertVerifier {
28 public: 29 public:
29 MOCK_METHOD9(Verify, 30 MOCK_METHOD9(Verify,
Ryan Sleevi 2015/08/07 21:52:12 There's a strong anti-GMock position from Chrome l
Eugene But (OOO till 7-30) 2015/08/12 22:00:38 MockCertVerifier does not allow to test OCSP and C
Ryan Sleevi 2015/08/14 02:29:43 I'm sorry, I simply have trouble parsing this. I h
Eugene But (OOO till 7-30) 2015/08/14 21:18:19 I've tried using MockCertVerifier for testing Cert
Ryan Sleevi 2015/08/14 21:43:53 So, I can understand and appreciate that, but that
Eugene But (OOO till 7-30) 2015/08/19 17:57:35 Ryan, I my previous comment I did not argue that w
30 int(X509Certificate* cert, 31 int(X509Certificate* cert,
31 const std::string& hostname, 32 const std::string& hostname,
32 const std::string& ocsp_response, 33 const std::string& ocsp_response,
33 int flags, 34 int flags,
34 CRLSet* crl_set, 35 CRLSet* crl_set,
35 CertVerifyResult* verify_result, 36 CertVerifyResult* verify_result,
36 const CompletionCallback& callback, 37 const CompletionCallback& callback,
37 scoped_ptr<Request>* out_req, 38 scoped_ptr<Request>* out_req,
38 const BoundNetLog& net_log)); 39 const BoundNetLog& net_log));
39 }; 40 };
40 41
41 // Sets CertVerifyResult to emulate CertVerifier behavior. 42 // Sets CertVerifyResult to emulate CertVerifier behavior.
42 ACTION_P(SetVerifyResult, result) { 43 ACTION_P(SetVerifyResult, result) {
43 *arg5 = result; 44 *arg5 = result;
44 } 45 }
45 46
46 // Calls CompletionCallback to emulate CertVerifier behavior. 47 // Calls CompletionCallback to emulate CertVerifier behavior.
47 ACTION(RunCallback) { 48 ACTION_P(RunCallback, status) {
48 arg6.Run(0); 49 CompletionCallback callback = arg6;
50 dispatch_async(dispatch_get_main_queue(), ^{
51 callback.Run(status);
52 });
Ryan Sleevi 2015/08/07 21:52:12 This doesn't seem to be emulating CertVerifier beh
Eugene But (OOO till 7-30) 2015/08/12 22:00:38 Done.
49 } 53 }
50 54
51 } // namespace 55 } // namespace
52 56
53 // Test fixture to test CertVerifierBlockAdapter class. 57 // Test fixture to test CertVerifierBlockAdapter class.
54 class CertVerifierBlockAdapterTest : public PlatformTest { 58 class CertVerifierBlockAdapterTest : public PlatformTest {
55 protected: 59 protected:
56 void SetUp() override { 60 CertVerifierBlockAdapterTest()
57 PlatformTest::SetUp(); 61 : cert_(new X509Certificate("test", "test", base::Time(), base::Time())),
Ryan Sleevi 2015/08/07 21:52:12 You should not create certificates like this for t
Eugene But (OOO till 7-30) 2015/08/12 22:00:38 Done.
58 62 test_adapter_(
59 cert_ = new X509Certificate("test", "test", base::Time(), base::Time()); 63 new CertVerifierBlockAdapter(&cert_verifier_mock_, &net_log_)) {}
60 scoped_ptr<CertVerifierMock> cert_verifier_mock(new CertVerifierMock());
61 cert_verifier_mock_ = cert_verifier_mock.get();
62 test_adapter_.reset(
63 new CertVerifierBlockAdapter(cert_verifier_mock.Pass()));
64 }
65 64
66 // Performs synchronous verification. 65 // Performs synchronous verification.
67 void Verify(CertVerifierBlockAdapter::Params params, 66 void Verify(CertVerifierBlockAdapter::Params params,
68 scoped_ptr<net::CertVerifyResult>* result, 67 net::CertVerifyResult* result,
69 int* status) { 68 int* status) {
70 __block bool verification_completed = false; 69 __block bool verification_completed = false;
71 test_adapter_->Verify(params, 70 test_adapter_->Verify(
72 ^(scoped_ptr<net::CertVerifyResult> callback_result, 71 params, ^(net::CertVerifyResult callback_result, int callback_status) {
73 int callback_status) { 72 *result = callback_result;
74 *result = callback_result.Pass(); 73 *status = callback_status;
75 *status = callback_status; 74 verification_completed = true;
76 verification_completed = true; 75 });
77 });
78 base::test::ios::WaitUntilCondition(^{ 76 base::test::ios::WaitUntilCondition(^{
79 return verification_completed; 77 return verification_completed;
80 }); 78 });
81 } 79 }
82 80
83 // Fake certificate created for testing. 81 // Fake certificate created for testing.
84 scoped_refptr<X509Certificate> cert_; 82 scoped_refptr<X509Certificate> cert_;
83 // CertVerifier mock.
84 CertVerifierMock cert_verifier_mock_;
85 // NetLog object required by CertVerifierBlockAdapter.
86 NetLog net_log_;
85 // Testable |CertVerifierBlockAdapter| object. 87 // Testable |CertVerifierBlockAdapter| object.
86 scoped_ptr<CertVerifierBlockAdapter> test_adapter_; 88 scoped_ptr<CertVerifierBlockAdapter> test_adapter_;
87 // CertVerifier mock owned by |test_adapter_|.
88 CertVerifierMock* cert_verifier_mock_;
89 }; 89 };
90 90
91 // Tests |Verify| with default params and synchronous verification. 91 // Tests |Verify| with default params and synchronous verification.
92 TEST_F(CertVerifierBlockAdapterTest, DefaultParamsAndSync) { 92 TEST_F(CertVerifierBlockAdapterTest, DefaultParamsAndSync) {
93 // Set up expectation. 93 // Set up expectation.
94 net::CertVerifyResult expectedResult; 94 net::CertVerifyResult expectedResult;
95 expectedResult.cert_status = net::CERT_STATUS_AUTHORITY_INVALID; 95 expectedResult.cert_status = net::CERT_STATUS_AUTHORITY_INVALID;
96 const int kExpectedStatus = 0; 96 const int kExpectedStatus = OK;
97 EXPECT_CALL(*cert_verifier_mock_, 97 EXPECT_CALL(cert_verifier_mock_,
98 Verify(cert_.get(), kHostName, "", 0, nullptr, _, _, _, _)) 98 Verify(cert_.get(), kHostName, "", 0, nullptr, _, _, _, _))
Ryan Sleevi 2015/08/07 21:52:12 These "" should be std::string() as well.
Eugene But (OOO till 7-30) 2015/08/12 22:00:38 Done.
99 .Times(1) 99 .Times(1)
100 .WillOnce(testing::DoAll(SetVerifyResult(expectedResult), 100 .WillOnce(testing::DoAll(SetVerifyResult(expectedResult),
101 testing::Return(kExpectedStatus))); 101 testing::Return(kExpectedStatus)));
102 102
103 // Call |Verify|. 103 // Call |Verify|.
104 scoped_ptr<CertVerifyResult> actualResult; 104 CertVerifyResult actualResult;
105 int actualStatus = -1; 105 int actualStatus = -1;
106 CertVerifierBlockAdapter::Params params(cert_.get(), kHostName); 106 CertVerifierBlockAdapter::Params params(cert_.get(), kHostName);
107 Verify(params, &actualResult, &actualStatus); 107 Verify(params, &actualResult, &actualStatus);
108 108
109 // Ensure that Verification results are correct. 109 // Ensure that Verification results are correct.
110 EXPECT_EQ(kExpectedStatus, actualStatus); 110 EXPECT_EQ(kExpectedStatus, actualStatus);
111 EXPECT_EQ(expectedResult.cert_status, actualResult->cert_status); 111 EXPECT_EQ(expectedResult.cert_status, actualResult.cert_status);
112 } 112 }
113 113
114 // Tests |Verify| with default params and asynchronous verification. 114 // Tests |Verify| with default params and asynchronous verification.
115 TEST_F(CertVerifierBlockAdapterTest, DefaultParamsAndAsync) { 115 TEST_F(CertVerifierBlockAdapterTest, DefaultParamsAndAsync) {
116 // Set up expectation. 116 // Set up expectation.
117 net::CertVerifyResult expectedResult; 117 net::CertVerifyResult expectedResult;
118 expectedResult.is_issued_by_known_root = true; 118 expectedResult.is_issued_by_known_root = true;
119 const int kExpectedStatus = 0; 119 const int kExpectedStatus = OK;
120 EXPECT_CALL(*cert_verifier_mock_, 120 EXPECT_CALL(cert_verifier_mock_,
121 Verify(cert_.get(), kHostName, "", 0, nullptr, _, _, _, _)) 121 Verify(cert_.get(), kHostName, "", 0, nullptr, _, _, _, _))
122 .Times(1) 122 .Times(1)
123 .WillOnce(testing::DoAll(SetVerifyResult(expectedResult), RunCallback(), 123 .WillOnce(testing::DoAll(SetVerifyResult(expectedResult),
124 RunCallback(kExpectedStatus),
124 testing::Return(ERR_IO_PENDING))); 125 testing::Return(ERR_IO_PENDING)));
125 126
126 // Call |Verify|. 127 // Call |Verify|.
127 scoped_ptr<CertVerifyResult> actualResult; 128 CertVerifyResult actualResult;
128 int actualStatus = -1; 129 int actualStatus = -1;
129 CertVerifierBlockAdapter::Params params(cert_.get(), kHostName); 130 CertVerifierBlockAdapter::Params params(cert_.get(), kHostName);
130 Verify(params, &actualResult, &actualStatus); 131 Verify(params, &actualResult, &actualStatus);
131 132
132 // Ensure that Verification results are correct. 133 // Ensure that Verification results are correct.
133 EXPECT_EQ(kExpectedStatus, actualStatus); 134 EXPECT_EQ(kExpectedStatus, actualStatus);
134 EXPECT_EQ(expectedResult.is_issued_by_known_root, 135 EXPECT_EQ(expectedResult.is_issued_by_known_root,
135 actualResult->is_issued_by_known_root); 136 actualResult.is_issued_by_known_root);
136 } 137 }
137 138
138 // Tests |Verify| with invalid arguments. 139 // Tests |Verify| with invalid cert argument.
139 TEST_F(CertVerifierBlockAdapterTest, InvalidParamsAndError) { 140 TEST_F(CertVerifierBlockAdapterTest, InvalidCert) {
140 // Set up expectation.
141 const int kExpectedStatus = ERR_INVALID_ARGUMENT;
142 EXPECT_CALL(*cert_verifier_mock_,
143 Verify(nullptr, "", "", 0, nullptr, _, _, _, _))
144 .Times(1)
145 .WillOnce(testing::Return(kExpectedStatus));
146
147 // Call |Verify|. 141 // Call |Verify|.
148 scoped_ptr<CertVerifyResult> actualResult; 142 CertVerifyResult actualResult;
149 int actualStatus = -1; 143 int actualStatus = -1;
150 CertVerifierBlockAdapter::Params params(nullptr, ""); 144 CertVerifierBlockAdapter::Params params(nullptr, kHostName);
151 Verify(params, &actualResult, &actualStatus); 145 Verify(params, &actualResult, &actualStatus);
152 146
153 // Ensure that Verification results are correct. 147 // Ensure that Verification results are correct.
154 EXPECT_EQ(kExpectedStatus, actualStatus); 148 EXPECT_EQ(ERR_INVALID_ARGUMENT, actualStatus);
155 EXPECT_FALSE(actualResult);
156 } 149 }
157 150
158 // Tests |Verify| with error. 151 // Tests |Verify| with invalid hostname argument.
159 TEST_F(CertVerifierBlockAdapterTest, DefaultParamsAndError) { 152 TEST_F(CertVerifierBlockAdapterTest, InvalidHostname) {
153 // Call |Verify|.
154 CertVerifyResult actualResult;
155 int actualStatus = -1;
156 CertVerifierBlockAdapter::Params params(cert_.get(), "");
Ryan Sleevi 2015/08/07 21:52:12 std::string()
Eugene But (OOO till 7-30) 2015/08/12 22:00:38 Done.
157 Verify(params, &actualResult, &actualStatus);
158
159 // Ensure that Verification results are correct.
160 EXPECT_EQ(ERR_INVALID_ARGUMENT, actualStatus);
161 }
162
163 // Tests |Verify| with synchronous error.
164 TEST_F(CertVerifierBlockAdapterTest, DefaultParamsAndSyncError) {
160 // Set up expectation. 165 // Set up expectation.
161 const int kExpectedStatus = ERR_INSUFFICIENT_RESOURCES; 166 const int kExpectedStatus = ERR_INSUFFICIENT_RESOURCES;
162 EXPECT_CALL(*cert_verifier_mock_, 167 EXPECT_CALL(cert_verifier_mock_,
163 Verify(cert_.get(), kHostName, "", 0, nullptr, _, _, _, _)) 168 Verify(cert_.get(), kHostName, "", 0, nullptr, _, _, _, _))
164 .Times(1) 169 .Times(1)
165 .WillOnce(testing::Return(kExpectedStatus)); 170 .WillOnce(testing::Return(kExpectedStatus));
166 171
167 // Call |Verify|. 172 // Call |Verify|.
168 scoped_ptr<CertVerifyResult> actualResult; 173 CertVerifyResult actualResult;
169 int actualStatus = -1; 174 int actualStatus = -1;
170 CertVerifierBlockAdapter::Params params(cert_.get(), kHostName); 175 CertVerifierBlockAdapter::Params params(cert_.get(), kHostName);
171 Verify(params, &actualResult, &actualStatus); 176 Verify(params, &actualResult, &actualStatus);
172 177
173 // Ensure that Verification results are correct. 178 // Ensure that Verification results are correct.
174 EXPECT_EQ(kExpectedStatus, actualStatus); 179 EXPECT_EQ(kExpectedStatus, actualStatus);
175 EXPECT_FALSE(actualResult); 180 }
181
182 // Tests |Verify| with asynchronous error.
183 TEST_F(CertVerifierBlockAdapterTest, DefaultParamsAndAsyncError) {
184 // Set up expectation.
185 net::CertVerifyResult expectedResult;
186 expectedResult.is_issued_by_known_root = true;
187 const int kExpectedStatus = ERR_ACCESS_DENIED;
188 EXPECT_CALL(cert_verifier_mock_,
189 Verify(cert_.get(), kHostName, "", 0, nullptr, _, _, _, _))
190 .Times(1)
191 .WillOnce(testing::DoAll(SetVerifyResult(expectedResult),
192 RunCallback(kExpectedStatus),
193 testing::Return(ERR_IO_PENDING)));
194
195 // Call |Verify|.
196 CertVerifyResult actualResult;
197 int actualStatus = -1;
198 CertVerifierBlockAdapter::Params params(cert_.get(), kHostName);
199 Verify(params, &actualResult, &actualStatus);
200
201 // Ensure that Verification results are correct.
202 EXPECT_EQ(kExpectedStatus, actualStatus);
203 EXPECT_EQ(expectedResult.is_issued_by_known_root,
204 actualResult.is_issued_by_known_root);
176 } 205 }
177 206
178 // Tests |Verify| with all params and synchronous verification. 207 // Tests |Verify| with all params and synchronous verification.
179 TEST_F(CertVerifierBlockAdapterTest, AllParamsAndSync) { 208 TEST_F(CertVerifierBlockAdapterTest, AllParamsAndSync) {
180 // Set up expectation. 209 // Set up expectation.
181 net::CertVerifyResult expectedResult; 210 net::CertVerifyResult expectedResult;
182 expectedResult.verified_cert = cert_; 211 expectedResult.verified_cert = cert_;
183 const int kExpectedStatus = 0; 212 const int kExpectedStatus = OK;
184 scoped_refptr<CRLSet> crl_set(CRLSet::EmptyCRLSetForTesting()); 213 scoped_refptr<CRLSet> crl_set(CRLSet::EmptyCRLSetForTesting());
185 EXPECT_CALL(*cert_verifier_mock_, 214 EXPECT_CALL(cert_verifier_mock_,
186 Verify(cert_.get(), kHostName, kOcspResponse, 215 Verify(cert_.get(), kHostName, kOcspResponse,
187 CertVerifier::VERIFY_EV_CERT, crl_set.get(), _, _, _, _)) 216 CertVerifier::VERIFY_EV_CERT, crl_set.get(), _, _, _, _))
188 .Times(1) 217 .Times(1)
189 .WillOnce(testing::DoAll(SetVerifyResult(expectedResult), 218 .WillOnce(testing::DoAll(SetVerifyResult(expectedResult),
190 testing::Return(kExpectedStatus))); 219 testing::Return(kExpectedStatus)));
191 220
192 // Call |Verify|. 221 // Call |Verify|.
193 scoped_ptr<CertVerifyResult> actualResult; 222 CertVerifyResult actualResult;
194 int actualStatus = -1; 223 int actualStatus = -1;
195 CertVerifierBlockAdapter::Params params(cert_.get(), kHostName); 224 CertVerifierBlockAdapter::Params params(cert_.get(), kHostName);
196 params.ocsp_response = kOcspResponse; 225 params.ocsp_response = kOcspResponse;
197 params.flags = CertVerifier::VERIFY_EV_CERT; 226 params.flags = CertVerifier::VERIFY_EV_CERT;
198 params.crl_set = crl_set; 227 params.crl_set = crl_set;
199 Verify(params, &actualResult, &actualStatus); 228 Verify(params, &actualResult, &actualStatus);
200 229
201 // Ensure that Verification results are correct. 230 // Ensure that Verification results are correct.
202 EXPECT_EQ(kExpectedStatus, actualStatus); 231 EXPECT_EQ(kExpectedStatus, actualStatus);
203 EXPECT_EQ(expectedResult.verified_cert, actualResult->verified_cert); 232 EXPECT_EQ(expectedResult.verified_cert, actualResult.verified_cert);
204 } 233 }
205 234
206 } // namespace 235 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698