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 |