blob: a7eca4fd2f4ff770d181bfec2598d224d42dc7af [file] [log] [blame]
[email protected]b2e8e082009-12-21 17:44:201// 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
[email protected]ed0fbe62011-06-23 18:32:115#include "content/browser/mach_broker_mac.h"
[email protected]b2e8e082009-12-21 17:44:206
[email protected]20305ec2011-01-21 04:55:527#include "base/synchronization/lock.h"
[email protected]b2e8e082009-12-21 17:44:208#include "testing/gtest/include/gtest/gtest.h"
9
[email protected]46488322012-10-30 03:22:2010namespace content {
11
[email protected]b2e8e082009-12-21 17:44:2012class MachBrokerTest : public testing::Test {
13 public:
[email protected]b88a7492010-09-17 12:28:3214 // Helper function to acquire/release locks and call |PlaceholderForPid()|.
15 void AddPlaceholderForPid(base::ProcessHandle pid) {
[email protected]20305ec2011-01-21 04:55:5216 base::AutoLock lock(broker_.GetLock());
[email protected]b88a7492010-09-17 12:28:3217 broker_.AddPlaceholderForPid(pid);
18 }
19
[email protected]3c2119d2013-04-11 14:27:2820 void InvalidatePid(base::ProcessHandle pid) {
21 broker_.InvalidatePid(pid);
22 }
23
[email protected]b88a7492010-09-17 12:28:3224 // Helper function to acquire/release locks and call |FinalizePid()|.
25 void FinalizePid(base::ProcessHandle pid,
[email protected]3c2119d2013-04-11 14:27:2826 mach_port_t task_port) {
[email protected]20305ec2011-01-21 04:55:5227 base::AutoLock lock(broker_.GetLock());
[email protected]3c2119d2013-04-11 14:27:2828 broker_.FinalizePid(pid, task_port);
[email protected]b88a7492010-09-17 12:28:3229 }
30
31 protected:
[email protected]b2e8e082009-12-21 17:44:2032 MachBroker broker_;
33};
34
[email protected]b88a7492010-09-17 12:28:3235TEST_F(MachBrokerTest, Locks) {
36 // Acquire and release the locks. Nothing bad should happen.
[email protected]20305ec2011-01-21 04:55:5237 base::AutoLock lock(broker_.GetLock());
[email protected]b88a7492010-09-17 12:28:3238}
39
40TEST_F(MachBrokerTest, AddPlaceholderAndFinalize) {
41 // Add a placeholder for PID 1.
42 AddPlaceholderForPid(1);
43 EXPECT_EQ(0u, broker_.TaskForPid(1));
44
45 // Finalize PID 1.
[email protected]3c2119d2013-04-11 14:27:2846 FinalizePid(1, 100u);
[email protected]b88a7492010-09-17 12:28:3247 EXPECT_EQ(100u, broker_.TaskForPid(1));
48
49 // Should be no entry for PID 2.
[email protected]b2e8e082009-12-21 17:44:2050 EXPECT_EQ(0u, broker_.TaskForPid(2));
51}
52
53TEST_F(MachBrokerTest, Invalidate) {
[email protected]b88a7492010-09-17 12:28:3254 AddPlaceholderForPid(1);
[email protected]3c2119d2013-04-11 14:27:2855 FinalizePid(1, 100u);
[email protected]b88a7492010-09-17 12:28:3256
57 EXPECT_EQ(100u, broker_.TaskForPid(1));
[email protected]3c2119d2013-04-11 14:27:2858 InvalidatePid(1u);
[email protected]b2e8e082009-12-21 17:44:2059 EXPECT_EQ(0u, broker_.TaskForPid(1));
60}
[email protected]b88a7492010-09-17 12:28:3261
62TEST_F(MachBrokerTest, FinalizeUnknownPid) {
63 // Finalizing an entry for an unknown pid should not add it to the map.
[email protected]3c2119d2013-04-11 14:27:2864 FinalizePid(1u, 100u);
[email protected]b88a7492010-09-17 12:28:3265 EXPECT_EQ(0u, broker_.TaskForPid(1u));
66}
[email protected]46488322012-10-30 03:22:2067
68} // namespace content