diff options
author | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-28 01:46:32 +0000 |
---|---|---|
committer | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-28 01:46:32 +0000 |
commit | f161478983b46c9c9a2acc855f9148ea7872d51b (patch) | |
tree | 72620cfa70e563024ef80ec3e08a531ca1b30501 /chrome/browser/importer/firefox_profile_lock_unittest.cc | |
parent | b82d98b9be4c2081bdd19adf4f2cbe4469e2dd20 (diff) | |
download | chromium_src-f161478983b46c9c9a2acc855f9148ea7872d51b.zip chromium_src-f161478983b46c9c9a2acc855f9148ea7872d51b.tar.gz chromium_src-f161478983b46c9c9a2acc855f9148ea7872d51b.tar.bz2 |
Linux: Fix NSSDecryptor to decrypt Firefox passwords using correct user database.
Note that we're deliberately leaving NSS user databases open until NSS shutdown since closing and reopening it does not work correctly (NSS bug).
Also, enable the firefox_importer_unittest.cc for linux. Move out some tests to firefox_profile_unittest.cc.
Fix lock file deletion in the posix implementation of FirefoxProfileLock.
BUG=http://crbug.com/17490
TEST=Import bookmark and settings, verify that passwords are indeed imported.
Review URL: http://codereview.chromium.org/160077
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21792 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/importer/firefox_profile_lock_unittest.cc')
-rw-r--r-- | chrome/browser/importer/firefox_profile_lock_unittest.cc | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/chrome/browser/importer/firefox_profile_lock_unittest.cc b/chrome/browser/importer/firefox_profile_lock_unittest.cc index 4345048..fc5c911 100644 --- a/chrome/browser/importer/firefox_profile_lock_unittest.cc +++ b/chrome/browser/importer/firefox_profile_lock_unittest.cc @@ -8,8 +8,10 @@ #include "base/path_service.h" #include "base/process_util.h" #include "base/string_util.h" +#include "build/build_config.h" #include "chrome/browser/importer/firefox_profile_lock.h" #include "chrome/common/chrome_paths.h" +#include "chrome/test/file_test_utils.h" class FirefoxProfileLockTest : public testing::Test { public: @@ -39,3 +41,90 @@ TEST_F(FirefoxProfileLockTest, LockTest) { lock1.Lock(); ASSERT_TRUE(lock1.HasAcquired()); } + +// Tests basic functionality and verifies that the lock file is deleted after +// use. +TEST_F(FirefoxProfileLockTest, ProfileLock) { + std::wstring test_path; + file_util::CreateNewTempDirectory(L"firefox_profile", &test_path); + FilePath lock_file_path = FilePath::FromWStringHack(test_path); + FileAutoDeleter deleter(lock_file_path); + lock_file_path = lock_file_path.Append(FirefoxProfileLock::kLockFileName); + + scoped_ptr<FirefoxProfileLock> lock; + EXPECT_EQ(static_cast<FirefoxProfileLock*>(NULL), lock.get()); + EXPECT_FALSE(file_util::PathExists(lock_file_path)); + lock.reset(new FirefoxProfileLock(test_path)); + EXPECT_TRUE(lock->HasAcquired()); + EXPECT_TRUE(file_util::PathExists(lock_file_path)); + lock->Unlock(); + EXPECT_FALSE(lock->HasAcquired()); + + // In the posix code, we don't delete the file when releasing the lock. +#if !defined(OS_POSIX) + EXPECT_FALSE(file_util::PathExists(lock_file_path)); +#endif // !defined(OS_POSIX) + lock->Lock(); + EXPECT_TRUE(lock->HasAcquired()); + EXPECT_TRUE(file_util::PathExists(lock_file_path)); + lock->Lock(); + EXPECT_TRUE(lock->HasAcquired()); + lock->Unlock(); + EXPECT_FALSE(lock->HasAcquired()); + // In the posix code, we don't delete the file when releasing the lock. +#if !defined(OS_POSIX) + EXPECT_FALSE(file_util::PathExists(lock_file_path)); +#endif // !defined(OS_POSIX) +} + +// If for some reason the lock file is left behind by the previous owner, we +// should still be able to lock it, at least in the Windows implementation. +TEST_F(FirefoxProfileLockTest, ProfileLockOrphaned) { + std::wstring test_path; + file_util::CreateNewTempDirectory(L"firefox_profile", &test_path); + FilePath lock_file_path = FilePath::FromWStringHack(test_path); + FileAutoDeleter deleter(lock_file_path); + lock_file_path = lock_file_path.Append(FirefoxProfileLock::kLockFileName); + + // Create the orphaned lock file. + FILE* lock_file = file_util::OpenFile(lock_file_path, "w"); + ASSERT_TRUE(lock_file); + file_util::CloseFile(lock_file); + EXPECT_TRUE(file_util::PathExists(lock_file_path)); + + scoped_ptr<FirefoxProfileLock> lock; + EXPECT_EQ(static_cast<FirefoxProfileLock*>(NULL), lock.get()); + lock.reset(new FirefoxProfileLock(test_path)); + EXPECT_TRUE(lock->HasAcquired()); + lock->Unlock(); + EXPECT_FALSE(lock->HasAcquired()); +} + +// This is broken on POSIX since the same process is allowed to reacquire a +// lock. +#if !defined(OS_POSIX) +// Tests two locks contending for the same lock file. +TEST_F(FirefoxProfileLockTest, ProfileLockContention) { + std::wstring test_path; + file_util::CreateNewTempDirectory(L"firefox_profile", &test_path); + FileAutoDeleter deleter(FilePath::FromWStringHack(test_path)); + + scoped_ptr<FirefoxProfileLock> lock1; + EXPECT_EQ(static_cast<FirefoxProfileLock*>(NULL), lock1.get()); + lock1.reset(new FirefoxProfileLock(test_path)); + EXPECT_TRUE(lock1->HasAcquired()); + + scoped_ptr<FirefoxProfileLock> lock2; + EXPECT_EQ(static_cast<FirefoxProfileLock*>(NULL), lock2.get()); + lock2.reset(new FirefoxProfileLock(test_path)); + EXPECT_FALSE(lock2->HasAcquired()); + + lock1->Unlock(); + EXPECT_FALSE(lock1->HasAcquired()); + + lock2->Lock(); + EXPECT_TRUE(lock2->HasAcquired()); + lock2->Unlock(); + EXPECT_FALSE(lock2->HasAcquired()); +} +#endif |