OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 import "dart:async"; | 5 import "dart:async"; |
6 import "dart:io"; | 6 import "dart:io"; |
7 import "dart:isolate"; | 7 import "dart:isolate"; |
8 | 8 |
9 import "package:expect/expect.dart"; | 9 import "package:expect/expect.dart"; |
10 | 10 |
11 InternetAddress HOST; | 11 InternetAddress HOST; |
12 const CERTIFICATE = "localhost_cert"; | 12 |
| 13 String localFile(path) => Platform.script.resolve(path).toFilePath(); |
| 14 |
| 15 SecurityContext serverContext = new SecurityContext() |
| 16 ..useCertificateChain(localFile('certificates/server_chain.pem')) |
| 17 ..usePrivateKey(localFile('certificates/server_key.pem'), |
| 18 password: 'dartdart'); |
| 19 |
| 20 SecurityContext clientContext = new SecurityContext() |
| 21 ..setTrustedCertificates(file: localFile('certificates/trusted_certs.pem')); |
13 | 22 |
14 void testListenOn() { | 23 void testListenOn() { |
15 void test(void onDone()) { | 24 void test(void onDone()) { |
16 HttpServer.bindSecure(HOST, | 25 HttpServer.bindSecure(HOST, |
17 0, | 26 0, |
18 backlog: 5, | 27 serverContext, |
19 certificateName: CERTIFICATE).then((server) { | 28 backlog: 5).then((server) { |
20 ReceivePort serverPort = new ReceivePort(); | 29 ReceivePort serverPort = new ReceivePort(); |
21 server.listen((HttpRequest request) { | 30 server.listen((HttpRequest request) { |
22 request.listen( | 31 request.listen( |
23 (_) { }, | 32 (_) { }, |
24 onDone: () { | 33 onDone: () { |
25 request.response.close(); | 34 request.response.close(); |
26 serverPort.close(); | 35 serverPort.close(); |
27 }); | 36 }); |
28 }); | 37 }); |
29 | 38 |
30 HttpClient client = new HttpClient(); | 39 HttpClient client = new HttpClient(context: clientContext); |
31 ReceivePort clientPort = new ReceivePort(); | 40 ReceivePort clientPort = new ReceivePort(); |
32 client.getUrl(Uri.parse("https://${HOST.host}:${server.port}/")) | 41 client.getUrl(Uri.parse("https://${HOST.host}:${server.port}/")) |
33 .then((HttpClientRequest request) { | 42 .then((HttpClientRequest request) { |
34 return request.close(); | 43 return request.close(); |
35 }) | 44 }) |
36 .then((HttpClientResponse response) { | 45 .then((HttpClientResponse response) { |
37 response.listen( | 46 response.listen( |
38 (_) { }, | 47 (_) { }, |
39 onDone: () { | 48 onDone: () { |
40 client.close(); | 49 client.close(); |
(...skipping 10 matching lines...) Expand all Loading... |
51 }); | 60 }); |
52 }); | 61 }); |
53 } | 62 } |
54 | 63 |
55 // Test two servers in succession. | 64 // Test two servers in succession. |
56 test(() { | 65 test(() { |
57 test(() { }); | 66 test(() { }); |
58 }); | 67 }); |
59 } | 68 } |
60 | 69 |
61 void InitializeSSL() { | |
62 var testPkcertDatabase = Platform.script.resolve('pkcert').toFilePath(); | |
63 SecureSocket.initialize(database: testPkcertDatabase, | |
64 password: 'dartdart'); | |
65 } | |
66 | |
67 void testEarlyClientClose() { | 70 void testEarlyClientClose() { |
68 HttpServer.bindSecure(HOST, | 71 HttpServer.bindSecure(HOST, |
69 0, | 72 0, |
70 certificateName: 'localhost_cert').then((server) { | 73 serverContext).then((server) { |
71 server.listen( | 74 server.listen( |
72 (request) { | 75 (request) { |
73 String name = Platform.script.toFilePath(); | 76 String name = Platform.script.toFilePath(); |
74 new File(name).openRead().pipe(request.response) | 77 new File(name).openRead().pipe(request.response) |
75 .catchError((e) { /* ignore */ }); | 78 .catchError((e) { /* ignore */ }); |
76 }); | 79 }); |
77 | 80 |
78 var count = 0; | 81 var count = 0; |
79 makeRequest() { | 82 makeRequest() { |
80 Socket.connect(HOST, server.port).then((socket) { | 83 Socket.connect(HOST, server.port).then((socket) { |
81 var data = "Invalid TLS handshake"; | 84 var data = "Invalid TLS handshake"; |
82 socket.write(data); | 85 socket.write(data); |
83 socket.close(); | 86 socket.close(); |
84 socket.done.then((_) { | 87 socket.done.then((_) { |
85 socket.destroy(); | 88 socket.destroy(); |
86 if (++count < 10) { | 89 if (++count < 10) { |
87 makeRequest(); | 90 makeRequest(); |
88 } else { | 91 } else { |
89 server.close(); | 92 server.close(); |
90 } | 93 } |
91 }); | 94 }); |
92 }); | 95 }); |
93 } | 96 } |
94 makeRequest(); | 97 makeRequest(); |
95 }); | 98 }); |
96 } | 99 } |
97 | 100 |
98 void main() { | 101 void main() { |
99 InitializeSSL(); | |
100 InternetAddress.lookup("localhost").then((hosts) { | 102 InternetAddress.lookup("localhost").then((hosts) { |
101 HOST = hosts.first; | 103 HOST = hosts.first; |
102 testListenOn(); | 104 testListenOn(); |
103 testEarlyClientClose(); | 105 testEarlyClientClose(); |
104 }); | 106 }); |
105 } | 107 } |
OLD | NEW |