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 "chrome/browser/mach_broker_mac.h" 6 7 #include "base/synchronization/lock.h" 8 #include "testing/gtest/include/gtest/gtest.h" 9 10 class MachBrokerTest : public testing::Test { 11 public: 12 // Helper function to acquire/release locks and call |PlaceholderForPid()|. 13 void AddPlaceholderForPid(base::ProcessHandle pid) { 14 base::AutoLock lock(broker_.GetLock()); 15 broker_.AddPlaceholderForPid(pid); 16 } 17 18 // Helper function to acquire/release locks and call |FinalizePid()|. 19 void FinalizePid(base::ProcessHandle pid, 20 const MachBroker::MachInfo& mach_info) { 21 base::AutoLock lock(broker_.GetLock()); 22 broker_.FinalizePid(pid, mach_info); 23 } 24 25 protected: 26 MachBroker broker_; 27 }; 28 29 TEST_F(MachBrokerTest, Locks) { 30 // Acquire and release the locks. Nothing bad should happen. 31 base::AutoLock lock(broker_.GetLock()); 32 } 33 34 TEST_F(MachBrokerTest, AddPlaceholderAndFinalize) { 35 // Add a placeholder for PID 1. 36 AddPlaceholderForPid(1); 37 EXPECT_EQ(0u, broker_.TaskForPid(1)); 38 39 // Finalize PID 1. 40 FinalizePid(1, MachBroker::MachInfo().SetTask(100u)); 41 EXPECT_EQ(100u, broker_.TaskForPid(1)); 42 43 // Should be no entry for PID 2. 44 EXPECT_EQ(0u, broker_.TaskForPid(2)); 45 } 46 47 TEST_F(MachBrokerTest, Invalidate) { 48 AddPlaceholderForPid(1); 49 FinalizePid(1, MachBroker::MachInfo().SetTask(100u)); 50 51 EXPECT_EQ(100u, broker_.TaskForPid(1)); 52 broker_.InvalidatePid(1u); 53 EXPECT_EQ(0u, broker_.TaskForPid(1)); 54 } 55 56 TEST_F(MachBrokerTest, FinalizeUnknownPid) { 57 // Finalizing an entry for an unknown pid should not add it to the map. 58 FinalizePid(1u, MachBroker::MachInfo().SetTask(100u)); 59 EXPECT_EQ(0u, broker_.TaskForPid(1u)); 60 } 61