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( |
Søren Gjesse
2013/08/07 07:32:28
Why ..?
Bill Hesse
2013/08/08 17:39:21
We want to return the SecureServerSocket, not the
|
+ (socket) => socket.pipe(socket).then((_) => server.close()))); |