Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(87)

Side by Side Diff: test/web_socket_test.dart

Issue 1646583003: Add a WebSocketChannel class. (Closed) Base URL: git@github.com:dart-lang/http_parser@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « pubspec.yaml ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 @TestOn('vm') 5 @TestOn('vm')
6 6
7 import 'dart:io'; 7 import 'dart:io';
8 8
9 import 'package:http_parser/http_parser.dart'; 9 import 'package:http_parser/http_parser.dart';
10 import 'package:stream_channel/stream_channel.dart';
10 import 'package:test/test.dart'; 11 import 'package:test/test.dart';
11 12
12 void main() { 13 void main() {
13 test("a client can communicate with a WebSocket server", () { 14 group("using WebSocketChannel", () {
14 return HttpServer.bind("localhost", 0).then((server) { 15 test("a client can communicate with a WebSocket server", () async {
16 var server = await HttpServer.bind("localhost", 0);
15 server.transform(new WebSocketTransformer()).listen((webSocket) { 17 server.transform(new WebSocketTransformer()).listen((webSocket) {
16 webSocket.add("hello!"); 18 webSocket.add("hello!");
17 webSocket.listen((request) { 19 webSocket.listen((request) {
18 expect(request, equals("ping")); 20 expect(request, equals("ping"));
19 webSocket.add("pong"); 21 webSocket.add("pong");
20 webSocket.close(); 22 webSocket.close();
21 }); 23 });
22 }); 24 });
23 25
24 var client = new HttpClient(); 26 var client = new HttpClient();
25 return client 27 var request = await client.openUrl(
26 .openUrl("GET", Uri.parse("http://localhost:${server.port}")) 28 "GET", Uri.parse("http://localhost:${server.port}"));
27 .then((request) { 29 request.headers
28 request.headers 30 ..set("Connection", "Upgrade")
29 ..set("Connection", "Upgrade") 31 ..set("Upgrade", "websocket")
30 ..set("Upgrade", "websocket") 32 ..set("Sec-WebSocket-Key", "x3JJHMbDL1EzLkh9GBhXDw==")
31 ..set("Sec-WebSocket-Key", "x3JJHMbDL1EzLkh9GBhXDw==") 33 ..set("Sec-WebSocket-Version", "13");
32 ..set("Sec-WebSocket-Version", "13");
33 return request.close();
34 }).then((response) => response.detachSocket()).then((socket) {
35 var webSocket = new CompatibleWebSocket(socket, serverSide: false);
36 34
37 var n = 0; 35 var response = await request.close();
38 return webSocket.listen((message) { 36 var socket = await response.detachSocket();
39 if (n == 0) { 37 var innerChannel = new StreamChannel(socket, socket);
40 expect(message, equals("hello!")); 38 var webSocket = new WebSocketChannel(innerChannel, serverSide: false);
41 webSocket.add("ping"); 39
42 } else if (n == 1) { 40 var n = 0;
43 expect(message, equals("pong")); 41 await webSocket.stream.listen((message) {
44 webSocket.close(); 42 if (n == 0) {
45 server.close(); 43 expect(message, equals("hello!"));
46 } else { 44 webSocket.sink.add("ping");
47 fail("Only expected two messages."); 45 } else if (n == 1) {
48 } 46 expect(message, equals("pong"));
49 n++; 47 webSocket.sink.close();
50 }).asFuture(); 48 server.close();
51 }); 49 } else {
50 fail("Only expected two messages.");
51 }
52 n++;
53 }).asFuture();
52 }); 54 });
53 });
54 55
55 test("a server can communicate with a WebSocket client", () { 56 test("a server can communicate with a WebSocket client", () async {
56 return HttpServer.bind("localhost", 0).then((server) { 57 var server = await HttpServer.bind("localhost", 0);
57 server.listen((request) { 58 server.listen((request) async {
58 var response = request.response; 59 var response = request.response;
59 response.statusCode = 101; 60 response.statusCode = 101;
60 response.headers 61 response.headers
61 ..set("Connection", "Upgrade") 62 ..set("Connection", "Upgrade")
62 ..set("Upgrade", "websocket") 63 ..set("Upgrade", "websocket")
63 ..set("Sec-WebSocket-Accept", CompatibleWebSocket 64 ..set("Sec-WebSocket-Accept", CompatibleWebSocket
64 .signKey(request.headers.value('Sec-WebSocket-Key'))); 65 .signKey(request.headers.value('Sec-WebSocket-Key')));
65 response.contentLength = 0; 66 response.contentLength = 0;
66 response.detachSocket().then((socket) { 67
67 var webSocket = new CompatibleWebSocket(socket); 68 var socket = await response.detachSocket();
69 var innerChannel = new StreamChannel(socket, socket);
70 var webSocket = new WebSocketChannel(innerChannel);
71 webSocket.sink.add("hello!");
72
73 var message = await webSocket.stream.first;
74 expect(message, equals("ping"));
75 webSocket.sink.add("pong");
76 webSocket.sink.close();
77 });
78
79 var webSocket = await WebSocket.connect('ws://localhost:${server.port}');
80 var n = 0;
81 await webSocket.listen((message) {
82 if (n == 0) {
83 expect(message, equals("hello!"));
84 webSocket.add("ping");
85 } else if (n == 1) {
86 expect(message, equals("pong"));
87 webSocket.close();
88 server.close();
89 } else {
90 fail("Only expected two messages.");
91 }
92 n++;
93 }).asFuture();
94 });
95 });
96
97 group("using CompatibleWebSocket", () {
98 test("a client can communicate with a WebSocket server", () {
99 return HttpServer.bind("localhost", 0).then((server) {
100 server.transform(new WebSocketTransformer()).listen((webSocket) {
68 webSocket.add("hello!"); 101 webSocket.add("hello!");
69 webSocket.first.then((request) { 102 webSocket.listen((request) {
70 expect(request, equals("ping")); 103 expect(request, equals("ping"));
71 webSocket.add("pong"); 104 webSocket.add("pong");
72 webSocket.close(); 105 webSocket.close();
73 }); 106 });
74 }); 107 });
108
109 var client = new HttpClient();
110 return client
111 .openUrl("GET", Uri.parse("http://localhost:${server.port}"))
112 .then((request) {
113 request.headers
114 ..set("Connection", "Upgrade")
115 ..set("Upgrade", "websocket")
116 ..set("Sec-WebSocket-Key", "x3JJHMbDL1EzLkh9GBhXDw==")
117 ..set("Sec-WebSocket-Version", "13");
118 return request.close();
119 }).then((response) => response.detachSocket()).then((socket) {
120 var webSocket = new CompatibleWebSocket(socket, serverSide: false);
121
122 var n = 0;
123 return webSocket.listen((message) {
124 if (n == 0) {
125 expect(message, equals("hello!"));
126 webSocket.add("ping");
127 } else if (n == 1) {
128 expect(message, equals("pong"));
129 webSocket.close();
130 server.close();
131 } else {
132 fail("Only expected two messages.");
133 }
134 n++;
135 }).asFuture();
136 });
75 }); 137 });
138 });
76 139
77 return WebSocket 140 test("a server can communicate with a WebSocket client", () {
78 .connect('ws://localhost:${server.port}') 141 return HttpServer.bind("localhost", 0).then((server) {
79 .then((webSocket) { 142 server.listen((request) {
80 var n = 0; 143 var response = request.response;
81 return webSocket.listen((message) { 144 response.statusCode = 101;
82 if (n == 0) { 145 response.headers
83 expect(message, equals("hello!")); 146 ..set("Connection", "Upgrade")
84 webSocket.add("ping"); 147 ..set("Upgrade", "websocket")
85 } else if (n == 1) { 148 ..set("Sec-WebSocket-Accept", CompatibleWebSocket
86 expect(message, equals("pong")); 149 .signKey(request.headers.value('Sec-WebSocket-Key')));
87 webSocket.close(); 150 response.contentLength = 0;
88 server.close(); 151 response.detachSocket().then((socket) {
89 } else { 152 var webSocket = new CompatibleWebSocket(socket);
90 fail("Only expected two messages."); 153 webSocket.add("hello!");
91 } 154 webSocket.first.then((request) {
92 n++; 155 expect(request, equals("ping"));
93 }).asFuture(); 156 webSocket.add("pong");
157 webSocket.close();
158 });
159 });
160 });
161
162 return WebSocket
163 .connect('ws://localhost:${server.port}')
164 .then((webSocket) {
165 var n = 0;
166 return webSocket.listen((message) {
167 if (n == 0) {
168 expect(message, equals("hello!"));
169 webSocket.add("ping");
170 } else if (n == 1) {
171 expect(message, equals("pong"));
172 webSocket.close();
173 server.close();
174 } else {
175 fail("Only expected two messages.");
176 }
177 n++;
178 }).asFuture();
179 });
94 }); 180 });
95 }); 181 });
96 }); 182 });
97 } 183 }
OLDNEW
« no previous file with comments | « pubspec.yaml ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698