Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "base/basictypes.h" | |
| 6 #include "base/scoped_ptr.h" | |
| 7 #include "base/test/multiprocess_test.h" | |
| 8 #include "chrome/common/multi_process_lock.h" | |
| 9 #include "testing/multiprocess_func_list.h" | |
| 10 | |
| 11 static const char kMutexName[] = "shared_mutex_unittest"; | |
|
Mark Mentovai
2010/11/12 17:58:28
Should you randomize this name a little bit so tha
dmac
2010/11/15 23:02:13
Done.
| |
| 12 | |
| 13 class MultiProcessLockTest : public base::MultiProcessTest { | |
| 14 }; | |
| 15 | |
| 16 TEST_F(MultiProcessLockTest, BasicCreationTest) { | |
| 17 // Test basic creation/destruction with no lock taken | |
| 18 scoped_ptr<MultiProcessLock> scoped(MultiProcessLock::Create(kMutexName)); | |
| 19 scoped.reset(NULL); | |
| 20 } | |
| 21 | |
| 22 TEST_F(MultiProcessLockTest, LongNameTest) { | |
| 23 const char kLongName[] = "This is a name that is longer than one hundred and " | |
| 24 "four characters to make sure that we fail appropriately on linux when " | |
| 25 "we have a path that is to long for linux to handle."; | |
|
Mark Mentovai
2010/11/12 17:58:28
Should the interface mandate a specific upper limi
dmac
2010/11/15 23:02:13
Done.
| |
| 26 scoped_ptr<MultiProcessLock> test_lock(MultiProcessLock::Create(kLongName)); | |
| 27 #if defined(OS_LINUX) | |
| 28 EXPECT_FALSE(test_lock->TryLock()); | |
| 29 #else // defined(OS_LINUX) | |
| 30 EXPECT_TRUE(test_lock->TryLock()); | |
| 31 #endif // defined(OS_LINUX) | |
| 32 } | |
| 33 | |
| 34 TEST_F(MultiProcessLockTest, SimpleLock) { | |
| 35 scoped_ptr<MultiProcessLock> test_lock(MultiProcessLock::Create(kMutexName)); | |
| 36 EXPECT_TRUE(test_lock->TryLock()); | |
| 37 base::ProcessHandle handle = SpawnChild("MultiProcessLockTryFailMain", false); | |
| 38 ASSERT_TRUE(handle); | |
| 39 int exit_code = 0; | |
| 40 EXPECT_TRUE(base::WaitForExitCode(handle, &exit_code)); | |
| 41 EXPECT_EQ(exit_code, 0); | |
| 42 test_lock->Unlock(); | |
| 43 handle = SpawnChild("MultiProcessLockTrySucceedMain", false); | |
| 44 ASSERT_TRUE(handle); | |
| 45 EXPECT_TRUE(base::WaitForExitCode(handle, &exit_code)); | |
| 46 EXPECT_EQ(exit_code, 0); | |
| 47 } | |
| 48 | |
| 49 TEST_F(MultiProcessLockTest, RecursiveLock) { | |
| 50 scoped_ptr<MultiProcessLock> test_lock(MultiProcessLock::Create(kMutexName)); | |
| 51 EXPECT_TRUE(test_lock->TryLock()); | |
| 52 // Will cause LOG in debug, but will complete. | |
|
Mark Mentovai
2010/11/12 17:58:28
Indent?
Put a blank line before this so that it’s
dmac
2010/11/15 23:02:13
Done.
| |
| 53 EXPECT_TRUE(test_lock->TryLock()); | |
| 54 test_lock->Unlock(); | |
| 55 // Will cause LOG in debug, but will complete. | |
|
Mark Mentovai
2010/11/12 17:58:28
Same.
dmac
2010/11/15 23:02:13
Done.
| |
| 56 test_lock->Unlock(); | |
| 57 test_lock.reset(); | |
| 58 } | |
| 59 | |
|
Mark Mentovai
2010/11/12 17:58:28
You should have some sort of test that proves that
dmac
2010/11/15 23:02:13
Done.
| |
| 60 MULTIPROCESS_TEST_MAIN(MultiProcessLockTryFailMain) { | |
| 61 scoped_ptr<MultiProcessLock> test_lock(MultiProcessLock::Create(kMutexName)); | |
| 62 EXPECT_FALSE(test_lock->TryLock()); | |
| 63 return 0; | |
| 64 } | |
| 65 | |
| 66 | |
| 67 MULTIPROCESS_TEST_MAIN(MultiProcessLockTrySucceedMain) { | |
| 68 scoped_ptr<MultiProcessLock> test_lock(MultiProcessLock::Create(kMutexName)); | |
| 69 EXPECT_TRUE(test_lock->TryLock()); | |
| 70 return 0; | |
| 71 } | |
| OLD | NEW |