| OLD | NEW |
| 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/socket/ssl_client_socket.h" | 5 #include "net/socket/ssl_client_socket.h" |
| 6 | 6 |
| 7 #include <errno.h> | 7 #include <errno.h> |
| 8 #include <string.h> | 8 #include <string.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 #include "testing/gtest/include/gtest/gtest.h" | 71 #include "testing/gtest/include/gtest/gtest.h" |
| 72 #include "testing/platform_test.h" | 72 #include "testing/platform_test.h" |
| 73 #include "third_party/boringssl/src/include/openssl/bio.h" | 73 #include "third_party/boringssl/src/include/openssl/bio.h" |
| 74 #include "third_party/boringssl/src/include/openssl/evp.h" | 74 #include "third_party/boringssl/src/include/openssl/evp.h" |
| 75 #include "third_party/boringssl/src/include/openssl/pem.h" | 75 #include "third_party/boringssl/src/include/openssl/pem.h" |
| 76 | 76 |
| 77 using net::test::IsError; | 77 using net::test::IsError; |
| 78 using net::test::IsOk; | 78 using net::test::IsOk; |
| 79 | 79 |
| 80 using testing::_; | 80 using testing::_; |
| 81 using testing::AnyOf; |
| 81 using testing::Return; | 82 using testing::Return; |
| 82 using testing::Truly; | 83 using testing::Truly; |
| 83 | 84 |
| 84 namespace net { | 85 namespace net { |
| 85 | 86 |
| 86 class NetLogWithSource; | 87 class NetLogWithSource; |
| 87 | 88 |
| 88 namespace { | 89 namespace { |
| 89 | 90 |
| 90 // WrappedStreamSocket is a base class that wraps an existing StreamSocket, | 91 // WrappedStreamSocket is a base class that wraps an existing StreamSocket, |
| (...skipping 1195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1286 | 1287 |
| 1287 // Rather than testing whether or not the underlying socket is connected, | 1288 // Rather than testing whether or not the underlying socket is connected, |
| 1288 // test that the handshake has finished. This is because it may be | 1289 // test that the handshake has finished. This is because it may be |
| 1289 // desirable to disconnect the socket before showing a user prompt, since | 1290 // desirable to disconnect the socket before showing a user prompt, since |
| 1290 // the user may take indefinitely long to respond. | 1291 // the user may take indefinitely long to respond. |
| 1291 TestNetLogEntry::List entries; | 1292 TestNetLogEntry::List entries; |
| 1292 log_.GetEntries(&entries); | 1293 log_.GetEntries(&entries); |
| 1293 EXPECT_TRUE(LogContainsEndEvent(entries, -1, NetLogEventType::SSL_CONNECT)); | 1294 EXPECT_TRUE(LogContainsEndEvent(entries, -1, NetLogEventType::SSL_CONNECT)); |
| 1294 } | 1295 } |
| 1295 | 1296 |
| 1296 #if defined(OS_WIN) | |
| 1297 // Tests that certificates parsable by SSLClientSocket's internal SSL | 1297 // Tests that certificates parsable by SSLClientSocket's internal SSL |
| 1298 // implementation, but not X509Certificate are treated as fatal connection | 1298 // implementation, but not X509Certificate are treated as fatal connection |
| 1299 // errors. This is a regression test for https://crbug.com/91341. | 1299 // errors. This is a regression test for https://crbug.com/91341. |
| 1300 TEST_F(SSLClientSocketTest, ConnectBadValidity) { | 1300 TEST_F(SSLClientSocketTest, ConnectBadValidity) { |
| 1301 SpawnedTestServer::SSLOptions ssl_options( | 1301 SpawnedTestServer::SSLOptions ssl_options( |
| 1302 SpawnedTestServer::SSLOptions::CERT_BAD_VALIDITY); | 1302 SpawnedTestServer::SSLOptions::CERT_BAD_VALIDITY); |
| 1303 ASSERT_TRUE(StartTestServer(ssl_options)); | 1303 ASSERT_TRUE(StartTestServer(ssl_options)); |
| 1304 cert_verifier_->set_default_result(ERR_CERT_DATE_INVALID); |
| 1305 |
| 1304 SSLConfig ssl_config; | 1306 SSLConfig ssl_config; |
| 1305 int rv; | 1307 int rv; |
| 1306 ASSERT_TRUE(CreateAndConnectSSLClientSocket(ssl_config, &rv)); | 1308 ASSERT_TRUE(CreateAndConnectSSLClientSocket(ssl_config, &rv)); |
| 1307 | 1309 |
| 1310 #if defined(OS_WIN) |
| 1308 EXPECT_THAT(rv, IsError(ERR_SSL_SERVER_CERT_BAD_FORMAT)); | 1311 EXPECT_THAT(rv, IsError(ERR_SSL_SERVER_CERT_BAD_FORMAT)); |
| 1309 EXPECT_FALSE(IsCertificateError(rv)); | 1312 EXPECT_FALSE(IsCertificateError(rv)); |
| 1313 #elif defined(OS_ANDROID) |
| 1314 // Android date handling behavior can vary depending on the platform. |
| 1315 EXPECT_THAT(rv, AnyOf(IsError(ERR_SSL_SERVER_CERT_BAD_FORMAT), |
| 1316 IsError(ERR_CERT_DATE_INVALID))); |
| 1317 #else // !(defined(OS_WIN) || defined(OS_ANDROID)) |
| 1318 EXPECT_THAT(rv, IsError(ERR_CERT_DATE_INVALID)); |
| 1319 #endif |
| 1310 } | 1320 } |
| 1311 #endif // defined(OS_WIN) | |
| 1312 | 1321 |
| 1313 // Attempt to connect to a page which requests a client certificate. It should | 1322 // Attempt to connect to a page which requests a client certificate. It should |
| 1314 // return an error code on connect. | 1323 // return an error code on connect. |
| 1315 TEST_F(SSLClientSocketTest, ConnectClientAuthCertRequested) { | 1324 TEST_F(SSLClientSocketTest, ConnectClientAuthCertRequested) { |
| 1316 SpawnedTestServer::SSLOptions ssl_options; | 1325 SpawnedTestServer::SSLOptions ssl_options; |
| 1317 ssl_options.request_client_certificate = true; | 1326 ssl_options.request_client_certificate = true; |
| 1318 ASSERT_TRUE(StartTestServer(ssl_options)); | 1327 ASSERT_TRUE(StartTestServer(ssl_options)); |
| 1319 | 1328 |
| 1320 int rv; | 1329 int rv; |
| 1321 ASSERT_TRUE(CreateAndConnectSSLClientSocket(SSLConfig(), &rv)); | 1330 ASSERT_TRUE(CreateAndConnectSSLClientSocket(SSLConfig(), &rv)); |
| (...skipping 2548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3870 // The read buffer should be released. | 3879 // The read buffer should be released. |
| 3871 StreamSocket::SocketMemoryStats stats; | 3880 StreamSocket::SocketMemoryStats stats; |
| 3872 client->DumpMemoryStats(&stats); | 3881 client->DumpMemoryStats(&stats); |
| 3873 EXPECT_EQ(0u, stats.buffer_size); | 3882 EXPECT_EQ(0u, stats.buffer_size); |
| 3874 EXPECT_EQ(1u, stats.cert_count); | 3883 EXPECT_EQ(1u, stats.cert_count); |
| 3875 EXPECT_LT(0u, stats.cert_size); | 3884 EXPECT_LT(0u, stats.cert_size); |
| 3876 EXPECT_EQ(stats.cert_size, stats.total_size); | 3885 EXPECT_EQ(stats.cert_size, stats.total_size); |
| 3877 } | 3886 } |
| 3878 | 3887 |
| 3879 } // namespace net | 3888 } // namespace net |
| OLD | NEW |