Chromium Code Reviews| Index: net/base/keygen_handler_unittest.cc |
| diff --git a/net/base/keygen_handler_unittest.cc b/net/base/keygen_handler_unittest.cc |
| index a868b2925c8745ee9362f8cf1a6dee84df208028..1dee1e8c8594b5af56c5d0b1ee013b9ce21cc770 100644 |
| --- a/net/base/keygen_handler_unittest.cc |
| +++ b/net/base/keygen_handler_unittest.cc |
| @@ -19,19 +19,52 @@ |
| #if defined(USE_NSS) |
| #include <private/pprthred.h> // PR_DetachThread |
| +#include "crypto/nss_crypto_module_delegate.h" |
| +#include "crypto/nss_util_internal.h" |
| #endif |
| namespace net { |
| namespace { |
| +class StubCryptoModuleDelegate : public crypto::NSSCryptoModuleDelegate { |
|
Ryan Sleevi
2014/07/16 20:05:42
#ifdefs ?
pneubeck (no reviews)
2014/07/16 20:40:18
Done.
|
| + public: |
| + explicit StubCryptoModuleDelegate(crypto::ScopedPK11Slot slot) |
| + : slot_(slot.Pass()) {} |
| + |
| + virtual std::string RequestPassword(const std::string& slot_name, |
| + bool retry, |
| + bool* cancelled) OVERRIDE{ |
| + return std::string(); |
| + } |
| + |
| + virtual crypto::ScopedPK11Slot RequestSlot() OVERRIDE { |
| + return crypto::ScopedPK11Slot(PK11_ReferenceSlot(slot_.get())); |
| + } |
| + |
| + private: |
| + crypto::ScopedPK11Slot slot_; |
| +}; |
| + |
| class KeygenHandlerTest : public ::testing::Test { |
| public: |
| KeygenHandlerTest() {} |
| virtual ~KeygenHandlerTest() {} |
| + scoped_ptr<KeygenHandler> CreateKeygenHandler() { |
| + scoped_ptr<KeygenHandler> handler(new KeygenHandler( |
| + 768, "some challenge", GURL("http://www.example.com"))); |
| +#if defined(USE_NSS) |
| + handler->set_crypto_module_delegate( |
| + scoped_ptr<crypto::NSSCryptoModuleDelegate>( |
| + new StubCryptoModuleDelegate( |
| + crypto::ScopedPK11Slot(crypto::GetPersistentNSSKeySlot())))); |
|
Ryan Sleevi
2014/07/16 20:05:42
Depending on ordering of your CLs, and to confirm
pneubeck (no reviews)
2014/07/16 20:19:50
Yes, exactly!
I didn't want to do that in one step
|
| +#endif |
| + return handler.Pass(); |
| + } |
| + |
| private: |
| -#if defined(OS_CHROMEOS) && defined(USE_NSS) |
| +#if defined(USE_NSS) |
| crypto::ScopedTestNSSDB test_nss_db_; |
| #endif |
| }; |
| @@ -73,22 +106,22 @@ void AssertValidSignedPublicKeyAndChallenge(const std::string& result, |
| } |
| TEST_F(KeygenHandlerTest, SmokeTest) { |
| - KeygenHandler handler(768, "some challenge", GURL("http://www.example.com")); |
| - handler.set_stores_key(false); // Don't leave the key-pair behind |
| - std::string result = handler.GenKeyAndSignChallenge(); |
| + scoped_ptr<KeygenHandler> handler(CreateKeygenHandler()); |
| + handler->set_stores_key(false); // Don't leave the key-pair behind |
| + std::string result = handler->GenKeyAndSignChallenge(); |
| VLOG(1) << "KeygenHandler produced: " << result; |
| AssertValidSignedPublicKeyAndChallenge(result, "some challenge"); |
| } |
| -void ConcurrencyTestCallback(base::WaitableEvent* event, |
| - const std::string& challenge, |
| +void ConcurrencyTestCallback(const std::string& challenge, |
| + base::WaitableEvent* event, |
| + scoped_ptr<KeygenHandler> handler, |
| std::string* result) { |
| // We allow Singleton use on the worker thread here since we use a |
| // WaitableEvent to synchronize, so it's safe. |
| base::ThreadRestrictions::ScopedAllowSingleton scoped_allow_singleton; |
| - KeygenHandler handler(768, challenge, GURL("http://www.example.com")); |
| - handler.set_stores_key(false); // Don't leave the key-pair behind. |
| - *result = handler.GenKeyAndSignChallenge(); |
| + handler->set_stores_key(false); // Don't leave the key-pair behind. |
| + *result = handler->GenKeyAndSignChallenge(); |
| event->Signal(); |
| #if defined(USE_NSS) |
| // Detach the thread from NSPR. |
| @@ -109,12 +142,15 @@ TEST_F(KeygenHandlerTest, ConcurrencyTest) { |
| base::WaitableEvent* events[NUM_HANDLERS] = { NULL }; |
| std::string results[NUM_HANDLERS]; |
| for (int i = 0; i < NUM_HANDLERS; i++) { |
| + scoped_ptr<KeygenHandler> handler(CreateKeygenHandler()); |
| events[i] = new base::WaitableEvent(false, false); |
| - base::WorkerPool::PostTask( |
| - FROM_HERE, |
| - base::Bind(ConcurrencyTestCallback, events[i], "some challenge", |
| - &results[i]), |
| - true); |
| + base::WorkerPool::PostTask(FROM_HERE, |
| + base::Bind(ConcurrencyTestCallback, |
| + "some challenge", |
| + events[i], |
| + base::Passed(&handler), |
| + &results[i]), |
| + true); |
| } |
| for (int i = 0; i < NUM_HANDLERS; i++) { |