| Index: tests/standalone/io/secure_server_socket_test.dart
|
| diff --git a/tests/standalone/io/secure_server_socket_test.dart b/tests/standalone/io/secure_server_socket_test.dart
|
| index a6a10878507a09b7865f2611951555c64ef781d1..6ef7f27e82d0bd027aba6738da22bf8f16112851 100644
|
| --- a/tests/standalone/io/secure_server_socket_test.dart
|
| +++ b/tests/standalone/io/secure_server_socket_test.dart
|
| @@ -14,11 +14,20 @@ import "package:async_helper/async_helper.dart";
|
| import "package:expect/expect.dart";
|
|
|
| InternetAddress HOST;
|
| -const CERTIFICATE = "localhost_cert";
|
| +
|
| +String localFile(path) => Platform.script.resolve(path).toFilePath();
|
| +
|
| +SecurityContext serverContext = new SecurityContext()
|
| + ..useCertificateChain(localFile('certificates/server_chain.pem'))
|
| + ..usePrivateKey(localFile('certificates/server_key.pem'),
|
| + password: 'dartdart');
|
| +
|
| +SecurityContext clientContext = new SecurityContext()
|
| + ..setTrustedCertificates(file: localFile('certificates/trusted_certs.pem'));
|
|
|
| void testSimpleBind() {
|
| asyncStart();
|
| - SecureServerSocket.bind(HOST, 0, CERTIFICATE).then((s) {
|
| + SecureServerSocket.bind(HOST, 0, serverContext).then((s) {
|
| Expect.isTrue(s.port > 0);
|
| s.close();
|
| asyncEnd();
|
| @@ -30,7 +39,7 @@ void testInvalidBind() {
|
|
|
| // Bind to a unknown DNS name.
|
| asyncStart();
|
| - SecureServerSocket.bind("ko.faar.__hest__", 0, CERTIFICATE).then((_) {
|
| + SecureServerSocket.bind("ko.faar.__hest__", 0, serverContext).then((_) {
|
| Expect.fail("Failure expected");
|
| }).catchError((error) {
|
| Expect.isTrue(error is SocketException);
|
| @@ -39,7 +48,7 @@ void testInvalidBind() {
|
|
|
| // Bind to an unavaliable IP-address.
|
| asyncStart();
|
| - SecureServerSocket.bind("8.8.8.8", 0, CERTIFICATE).then((_) {
|
| + SecureServerSocket.bind("8.8.8.8", 0, serverContext).then((_) {
|
| Expect.fail("Failure expected");
|
| }).catchError((error) {
|
| Expect.isTrue(error is SocketException);
|
| @@ -48,10 +57,10 @@ void testInvalidBind() {
|
|
|
| // Bind to a port already in use.
|
| asyncStart();
|
| - SecureServerSocket.bind(HOST, 0, CERTIFICATE).then((s) {
|
| + SecureServerSocket.bind(HOST, 0, serverContext).then((s) {
|
| SecureServerSocket.bind(HOST,
|
| s.port,
|
| - CERTIFICATE).then((t) {
|
| + serverContext).then((t) {
|
| Expect.fail("Multiple listens on same port");
|
| }).catchError((error) {
|
| Expect.isTrue(error is SocketException);
|
| @@ -61,12 +70,18 @@ void testInvalidBind() {
|
| });
|
| }
|
|
|
| -void testSimpleConnect(String certificate) {
|
| +void testSimpleConnect() {
|
| asyncStart();
|
| - SecureServerSocket.bind(HOST, 0, certificate).then((server) {
|
| - var clientEndFuture = SecureSocket.connect(HOST, server.port);
|
| + SecureServerSocket.bind(HOST, 0, serverContext).then((server) {
|
| + var clientEndFuture =
|
| + SecureSocket.connect(HOST, server.port, context: clientContext);
|
| server.listen((serverEnd) {
|
| clientEndFuture.then((clientEnd) {
|
| + var x5 = clientEnd.peerCertificate;
|
| + print(x5.subject);
|
| + print(x5.issuer);
|
| + print(x5.startValidity);
|
| + print(x5.endValidity);
|
| clientEnd.close();
|
| serverEnd.close();
|
| server.close();
|
| @@ -76,22 +91,32 @@ void testSimpleConnect(String certificate) {
|
| });
|
| }
|
|
|
| -void testSimpleConnectFail(String certificate, bool cancelOnError) {
|
| +void testSimpleConnectFail(SecurityContext serverContext,
|
| + SecurityContext clientContext,
|
| + bool cancelOnError) {
|
| + print('$serverContext $clientContext $cancelOnError');
|
| asyncStart();
|
| - SecureServerSocket.bind(HOST, 0, certificate).then((server) {
|
| - var clientEndFuture = SecureSocket.connect(HOST, server.port)
|
| + SecureServerSocket.bind(HOST, 0, serverContext).then((server) {
|
| + var clientEndFuture =
|
| + SecureSocket.connect(HOST, server.port, context: clientContext)
|
| .then((clientEnd) {
|
| Expect.fail("No client connection expected.");
|
| })
|
| .catchError((error) {
|
| - Expect.isTrue(error is HandshakeException ||
|
| + // TODO(whesse): When null context is supported, disallow
|
| + // the ArgumentError type here.
|
| + Expect.isTrue(error is ArgumentError ||
|
| + error is HandshakeException ||
|
| error is SocketException);
|
| });
|
| server.listen((serverEnd) {
|
| Expect.fail("No server connection expected.");
|
| },
|
| onError: (error) {
|
| - Expect.isTrue(error is CertificateException);
|
| + // TODO(whesse): When null context is supported, disallow
|
| + // the ArgumentError type here.
|
| + Expect.isTrue(error is ArgumentError ||
|
| + error is HandshakeException);
|
| clientEndFuture.then((_) {
|
| if (!cancelOnError) server.close();
|
| asyncEnd();
|
| @@ -103,9 +128,10 @@ void testSimpleConnectFail(String certificate, bool cancelOnError) {
|
|
|
| void testServerListenAfterConnect() {
|
| asyncStart();
|
| - SecureServerSocket.bind(HOST, 0, CERTIFICATE).then((server) {
|
| + SecureServerSocket.bind(HOST, 0, serverContext).then((server) {
|
| Expect.isTrue(server.port > 0);
|
| - var clientEndFuture = SecureSocket.connect(HOST, server.port);
|
| + var clientEndFuture =
|
| + SecureSocket.connect(HOST, server.port, context: clientContext);
|
| new Timer(const Duration(milliseconds: 500), () {
|
| server.listen((serverEnd) {
|
| clientEndFuture.then((clientEnd) {
|
| @@ -144,7 +170,7 @@ void testSimpleReadWrite() {
|
| }
|
| }
|
|
|
| - SecureServerSocket.bind(HOST, 0, CERTIFICATE).then((server) {
|
| + SecureServerSocket.bind(HOST, 0, serverContext).then((server) {
|
| server.listen((client) {
|
| int bytesRead = 0;
|
| int bytesWritten = 0;
|
| @@ -166,7 +192,8 @@ void testSimpleReadWrite() {
|
| });
|
| });
|
|
|
| - SecureSocket.connect(HOST, server.port).then((socket) {
|
| + SecureSocket.connect(HOST, server.port, context: clientContext)
|
| + .then((socket) {
|
| int bytesRead = 0;
|
| int bytesWritten = 0;
|
| List<int> dataSent = createTestData();
|
| @@ -189,10 +216,6 @@ void testSimpleReadWrite() {
|
|
|
| main() {
|
| asyncStart();
|
| - String certificateDatabase = Platform.script.resolve('pkcert').toFilePath();
|
| - SecureSocket.initialize(database: certificateDatabase,
|
| - password: 'dartdart',
|
| - useBuiltinRoots: false);
|
| InternetAddress.lookup("localhost").then((hosts) {
|
| HOST = hosts.first;
|
| runTests();
|
| @@ -203,12 +226,16 @@ main() {
|
| runTests() {
|
| testSimpleBind();
|
| testInvalidBind();
|
| - testSimpleConnect(CERTIFICATE);
|
| - testSimpleConnect("CN=localhost");
|
| - testSimpleConnectFail("not_a_nickname", false);
|
| - testSimpleConnectFail("CN=notARealDistinguishedName", false);
|
| - testSimpleConnectFail("not_a_nickname", true);
|
| - testSimpleConnectFail("CN=notARealDistinguishedName", true);
|
| + testSimpleConnect();
|
| + for (var server in [serverContext, null]) {
|
| + for (var client in [clientContext, null]) {
|
| + for (bool cancelOnError in [true, false]) {
|
| + if (server == null || client == null) {
|
| + testSimpleConnectFail(server, client, cancelOnError);
|
| + }
|
| + }
|
| + }
|
| + }
|
| testServerListenAfterConnect();
|
| testSimpleReadWrite();
|
| }
|
|
|