blob: d1f1f8224cedebd216fec55c9d70b58dceb11c36 [file] [log] [blame]
license.botbf09a502008-08-24 00:55:551// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
initial.commit586acc5fe2008-07-26 22:42:524
5#include "net/base/address_list.h"
[email protected]aaead502008-10-15 00:20:116#include "net/base/client_socket_factory.h"
initial.commit586acc5fe2008-07-26 22:42:527#include "net/base/host_resolver.h"
[email protected]7b822b2b2008-08-05 00:15:458#include "net/base/net_errors.h"
initial.commit586acc5fe2008-07-26 22:42:529#include "net/base/ssl_client_socket.h"
[email protected]aaead502008-10-15 00:20:1110#include "net/base/ssl_config_service.h"
initial.commit586acc5fe2008-07-26 22:42:5211#include "net/base/tcp_client_socket.h"
12#include "net/base/test_completion_callback.h"
13#include "testing/gtest/include/gtest/gtest.h"
14
15//-----------------------------------------------------------------------------
16
17namespace {
18
[email protected]aaead502008-10-15 00:20:1119const net::SSLConfig kDefaultSSLConfig;
[email protected]c5949a32008-10-08 17:28:2320
initial.commit586acc5fe2008-07-26 22:42:5221class SSLClientSocketTest : public testing::Test {
[email protected]aaead502008-10-15 00:20:1122 public:
23 SSLClientSocketTest()
24 : socket_factory_(net::ClientSocketFactory::GetDefaultFactory()) {
25 }
26
27 protected:
28 net::ClientSocketFactory* socket_factory_;
initial.commit586acc5fe2008-07-26 22:42:5229};
30
31} // namespace
32
33//-----------------------------------------------------------------------------
34
[email protected]9bfef782008-09-02 13:56:1235// bug 1354783
36TEST_F(SSLClientSocketTest, DISABLED_Connect) {
initial.commit586acc5fe2008-07-26 22:42:5237 net::AddressList addr;
38 net::HostResolver resolver;
39 TestCompletionCallback callback;
40
[email protected]4628a2a2008-08-14 20:33:2541 std::string hostname = "bugs.webkit.org";
initial.commit586acc5fe2008-07-26 22:42:5242 int rv = resolver.Resolve(hostname, 443, &addr, NULL);
43 EXPECT_EQ(net::OK, rv);
44
[email protected]aaead502008-10-15 00:20:1145 scoped_ptr<net::SSLClientSocket> sock(
46 socket_factory_->CreateSSLClientSocket(new net::TCPClientSocket(addr),
47 hostname, kDefaultSSLConfig));
initial.commit586acc5fe2008-07-26 22:42:5248
[email protected]aaead502008-10-15 00:20:1149 EXPECT_FALSE(sock->IsConnected());
initial.commit586acc5fe2008-07-26 22:42:5250
[email protected]aaead502008-10-15 00:20:1151 rv = sock->Connect(&callback);
[email protected]7b822b2b2008-08-05 00:15:4552 if (rv != net::OK) {
53 ASSERT_EQ(net::ERR_IO_PENDING, rv);
initial.commit586acc5fe2008-07-26 22:42:5254
[email protected]7b822b2b2008-08-05 00:15:4555 rv = callback.WaitForResult();
56 EXPECT_EQ(net::OK, rv);
57 }
initial.commit586acc5fe2008-07-26 22:42:5258
[email protected]aaead502008-10-15 00:20:1159 EXPECT_TRUE(sock->IsConnected());
initial.commit586acc5fe2008-07-26 22:42:5260
[email protected]aaead502008-10-15 00:20:1161 sock->Disconnect();
62 EXPECT_FALSE(sock->IsConnected());
initial.commit586acc5fe2008-07-26 22:42:5263}
64
[email protected]9bfef782008-09-02 13:56:1265// bug 1354783
66TEST_F(SSLClientSocketTest, DISABLED_Read) {
initial.commit586acc5fe2008-07-26 22:42:5267 net::AddressList addr;
68 net::HostResolver resolver;
69 TestCompletionCallback callback;
70
[email protected]4628a2a2008-08-14 20:33:2571 std::string hostname = "bugs.webkit.org";
initial.commit586acc5fe2008-07-26 22:42:5272 int rv = resolver.Resolve(hostname, 443, &addr, &callback);
73 EXPECT_EQ(rv, net::ERR_IO_PENDING);
74
75 rv = callback.WaitForResult();
76 EXPECT_EQ(rv, net::OK);
77
[email protected]aaead502008-10-15 00:20:1178 scoped_ptr<net::SSLClientSocket> sock(
79 socket_factory_->CreateSSLClientSocket(new net::TCPClientSocket(addr),
80 hostname, kDefaultSSLConfig));
initial.commit586acc5fe2008-07-26 22:42:5281
[email protected]aaead502008-10-15 00:20:1182 rv = sock->Connect(&callback);
[email protected]7b822b2b2008-08-05 00:15:4583 if (rv != net::OK) {
84 ASSERT_EQ(rv, net::ERR_IO_PENDING);
initial.commit586acc5fe2008-07-26 22:42:5285
[email protected]7b822b2b2008-08-05 00:15:4586 rv = callback.WaitForResult();
87 EXPECT_EQ(rv, net::OK);
88 }
initial.commit586acc5fe2008-07-26 22:42:5289
90 const char request_text[] = "GET / HTTP/1.0\r\n\r\n";
[email protected]aaead502008-10-15 00:20:1191 rv = sock->Write(request_text, arraysize(request_text) - 1, &callback);
initial.commit586acc5fe2008-07-26 22:42:5292 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
93
94 if (rv == net::ERR_IO_PENDING) {
95 rv = callback.WaitForResult();
[email protected]7b822b2b2008-08-05 00:15:4596 EXPECT_EQ(rv, arraysize(request_text) - 1);
initial.commit586acc5fe2008-07-26 22:42:5297 }
98
99 char buf[4096];
100 for (;;) {
[email protected]aaead502008-10-15 00:20:11101 rv = sock->Read(buf, sizeof(buf), &callback);
initial.commit586acc5fe2008-07-26 22:42:52102 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
103
104 if (rv == net::ERR_IO_PENDING)
105 rv = callback.WaitForResult();
106
[email protected]7b822b2b2008-08-05 00:15:45107 EXPECT_GE(rv, 0);
108 if (rv <= 0)
initial.commit586acc5fe2008-07-26 22:42:52109 break;
110 }
111}
112
[email protected]9bfef782008-09-02 13:56:12113// bug 1354783
114TEST_F(SSLClientSocketTest, DISABLED_Read_SmallChunks) {
initial.commit586acc5fe2008-07-26 22:42:52115 net::AddressList addr;
116 net::HostResolver resolver;
117 TestCompletionCallback callback;
118
[email protected]4628a2a2008-08-14 20:33:25119 std::string hostname = "bugs.webkit.org";
120 int rv = resolver.Resolve(hostname, 443, &addr, NULL);
initial.commit586acc5fe2008-07-26 22:42:52121 EXPECT_EQ(rv, net::OK);
122
[email protected]aaead502008-10-15 00:20:11123 scoped_ptr<net::SSLClientSocket> sock(
124 socket_factory_->CreateSSLClientSocket(new net::TCPClientSocket(addr),
125 hostname, kDefaultSSLConfig));
initial.commit586acc5fe2008-07-26 22:42:52126
[email protected]aaead502008-10-15 00:20:11127 rv = sock->Connect(&callback);
[email protected]7b822b2b2008-08-05 00:15:45128 if (rv != net::OK) {
129 ASSERT_EQ(rv, net::ERR_IO_PENDING);
initial.commit586acc5fe2008-07-26 22:42:52130
[email protected]7b822b2b2008-08-05 00:15:45131 rv = callback.WaitForResult();
132 EXPECT_EQ(rv, net::OK);
133 }
initial.commit586acc5fe2008-07-26 22:42:52134
135 const char request_text[] = "GET / HTTP/1.0\r\n\r\n";
[email protected]aaead502008-10-15 00:20:11136 rv = sock->Write(request_text, arraysize(request_text) - 1, &callback);
initial.commit586acc5fe2008-07-26 22:42:52137 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
138
139 if (rv == net::ERR_IO_PENDING) {
140 rv = callback.WaitForResult();
[email protected]7b822b2b2008-08-05 00:15:45141 EXPECT_EQ(rv, arraysize(request_text) - 1);
initial.commit586acc5fe2008-07-26 22:42:52142 }
143
144 char buf[1];
145 for (;;) {
[email protected]aaead502008-10-15 00:20:11146 rv = sock->Read(buf, sizeof(buf), &callback);
initial.commit586acc5fe2008-07-26 22:42:52147 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
148
149 if (rv == net::ERR_IO_PENDING)
150 rv = callback.WaitForResult();
151
[email protected]7b822b2b2008-08-05 00:15:45152 EXPECT_GE(rv, 0);
153 if (rv <= 0)
initial.commit586acc5fe2008-07-26 22:42:52154 break;
155 }
156}
157
[email protected]9bfef782008-09-02 13:56:12158// bug 1354783
159TEST_F(SSLClientSocketTest, DISABLED_Read_Interrupted) {
initial.commit586acc5fe2008-07-26 22:42:52160 net::AddressList addr;
161 net::HostResolver resolver;
162 TestCompletionCallback callback;
163
[email protected]4628a2a2008-08-14 20:33:25164 std::string hostname = "bugs.webkit.org";
165 int rv = resolver.Resolve(hostname, 443, &addr, NULL);
initial.commit586acc5fe2008-07-26 22:42:52166 EXPECT_EQ(rv, net::OK);
167
[email protected]aaead502008-10-15 00:20:11168 scoped_ptr<net::SSLClientSocket> sock(
169 socket_factory_->CreateSSLClientSocket(new net::TCPClientSocket(addr),
170 hostname, kDefaultSSLConfig));
initial.commit586acc5fe2008-07-26 22:42:52171
[email protected]aaead502008-10-15 00:20:11172 rv = sock->Connect(&callback);
[email protected]7b822b2b2008-08-05 00:15:45173 if (rv != net::OK) {
174 ASSERT_EQ(rv, net::ERR_IO_PENDING);
initial.commit586acc5fe2008-07-26 22:42:52175
[email protected]7b822b2b2008-08-05 00:15:45176 rv = callback.WaitForResult();
177 EXPECT_EQ(rv, net::OK);
178 }
initial.commit586acc5fe2008-07-26 22:42:52179
180 const char request_text[] = "GET / HTTP/1.0\r\n\r\n";
[email protected]aaead502008-10-15 00:20:11181 rv = sock->Write(request_text, arraysize(request_text) - 1, &callback);
initial.commit586acc5fe2008-07-26 22:42:52182 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
183
184 if (rv == net::ERR_IO_PENDING) {
185 rv = callback.WaitForResult();
[email protected]7b822b2b2008-08-05 00:15:45186 EXPECT_EQ(rv, arraysize(request_text) - 1);
initial.commit586acc5fe2008-07-26 22:42:52187 }
188
189 // Do a partial read and then exit. This test should not crash!
190 char buf[512];
[email protected]aaead502008-10-15 00:20:11191 rv = sock->Read(buf, sizeof(buf), &callback);
initial.commit586acc5fe2008-07-26 22:42:52192 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
193
194 if (rv == net::ERR_IO_PENDING)
195 rv = callback.WaitForResult();
196
[email protected]7b822b2b2008-08-05 00:15:45197 EXPECT_NE(rv, 0);
initial.commit586acc5fe2008-07-26 22:42:52198}
license.botbf09a502008-08-24 00:55:55199