OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 // Client for secure_socket_renegotiate_test, that runs in a subprocess. | 5 // Client for secure_socket_renegotiate_test, that runs in a subprocess. |
6 // The test verifies that client certificates work, if the client and server | 6 // The test verifies that client certificates work, if the client and server |
7 // are in separate processes, and that connection renegotiation can request | 7 // are in separate processes, and that connection renegotiation can request |
8 // a client certificate to be sent. | 8 // a client certificate to be sent. |
9 | 9 |
10 import "dart:async"; | 10 import "dart:async"; |
11 import "dart:convert"; | 11 import "dart:convert"; |
12 import "dart:io"; | 12 import "dart:io"; |
13 | 13 |
14 const HOST_NAME = "localhost"; | 14 const HOST_NAME = "localhost"; |
15 const CERTIFICATE = "localhost_cert"; | 15 String localFile(path) => Platform.script.resolve(path).toFilePath(); |
16 | 16 |
| 17 SecurityContext clientContext = new SecurityContext() |
| 18 ..setTrustedCertificates(file: localFile('certificates/trusted_certs.pem')); |
17 | 19 |
18 class ExpectException implements Exception { | 20 class ExpectException implements Exception { |
19 ExpectException(this.message); | 21 ExpectException(this.message); |
20 String toString() => message; | 22 String toString() => message; |
21 String message; | 23 String message; |
22 } | 24 } |
23 | 25 |
24 | 26 |
25 void expectEquals(expected, actual) { | 27 void expectEquals(expected, actual) { |
26 if (actual != expected) { | 28 if (actual != expected) { |
27 throw new ExpectException('Expected $expected, found $actual'); | 29 throw new ExpectException('Expected $expected, found $actual'); |
28 } | 30 } |
29 } | 31 } |
30 | 32 |
31 | 33 |
32 void expect(condition) { | 34 void expect(condition) { |
33 if (!condition) { | 35 if (!condition) { |
34 throw new ExpectException(''); | 36 throw new ExpectException(''); |
35 } | 37 } |
36 } | 38 } |
37 | 39 |
38 | 40 |
39 void runClient(int port) { | 41 void runClient(int port) { |
40 SecureSocket.connect(HOST_NAME, port, sendClientCertificate: true) | 42 SecureSocket.connect(HOST_NAME, |
| 43 port, |
| 44 context: clientContext, |
| 45 sendClientCertificate: true) |
41 .then((SecureSocket socket) { | 46 .then((SecureSocket socket) { |
42 X509Certificate certificate = socket.peerCertificate; | 47 X509Certificate certificate = socket.peerCertificate; |
43 expect(certificate != null); | 48 expect(certificate != null); |
44 expectEquals('CN=localhost', certificate.subject); | 49 expectEquals('CN=localhost', certificate.subject); |
45 expectEquals('CN=myauthority', certificate.issuer); | 50 expectEquals('CN=myauthority', certificate.issuer); |
46 StreamIterator<String> input = new StreamIterator(socket | 51 StreamIterator<String> input = new StreamIterator(socket |
47 .transform(UTF8.decoder) | 52 .transform(UTF8.decoder) |
48 .transform(new LineSplitter())); | 53 .transform(new LineSplitter())); |
49 socket.writeln('first'); | 54 socket.writeln('first'); |
50 input.moveNext() | 55 input.moveNext() |
(...skipping 16 matching lines...) Expand all Loading... |
67 }) | 72 }) |
68 .then((success) { | 73 .then((success) { |
69 expect(success != true); | 74 expect(success != true); |
70 socket.close(); | 75 socket.close(); |
71 }); | 76 }); |
72 }); | 77 }); |
73 } | 78 } |
74 | 79 |
75 | 80 |
76 void main(List<String> args) { | 81 void main(List<String> args) { |
77 SecureSocket.initialize(database: args[1], password: 'dartdart'); | |
78 runClient(int.parse(args[0])); | 82 runClient(int.parse(args[0])); |
79 } | 83 } |
OLD | NEW |