Migrated http_cross_process_test from SDK. (#58)

diff --git a/test/http_cross_process_test.dart b/test/http_cross_process_test.dart
new file mode 100644
index 0000000..5c2a928
--- /dev/null
+++ b/test/http_cross_process_test.dart
@@ -0,0 +1,81 @@
+// Copyright (c) 2018, 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'
+    show Directory, File, InternetAddress, Platform, Process, ProcessResult;
+
+import 'package:http_io/http_io.dart';
+import 'package:test/test.dart';
+
+const int NUM_SERVERS = 10;
+
+void main([List<String> args]) {
+  if (args == null || args.isEmpty) {
+    test('httpCrossProcess', runTest);
+  } else if (args[0] == '--client') {
+    int port = int.parse(args[1]);
+    runClient(port);
+  } else {
+    throw 'Unknown arguments to http_cross_process_test.dart';
+  }
+}
+
+void runTest() {
+  for (int i = 0; i < NUM_SERVERS; ++i) {
+    makeServer().then((server) {
+      runClientProcess(server.port).then((_) => server.close());
+    });
+  }
+}
+
+Future<HttpServer> makeServer() {
+  return HttpServer.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((server) {
+    server.listen((request) {
+      request.pipe(request.response);
+    });
+    return server;
+  });
+}
+
+Future<Process> runClientProcess(int port) {
+  var script =
+      "${Directory.current.path}/test/http_client_stays_alive_test.dart";
+  if (!(new File(script)).existsSync()) {
+    // If we can't find the file relative to the cwd, then look relative to
+    // Platform.script.
+    script = Platform.script
+        .resolve('http_client_stays_alive_test.dart')
+        .toFilePath();
+  }
+
+  return Process
+      .run(
+          Platform.executable,
+          []
+            ..addAll(Platform.executableArguments)
+            ..add(script)
+            ..add('--client')
+            ..add(port.toString()))
+      .then((ProcessResult result) {
+    if (result.exitCode != 0 || !result.stdout.contains('SUCCESS')) {
+      print("Client failed, exit code ${result.exitCode}");
+      print("  stdout:");
+      print(result.stdout);
+      print("  stderr:");
+      print(result.stderr);
+      fail('Client subprocess exit code: ${result.exitCode}');
+    }
+  });
+}
+
+void runClient(int port) {
+  var client = new HttpClient();
+  client
+      .get('127.0.0.1', port, "/")
+      .then((request) => request.close())
+      .then((response) => response.drain())
+      .then((_) => client.close())
+      .then((_) => print('SUCCESS'));
+}