| Index: tests/standalone/io/secure_bad_certificate_test.dart
|
| diff --git a/tests/standalone/io/secure_bad_certificate_test.dart b/tests/standalone/io/secure_bad_certificate_test.dart
|
| index 3388a8d48945edf7ec62dcf0fef96626ac1bea52..6a7e93a7f07b9b10aef5ffb89a77f4b42957c32b 100644
|
| --- a/tests/standalone/io/secure_bad_certificate_test.dart
|
| +++ b/tests/standalone/io/secure_bad_certificate_test.dart
|
| @@ -4,59 +4,81 @@
|
|
|
| // This test verifies that the bad certificate callback works.
|
|
|
| -import "package:expect/expect.dart";
|
| -import "package:path/path.dart";
|
| import "dart:async";
|
| import "dart:io";
|
|
|
| -const HOST_NAME = "localhost";
|
| -const CERTIFICATE = "localhost_cert";
|
| +import "package:expect/expect.dart";
|
| +
|
| +final HOST_NAME = 'localhost';
|
| +
|
| +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');
|
|
|
| -String certificateDatabase() => Platform.script.resolve('pkcert').toFilePath();
|
| +class CustomException {}
|
|
|
| -Future<SecureServerSocket> runServer() {
|
| - SecureSocket.initialize(database: certificateDatabase(),
|
| - password: 'dartdart');
|
| +main() async {
|
| + var HOST = (await InternetAddress.lookup(HOST_NAME)).first;
|
| + var server = await SecureServerSocket.bind(HOST_NAME, 0, serverContext);
|
| + server.listen((SecureSocket socket) {
|
| + socket.listen((_) {}, onDone: () {
|
| + socket.close();
|
| + });
|
| + }, onError: (e) { if (e is! HandshakeException) throw e; });
|
|
|
| - return SecureServerSocket.bind(HOST_NAME, 0, CERTIFICATE)
|
| - .then((SecureServerSocket server) {
|
| - server.listen((SecureSocket socket) {
|
| - socket.listen((_) { },
|
| - onDone: () {
|
| - socket.close();
|
| - });
|
| - }, onError: (e) => Expect.isTrue(e is HandshakeException));
|
| - return server;
|
| - });
|
| + SecurityContext goodContext = new SecurityContext()
|
| + ..setTrustedCertificates(file: localFile('certificates/trusted_certs.pem'));
|
| + SecurityContext badContext = new SecurityContext();
|
| + SecurityContext defaultContext = SecurityContext.defaultContext;
|
| +
|
| + await runClient(server.port, goodContext, true, 'pass');
|
| + await runClient(server.port, goodContext, false, 'pass');
|
| + await runClient(server.port, goodContext, 'fisk', 'pass');
|
| + await runClient(server.port, goodContext, 'exception', 'pass');
|
| + await runClient(server.port, badContext, true, 'pass');
|
| + await runClient(server.port, badContext, false, 'fail');
|
| + await runClient(server.port, badContext, 'fisk', 'fail');
|
| + await runClient(server.port, badContext, 'exception', 'throw');
|
| + await runClient(server.port, defaultContext, true, 'pass');
|
| + await runClient(server.port, defaultContext, false, 'fail');
|
| + await runClient(server.port, defaultContext, 'fisk', 'fail');
|
| + await runClient(server.port, defaultContext, 'exception', 'throw');
|
| + server.close();
|
| }
|
|
|
|
|
| -void main() {
|
| - var clientScript = Platform.script
|
| - .resolve('secure_bad_certificate_client.dart')
|
| - .toFilePath();
|
| -
|
| - Future clientProcess(int port, String acceptCertificate) {
|
| - return Process.run(Platform.executable,
|
| - [clientScript, port.toString(), acceptCertificate])
|
| - .then((ProcessResult result) {
|
| - if (result.exitCode != 0) {
|
| - print("Client failed, stdout:");
|
| - print(result.stdout);
|
| - print(" stderr:");
|
| - print(result.stderr);
|
| - Expect.fail('Client subprocess exit code: ${result.exitCode}');
|
| - }
|
| - });
|
| +Future runClient(int port,
|
| + SecurityContext context,
|
| + callbackReturns,
|
| + result) async {
|
| + badCertificateCallback(X509Certificate certificate) {
|
| + Expect.equals('/CN=rootauthority', certificate.subject);
|
| + Expect.equals('/CN=rootauthority', certificate.issuer);
|
| + // Throw exception if one is requested.
|
| + if (callbackReturns == 'exception') throw new CustomException();
|
| + return callbackReturns;
|
| }
|
|
|
| - runServer().then((server) {
|
| - Future.wait([clientProcess(server.port, 'true'),
|
| - clientProcess(server.port, 'false'),
|
| - clientProcess(server.port, 'fisk'),
|
| - clientProcess(server.port, 'exception')]).then((_) {
|
| - server.close();
|
| - });
|
| - });
|
| -}
|
| + try {
|
| + var socket = await SecureSocket.connect(
|
| + HOST_NAME,
|
| + port,
|
| + context: context,
|
| + onBadCertificate: badCertificateCallback);
|
| + Expect.equals('pass', result); // Is rethrown below
|
| + await socket.close();
|
| + } catch (error) {
|
| + if (error is ExpectException) rethrow;
|
| + Expect.notEquals(result, 'pass');
|
| + if (result == 'fail') {
|
| + Expect.isTrue(error is HandshakeException || error is ArgumentError);
|
| + } else if (result == 'throw') {
|
| + Expect.isTrue(error is CustomException);
|
| + } else {
|
| + Expect.fail('Unknown expectation $result');
|
| + }
|
| + }
|
| +}
|
|
|