Index: third_party/mojo/src/mojo/edk/system/mutex_unittest.cc |
diff --git a/third_party/mojo/src/mojo/edk/system/mutex_unittest.cc b/third_party/mojo/src/mojo/edk/system/mutex_unittest.cc |
deleted file mode 100644 |
index 9b516536560174e4a399a0f473a6393b050fb946..0000000000000000000000000000000000000000 |
--- a/third_party/mojo/src/mojo/edk/system/mutex_unittest.cc |
+++ /dev/null |
@@ -1,250 +0,0 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "mojo/edk/system/mutex.h" |
- |
-#include <stdlib.h> |
- |
-#include "base/threading/platform_thread.h" |
-#include "mojo/edk/system/test_utils.h" |
-#include "mojo/public/cpp/system/macros.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace mojo { |
-namespace system { |
-namespace { |
- |
-// Sleeps for a "very small" amount of time. |
-void EpsilonRandomSleep() { |
- test::Sleep(test::DeadlineFromMilliseconds(rand() % 20)); |
-} |
- |
-// Basic test to make sure that Lock()/Unlock()/TryLock() don't crash ---------- |
- |
-class BasicMutexTestThread : public base::PlatformThread::Delegate { |
- public: |
- explicit BasicMutexTestThread(Mutex* mutex) : mutex_(mutex), acquired_(0) {} |
- |
- void ThreadMain() override { |
- for (int i = 0; i < 10; i++) { |
- mutex_->Lock(); |
- mutex_->AssertHeld(); |
- acquired_++; |
- mutex_->Unlock(); |
- } |
- for (int i = 0; i < 10; i++) { |
- mutex_->Lock(); |
- mutex_->AssertHeld(); |
- acquired_++; |
- EpsilonRandomSleep(); |
- mutex_->Unlock(); |
- } |
- for (int i = 0; i < 10; i++) { |
- if (mutex_->TryLock()) { |
- mutex_->AssertHeld(); |
- acquired_++; |
- EpsilonRandomSleep(); |
- mutex_->Unlock(); |
- } |
- } |
- } |
- |
- int acquired() const { return acquired_; } |
- |
- private: |
- Mutex* mutex_; |
- int acquired_; |
- |
- MOJO_DISALLOW_COPY_AND_ASSIGN(BasicMutexTestThread); |
-}; |
- |
-TEST(MutexTest, Basic) { |
- Mutex mutex; |
- BasicMutexTestThread thread(&mutex); |
- base::PlatformThreadHandle handle; |
- |
- ASSERT_TRUE(base::PlatformThread::Create(0, &thread, &handle)); |
- |
- int acquired = 0; |
- for (int i = 0; i < 5; i++) { |
- mutex.Lock(); |
- mutex.AssertHeld(); |
- acquired++; |
- mutex.Unlock(); |
- } |
- for (int i = 0; i < 10; i++) { |
- mutex.Lock(); |
- mutex.AssertHeld(); |
- acquired++; |
- EpsilonRandomSleep(); |
- mutex.Unlock(); |
- } |
- for (int i = 0; i < 10; i++) { |
- if (mutex.TryLock()) { |
- mutex.AssertHeld(); |
- acquired++; |
- EpsilonRandomSleep(); |
- mutex.Unlock(); |
- } |
- } |
- for (int i = 0; i < 5; i++) { |
- mutex.Lock(); |
- mutex.AssertHeld(); |
- acquired++; |
- EpsilonRandomSleep(); |
- mutex.Unlock(); |
- } |
- |
- base::PlatformThread::Join(handle); |
- |
- EXPECT_GE(acquired, 20); |
- EXPECT_GE(thread.acquired(), 20); |
-} |
- |
-// Test that TryLock() works as expected --------------------------------------- |
- |
-class TryLockTestThread : public base::PlatformThread::Delegate { |
- public: |
- explicit TryLockTestThread(Mutex* mutex) : mutex_(mutex), got_lock_(false) {} |
- |
- void ThreadMain() override MOJO_NO_THREAD_SAFETY_ANALYSIS { |
- got_lock_ = mutex_->TryLock(); |
- if (got_lock_) { |
- mutex_->AssertHeld(); |
- mutex_->Unlock(); |
- } |
- } |
- |
- bool got_lock() const { return got_lock_; } |
- |
- private: |
- Mutex* mutex_; |
- bool got_lock_; |
- |
- MOJO_DISALLOW_COPY_AND_ASSIGN(TryLockTestThread); |
-}; |
- |
-TEST(MutexTest, TryLock) MOJO_NO_THREAD_SAFETY_ANALYSIS { |
- Mutex mutex; |
- |
- ASSERT_TRUE(mutex.TryLock()); |
- // We now have the mutex.... |
- |
- // This thread will not be able to get the mutex. |
- { |
- TryLockTestThread thread(&mutex); |
- base::PlatformThreadHandle handle; |
- |
- ASSERT_TRUE(base::PlatformThread::Create(0, &thread, &handle)); |
- |
- base::PlatformThread::Join(handle); |
- |
- ASSERT_FALSE(thread.got_lock()); |
- } |
- |
- mutex.Unlock(); |
- |
- // This thread will.... |
- { |
- TryLockTestThread thread(&mutex); |
- base::PlatformThreadHandle handle; |
- |
- ASSERT_TRUE(base::PlatformThread::Create(0, &thread, &handle)); |
- |
- base::PlatformThread::Join(handle); |
- |
- ASSERT_TRUE(thread.got_lock()); |
- // But it released it.... |
- ASSERT_TRUE(mutex.TryLock()); |
- } |
- |
- mutex.Unlock(); |
-} |
- |
-// Tests that mutexes actually exclude ----------------------------------------- |
- |
-class MutexLockTestThread : public base::PlatformThread::Delegate { |
- public: |
- MutexLockTestThread(Mutex* mutex, int* value) |
- : mutex_(mutex), value_(value) {} |
- |
- // Static helper which can also be called from the main thread. |
- static void DoStuff(Mutex* mutex, int* value) { |
- for (int i = 0; i < 40; i++) { |
- mutex->Lock(); |
- int v = *value; |
- EpsilonRandomSleep(); |
- *value = v + 1; |
- mutex->Unlock(); |
- } |
- } |
- |
- void ThreadMain() override { DoStuff(mutex_, value_); } |
- |
- private: |
- Mutex* mutex_; |
- int* value_; |
- |
- MOJO_DISALLOW_COPY_AND_ASSIGN(MutexLockTestThread); |
-}; |
- |
-TEST(MutexTest, MutexTwoThreads) { |
- Mutex mutex; |
- int value = 0; |
- |
- MutexLockTestThread thread(&mutex, &value); |
- base::PlatformThreadHandle handle; |
- |
- ASSERT_TRUE(base::PlatformThread::Create(0, &thread, &handle)); |
- |
- MutexLockTestThread::DoStuff(&mutex, &value); |
- |
- base::PlatformThread::Join(handle); |
- |
- EXPECT_EQ(2 * 40, value); |
-} |
- |
-TEST(MutexTest, MutexFourThreads) { |
- Mutex mutex; |
- int value = 0; |
- |
- MutexLockTestThread thread1(&mutex, &value); |
- MutexLockTestThread thread2(&mutex, &value); |
- MutexLockTestThread thread3(&mutex, &value); |
- base::PlatformThreadHandle handle1; |
- base::PlatformThreadHandle handle2; |
- base::PlatformThreadHandle handle3; |
- |
- ASSERT_TRUE(base::PlatformThread::Create(0, &thread1, &handle1)); |
- ASSERT_TRUE(base::PlatformThread::Create(0, &thread2, &handle2)); |
- ASSERT_TRUE(base::PlatformThread::Create(0, &thread3, &handle3)); |
- |
- MutexLockTestThread::DoStuff(&mutex, &value); |
- |
- base::PlatformThread::Join(handle1); |
- base::PlatformThread::Join(handle2); |
- base::PlatformThread::Join(handle3); |
- |
- EXPECT_EQ(4 * 40, value); |
-} |
- |
-// MutexLocker ----------------------------------------------------------------- |
- |
-TEST(MutexTest, MutexLocker) { |
- Mutex mutex; |
- |
- { |
- MutexLocker locker(&mutex); |
- mutex.AssertHeld(); |
- } |
- |
- // The destruction of |locker| should unlock |mutex|. |
- ASSERT_TRUE(mutex.TryLock()); |
- mutex.AssertHeld(); |
- mutex.Unlock(); |
-} |
- |
-} // namespace |
-} // namespace system |
-} // namespace mojo |