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

Side by Side Diff: runtime/tests/vm/dart/hello_fuchsia_test.dart

Issue 2523133002: Fuchsia sockets: (Closed)
Patch Set: Enable NODELAY Created 4 years 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
« no previous file with comments | « runtime/bin/socket_fuchsia.cc ('k') | runtime/vm/os_fuchsia.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import "dart:async"; 5 import "dart:async";
6 import "dart:io"; 6 import "dart:io";
7 7
8 testAddressParse() async { 8 testAddressParse() async {
9 print(new InternetAddress("1.0.2.3").rawAddress); 9 print(new InternetAddress("1.0.2.3").rawAddress);
10 print(new InternetAddress("1.0.2.3").type); 10 print(new InternetAddress("1.0.2.3").type);
(...skipping 27 matching lines...) Expand all
38 socket.remoteAddress.type != InternetAddressType.IP_V4) { 38 socket.remoteAddress.type != InternetAddressType.IP_V4) {
39 throw "Bad remote address ${socket.remoteAddress}"; 39 throw "Bad remote address ${socket.remoteAddress}";
40 } 40 }
41 if (socket.remotePort is! int) { 41 if (socket.remotePort is! int) {
42 throw "Bad remote port ${socket.remotePort}"; 42 throw "Bad remote port ${socket.remotePort}";
43 } 43 }
44 await server.close(); 44 await server.close();
45 await socket.close(); 45 await socket.close();
46 } 46 }
47 47
48 testSimpleReadWrite({bool dropReads}) async { 48 testSimpleReadWriteClose() async {
49 // This test creates a server and a client connects. The client then
50 // writes and the server echos. When the client finishes fully reading the
51 // echo, it closes the socket. When the server receives the close event, it
52 // closes its end of the socket too.
53
54 const messageSize = 1000;
55 int serverReadCount = 0;
56 int clientReadCount = 0;
57
58 List<int> createTestData() {
59 return new List<int>.generate(messageSize, (index) => index & 0xff);
60 }
61
62 void verifyTestData(List<int> data) {
63 assert(messageSize == data.length);
64 List<int> expected = createTestData();
65 for (int i = 0; i < messageSize; i++) {
66 assert(expected[i] == data[i]);
67 }
68 }
69
70 var server = await RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0);
71 server.listen((client) {
72 int bytesRead = 0;
73 int bytesWritten = 0;
74 bool closedEventReceived = false;
75 List<int> data = new List<int>(messageSize);
76 bool doneReading = false;
77
78 client.writeEventsEnabled = false;
79 client.listen((event) {
80 switch (event) {
81 case RawSocketEvent.READ:
82 if (doneReading) {
83 break;
84 }
85 print("client READ event bytesRead = $bytesRead");
86 assert(bytesWritten == 0);
87 assert(client.available() > 0);
88 var buffer = client.read(200);
89 print("client READ event: read ${buffer.length} more bytes");
90 data.setRange(bytesRead, bytesRead + buffer.length, buffer);
91 bytesRead += buffer.length;
92 if (bytesRead == data.length) {
93 verifyTestData(data);
94 print("client READ event. Done reading, enabling writes");
95 client.writeEventsEnabled = true;
96 doneReading = true;
97 }
98 break;
99 case RawSocketEvent.WRITE:
100 assert(!client.writeEventsEnabled);
101 bytesWritten += client.write(
102 data, bytesWritten, data.length - bytesWritten);
103 print("client WRITE event: $bytesWritten written");
104 if (bytesWritten < data.length) {
105 client.writeEventsEnabled = true;
106 }
107 if (bytesWritten == data.length) {
108 print("client WRITE event: done writing.");
109 }
110 break;
111 case RawSocketEvent.READ_CLOSED:
112 print("client READ_CLOSED event");
113 client.close();
114 server.close();
115 break;
116 case RawSocketEvent.CLOSED:
117 assert(!closedEventReceived);
118 print("client CLOSED event");
119 closedEventReceived = true;
120 break;
121 default: throw "Unexpected event $event";
122 }
123 },
124 onError: (e) { print("client ERROR $e"); },
125 onDone: () {assert(closedEventReceived);});
126 });
127
128 {
129 var completer = new Completer();
130 var socket = await RawSocket.connect("127.0.0.1", server.port);
131 int bytesRead = 0;
132 int bytesWritten = 0;
133 bool closedEventReceived = false;
134 List<int> data = createTestData();
135
136 socket.listen((event) {
137 switch (event) {
138 case RawSocketEvent.READ:
139 assert(socket.available() > 0);
140 print("server READ event: ${bytesRead} read");
141 var buffer = socket.read();
142 print("server READ event: read ${buffer.length} more bytes");
143 data.setRange(bytesRead, bytesRead + buffer.length, buffer);
144 bytesRead += buffer.length;
145 if (bytesRead == messageSize) {
146 print("server READ event: done reading");
147 socket.close();
148 }
149 break;
150 case RawSocketEvent.WRITE:
151 assert(bytesRead == 0);
152 assert(!socket.writeEventsEnabled);
153 bytesWritten += socket.write(
154 data, bytesWritten, data.length - bytesWritten);
155 print("server WRITE event: ${bytesWritten} written");
156 if (bytesWritten < data.length) {
157 socket.writeEventsEnabled = true;
158 } else {
159 print("server WRITE event: done writing");
160 data = new List<int>(messageSize);
161 }
162 break;
163 case RawSocketEvent.READ_CLOSED:
164 print("server READ_CLOSED event");
165 verifyTestData(data);
166 socket.close();
167 break;
168 case RawSocketEvent.CLOSED:
169 assert(!closedEventReceived);
170 print("server CLOSED event");
171 closedEventReceived = true;
172 break;
173 default: throw "Unexpected event $event";
174 }
175 },
176 onError: (e) { print("server ERROR $e"); },
177 onDone: () {
178 assert(closedEventReceived);
179 completer.complete(null);
180 });
181
182 return completer.future;
183 }
184 }
185
186 testSimpleReadWriteShutdown({bool dropReads}) async {
49 // This test creates a server and a client connects. The client then 187 // This test creates a server and a client connects. The client then
50 // writes and the server echos. When the server has finished its 188 // writes and the server echos. When the server has finished its
51 // echo it half-closes. When the client gets the close event is 189 // echo it half-closes. When the client gets the close event is
52 // closes fully. 190 // closes fully.
53 191
54 const messageSize = 1000; 192 const messageSize = 1000;
55 int serverReadCount = 0; 193 int serverReadCount = 0;
56 int clientReadCount = 0; 194 int clientReadCount = 0;
57 195
58 List<int> createTestData() { 196 List<int> createTestData() {
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 return completer.future; 330 return completer.future;
193 } 331 }
194 } 332 }
195 333
196 Future testGoogleUrl(SecurityContext context, String outcome) async { 334 Future testGoogleUrl(SecurityContext context, String outcome) async {
197 var client = new HttpClient(context: context); 335 var client = new HttpClient(context: context);
198 // We need to use an external server that is backed by a 336 // We need to use an external server that is backed by a
199 // built-in root certificate authority. 337 // built-in root certificate authority.
200 try { 338 try {
201 // First, check if the lookup works. 339 // First, check if the lookup works.
202 await InternetAddress.lookup('www.google.com'); 340 var address = await InternetAddress.lookup('www.google.com');
203 var request = await client.getUrl(Uri.parse('http://www.google.com')); 341 print(address);
342 var request = await client.getUrl(Uri.parse('http://www.google.com/'));
204 request.followRedirects = false; 343 request.followRedirects = false;
205 var response = await request.close(); 344 var response = await request.close();
206 assert('pass' == outcome); 345 assert('pass' == outcome);
207 try { await response.drain(); } catch (e) { 346 try { await response.drain(); } catch (e) {
208 print('drain failed: $e'); 347 print('drain failed: $e');
209 } 348 }
210 } catch (e) { 349 } catch (e) {
211 // Lookup failed or connection failed. Don't report a failure. 350 // Lookup failed or connection failed. Don't report a failure.
212 print("SocketException: $e"); 351 print("SocketException: $e");
213 } finally { 352 } finally {
214 client.close(); 353 client.close();
215 } 354 }
216 } 355 }
217 356
218 main() async { 357 main() async {
219 print("Hello, Fuchsia!"); 358 print("Hello, Fuchsia!");
220 359
221 print("testAddressParse"); 360 print("testAddressParse");
222 await testAddressParse(); 361 await testAddressParse();
223 print("testAddressParse done"); 362 print("testAddressParse done");
224 363
225 print("testSimpleBind"); 364 print("testSimpleBind");
226 await testSimpleBind(); 365 await testSimpleBind();
227 print("testSimpleBind done"); 366 print("testSimpleBind done");
228 367
229 print("testSimpleConnect"); 368 print("testSimpleConnect");
230 await testSimpleConnect(); 369 await testSimpleConnect();
231 print("testSimpleConnect done"); 370 print("testSimpleConnect done");
232 371
372 print("testSimpleReadWriteClose");
373 await testSimpleReadWriteClose();
374 print("testSimpleReadWriteClose done");
375
233 // TODO(US-81): Enable. 376 // TODO(US-81): Enable.
234 // print("testSimpleReadWrite"); 377 // print("testSimpleReadWriteShutdown");
235 // await testSimpleReadWrite(dropReads: false); 378 // await testSimpleReadWriteShutdown(dropReads: false);
236 // print("testSimpleReadWrite done"); 379 // print("testSimpleReadWriteShutdown done");
237 380
238 print("testGoogleUrl"); 381 print("testGoogleUrl");
239 await testGoogleUrl(null, 'pass'); 382 await testGoogleUrl(null, 'pass');
240 print("testGoogleUrl done"); 383 print("testGoogleUrl done");
241 384
242 print("Goodbyte, Fuchsia!"); 385 print("Goodbyte, Fuchsia!");
243 } 386 }
OLDNEW
« no previous file with comments | « runtime/bin/socket_fuchsia.cc ('k') | runtime/vm/os_fuchsia.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698