Skip to content

Commit 86b636f

Browse files
authored
Fixes for socket tests (#2074)
A bunch of fixes to various networking tests which were depending on a specific ordering/timing of networking events. Changes to the networking stack done in https://dart-review.googlesource.com/c/sdk/+/307043 are making these fragile tests to fail on Windows.
1 parent db4c511 commit 86b636f

12 files changed

+116
-120
lines changed

LibTest/io/HttpClientRequest/writeAll_A03_t01.dart

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,18 @@
1616
/// @description Checks that any errors generated by this call can be caught
1717
/// @author [email protected]
1818
19+
import "dart:convert";
1920
import "dart:io";
2021
import "../../../Utils/expect.dart";
2122

23+
class MarkerException {
24+
const MarkerException();
25+
}
26+
2227
class C {
2328
String toString() {
2429
if (1 + 1 == 2) {
25-
throw new Exception("An exception");
30+
throw const MarkerException();
2631
}
2732
return "This is C";
2833
}
@@ -32,24 +37,30 @@ var localhost = InternetAddress.loopbackIPv4.address;
3237

3338
test(String method) async {
3439
asyncStart();
35-
Iterable objects = [1, "2", 3.14, new C(), null];
40+
Iterable objects = [1, "2", 3.25, new C(), null];
3641
HttpServer server = await HttpServer.bind(localhost, 0);
3742
server.listen((HttpRequest request) {
43+
request.response.write('OK');
44+
request.response.close();
3845
});
3946

4047
HttpClient client = new HttpClient();
41-
client.open(method, localhost, server.port, "")
42-
.then((HttpClientRequest request) {
43-
request.contentLength = 6;
48+
HttpClientRequest request =
49+
await client.open(method, localhost, server.port, "");
50+
Expect.throws(() {
51+
objects.elementAt(3).toString();
52+
}, (e) => identical(e, const MarkerException()));
53+
// We expect the first three objects to be written successfully into the
54+
// request. We will get an exception if contentLength does not match
55+
// amount of bytes written.
56+
request.contentLength = utf8.encode(objects.take(3).join()).length;
57+
Expect.throws(() {
4458
request.writeAll(objects);
45-
return request.close();
46-
}).then((HttpClientResponse response) {
47-
Expect.fail("Error expected");
48-
}, onError: (_) {
49-
client.close(force: true);
50-
server.close();
51-
asyncEnd();
52-
});
59+
}, (e) => identical(e, const MarkerException()));
60+
await request.close();
61+
client.close(force: true);
62+
server.close();
63+
asyncEnd();
5364
}
5465

5566
main() {

LibTest/io/HttpServer/connectionsInfo_A01_t01.dart

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,20 @@ test() async {
4141
});
4242

4343
HttpClient client = new HttpClient();
44-
Uri uri = Uri
45-
.parse("http://${InternetAddress.loopbackIPv4.address}:${server.port}");
46-
client.getUrl(uri).then((HttpClientRequest request) => request.close())
44+
client.maxConnectionsPerHost = 1;
45+
Uri uri = Uri.parse(
46+
"http://${InternetAddress.loopbackIPv4.address}:${server.port}");
47+
client
48+
.getUrl(uri)
49+
.then((HttpClientRequest request) => request.close())
4750
.then((HttpClientResponse response) {
48-
response.cast<List<int>>().transform(utf8.decoder).listen((content) {});
51+
response.cast<List<int>>().transform(utf8.decoder).listen((content) {});
4952
});
50-
client.getUrl(uri).then((HttpClientRequest request) => request.close())
53+
client
54+
.getUrl(uri)
55+
.then((HttpClientRequest request) => request.close())
5156
.then((HttpClientResponse response) {
52-
response.cast<List<int>>().transform(utf8.decoder).listen((content) {});
57+
response.cast<List<int>>().transform(utf8.decoder).listen((content) {});
5358
});
5459
}
5560

LibTest/io/WebSocket/addStream_A01_t02.dart

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,13 @@ import "../../../Utils/expect.dart";
1616
import "../http_utils.dart";
1717

1818
main() {
19-
asyncTest<HttpServer>(
20-
(HttpServer? server) async {
21-
WebSocket ws = await WebSocket.connect("ws://${server?.address.address}:${server?.port}/");
22-
await ws.addStream(new Stream.fromIterable(["Hello", ",", "World"]));
23-
ws.close();
24-
},
25-
setup: () => spawnWebSocketServer(
26-
(WebSocket ws) => AsyncExpect.data(["Hello", ",", "World"], ws)
27-
),
28-
cleanup: (HttpServer? server) => server?.close()
29-
);
19+
asyncTest<HttpServer>((HttpServer? server) async {
20+
WebSocket ws = await WebSocket.connect(
21+
"ws://${server?.address.address}:${server?.port}/");
22+
await ws.addStream(new Stream.fromIterable(["Hello", ",", "World"]));
23+
await ws.close();
24+
},
25+
setup: () => spawnWebSocketServer(
26+
(WebSocket ws) => AsyncExpect.data(["Hello", ",", "World"], ws)),
27+
cleanup: (HttpServer? server) => server?.close());
3028
}

LibTest/io/WebSocket/addStream_A01_t04.dart

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,20 @@ import "../../../Utils/expect.dart";
1717
import "../http_utils.dart";
1818

1919
const Utf8Codec CODEC = const Utf8Codec();
20-
List<List<int>> BYTES = [CODEC.encode("Hello"), CODEC.encode(","), CODEC.encode("World")];
20+
List<List<int>> BYTES = [
21+
CODEC.encode("Hello"),
22+
CODEC.encode(","),
23+
CODEC.encode("World")
24+
];
2125

2226
main() {
23-
asyncTest<HttpServer>(
24-
(HttpServer? server) async {
25-
WebSocket ws = await WebSocket.connect("ws://${server?.address.address}:${server?.port}/");
26-
await ws.addStream(new Stream.fromIterable(BYTES));
27-
ws.close();
28-
},
29-
setup: () => spawnWebSocketServer(
30-
(WebSocket ws) => AsyncExpect.data(BYTES, ws)
31-
),
32-
cleanup: (HttpServer? server) => server?.close()
33-
);
27+
asyncTest<HttpServer>((HttpServer? server) async {
28+
WebSocket ws = await WebSocket.connect(
29+
"ws://${server?.address.address}:${server?.port}/");
30+
await ws.addStream(new Stream.fromIterable(BYTES));
31+
await ws.close();
32+
},
33+
setup: () =>
34+
spawnWebSocketServer((WebSocket ws) => AsyncExpect.data(BYTES, ws)),
35+
cleanup: (HttpServer? server) => server?.close());
3436
}

LibTest/io/WebSocket/addUtf8Text_A01_t02.dart

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,13 @@ import "../http_utils.dart";
1919
const Utf8Codec utf8 = const Utf8Codec();
2020

2121
main() {
22-
asyncTest<HttpServer>(
23-
(HttpServer? server) async {
24-
WebSocket ws = await WebSocket.connect("ws://${server?.address.address}:${server?.port}/");
25-
ws.addUtf8Text(utf8.encode("Hello"));
26-
ws.close();
27-
},
28-
setup: () => spawnWebSocketServer(
29-
(WebSocket ws) => AsyncExpect.data(["Hello"], ws)
30-
),
31-
cleanup: (HttpServer? server) => server?.close()
32-
);
22+
asyncTest<HttpServer>((HttpServer? server) async {
23+
WebSocket ws = await WebSocket.connect(
24+
"ws://${server?.address.address}:${server?.port}/");
25+
ws.addUtf8Text(utf8.encode("Hello"));
26+
await ws.close();
27+
},
28+
setup: () => spawnWebSocketServer(
29+
(WebSocket ws) => AsyncExpect.data(["Hello"], ws)),
30+
cleanup: (HttpServer? server) => server?.close());
3331
}

LibTest/io/WebSocket/addUtf8Text_A01_t03.dart

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,19 @@ import "../http_utils.dart";
1919
const Utf8Codec utf8 = const Utf8Codec();
2020

2121
main() {
22-
asyncTest<HttpServer>(
23-
(HttpServer? server) async {
24-
WebSocket ws = await WebSocket.connect("ws://${server?.address.address}:${server?.port}/");
25-
await AsyncExpect.data(["Hello", "client"], ws.take(2));
26-
ws.addUtf8Text(utf8.encode("Hi"));
27-
ws.addUtf8Text(utf8.encode("server"));
28-
ws.close();
29-
},
30-
setup: () => spawnWebSocketServer(
31-
(WebSocket ws) async {
32-
ws.addUtf8Text(utf8.encode("Hello"));
33-
ws.addUtf8Text(utf8.encode("client"));
34-
await AsyncExpect.data(["Hi", "server"], ws);
35-
ws.close();
36-
}
37-
),
38-
cleanup: (HttpServer? server) => server?.close()
39-
);
22+
asyncTest<HttpServer>((HttpServer? server) async {
23+
WebSocket ws = await WebSocket.connect(
24+
"ws://${server?.address.address}:${server?.port}/");
25+
await AsyncExpect.data(["Hello", "client"], ws.take(2));
26+
ws.addUtf8Text(utf8.encode("Hi"));
27+
ws.addUtf8Text(utf8.encode("server"));
28+
await ws.close();
29+
},
30+
setup: () => spawnWebSocketServer((WebSocket ws) async {
31+
ws.addUtf8Text(utf8.encode("Hello"));
32+
ws.addUtf8Text(utf8.encode("client"));
33+
await AsyncExpect.data(["Hi", "server"], ws);
34+
await ws.close();
35+
}),
36+
cleanup: (HttpServer? server) => server?.close());
4037
}

LibTest/io/WebSocket/add_A01_t03.dart

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,13 @@ import "../../../Utils/expect.dart";
1414
import "../http_utils.dart";
1515

1616
main() {
17-
asyncTest<HttpServer>(
18-
(HttpServer? server) async {
19-
WebSocket ws = await WebSocket.connect("ws://${server?.address.address}:${server?.port}/");
20-
ws.add("Hello");
21-
ws.close();
22-
},
23-
setup: () => spawnWebSocketServer(
24-
(WebSocket ws) => AsyncExpect.data(["Hello"], ws)
25-
),
26-
cleanup: (HttpServer? server) => server?.close()
27-
);
17+
asyncTest<HttpServer>((HttpServer? server) async {
18+
WebSocket ws = await WebSocket.connect(
19+
"ws://${server?.address.address}:${server?.port}/");
20+
ws.add("Hello");
21+
await ws.close();
22+
},
23+
setup: () => spawnWebSocketServer(
24+
(WebSocket ws) => AsyncExpect.data(["Hello"], ws)),
25+
cleanup: (HttpServer? server) => server?.close());
2826
}

LibTest/io/WebSocket/add_A01_t04.dart

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,13 @@ import "../http_utils.dart";
1616
const List<int> BYTES = const [1, 2, 3];
1717

1818
main() {
19-
asyncTest<HttpServer>(
20-
(HttpServer? server) async {
21-
WebSocket ws = await WebSocket.connect("ws://${server?.address.address}:${server?.port}/");
22-
ws.add(BYTES);
23-
ws.close();
24-
},
25-
setup: () => spawnWebSocketServer(
26-
(WebSocket ws) => AsyncExpect.data([BYTES], ws)
27-
),
28-
cleanup: (HttpServer? server) => server?.close()
29-
);
19+
asyncTest<HttpServer>((HttpServer? server) async {
20+
WebSocket ws = await WebSocket.connect(
21+
"ws://${server?.address.address}:${server?.port}/");
22+
ws.add(BYTES);
23+
await ws.close();
24+
},
25+
setup: () =>
26+
spawnWebSocketServer((WebSocket ws) => AsyncExpect.data([BYTES], ws)),
27+
cleanup: (HttpServer? server) => server?.close());
3028
}

LibTest/io/WebSocket/closeCode_A01_t01.dart

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,17 @@ import "../../../Utils/expect.dart";
1515
main() {
1616
HttpServer.bind("127.0.0.1", 0).then((server) {
1717
server.listen((request) {
18-
WebSocketTransformer
19-
.upgrade(request)
20-
.then((websocket) {
18+
WebSocketTransformer.upgrade(request).then((websocket) {
2119
websocket.close();
2220
});
2321
});
2422

2523
var webs = WebSocket.connect("ws://127.0.0.1:${server.port}/");
2624
webs.then((client) async {
2725
Expect.isNull(client.closeCode);
26+
await client.listen((_) {}).asFuture();
27+
Expect.equals(WebSocketStatus.noStatusReceived, client.closeCode);
2828
await server.close();
29-
client.close().then((_) {
30-
Expect.equals(WebSocketStatus.noStatusReceived, client.closeCode);
31-
});
3229
});
3330
});
3431
}

LibTest/io/WebSocket/closeReason_A01_t02.dart

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,17 @@ import "../../../Utils/expect.dart";
1616
main() {
1717
HttpServer.bind("127.0.0.1", 0).then((server) {
1818
server.listen((request) {
19-
WebSocketTransformer
20-
.upgrade(request)
21-
.then((websocket) {
19+
WebSocketTransformer.upgrade(request).then((websocket) {
2220
websocket.close(WebSocketStatus.normalClosure, "closed");
2321
});
2422
});
2523

2624
var webs = WebSocket.connect("ws://127.0.0.1:${server.port}/");
2725
webs.then((client) async {
2826
Expect.isNull(client.closeReason);
27+
await client.listen((_) {}).asFuture();
28+
Expect.equals("closed", client.closeReason);
2929
await server.close();
30-
client.close().then((_) {
31-
Expect.equals("closed", client.closeReason);
32-
});
3330
});
3431
});
3532
}

0 commit comments

Comments
 (0)