blob: 2aba7ab72d7f06fc379188377ca8106ebf62ffd9 [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"
initial.commit586acc5fe2008-07-26 22:42:526#include "net/base/host_resolver.h"
[email protected]7b822b2b2008-08-05 00:15:457#include "net/base/net_errors.h"
initial.commit586acc5fe2008-07-26 22:42:528#include "net/base/ssl_client_socket.h"
9#include "net/base/tcp_client_socket.h"
10#include "net/base/test_completion_callback.h"
11#include "testing/gtest/include/gtest/gtest.h"
12
13//-----------------------------------------------------------------------------
14
15namespace {
16
[email protected]c5949a32008-10-08 17:28:2317const unsigned int kDefaultSSLVersionMask = net::SSLClientSocket::SSL3 |
18 net::SSLClientSocket::TLS1;
19
initial.commit586acc5fe2008-07-26 22:42:5220class SSLClientSocketTest : public testing::Test {
21};
22
23} // namespace
24
25//-----------------------------------------------------------------------------
26
[email protected]9bfef782008-09-02 13:56:1227// bug 1354783
28TEST_F(SSLClientSocketTest, DISABLED_Connect) {
initial.commit586acc5fe2008-07-26 22:42:5229 net::AddressList addr;
30 net::HostResolver resolver;
31 TestCompletionCallback callback;
32
[email protected]4628a2a2008-08-14 20:33:2533 std::string hostname = "bugs.webkit.org";
initial.commit586acc5fe2008-07-26 22:42:5234 int rv = resolver.Resolve(hostname, 443, &addr, NULL);
35 EXPECT_EQ(net::OK, rv);
36
[email protected]c5949a32008-10-08 17:28:2337 net::SSLClientSocket sock(new net::TCPClientSocket(addr), hostname,
38 kDefaultSSLVersionMask);
initial.commit586acc5fe2008-07-26 22:42:5239
40 EXPECT_FALSE(sock.IsConnected());
41
42 rv = sock.Connect(&callback);
[email protected]7b822b2b2008-08-05 00:15:4543 if (rv != net::OK) {
44 ASSERT_EQ(net::ERR_IO_PENDING, rv);
initial.commit586acc5fe2008-07-26 22:42:5245
[email protected]7b822b2b2008-08-05 00:15:4546 rv = callback.WaitForResult();
47 EXPECT_EQ(net::OK, rv);
48 }
initial.commit586acc5fe2008-07-26 22:42:5249
50 EXPECT_TRUE(sock.IsConnected());
51
52 sock.Disconnect();
53 EXPECT_FALSE(sock.IsConnected());
54}
55
[email protected]9bfef782008-09-02 13:56:1256// bug 1354783
57TEST_F(SSLClientSocketTest, DISABLED_Read) {
initial.commit586acc5fe2008-07-26 22:42:5258 net::AddressList addr;
59 net::HostResolver resolver;
60 TestCompletionCallback callback;
61
[email protected]4628a2a2008-08-14 20:33:2562 std::string hostname = "bugs.webkit.org";
initial.commit586acc5fe2008-07-26 22:42:5263 int rv = resolver.Resolve(hostname, 443, &addr, &callback);
64 EXPECT_EQ(rv, net::ERR_IO_PENDING);
65
66 rv = callback.WaitForResult();
67 EXPECT_EQ(rv, net::OK);
68
[email protected]c5949a32008-10-08 17:28:2369 net::SSLClientSocket sock(new net::TCPClientSocket(addr), hostname,
70 kDefaultSSLVersionMask);
initial.commit586acc5fe2008-07-26 22:42:5271
72 rv = sock.Connect(&callback);
[email protected]7b822b2b2008-08-05 00:15:4573 if (rv != net::OK) {
74 ASSERT_EQ(rv, net::ERR_IO_PENDING);
initial.commit586acc5fe2008-07-26 22:42:5275
[email protected]7b822b2b2008-08-05 00:15:4576 rv = callback.WaitForResult();
77 EXPECT_EQ(rv, net::OK);
78 }
initial.commit586acc5fe2008-07-26 22:42:5279
80 const char request_text[] = "GET / HTTP/1.0\r\n\r\n";
[email protected]7b822b2b2008-08-05 00:15:4581 rv = sock.Write(request_text, arraysize(request_text) - 1, &callback);
initial.commit586acc5fe2008-07-26 22:42:5282 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
83
84 if (rv == net::ERR_IO_PENDING) {
85 rv = callback.WaitForResult();
[email protected]7b822b2b2008-08-05 00:15:4586 EXPECT_EQ(rv, arraysize(request_text) - 1);
initial.commit586acc5fe2008-07-26 22:42:5287 }
88
89 char buf[4096];
90 for (;;) {
91 rv = sock.Read(buf, sizeof(buf), &callback);
92 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
93
94 if (rv == net::ERR_IO_PENDING)
95 rv = callback.WaitForResult();
96
[email protected]7b822b2b2008-08-05 00:15:4597 EXPECT_GE(rv, 0);
98 if (rv <= 0)
initial.commit586acc5fe2008-07-26 22:42:5299 break;
100 }
101}
102
[email protected]9bfef782008-09-02 13:56:12103// bug 1354783
104TEST_F(SSLClientSocketTest, DISABLED_Read_SmallChunks) {
initial.commit586acc5fe2008-07-26 22:42:52105 net::AddressList addr;
106 net::HostResolver resolver;
107 TestCompletionCallback callback;
108
[email protected]4628a2a2008-08-14 20:33:25109 std::string hostname = "bugs.webkit.org";
110 int rv = resolver.Resolve(hostname, 443, &addr, NULL);
initial.commit586acc5fe2008-07-26 22:42:52111 EXPECT_EQ(rv, net::OK);
112
[email protected]c5949a32008-10-08 17:28:23113 net::SSLClientSocket sock(new net::TCPClientSocket(addr), hostname,
114 kDefaultSSLVersionMask);
initial.commit586acc5fe2008-07-26 22:42:52115
116 rv = sock.Connect(&callback);
[email protected]7b822b2b2008-08-05 00:15:45117 if (rv != net::OK) {
118 ASSERT_EQ(rv, net::ERR_IO_PENDING);
initial.commit586acc5fe2008-07-26 22:42:52119
[email protected]7b822b2b2008-08-05 00:15:45120 rv = callback.WaitForResult();
121 EXPECT_EQ(rv, net::OK);
122 }
initial.commit586acc5fe2008-07-26 22:42:52123
124 const char request_text[] = "GET / HTTP/1.0\r\n\r\n";
[email protected]7b822b2b2008-08-05 00:15:45125 rv = sock.Write(request_text, arraysize(request_text) - 1, &callback);
initial.commit586acc5fe2008-07-26 22:42:52126 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
127
128 if (rv == net::ERR_IO_PENDING) {
129 rv = callback.WaitForResult();
[email protected]7b822b2b2008-08-05 00:15:45130 EXPECT_EQ(rv, arraysize(request_text) - 1);
initial.commit586acc5fe2008-07-26 22:42:52131 }
132
133 char buf[1];
134 for (;;) {
135 rv = sock.Read(buf, sizeof(buf), &callback);
136 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
137
138 if (rv == net::ERR_IO_PENDING)
139 rv = callback.WaitForResult();
140
[email protected]7b822b2b2008-08-05 00:15:45141 EXPECT_GE(rv, 0);
142 if (rv <= 0)
initial.commit586acc5fe2008-07-26 22:42:52143 break;
144 }
145}
146
[email protected]9bfef782008-09-02 13:56:12147// bug 1354783
148TEST_F(SSLClientSocketTest, DISABLED_Read_Interrupted) {
initial.commit586acc5fe2008-07-26 22:42:52149 net::AddressList addr;
150 net::HostResolver resolver;
151 TestCompletionCallback callback;
152
[email protected]4628a2a2008-08-14 20:33:25153 std::string hostname = "bugs.webkit.org";
154 int rv = resolver.Resolve(hostname, 443, &addr, NULL);
initial.commit586acc5fe2008-07-26 22:42:52155 EXPECT_EQ(rv, net::OK);
156
[email protected]c5949a32008-10-08 17:28:23157 net::SSLClientSocket sock(new net::TCPClientSocket(addr), hostname,
158 kDefaultSSLVersionMask);
initial.commit586acc5fe2008-07-26 22:42:52159
160 rv = sock.Connect(&callback);
[email protected]7b822b2b2008-08-05 00:15:45161 if (rv != net::OK) {
162 ASSERT_EQ(rv, net::ERR_IO_PENDING);
initial.commit586acc5fe2008-07-26 22:42:52163
[email protected]7b822b2b2008-08-05 00:15:45164 rv = callback.WaitForResult();
165 EXPECT_EQ(rv, net::OK);
166 }
initial.commit586acc5fe2008-07-26 22:42:52167
168 const char request_text[] = "GET / HTTP/1.0\r\n\r\n";
[email protected]7b822b2b2008-08-05 00:15:45169 rv = sock.Write(request_text, arraysize(request_text) - 1, &callback);
initial.commit586acc5fe2008-07-26 22:42:52170 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
171
172 if (rv == net::ERR_IO_PENDING) {
173 rv = callback.WaitForResult();
[email protected]7b822b2b2008-08-05 00:15:45174 EXPECT_EQ(rv, arraysize(request_text) - 1);
initial.commit586acc5fe2008-07-26 22:42:52175 }
176
177 // Do a partial read and then exit. This test should not crash!
178 char buf[512];
179 rv = sock.Read(buf, sizeof(buf), &callback);
180 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
181
182 if (rv == net::ERR_IO_PENDING)
183 rv = callback.WaitForResult();
184
[email protected]7b822b2b2008-08-05 00:15:45185 EXPECT_NE(rv, 0);
initial.commit586acc5fe2008-07-26 22:42:52186}
license.botbf09a502008-08-24 00:55:55187