Index: tests/standalone/io/test_utils.dart |
diff --git a/tests/standalone/io/test_utils.dart b/tests/standalone/io/test_utils.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2dbaf977e4033d0d8fb66c40086e49f6d357bc2f |
--- /dev/null |
+++ b/tests/standalone/io/test_utils.dart |
@@ -0,0 +1,28 @@ |
+// Copyright (c) 2016, 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. |
+ |
+import 'dart:async'; |
+import 'dart:io'; |
+ |
+Future<int> freeIPv4AndIPv6Port() async { |
+ var socket = |
+ await ServerSocket.bind(InternetAddress.ANY_IP_V6, 0, v6Only: false); |
+ int port = socket.port; |
+ await socket.close(); |
+ return port; |
+} |
+ |
+Future retry(Future fun(), {int maxCount: 10}) async { |
+ for (int i = 0; i < maxCount; i++) { |
+ try { |
+ // If there is no exception this will simply return, otherwise we keep |
+ // trying. |
+ return await fun(); |
+ } catch (_) {} |
+ print("Failed to execute test closure in attempt $i " |
+ "(${maxCount - i} retries left)."); |
+ } |
+ return await fun(); |
+} |
+ |