| // Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| // Test whether localhost connection succeeds even when insecure connections |
| // are banned by default. |
| // SharedOptions=-Ddart.library.io.may_insecurely_connect_to_all_domains=false |
| |
| import 'dart:async'; |
| import 'dart:io'; |
| |
| import "package:async_helper/async_helper.dart"; |
| |
| void testDisallowedConnectionByDefault() { |
| asyncExpectThrows( |
| () async => await Socket.connect("domain.invalid", 80), |
| (e) => |
| e is SocketException && |
| e.message.contains( |
| "Insecure socket connections are disallowed by platform")); |
| } |
| |
| Future<void> testLocalhostConnection() async { |
| ServerSocket server = |
| await ServerSocket.bind(InternetAddress.loopbackIPv4, 0); |
| Socket socket; |
| try { |
| server.listen((_) {}); |
| socket = await Socket.connect(InternetAddress.loopbackIPv4, server.port); |
| } finally { |
| server.close(); |
| if (socket != null) { |
| socket.close(); |
| await socket.done; |
| socket.destroy(); |
| } |
| } |
| } |
| |
| Future<void> test() async { |
| testDisallowedConnectionByDefault(); |
| await testLocalhostConnection(); |
| } |
| |
| void main() { |
| asyncStart(); |
| test().whenComplete(() => asyncEnd()); |
| } |