Home | History | Annotate | Download | only in base
      1 // Copyright (c) 2009 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/message_loop.h"
      6 #include "base/thread.h"
      7 #include "testing/gtest/include/gtest/gtest.h"
      8 
      9 namespace {
     10 
     11 // We use caps here just to ensure that the method name doesn't interfere with
     12 // the wildcarded suppressions.
     13 class TOOLS_SANITY_TEST_CONCURRENT_THREAD : public PlatformThread::Delegate {
     14  public:
     15   explicit TOOLS_SANITY_TEST_CONCURRENT_THREAD(bool *value) : value_(value) {}
     16   ~TOOLS_SANITY_TEST_CONCURRENT_THREAD() {}
     17   void ThreadMain() {
     18     *value_ = true;
     19   }
     20  private:
     21   bool* value_;
     22 };
     23 
     24 }
     25 
     26 // A memory leak detector should report an error in this test.
     27 TEST(ToolsSanityTest, MemoryLeak) {
     28   int *leak = new int[256];  // Leak some memory intentionally.
     29   leak[4] = 1;  // Make sure the allocated memory is used.
     30 }
     31 
     32 // A data race detector should report an error in this test.
     33 TEST(ToolsSanityTest, DataRace) {
     34   bool shared = false;
     35   PlatformThreadHandle a;
     36   PlatformThreadHandle b;
     37   PlatformThread::Delegate *thread1 =
     38       new TOOLS_SANITY_TEST_CONCURRENT_THREAD(&shared);
     39   PlatformThread::Delegate *thread2 =
     40       new TOOLS_SANITY_TEST_CONCURRENT_THREAD(&shared);
     41 
     42   PlatformThread::Create(0, thread1, &a);
     43   PlatformThread::Create(0, thread2, &b);
     44   PlatformThread::Join(a);
     45   PlatformThread::Join(b);
     46   EXPECT_TRUE(shared);
     47   delete thread1;
     48   delete thread2;
     49 }
     50 
     51