Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | |
| 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. | |
| 4 // | |
| 5 // VMOptions= | |
| 6 // VMOptions=--short_socket_read | |
| 7 // VMOptions=--short_socket_write | |
| 8 // VMOptions=--short_socket_read --short_socket_write | |
| 9 | |
| 10 import "dart:async"; | |
| 11 import "dart:io"; | |
| 12 | |
| 13 import "package:async_helper/async_helper.dart"; | |
| 14 import "package:expect/expect.dart"; | |
| 15 | |
| 16 Future throws(Function f, Function check) async { | |
| 17 try { | |
| 18 await f(); | |
| 19 Expect.fail('Did not throw'); | |
| 20 } catch (e) { | |
| 21 if (check != null) { | |
| 22 if (!check(e)) { | |
| 23 Expect.fail('Unexpected: $e'); | |
| 24 } | |
| 25 } | |
| 26 } | |
| 27 } | |
| 28 | |
| 29 Future testArgumentsRawSocket() async { | |
| 30 asyncStart(); | |
| 31 var server = await ServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0); | |
| 32 server.listen((_) { throw 'Connection unexpected'; }, | |
| 33 onDone: () => asyncEnd()); | |
| 34 | |
| 35 asyncStart(); | |
| 36 // Illegal type for sourceAddress. | |
| 37 for (var sourceAddress in ['www.google.com', 'abc']) { | |
| 38 await throws(() => RawSocket.connect('127.0.0.1', | |
| 39 server.port, | |
| 40 sourceAddress: sourceAddress), | |
| 41 (e) => e is ArgumentError); | |
| 42 } | |
| 43 // Unsupported local address. | |
| 44 for (var sourceAddress in ['8.8.8.8', new InternetAddress('8.8.8.8')]) { | |
| 45 await throws(() => RawSocket.connect('127.0.0.1', | |
| 46 server.port, | |
| 47 sourceAddress: sourceAddress), | |
| 48 (e) => e is SocketException); | |
| 49 } | |
| 50 // Address family mismatch. | |
| 51 for (var sourceAddress in ['::1', InternetAddress.LOOPBACK_IP_V6]) { | |
| 52 await throws(() => RawSocket.connect('127.0.0.1', | |
| 53 server.port, | |
| 54 sourceAddress: sourceAddress), | |
| 55 (e) => e is SocketException); | |
| 56 } | |
| 57 asyncEnd(); | |
| 58 server.close(); | |
| 59 } | |
| 60 | |
| 61 Future testArgumentsSocket() async { | |
| 62 asyncStart(); | |
| 63 var server = await ServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0); | |
| 64 server.listen((_) { throw 'Connection unexpected'; }, | |
| 65 onDone: () => asyncEnd()); | |
| 66 | |
| 67 asyncStart(); | |
| 68 // Illegal type for sourceAddress. | |
| 69 for (var sourceAddress in ['www.google.com', 'abc']) { | |
| 70 await throws(() => Socket.connect('127.0.0.1', | |
| 71 server.port, | |
| 72 sourceAddress: sourceAddress), | |
| 73 (e) => e is ArgumentError); | |
| 74 } | |
| 75 // Unsupported local address. | |
| 76 for (var sourceAddress in ['8.8.8.8', new InternetAddress('8.8.8.8')]) { | |
| 77 await throws(() => Socket.connect('127.0.0.1', | |
| 78 server.port, | |
| 79 sourceAddress: sourceAddress), | |
| 80 (e) => e is SocketException); | |
| 81 } | |
| 82 // Address family mismatch. | |
| 83 for (var sourceAddress in ['::1', InternetAddress.LOOPBACK_IP_V6]) { | |
| 84 await throws(() => Socket.connect('127.0.0.1', | |
| 85 server.port, | |
| 86 sourceAddress: sourceAddress), | |
| 87 (e) => e is SocketException); | |
| 88 } | |
| 89 asyncEnd(); | |
| 90 server.close(); | |
| 91 } | |
|
kustermann
2015/02/10 10:06:54
Since there is no difference at all between these
Søren Gjesse
2015/02/10 11:13:33
Good point. Done.
| |
| 92 | |
| 93 Future testConnectRawSocket() async { | |
| 94 asyncStart(); | |
| 95 var server = await ServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0); | |
| 96 var port = server.port; | |
| 97 server.listen((s) { | |
| 98 s.destroy(); | |
|
kustermann
2015/02/10 10:06:54
Maybe have a counter here, to make sure it actuall
Søren Gjesse
2015/02/10 11:13:33
Added more asyncStart() and asyncEnd() to do the c
| |
| 99 }, onDone: () => asyncEnd()); | |
| 100 | |
| 101 asyncStart(); | |
| 102 for (var sourceAddress in [InternetAddress.LOOPBACK_IP_V4, | |
| 103 InternetAddress.ANY_IP_V4, | |
| 104 '127.0.0.1', | |
| 105 '0.0.0.0']) { | |
| 106 RawSocket raw; | |
| 107 raw = await RawSocket.connect(InternetAddress.LOOPBACK_IP_V4, | |
| 108 port, | |
| 109 sourceAddress: sourceAddress); | |
| 110 raw.close(); | |
| 111 } | |
| 112 server.close(); | |
| 113 asyncEnd(); | |
| 114 } | |
| 115 | |
| 116 Future testConnectSocket() async { | |
| 117 asyncStart(); | |
| 118 var server = await ServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0); | |
| 119 var port = server.port; | |
| 120 server.listen((s) { | |
| 121 s.destroy(); | |
| 122 }, onDone: () => asyncEnd()); | |
| 123 | |
| 124 asyncStart(); | |
| 125 for (var sourceAddress in [InternetAddress.LOOPBACK_IP_V4, | |
| 126 InternetAddress.ANY_IP_V4, | |
| 127 '127.0.0.1', | |
| 128 '0.0.0.0']) { | |
| 129 Socket s; | |
| 130 s = await Socket.connect(InternetAddress.LOOPBACK_IP_V4, | |
| 131 port, | |
| 132 sourceAddress: sourceAddress); | |
| 133 s.destroy(); | |
| 134 } | |
| 135 server.close(); | |
| 136 asyncEnd(); | |
| 137 } | |
| 138 | |
| 139 Future testConnectRawSocketIPv6() async { | |
| 140 asyncStart(); | |
| 141 var server = await ServerSocket.bind(InternetAddress.ANY_IP_V6, 0); | |
| 142 var port = server.port; | |
| 143 server.listen((s) { | |
| 144 s.destroy(); | |
| 145 }, onDone: () => asyncEnd()); | |
| 146 | |
| 147 asyncStart(); | |
| 148 for (var sourceAddress in [InternetAddress.LOOPBACK_IP_V4, | |
| 149 InternetAddress.ANY_IP_V4, | |
| 150 '127.0.0.1', | |
| 151 '0.0.0.0']) { | |
| 152 RawSocket raw; | |
| 153 raw = await RawSocket.connect(InternetAddress.LOOPBACK_IP_V4, | |
| 154 port, | |
| 155 sourceAddress: sourceAddress); | |
| 156 raw.close(); | |
| 157 } | |
|
kustermann
2015/02/10 10:06:54
This is loop is an exact duplicate of the one in t
Søren Gjesse
2015/02/10 11:13:33
Created a parameterized test to cover the last 4 t
| |
| 158 for (var sourceAddress in [InternetAddress.LOOPBACK_IP_V6, | |
| 159 InternetAddress.ANY_IP_V6, | |
| 160 '::1', | |
| 161 '::']) { | |
| 162 RawSocket raw; | |
| 163 raw = await RawSocket.connect(InternetAddress.LOOPBACK_IP_V6, | |
| 164 port, | |
| 165 sourceAddress: sourceAddress); | |
| 166 raw.close(); | |
| 167 } | |
| 168 server.close(); | |
| 169 asyncEnd(); | |
| 170 } | |
| 171 | |
| 172 Future testConnectSocketIPv6() async { | |
| 173 asyncStart(); | |
| 174 var server = await ServerSocket.bind(InternetAddress.ANY_IP_V6, 0); | |
| 175 var port = server.port; | |
| 176 server.listen((s) { | |
| 177 s.destroy(); | |
| 178 }, onDone: () => asyncEnd()); | |
| 179 | |
| 180 asyncStart(); | |
| 181 for (var sourceAddress in [InternetAddress.LOOPBACK_IP_V4, | |
| 182 InternetAddress.ANY_IP_V4, | |
| 183 '127.0.0.1', | |
| 184 '0.0.0.0']) { | |
| 185 Socket s; | |
| 186 s = await Socket.connect(InternetAddress.LOOPBACK_IP_V4, | |
| 187 port, | |
| 188 sourceAddress: sourceAddress); | |
| 189 s.destroy(); | |
| 190 } | |
| 191 for (var sourceAddress in [InternetAddress.LOOPBACK_IP_V6, | |
| 192 InternetAddress.ANY_IP_V6, | |
| 193 '::1', | |
| 194 '::']) { | |
| 195 Socket s; | |
| 196 s = await Socket.connect(InternetAddress.LOOPBACK_IP_V6, | |
| 197 port, | |
| 198 sourceAddress: sourceAddress); | |
| 199 s.destroy(); | |
| 200 } | |
| 201 server.close(); | |
| 202 asyncEnd(); | |
| 203 } | |
| 204 | |
| 205 main() { | |
| 206 testArgumentsRawSocket(); | |
| 207 testArgumentsSocket(); | |
| 208 testConnectRawSocket(); | |
| 209 testConnectSocket(); | |
| 210 testConnectRawSocketIPv6(); | |
| 211 testConnectSocketIPv6(); | |
| 212 } | |
| OLD | NEW |