blob: dda9ebdc7610ef0a28c84e74cd5de63a69353e5f [file] [log] [blame]
// Copyright (c) 2021, 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';
import 'package:dds/dds.dart';
import 'package:dds/src/dds_impl.dart';
import 'package:test/test.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
import 'common/fakes.dart';
Future<HttpServer> startHttpServer() async {
final server = await HttpServer.bind(InternetAddress.loopbackIPv4, 0);
server.listen((event) async {
event.response.add([1, 2, 3]);
await event.response.flush();
await server.close(force: true);
});
return server;
}
void main() {
webSocketBuilder = (Uri _) => FakeWebSocketChannel();
peerBuilder = (WebSocketChannel _, dynamic __) async => FakePeer();
test("Handles 'Connection closed before full header was received'", () async {
final httpServer = await startHttpServer();
final dds = await DartDevelopmentService.startDartDevelopmentService(
Uri(scheme: 'http', host: httpServer.address.host, port: httpServer.port),
enableAuthCodes: false,
);
final uri = dds.uri!;
try {
final client = HttpClient();
final request = await client.get(uri.host, uri.port, 'getVM');
await request.close();
fail('Unexpected successful response');
} catch (e) {
expect(
e.toString(),
contains(
'Connection closed before full header was received',
),
);
} finally {
await dds.shutdown();
await dds.done;
}
});
}