blob: 3f78ba99a8d1926cf586f0ac5fbb72bdf7b59e16 [file] [log] [blame]
// Copyright (c) 2025, 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.
//
// Verify that the close code for an abnormally closed WebSocket is 1006
// (WebSocketStatus.abnormalClosure).
//
// See section 7.1.5 of RFC 6455:
// If _The WebSocket Connection is Closed_ and no Close control frame was
// received by the endpoint (such as could occur if the underlying transport
// connection is lost), _The WebSocket Connection Close Code_ is considered to
// be 1006.
import 'dart:async';
import 'dart:io';
// ignore: IMPORT_INTERNAL_LIBRARY
import "dart:_http"
show
TestingClass$_HttpRequest,
Testing$_HttpRequest,
Testing$_HttpConnection;
import "package:expect/async_helper.dart";
import 'package:expect/expect.dart';
typedef _HttpRequest = TestingClass$_HttpRequest;
void main() {
asyncStart();
HttpRequest closeSocketAfterDelay(HttpRequest request) {
Expect.type<_HttpRequest>(request);
Timer(Duration(seconds: 1), () {
(request as _HttpRequest).test$_httpConnection.test$_socket.destroy();
});
return request;
}
HttpServer.bind('localhost', 0).then((server) {
server.map(closeSocketAfterDelay).transform(WebSocketTransformer()).drain();
WebSocket.connect('ws://localhost:${server.port}').then((ws) {
ws.drain().then((_) {
Expect.equals(ws.closeCode, WebSocketStatus.abnormalClosure);
server.close();
asyncEnd();
});
});
});
}