Index: chrome/test/data/extensions/api_test/platform_keys/basic.js |
diff --git a/chrome/test/data/extensions/api_test/platform_keys/basic.js b/chrome/test/data/extensions/api_test/platform_keys/basic.js |
index 81d84fd03195aa7a5b88d0f4f17474e6eff30d04..3f5c73574d5c01fb7075d96d8d2e66fedc9f7db7 100644 |
--- a/chrome/test/data/extensions/api_test/platform_keys/basic.js |
+++ b/chrome/test/data/extensions/api_test/platform_keys/basic.js |
@@ -4,11 +4,13 @@ |
'use strict'; |
-var systemTokenEnabled = (location.href.indexOf("systemTokenEnabled") != -1); |
+var systemTokenEnabled = (location.search.indexOf("systemTokenEnabled") != -1); |
+var selectedTestSuite = location.hash.slice(1); |
+console.log('[SELECTED TEST SUITE] ' + selectedTestSuite + |
+ ', systemTokenEnable ' + systemTokenEnabled); |
var assertEq = chrome.test.assertEq; |
var assertTrue = chrome.test.assertTrue; |
-var assertThrows = chrome.test.assertThrows; |
var fail = chrome.test.fail; |
var succeed = chrome.test.succeed; |
var callbackPass = chrome.test.callbackPass; |
@@ -112,10 +114,9 @@ function sortCerts(certs) { |
return certs.sort(compareArrays); |
} |
-function assertCertsSelected(request, expectedCerts, callback) { |
+function assertCertsSelected(details, expectedCerts, callback) { |
chrome.platformKeys.selectClientCertificates( |
- {interactive: false, request: request}, |
- callbackPass(function(actualMatches) { |
+ details, callbackPass(function(actualMatches) { |
assertEq(expectedCerts.length, actualMatches.length, |
'Number of stored certs not as expected'); |
if (expectedCerts.length == actualMatches.length) { |
@@ -190,32 +191,54 @@ function testHasSubtleCryptoMethods(token) { |
succeed(); |
} |
-function testSelectAllCerts() { |
- var requestAll = { |
+var requestAll = { |
+ certificateTypes: [], |
+ certificateAuthorities: [] |
+}; |
+ |
+// Depends on |data|, thus it cannot be created immediately. |
+function requestCA1() { |
+ return { |
certificateTypes: [], |
- certificateAuthorities: [] |
+ certificateAuthorities: [data.client_1_issuer_dn.buffer] |
}; |
+} |
+ |
+function testSelectAllCerts() { |
var expectedCerts = [data.client_1]; |
if (systemTokenEnabled) |
expectedCerts.push(data.client_2); |
- assertCertsSelected(requestAll, expectedCerts); |
+ assertCertsSelected({interactive: false, request: requestAll}, expectedCerts); |
} |
function testSelectCA1Certs() { |
- var requestCA1 = { |
- certificateTypes: [], |
- certificateAuthorities: [data.client_1_issuer_dn.buffer] |
- }; |
- assertCertsSelected(requestCA1, [data.client_1]); |
+ assertCertsSelected({interactive: false, request: requestCA1()}, |
+ [data.client_1]); |
+} |
+ |
+function testSelectAllReturnsNoCerts() { |
+ assertCertsSelected({interactive: false, request: requestAll}, |
+ [] /* no certs selected */); |
+} |
+ |
+function testSelectAllReturnsClient1() { |
+ assertCertsSelected({interactive: false, request: requestAll}, |
+ [data.client_1]); |
+} |
+ |
+function testInteractiveSelectNoCerts() { |
+ assertCertsSelected({interactive: true, request: requestAll}, |
+ [] /* no certs selected */); |
+} |
+ |
+function testInteractiveSelectClient1() { |
+ assertCertsSelected({interactive: true, request: requestAll}, |
+ [data.client_1]); |
} |
function testMatchResult() { |
- var requestCA1 = { |
- certificateTypes: [], |
- certificateAuthorities: [data.client_1_issuer_dn.buffer] |
- }; |
chrome.platformKeys.selectClientCertificates( |
- {interactive: false, request: requestCA1}, |
+ {interactive: false, request: requestCA1()}, |
callbackPass(function(matches) { |
var expectedAlgorithm = { |
modulusLength: 2048, |
@@ -282,7 +305,7 @@ function testSignNoHash() { |
})); |
} |
-function testSignSha1() { |
+function testSignSha1Client1() { |
var keyParams = { |
// Algorithm names are case-insensitive. |
hash: {name: 'Sha-1'} |
@@ -305,18 +328,86 @@ function testSignSha1() { |
})); |
} |
-function runTests() { |
- var tests = [ |
- testStaticMethods, |
- testSelectAllCerts, |
- testSelectCA1Certs, |
- testMatchResult, |
- testGetKeyPair, |
- testSignNoHash, |
- testSignSha1 |
- ]; |
- |
- chrome.test.runTests(tests); |
+// TODO(pneubeck): Test this by verifying that no private key is returned, once |
+// that's implemented. |
+function testSignFails(cert) { |
+ var keyParams = { |
+ hash: {name: 'SHA-1'} |
+ }; |
+ var signParams = { |
+ name: 'RSASSA-PKCS1-v1_5' |
+ }; |
+ chrome.platformKeys.getKeyPair( |
+ cert.buffer, keyParams, callbackPass(function(publicKey, privateKey) { |
+ chrome.platformKeys.subtleCrypto() |
+ .sign(signParams, privateKey, data.raw_data) |
+ .then(function(signature) { fail('sign was expected to fail.'); }, |
+ callbackPass(function(error) { |
+ assertTrue(error instanceof Error); |
+ assertEq( |
+ 'The operation failed for an operation-specific reason', |
+ error.message); |
+ })); |
+ })); |
+} |
+ |
+function testSignClient1Fails() { |
+ testSignFails(data.client_1); |
} |
-setUp(runTests); |
+function testSignClient2Fails() { |
+ testSignFails(data.client_2); |
+} |
+ |
+var testSuites = { |
+ // These tests assume already granted permissions for client_1 and client_2. |
+ // On interactive selectClientCertificates calls, the simulated user does not |
+ // select any cert. |
+ basicTests: function() { |
+ var tests = [ |
+ testStaticMethods, |
+ testSelectAllCerts, |
+ testSelectCA1Certs, |
+ testInteractiveSelectNoCerts, |
+ testMatchResult, |
+ testGetKeyPair, |
+ testSignNoHash, |
+ testSignSha1Client1, |
+ ]; |
+ |
+ chrome.test.runTests(tests); |
+ }, |
+ |
+ // This test suite starts without any granted permissions. |
+ // On interactive selectClientCertificates calls, the simulated user selects |
+ // client_1, if matching. |
+ permissionTests: function() { |
+ var tests = [ |
+ // Without permissions both sign attempts fail. |
+ testSignClient1Fails, |
+ testSignClient2Fails, |
+ |
+ // Without permissions, non-interactive select calls return no certs. |
+ testSelectAllReturnsNoCerts, |
+ |
+ testInteractiveSelectClient1, |
+ // Now that the permission for client_1 is granted. |
+ |
+ // Verify that signing with client_1 is possible and with client_2 still |
+ // fails. |
+ testSignSha1Client1, |
+ testSignClient2Fails, |
+ |
+ // Verify that client_1 can still be selected interactively. |
+ testInteractiveSelectClient1, |
+ |
+ // Verify that client_1 but not client_2 is selected in non-interactive |
+ // calls. |
+ testSelectAllReturnsClient1, |
+ ]; |
+ |
+ chrome.test.runTests(tests); |
+ } |
+}; |
+ |
+setUp(testSuites[selectedTestSuite]); |