Home | History | Annotate | Download | only in browser
      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