Index: services/resource_coordinator/memory/coordinator/process_map_unittest.cc |
diff --git a/services/resource_coordinator/memory/coordinator/process_map_unittest.cc b/services/resource_coordinator/memory/coordinator/process_map_unittest.cc |
index 087a525373cdce2207bc2730ec40b9d5f3b4eb20..69b921236e7e70f449ecf913d0cf5f6deb9a96b8 100644 |
--- a/services/resource_coordinator/memory/coordinator/process_map_unittest.cc |
+++ b/services/resource_coordinator/memory/coordinator/process_map_unittest.cc |
@@ -4,6 +4,7 @@ |
#include <utility> |
+#include "base/strings/stringprintf.h" |
#include "services/resource_coordinator/memory/coordinator/process_map.h" |
#include "services/service_manager/public/cpp/identity.h" |
#include "services/service_manager/public/interfaces/service_manager.mojom.h" |
@@ -15,50 +16,58 @@ using RunningServiceInfoPtr = service_manager::mojom::RunningServiceInfoPtr; |
using ServiceManagerListenerRequest = |
service_manager::mojom::ServiceManagerListenerRequest; |
-class ProcessMapTest : public testing::Test { |
- public: |
- ProcessMapTest() : process_map_(nullptr) {} |
- |
- protected: |
- ProcessMap process_map_; |
-}; |
+RunningServiceInfoPtr MakeTestServiceInfo( |
+ const service_manager::Identity& identity, |
+ uint32_t pid) { |
+ RunningServiceInfoPtr info(service_manager::mojom::RunningServiceInfo::New()); |
+ info->identity = identity; |
+ info->pid = pid; |
+ return info; |
+} |
-TEST_F(ProcessMapTest, TypicalCase) { |
+TEST(ProcessMapTest, TypicalCase) { |
+ ProcessMap process_map(nullptr); |
service_manager::Identity id1("id1"); |
- EXPECT_EQ(base::kNullProcessId, process_map_.GetProcessId(id1)); |
- process_map_.OnInit(std::vector<RunningServiceInfoPtr>()); |
- EXPECT_EQ(base::kNullProcessId, process_map_.GetProcessId(id1)); |
+ EXPECT_EQ(base::kNullProcessId, process_map.GetProcessId(id1)); |
+ process_map.OnInit(std::vector<RunningServiceInfoPtr>()); |
+ EXPECT_EQ(base::kNullProcessId, process_map.GetProcessId(id1)); |
- RunningServiceInfoPtr info(service_manager::mojom::RunningServiceInfo::New()); |
- info->identity = id1; |
- info->pid = 1; |
- process_map_.OnServiceCreated(info.Clone()); |
- EXPECT_EQ(static_cast<base::ProcessId>(1), process_map_.GetProcessId(id1)); |
+ // In some platforms The OnServiceCreated() reports a null pid, and the real |
+ // pid comes only in the OnServiceStarted() callback. |
+ process_map.OnServiceCreated(MakeTestServiceInfo(id1, 0 /* pid */)); |
+ process_map.OnServiceCreated(MakeTestServiceInfo(id1, 1 /* pid */)); |
+ EXPECT_EQ(static_cast<base::ProcessId>(1), process_map.GetProcessId(id1)); |
- // Adding a separate service with a different identity should have no effect. |
- info->identity = service_manager::Identity("id2"); |
- info->pid = 2; |
- process_map_.OnServiceCreated(info.Clone()); |
- EXPECT_EQ(static_cast<base::ProcessId>(1), process_map_.GetProcessId(id1)); |
+ // Adding a separate service with a different identity should have no effect |
+ // on the first identity registered. |
+ service_manager::Identity id2("id2"); |
+ process_map.OnServiceCreated(MakeTestServiceInfo(id2, 2 /* pid */)); |
+ EXPECT_EQ(static_cast<base::ProcessId>(1), process_map.GetProcessId(id1)); |
+ EXPECT_EQ(static_cast<base::ProcessId>(2), process_map.GetProcessId(id2)); |
// Once the service is stopped, searching for its id should return a null pid. |
- process_map_.OnServiceStopped(id1); |
- EXPECT_EQ(base::kNullProcessId, process_map_.GetProcessId(id1)); |
+ process_map.OnServiceStopped(id1); |
+ EXPECT_EQ(base::kNullProcessId, process_map.GetProcessId(id1)); |
+ EXPECT_EQ(static_cast<base::ProcessId>(2), process_map.GetProcessId(id2)); |
} |
-TEST_F(ProcessMapTest, PresentInInit) { |
- service_manager::Identity id1("id1"); |
- RunningServiceInfoPtr info(service_manager::mojom::RunningServiceInfo::New()); |
- info->identity = id1; |
- info->pid = 1; |
- |
- std::vector<RunningServiceInfoPtr> v; |
- v.push_back(std::move(info)); |
- process_map_.OnInit(std::move(v)); |
- EXPECT_EQ(static_cast<base::ProcessId>(1), process_map_.GetProcessId(id1)); |
+TEST(ProcessMapTest, PresentInInit) { |
+ // Add a dummy entry so that the actual |ids| indexes are 1-based. |
+ std::vector<service_manager::Identity> ids{service_manager::Identity()}; |
+ std::vector<RunningServiceInfoPtr> instances; |
+ ProcessMap process_map(nullptr); |
+ for (uint32_t i = 1; i <= 3; i++) { |
+ ids.push_back(service_manager::Identity(base::StringPrintf("id%d", i))); |
+ instances.push_back(MakeTestServiceInfo(ids.back(), i /* pid */)); |
+ } |
+ process_map.OnInit(std::move(instances)); |
+ EXPECT_EQ(static_cast<base::ProcessId>(1), process_map.GetProcessId(ids[1])); |
+ EXPECT_EQ(static_cast<base::ProcessId>(2), process_map.GetProcessId(ids[2])); |
+ EXPECT_EQ(static_cast<base::ProcessId>(3), process_map.GetProcessId(ids[3])); |
- process_map_.OnServiceStopped(id1); |
- EXPECT_EQ(base::kNullProcessId, process_map_.GetProcessId(id1)); |
+ process_map.OnServiceStopped(ids[1]); |
+ EXPECT_EQ(base::kNullProcessId, process_map.GetProcessId(ids[1])); |
+ EXPECT_EQ(static_cast<base::ProcessId>(3), process_map.GetProcessId(ids[3])); |
} |
} // namespace memory_instrumentation |