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

Side by Side Diff: ppapi/tests/test_tcp_socket_private.cc

Issue 14139012: PPAPI: More test cleanup (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Provide a message loop for "background thread" test so we can use a REQUIRED callback Created 7 years, 8 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 | Annotate | Revision Log
OLDNEW
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 "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/cpp/private/tcp_socket_private.h" 9 #include "ppapi/cpp/private/tcp_socket_private.h"
10 #include "ppapi/tests/testing_instance.h" 10 #include "ppapi/tests/testing_instance.h"
(...skipping 29 matching lines...) Expand all
40 if (!GetLocalHostPort(instance_->pp_instance(), &host_, &port_)) 40 if (!GetLocalHostPort(instance_->pp_instance(), &host_, &port_))
41 return false; 41 return false;
42 42
43 // Get the port for the SSL server. 43 // Get the port for the SSL server.
44 ssl_port_ = instance_->ssl_server_port(); 44 ssl_port_ = instance_->ssl_server_port();
45 45
46 return true; 46 return true;
47 } 47 }
48 48
49 void TestTCPSocketPrivate::RunTests(const std::string& filter) { 49 void TestTCPSocketPrivate::RunTests(const std::string& filter) {
50 RUN_TEST_FORCEASYNC_AND_NOT(Basic, filter); 50 RUN_CALLBACK_TEST(TestTCPSocketPrivate, Basic, filter);
51 RUN_TEST_FORCEASYNC_AND_NOT(ReadWrite, filter); 51 RUN_CALLBACK_TEST(TestTCPSocketPrivate, ReadWrite, filter);
52 RUN_TEST_FORCEASYNC_AND_NOT(ReadWriteSSL, filter); 52 RUN_CALLBACK_TEST(TestTCPSocketPrivate, ReadWriteSSL, filter);
53 RUN_TEST_FORCEASYNC_AND_NOT(ConnectAddress, filter); 53 RUN_CALLBACK_TEST(TestTCPSocketPrivate, ConnectAddress, filter);
54 RUN_TEST_FORCEASYNC_AND_NOT(SetOption, filter); 54 RUN_CALLBACK_TEST(TestTCPSocketPrivate, SetOption, filter);
55 } 55 }
56 56
57 std::string TestTCPSocketPrivate::TestBasic() { 57 std::string TestTCPSocketPrivate::TestBasic() {
58 pp::TCPSocketPrivate socket(instance_); 58 pp::TCPSocketPrivate socket(instance_);
59 TestCompletionCallback cb(instance_->pp_instance(), force_async_); 59 TestCompletionCallback cb(instance_->pp_instance(), callback_type());
60 60
61 int32_t rv = socket.Connect(host_.c_str(), port_, cb.GetCallback()); 61 cb.WaitForResult(socket.Connect(host_.c_str(), port_, cb.GetCallback()));
62 ASSERT_TRUE(!force_async_ || rv == PP_OK_COMPLETIONPENDING); 62 CHECK_CALLBACK_BEHAVIOR(cb);
63 if (rv == PP_OK_COMPLETIONPENDING) 63 ASSERT_EQ(PP_OK, cb.result());
64 rv = cb.WaitForResult();
65 ASSERT_EQ(PP_OK, rv);
66 64
67 PP_NetAddress_Private unused; 65 PP_NetAddress_Private unused;
68 // TODO(viettrungluu): check the values somehow. 66 // TODO(viettrungluu): check the values somehow.
69 ASSERT_TRUE(socket.GetLocalAddress(&unused)); 67 ASSERT_TRUE(socket.GetLocalAddress(&unused));
70 ASSERT_TRUE(socket.GetRemoteAddress(&unused)); 68 ASSERT_TRUE(socket.GetRemoteAddress(&unused));
71 69
72 socket.Disconnect(); 70 socket.Disconnect();
73 71
74 PASS(); 72 PASS();
75 } 73 }
76 74
77 std::string TestTCPSocketPrivate::TestReadWrite() { 75 std::string TestTCPSocketPrivate::TestReadWrite() {
78 pp::TCPSocketPrivate socket(instance_); 76 pp::TCPSocketPrivate socket(instance_);
79 TestCompletionCallback cb(instance_->pp_instance(), force_async_); 77 TestCompletionCallback cb(instance_->pp_instance(), callback_type());
80 78
81 int32_t rv = socket.Connect(host_.c_str(), port_, cb.GetCallback()); 79 cb.WaitForResult(socket.Connect(host_.c_str(), port_, cb.GetCallback()));
82 ASSERT_TRUE(!force_async_ || rv == PP_OK_COMPLETIONPENDING); 80 CHECK_CALLBACK_BEHAVIOR(cb);
83 if (rv == PP_OK_COMPLETIONPENDING) 81 ASSERT_EQ(PP_OK, cb.result());
84 rv = cb.WaitForResult();
85 ASSERT_EQ(PP_OK, rv);
86 82
87 ASSERT_EQ(PP_OK, WriteStringToSocket(&socket, "GET / HTTP/1.0\r\n\r\n")); 83 ASSERT_EQ(PP_OK, WriteStringToSocket(&socket, "GET / HTTP/1.0\r\n\r\n"));
88 84
89 // Read up to the first \n and check that it looks like valid HTTP response. 85 // Read up to the first \n and check that it looks like valid HTTP response.
90 std::string s; 86 std::string s;
91 ASSERT_EQ(PP_OK, ReadFirstLineFromSocket(&socket, &s)); 87 ASSERT_EQ(PP_OK, ReadFirstLineFromSocket(&socket, &s));
92 ASSERT_TRUE(ValidateHttpResponse(s)); 88 ASSERT_TRUE(ValidateHttpResponse(s));
93 89
94 socket.Disconnect(); 90 socket.Disconnect();
95 91
96 PASS(); 92 PASS();
97 } 93 }
98 94
99 std::string TestTCPSocketPrivate::TestReadWriteSSL() { 95 std::string TestTCPSocketPrivate::TestReadWriteSSL() {
100 pp::TCPSocketPrivate socket(instance_); 96 pp::TCPSocketPrivate socket(instance_);
101 TestCompletionCallback cb(instance_->pp_instance(), force_async_); 97 TestCompletionCallback cb(instance_->pp_instance(), callback_type());
102 98
103 int32_t rv = socket.Connect(host_.c_str(), ssl_port_, cb.GetCallback()); 99 cb.WaitForResult(socket.Connect(host_.c_str(), ssl_port_, cb.GetCallback()));
104 ASSERT_TRUE(!force_async_ || rv == PP_OK_COMPLETIONPENDING); 100 CHECK_CALLBACK_BEHAVIOR(cb);
105 if (rv == PP_OK_COMPLETIONPENDING) 101 ASSERT_EQ(PP_OK, cb.result());
106 rv = cb.WaitForResult();
107 ASSERT_EQ(PP_OK, rv);
108 102
109 rv = socket.SSLHandshake(host_.c_str(), ssl_port_, cb.GetCallback()); 103 cb.WaitForResult(
110 ASSERT_TRUE(!force_async_ || rv == PP_OK_COMPLETIONPENDING); 104 socket.SSLHandshake(host_.c_str(), ssl_port_, cb.GetCallback()));
111 if (rv == PP_OK_COMPLETIONPENDING) 105 CHECK_CALLBACK_BEHAVIOR(cb);
112 rv = cb.WaitForResult(); 106 ASSERT_EQ(PP_OK, cb.result());
113 ASSERT_EQ(PP_OK, rv);
114 107
115 ASSERT_EQ(PP_OK, WriteStringToSocket(&socket, "GET / HTTP/1.0\r\n\r\n")); 108 ASSERT_EQ(PP_OK, WriteStringToSocket(&socket, "GET / HTTP/1.0\r\n\r\n"));
116 109
117 // Read up to the first \n and check that it looks like valid HTTP response. 110 // Read up to the first \n and check that it looks like valid HTTP response.
118 std::string s; 111 std::string s;
119 ASSERT_EQ(PP_OK, ReadFirstLineFromSocket(&socket, &s)); 112 ASSERT_EQ(PP_OK, ReadFirstLineFromSocket(&socket, &s));
120 ASSERT_TRUE(ValidateHttpResponse(s)); 113 ASSERT_TRUE(ValidateHttpResponse(s));
121 114
122 socket.Disconnect(); 115 socket.Disconnect();
123 116
124 PASS(); 117 PASS();
125 } 118 }
126 119
127 std::string TestTCPSocketPrivate::TestConnectAddress() { 120 std::string TestTCPSocketPrivate::TestConnectAddress() {
128 PP_NetAddress_Private address; 121 PP_NetAddress_Private address;
129 122
130 // First, bring up a connection and grab the address. 123 // First, bring up a connection and grab the address.
131 { 124 {
132 pp::TCPSocketPrivate socket(instance_); 125 pp::TCPSocketPrivate socket(instance_);
133 TestCompletionCallback cb(instance_->pp_instance(), force_async_); 126 TestCompletionCallback cb(instance_->pp_instance(), callback_type());
134 int32_t rv = socket.Connect(host_.c_str(), port_, cb.GetCallback()); 127 cb.WaitForResult(socket.Connect(host_.c_str(), port_, cb.GetCallback()));
135 ASSERT_TRUE(!force_async_ || rv == PP_OK_COMPLETIONPENDING); 128 CHECK_CALLBACK_BEHAVIOR(cb);
136 if (rv == PP_OK_COMPLETIONPENDING) 129 ASSERT_EQ(PP_OK, cb.result());
137 rv = cb.WaitForResult();
138 ASSERT_EQ(PP_OK, rv);
139 ASSERT_TRUE(socket.GetRemoteAddress(&address)); 130 ASSERT_TRUE(socket.GetRemoteAddress(&address));
140 // Omit the |Disconnect()| here to make sure we don't crash if we just let 131 // Omit the |Disconnect()| here to make sure we don't crash if we just let
141 // the resource be destroyed. 132 // the resource be destroyed.
142 } 133 }
143 134
144 // Connect to that address. 135 // Connect to that address.
145 pp::TCPSocketPrivate socket(instance_); 136 pp::TCPSocketPrivate socket(instance_);
146 TestCompletionCallback cb(instance_->pp_instance(), force_async_); 137 TestCompletionCallback cb(instance_->pp_instance(), callback_type());
147 int32_t rv = socket.ConnectWithNetAddress(&address, cb.GetCallback()); 138 cb.WaitForResult(socket.ConnectWithNetAddress(&address, cb.GetCallback()));
148 ASSERT_TRUE(!force_async_ || rv == PP_OK_COMPLETIONPENDING); 139 CHECK_CALLBACK_BEHAVIOR(cb);
149 if (rv == PP_OK_COMPLETIONPENDING) 140 ASSERT_EQ(PP_OK, cb.result());
150 rv = cb.WaitForResult();
151 ASSERT_EQ(PP_OK, rv);
152 141
153 // Make sure we can read/write to it properly (see |TestReadWrite()|). 142 // Make sure we can read/write to it properly (see |TestReadWrite()|).
154 ASSERT_EQ(PP_OK, WriteStringToSocket(&socket, "GET / HTTP/1.0\r\n\r\n")); 143 ASSERT_EQ(PP_OK, WriteStringToSocket(&socket, "GET / HTTP/1.0\r\n\r\n"));
155 std::string s; 144 std::string s;
156 ASSERT_EQ(PP_OK, ReadFirstLineFromSocket(&socket, &s)); 145 ASSERT_EQ(PP_OK, ReadFirstLineFromSocket(&socket, &s));
157 ASSERT_TRUE(ValidateHttpResponse(s)); 146 ASSERT_TRUE(ValidateHttpResponse(s));
158 147
159 socket.Disconnect(); 148 socket.Disconnect();
160 149
161 PASS(); 150 PASS();
162 } 151 }
163 152
164 std::string TestTCPSocketPrivate::TestSetOption() { 153 std::string TestTCPSocketPrivate::TestSetOption() {
165 pp::TCPSocketPrivate socket(instance_); 154 pp::TCPSocketPrivate socket(instance_);
166 TestCompletionCallback cb(instance_->pp_instance(), force_async_); 155 TestCompletionCallback cb(instance_->pp_instance(), callback_type());
167 156
168 int32_t rv = socket.SetOption(PP_TCPSOCKETOPTION_NO_DELAY, true, 157 cb.WaitForResult(
169 cb.GetCallback()); 158 socket.SetOption(PP_TCPSOCKETOPTION_NO_DELAY, true, cb.GetCallback()));
170 ASSERT_TRUE(!force_async_ || rv == PP_OK_COMPLETIONPENDING); 159 CHECK_CALLBACK_BEHAVIOR(cb);
171 if (rv == PP_OK_COMPLETIONPENDING) 160 ASSERT_EQ(PP_ERROR_FAILED, cb.result());
172 rv = cb.WaitForResult();
173 ASSERT_EQ(PP_ERROR_FAILED, rv);
174 161
175 rv = socket.Connect(host_.c_str(), port_, cb.GetCallback()); 162 cb.WaitForResult(socket.Connect(host_.c_str(), port_, cb.GetCallback()));
176 ASSERT_TRUE(!force_async_ || rv == PP_OK_COMPLETIONPENDING); 163 CHECK_CALLBACK_BEHAVIOR(cb);
177 if (rv == PP_OK_COMPLETIONPENDING) 164 ASSERT_EQ(PP_OK, cb.result());
178 rv = cb.WaitForResult();
179 ASSERT_EQ(PP_OK, rv);
180 165
181 rv = socket.SetOption(PP_TCPSOCKETOPTION_NO_DELAY, true, cb.GetCallback()); 166 cb.WaitForResult(
182 ASSERT_TRUE(!force_async_ || rv == PP_OK_COMPLETIONPENDING); 167 socket.SetOption(PP_TCPSOCKETOPTION_NO_DELAY, true, cb.GetCallback()));
183 if (rv == PP_OK_COMPLETIONPENDING) 168 CHECK_CALLBACK_BEHAVIOR(cb);
184 rv = cb.WaitForResult(); 169 ASSERT_EQ(PP_OK, cb.result());
185 ASSERT_EQ(PP_OK, rv);
186 170
187 rv = socket.SetOption(PP_TCPSOCKETOPTION_INVALID, true, cb.GetCallback()); 171 cb.WaitForResult(
188 ASSERT_TRUE(!force_async_ || rv == PP_OK_COMPLETIONPENDING); 172 socket.SetOption(PP_TCPSOCKETOPTION_INVALID, true, cb.GetCallback()));
189 if (rv == PP_OK_COMPLETIONPENDING) 173 CHECK_CALLBACK_BEHAVIOR(cb);
190 rv = cb.WaitForResult(); 174 ASSERT_EQ(PP_ERROR_BADARGUMENT, cb.result());
191 ASSERT_EQ(PP_ERROR_BADARGUMENT, rv);
192 175
193 socket.Disconnect(); 176 socket.Disconnect();
194 177
195 PASS(); 178 PASS();
196 } 179 }
197 180
198 int32_t TestTCPSocketPrivate::ReadFirstLineFromSocket( 181 int32_t TestTCPSocketPrivate::ReadFirstLineFromSocket(
199 pp::TCPSocketPrivate* socket, 182 pp::TCPSocketPrivate* socket,
200 std::string* s) { 183 std::string* s) {
201 char buffer[10000]; 184 char buffer[10000];
202 185
203 s->clear(); 186 s->clear();
204 // Make sure we don't just hang if |Read()| spews. 187 // Make sure we don't just hang if |Read()| spews.
205 while (s->size() < 1000000) { 188 while (s->size() < 1000000) {
206 TestCompletionCallback cb(instance_->pp_instance(), force_async_); 189 TestCompletionCallback cb(instance_->pp_instance(), callback_type());
207 int32_t rv = socket->Read(buffer, sizeof(buffer), cb.GetCallback()); 190 int32_t rv = socket->Read(buffer, sizeof(buffer), cb.GetCallback());
208 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) 191 if (callback_type() == PP_REQUIRED && rv != PP_OK_COMPLETIONPENDING)
209 return PP_ERROR_FAILED; 192 return PP_ERROR_FAILED;
210 if (rv == PP_OK_COMPLETIONPENDING) 193 cb.WaitForResult(rv);
211 rv = cb.WaitForResult(); 194 if (cb.result() < 0)
212 if (rv < 0) 195 return cb.result();
213 return rv; 196 if (cb.result() == 0)
214 if (rv == 0)
215 return PP_ERROR_FAILED; // Didn't get a \n-terminated line. 197 return PP_ERROR_FAILED; // Didn't get a \n-terminated line.
216 s->reserve(s->size() + rv); 198 s->reserve(s->size() + cb.result());
217 for (int32_t i = 0; i < rv; i++) { 199 for (int32_t i = 0; i < cb.result(); i++) {
218 s->push_back(buffer[i]); 200 s->push_back(buffer[i]);
219 if (buffer[i] == '\n') 201 if (buffer[i] == '\n')
220 return PP_OK; 202 return PP_OK;
221 } 203 }
222 } 204 }
223 return PP_ERROR_FAILED; 205 return PP_ERROR_FAILED;
224 } 206 }
225 207
226 int32_t TestTCPSocketPrivate::WriteStringToSocket(pp::TCPSocketPrivate* socket, 208 int32_t TestTCPSocketPrivate::WriteStringToSocket(pp::TCPSocketPrivate* socket,
227 const std::string& s) { 209 const std::string& s) {
228 const char* buffer = s.data(); 210 const char* buffer = s.data();
229 size_t written = 0; 211 size_t written = 0;
230 while (written < s.size()) { 212 while (written < s.size()) {
231 TestCompletionCallback cb(instance_->pp_instance(), force_async_); 213 TestCompletionCallback cb(instance_->pp_instance(), callback_type());
232 int32_t rv = socket->Write(buffer + written, s.size() - written, 214 int32_t rv = socket->Write(buffer + written, s.size() - written,
233 cb.GetCallback()); 215 cb.GetCallback());
234 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) 216 if (callback_type() == PP_REQUIRED && rv != PP_OK_COMPLETIONPENDING)
235 return PP_ERROR_FAILED; 217 return PP_ERROR_FAILED;
236 if (rv == PP_OK_COMPLETIONPENDING) 218 cb.WaitForResult(rv);
237 rv = cb.WaitForResult(); 219 if (cb.result() < 0)
238 if (rv < 0) 220 return cb.result();
239 return rv; 221 if (cb.result() == 0)
240 if (rv == 0)
241 return PP_ERROR_FAILED; 222 return PP_ERROR_FAILED;
242 written += rv; 223 written += cb.result();
243 } 224 }
244 if (written != s.size()) 225 if (written != s.size())
245 return PP_ERROR_FAILED; 226 return PP_ERROR_FAILED;
246 return PP_OK; 227 return PP_OK;
247 } 228 }
OLDNEW
« no previous file with comments | « ppapi/tests/test_tcp_server_socket_private_disallowed.cc ('k') | ppapi/tests/test_tcp_socket_private_disallowed.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698