| Index: tests/standalone/io/private_certificate_test.dart
|
| diff --git a/tests/standalone/io/private_certificate_test.dart b/tests/standalone/io/private_certificate_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..10b31c1db829f00d58e84b7d10682dfb8b0d101c
|
| --- /dev/null
|
| +++ b/tests/standalone/io/private_certificate_test.dart
|
| @@ -0,0 +1,71 @@
|
| +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +// This test verifies that a server certificate can be verified by a client
|
| +// that loads the certificate authority certificate it depends on at runtime.
|
| +
|
| +import "package:expect/expect.dart";
|
| +import "package:path/path.dart";
|
| +import "dart:io";
|
| +import "dart:async";
|
| +
|
| +Future copyFileToDirectory(String file, String directory) {
|
| + switch (Platform.operatingSystem) {
|
| + case 'linux':
|
| + case 'macos':
|
| + return Process.run('cp', [file, directory]);
|
| + case 'windows':
|
| + return Process.run('cmd.exe', ['/C', 'copy $file $directory']);
|
| + default:
|
| + Expect.fail('Unknown operating system ${Platform.operatingSystem}');
|
| + }
|
| +}
|
| +
|
| +
|
| +void main() {
|
| + String scriptDirectory = dirname(Platform.script);
|
| + Directory tempDirectory = new Directory('').createTempSync();
|
| + String testDirectory = tempDirectory.path;
|
| + copyFileToDirectory(join(scriptDirectory, 'pkcert', 'cert9.db'),
|
| + testDirectory).then((_) =>
|
| + copyFileToDirectory(join(scriptDirectory, 'pkcert', 'key4.db'),
|
| + testDirectory)).then((_) {
|
| + SecureSocket.initialize(database: testDirectory,
|
| + password: 'dartdart',
|
| + readOnly: false);
|
| +
|
| + SecureSocket.removeCertificate('localhost_cert');
|
| + SecureSocket.removeCertificate('myauthority_cert');
|
| + // TODO: Check existence of certificates, if we add a getCertificate method.
|
| +
|
| + var certificate = join(scriptDirectory, 'pkcert', 'localhost.p12');
|
| + var mycert = new File(certificate).readAsBytesSync();
|
| + SecureSocket.importPrivateCertificates(mycert, 'dartdart');
|
| + SecureSocket.removeCertificate('myauthority_cert');
|
| +
|
| + return runServer();
|
| + }).then((SecureServerSocket server) {
|
| + return Process.run(Platform.executable,
|
| + ['--checked',
|
| + join(scriptDirectory, 'certificate_test_client.dart'),
|
| + server.port.toString(),
|
| + join(scriptDirectory, 'pkcert', 'myauthority.pem')]);
|
| + }).then((ProcessResult result) {
|
| + if (result.exitCode != 0) {
|
| + print("Client failed with exit code ${result.exitCode}");
|
| + print(" stdout:");
|
| + print(result.stdout);
|
| + print(" stderr:");
|
| + print(result.stderr);
|
| + throw new AssertionError();
|
| + }
|
| + }).whenComplete(() {
|
| + tempDirectory.delete(recursive: true);
|
| + });
|
| +}
|
| +
|
| +Future<SecureServerSocket> runServer() =>
|
| + SecureServerSocket.bind("localhost", 0, "localhost_cert")
|
| + .then((server) => server..listen(
|
| + (socket) => socket.pipe(socket).then((_) => server.close())));
|
|
|