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: TOOLS_SANITY_TEST_CONCURRENT_THREAD(bool * value)15 explicit TOOLS_SANITY_TEST_CONCURRENT_THREAD(bool *value) : value_(value) {} ~TOOLS_SANITY_TEST_CONCURRENT_THREAD()16 ~TOOLS_SANITY_TEST_CONCURRENT_THREAD() {} ThreadMain()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. TEST(ToolsSanityTest,MemoryLeak)27TEST(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. TEST(ToolsSanityTest,DataRace)33TEST(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