OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "ppapi/tests/test_tcp_socket_private.h" | 5 #include "ppapi/tests/test_tcp_socket_private.h" |
6 | 6 |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
8 | 8 |
9 #include "ppapi/c/dev/ppb_url_util_dev.h" | 9 #include "ppapi/c/dev/ppb_url_util_dev.h" |
10 #include "ppapi/cpp/dev/url_util_dev.h" | 10 #include "ppapi/cpp/dev/url_util_dev.h" |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 // Get port (it's optional). | 69 // Get port (it's optional). |
70 port_ = 80; // Default value. | 70 port_ = 80; // Default value. |
71 if (components.port.len > 0) { | 71 if (components.port.len > 0) { |
72 int i = atoi(url.substr(components.port.begin, | 72 int i = atoi(url.substr(components.port.begin, |
73 components.port.len).c_str()); | 73 components.port.len).c_str()); |
74 if (i < 0 || i > 65535) | 74 if (i < 0 || i > 65535) |
75 return false; | 75 return false; |
76 port_ = static_cast<uint16_t>(i); | 76 port_ = static_cast<uint16_t>(i); |
77 } | 77 } |
78 | 78 |
| 79 // Get the port for the SSL server. |
| 80 ssl_port_ = instance_->ssl_server_port(); |
| 81 |
79 return true; | 82 return true; |
80 } | 83 } |
81 | 84 |
82 void TestTCPSocketPrivate::RunTests(const std::string& filter) { | 85 void TestTCPSocketPrivate::RunTests(const std::string& filter) { |
83 RUN_TEST_FORCEASYNC_AND_NOT(Basic, filter); | 86 RUN_TEST_FORCEASYNC_AND_NOT(Basic, filter); |
84 RUN_TEST_FORCEASYNC_AND_NOT(ReadWrite, filter); | 87 RUN_TEST_FORCEASYNC_AND_NOT(ReadWrite, filter); |
| 88 RUN_TEST_FORCEASYNC_AND_NOT(ReadWriteSSL, filter); |
85 RUN_TEST_FORCEASYNC_AND_NOT(ConnectAddress, filter); | 89 RUN_TEST_FORCEASYNC_AND_NOT(ConnectAddress, filter); |
86 } | 90 } |
87 | 91 |
88 std::string TestTCPSocketPrivate::TestBasic() { | 92 std::string TestTCPSocketPrivate::TestBasic() { |
89 pp::TCPSocketPrivate socket(instance_); | 93 pp::TCPSocketPrivate socket(instance_); |
90 TestCompletionCallback cb(instance_->pp_instance(), force_async_); | 94 TestCompletionCallback cb(instance_->pp_instance(), force_async_); |
91 | 95 |
92 int32_t rv = socket.Connect(host_.c_str(), port_, cb); | 96 int32_t rv = socket.Connect(host_.c_str(), port_, cb); |
93 ASSERT_TRUE(!force_async_ || rv == PP_OK_COMPLETIONPENDING); | 97 ASSERT_TRUE(!force_async_ || rv == PP_OK_COMPLETIONPENDING); |
94 if (rv == PP_OK_COMPLETIONPENDING) | 98 if (rv == PP_OK_COMPLETIONPENDING) |
(...skipping 25 matching lines...) Expand all Loading... |
120 // Read up to the first \n and check that it looks like valid HTTP response. | 124 // Read up to the first \n and check that it looks like valid HTTP response. |
121 std::string s; | 125 std::string s; |
122 ASSERT_EQ(PP_OK, ReadFirstLineFromSocket(&socket, &s)); | 126 ASSERT_EQ(PP_OK, ReadFirstLineFromSocket(&socket, &s)); |
123 ASSERT_TRUE(ValidateHttpResponse(s)); | 127 ASSERT_TRUE(ValidateHttpResponse(s)); |
124 | 128 |
125 socket.Disconnect(); | 129 socket.Disconnect(); |
126 | 130 |
127 PASS(); | 131 PASS(); |
128 } | 132 } |
129 | 133 |
| 134 std::string TestTCPSocketPrivate::TestReadWriteSSL() { |
| 135 pp::TCPSocketPrivate socket(instance_); |
| 136 TestCompletionCallback cb(instance_->pp_instance(), force_async_); |
| 137 |
| 138 int32_t rv = socket.Connect(host_.c_str(), ssl_port_, cb); |
| 139 ASSERT_TRUE(!force_async_ || rv == PP_OK_COMPLETIONPENDING); |
| 140 if (rv == PP_OK_COMPLETIONPENDING) |
| 141 rv = cb.WaitForResult(); |
| 142 ASSERT_EQ(PP_OK, rv); |
| 143 |
| 144 rv = socket.SSLHandshake(host_.c_str(), ssl_port_, cb); |
| 145 ASSERT_TRUE(!force_async_ || rv == PP_OK_COMPLETIONPENDING); |
| 146 if (rv == PP_OK_COMPLETIONPENDING) |
| 147 rv = cb.WaitForResult(); |
| 148 ASSERT_EQ(PP_OK, rv); |
| 149 |
| 150 ASSERT_EQ(PP_OK, WriteStringToSocket(&socket, "GET / HTTP/1.0\r\n\r\n")); |
| 151 |
| 152 // Read up to the first \n and check that it looks like valid HTTP response. |
| 153 std::string s; |
| 154 ASSERT_EQ(PP_OK, ReadFirstLineFromSocket(&socket, &s)); |
| 155 ASSERT_TRUE(ValidateHttpResponse(s)); |
| 156 |
| 157 socket.Disconnect(); |
| 158 |
| 159 PASS(); |
| 160 } |
| 161 |
130 std::string TestTCPSocketPrivate::TestConnectAddress() { | 162 std::string TestTCPSocketPrivate::TestConnectAddress() { |
131 PP_NetAddress_Private address; | 163 PP_NetAddress_Private address; |
132 | 164 |
133 // First, bring up a connection and grab the address. | 165 // First, bring up a connection and grab the address. |
134 { | 166 { |
135 pp::TCPSocketPrivate socket(instance_); | 167 pp::TCPSocketPrivate socket(instance_); |
136 TestCompletionCallback cb(instance_->pp_instance(), force_async_); | 168 TestCompletionCallback cb(instance_->pp_instance(), force_async_); |
137 int32_t rv = socket.Connect(host_.c_str(), port_, cb); | 169 int32_t rv = socket.Connect(host_.c_str(), port_, cb); |
138 ASSERT_TRUE(!force_async_ || rv == PP_OK_COMPLETIONPENDING); | 170 ASSERT_TRUE(!force_async_ || rv == PP_OK_COMPLETIONPENDING); |
139 if (rv == PP_OK_COMPLETIONPENDING) | 171 if (rv == PP_OK_COMPLETIONPENDING) |
(...skipping 17 matching lines...) Expand all Loading... |
157 ASSERT_EQ(PP_OK, WriteStringToSocket(&socket, "GET / HTTP/1.0\r\n\r\n")); | 189 ASSERT_EQ(PP_OK, WriteStringToSocket(&socket, "GET / HTTP/1.0\r\n\r\n")); |
158 std::string s; | 190 std::string s; |
159 ASSERT_EQ(PP_OK, ReadFirstLineFromSocket(&socket, &s)); | 191 ASSERT_EQ(PP_OK, ReadFirstLineFromSocket(&socket, &s)); |
160 ASSERT_TRUE(ValidateHttpResponse(s)); | 192 ASSERT_TRUE(ValidateHttpResponse(s)); |
161 | 193 |
162 socket.Disconnect(); | 194 socket.Disconnect(); |
163 | 195 |
164 PASS(); | 196 PASS(); |
165 } | 197 } |
166 | 198 |
167 // TODO(viettrungluu): Try testing SSL somehow. | |
168 | |
169 int32_t TestTCPSocketPrivate::ReadFirstLineFromSocket( | 199 int32_t TestTCPSocketPrivate::ReadFirstLineFromSocket( |
170 pp::TCPSocketPrivate* socket, | 200 pp::TCPSocketPrivate* socket, |
171 std::string* s) { | 201 std::string* s) { |
172 char buffer[10000]; | 202 char buffer[10000]; |
173 | 203 |
174 s->clear(); | 204 s->clear(); |
175 // Make sure we don't just hang if |Read()| spews. | 205 // Make sure we don't just hang if |Read()| spews. |
176 while (s->size() < 1000000) { | 206 while (s->size() < 1000000) { |
177 TestCompletionCallback cb(instance_->pp_instance(), force_async_); | 207 TestCompletionCallback cb(instance_->pp_instance(), force_async_); |
178 int32_t rv = socket->Read(buffer, sizeof(buffer), cb); | 208 int32_t rv = socket->Read(buffer, sizeof(buffer), cb); |
(...skipping 29 matching lines...) Expand all Loading... |
208 if (rv < 0) | 238 if (rv < 0) |
209 return rv; | 239 return rv; |
210 if (rv == 0) | 240 if (rv == 0) |
211 return PP_ERROR_FAILED; | 241 return PP_ERROR_FAILED; |
212 written += rv; | 242 written += rv; |
213 } | 243 } |
214 if (written != s.size()) | 244 if (written != s.size()) |
215 return PP_ERROR_FAILED; | 245 return PP_ERROR_FAILED; |
216 return PP_OK; | 246 return PP_OK; |
217 } | 247 } |
OLD | NEW |