Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4226)

Unified Diff: chrome/browser/importer/firefox_profile_lock_unittest.cc

Issue 160077: Linux: Fix NSSDecryptor to import Firefox passwords from the user database correctly. (Closed)
Patch Set: Add comments. Created 11 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/importer/firefox_profile_lock.h ('k') | chrome/browser/importer/nss_decryptor.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/importer/firefox_profile_lock_unittest.cc
diff --git a/chrome/browser/importer/firefox_profile_lock_unittest.cc b/chrome/browser/importer/firefox_profile_lock_unittest.cc
index 4345048032bb78dd43352cba04c9f56c1d644f6c..fc5c9117586a4f9938e2677e8453c7be1d784dd4 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
« no previous file with comments | « chrome/browser/importer/firefox_profile_lock.h ('k') | chrome/browser/importer/nss_decryptor.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698