Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Unified Diff: chrome/browser/conflicts/module_database_win_unittest.cc

Issue 2721503003: Add ModuleInspector (Closed)
Patch Set: merge Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/conflicts/module_database_win_unittest.cc
diff --git a/chrome/browser/conflicts/module_database_win_unittest.cc b/chrome/browser/conflicts/module_database_win_unittest.cc
index 0b4555b4a55acf87b892a3f619efa452e3617f55..a6157f78574ce4145cc68d777c7b5253df0a9cdb 100644
--- a/chrome/browser/conflicts/module_database_win_unittest.cc
+++ b/chrome/browser/conflicts/module_database_win_unittest.cc
@@ -10,9 +10,9 @@
#include "base/bind.h"
#include "base/memory/ptr_util.h"
-#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
-#include "base/strings/utf_string_conversions.h"
+#include "base/test/scoped_task_scheduler.h"
+#include "base/threading/sequenced_task_runner_handle.h"
#include "base/threading/simple_thread.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -80,11 +80,8 @@ class ModuleDatabaseTest : public testing::Test {
ModuleDatabaseTest()
: dll1_(kDll1),
dll2_(kDll2),
- message_loop_(base::MakeUnique<base::MessageLoop>()),
- module_database_(
- base::MakeUnique<ModuleDatabase>(message_loop_->task_runner())) {}
-
- void RunLoopUntilIdle() { base::RunLoop().RunUntilIdle(); }
+ module_database_(base::MakeUnique<ModuleDatabase>(
+ base::SequencedTaskRunnerHandle::Get())) {}
const ModuleDatabase::ModuleMap& modules() {
return module_database_->modules_;
@@ -94,6 +91,8 @@ class ModuleDatabaseTest : public testing::Test {
return module_database_->processes_;
}
+ ModuleDatabase* module_database() { return module_database_.get(); }
+
static uint32_t ProcessTypeToBit(content::ProcessType process_type) {
return ModuleDatabase::ProcessTypeToBit(process_type);
}
@@ -108,20 +107,21 @@ class ModuleDatabaseTest : public testing::Test {
[module_id](const auto& x) { return module_id == x.first; });
}
- protected:
const base::FilePath dll1_;
const base::FilePath dll2_;
- std::unique_ptr<base::MessageLoop> message_loop_;
+ private:
+ // Must be before |module_database_|.
+ base::test::ScopedTaskScheduler scoped_task_scheduler_;
+
std::unique_ptr<ModuleDatabase> module_database_;
- private:
DISALLOW_COPY_AND_ASSIGN(ModuleDatabaseTest);
};
TEST_F(ModuleDatabaseTest, LoadAddressVectorOperations) {
using TMD = TestModuleDatabase;
- TestModuleDatabase::ModuleLoadAddresses la;
+ TMD::ModuleLoadAddresses la;
// Finds should fail in an empty collection.
EXPECT_EQ(TMD::kInvalidIndex, TMD::FindLoadAddressIndexById(0, la));
@@ -270,7 +270,7 @@ TEST_F(ModuleDatabaseTest, LoadAddressVectorOperations) {
TEST_F(ModuleDatabaseTest, LoadAddressVectorStressTest) {
using TMD = TestModuleDatabase;
- TestModuleDatabase::ModuleLoadAddresses la;
+ TMD::ModuleLoadAddresses la;
for (size_t n = 1; n < 200; ++n) {
// Will keep track of which elements have been inserted.
@@ -325,42 +325,45 @@ TEST_F(ModuleDatabaseTest, LoadAddressVectorStressTest) {
}
TEST_F(ModuleDatabaseTest, TasksAreBounced) {
- // Run a task on the current thread. This should not be bounced, so no
- // task should be scheduled on the task runner.
- module_database_->OnProcessStarted(kPid1, kCreateTime1,
- content::PROCESS_TYPE_BROWSER);
- EXPECT_TRUE(message_loop_->IsIdleForTesting());
- module_database_->OnModuleLoad(kPid1, kCreateTime1, dll1_, kSize1, kTime1,
- kGoodAddress1);
- EXPECT_TRUE(message_loop_->IsIdleForTesting());
- module_database_->OnProcessEnded(kPid1, kCreateTime1);
- EXPECT_TRUE(message_loop_->IsIdleForTesting());
+ // Run a task on the current thread. This should not be bounced, so their
+ // results should be immediately available.
+ module_database()->OnProcessStarted(kPid1, kCreateTime1,
+ content::PROCESS_TYPE_BROWSER);
+ EXPECT_EQ(1u, processes().size());
+ module_database()->OnModuleLoad(kPid1, kCreateTime1, dll1_, kSize1, kTime1,
+ kGoodAddress1);
+ EXPECT_EQ(1u, modules().size());
+ module_database()->OnProcessEnded(kPid1, kCreateTime1);
+ EXPECT_EQ(0u, processes().size());
// Indicate another process start on this thread. This call can't be
// bounced.
- module_database_->OnProcessStarted(kPid2, kCreateTime2,
- content::PROCESS_TYPE_BROWSER);
+ module_database()->OnProcessStarted(kPid2, kCreateTime2,
+ content::PROCESS_TYPE_BROWSER);
+ EXPECT_EQ(1u, processes().size());
- // Run similar tasks on another thread. These should be bounced.
+ // Run similar tasks on another thread with another module. These should be
+ // bounced.
RunTask(base::Bind(&ModuleDatabase::OnModuleLoad,
- base::Unretained(module_database_.get()), kPid2,
- kCreateTime2, dll1_, kSize1, kTime1, kGoodAddress1));
- EXPECT_FALSE(message_loop_->IsIdleForTesting());
- RunLoopUntilIdle();
+ base::Unretained(module_database()), kPid2, kCreateTime2,
+ dll2_, kSize1, kTime1, kGoodAddress1));
+ EXPECT_EQ(1u, modules().size());
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(2u, modules().size());
RunTask(base::Bind(&ModuleDatabase::OnProcessEnded,
- base::Unretained(module_database_.get()), kPid2,
- kCreateTime2));
- EXPECT_FALSE(message_loop_->IsIdleForTesting());
- RunLoopUntilIdle();
+ base::Unretained(module_database()), kPid2, kCreateTime2));
+ EXPECT_EQ(1u, processes().size());
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(0u, processes().size());
}
TEST_F(ModuleDatabaseTest, EventsWithoutProcessIgnore) {
EXPECT_EQ(0u, modules().size());
EXPECT_EQ(0u, processes().size());
- module_database_->OnModuleLoad(kPid1, kCreateTime1, dll1_, kSize1, kTime1,
- kGoodAddress1);
+ module_database()->OnModuleLoad(kPid1, kCreateTime1, dll1_, kSize1, kTime1,
+ kGoodAddress1);
EXPECT_EQ(0u, modules().size());
EXPECT_EQ(0u, processes().size());
@@ -371,8 +374,8 @@ TEST_F(ModuleDatabaseTest, OrphanedUnloadIgnored) {
EXPECT_EQ(0u, processes().size());
// Start a process.
- module_database_->OnProcessStarted(kPid1, kCreateTime1,
- content::PROCESS_TYPE_BROWSER);
+ module_database()->OnProcessStarted(kPid1, kCreateTime1,
+ content::PROCESS_TYPE_BROWSER);
EXPECT_EQ(0u, modules().size());
EXPECT_EQ(1u, processes().size());
auto p1 = processes().begin();
@@ -384,7 +387,7 @@ TEST_F(ModuleDatabaseTest, OrphanedUnloadIgnored) {
// Indicate a module unload. This should do nothing because there's no
// corresponding module.
- module_database_->OnModuleUnload(kPid1, kCreateTime1, kGoodAddress1);
+ module_database()->OnModuleUnload(kPid1, kCreateTime1, kGoodAddress1);
EXPECT_EQ(0u, modules().size());
EXPECT_EQ(1u, processes().size());
EXPECT_EQ(0u, p1->second.loaded_modules.size());
@@ -396,8 +399,8 @@ TEST_F(ModuleDatabaseTest, DatabaseIsConsistent) {
EXPECT_EQ(0u, processes().size());
// Start a process.
- module_database_->OnProcessStarted(kPid1, kCreateTime1,
- content::PROCESS_TYPE_BROWSER);
+ module_database()->OnProcessStarted(kPid1, kCreateTime1,
+ content::PROCESS_TYPE_BROWSER);
EXPECT_EQ(0u, modules().size());
EXPECT_EQ(1u, processes().size());
auto p1 = processes().begin();
@@ -408,8 +411,8 @@ TEST_F(ModuleDatabaseTest, DatabaseIsConsistent) {
EXPECT_EQ(0u, p1->second.unloaded_modules.size());
// Load a module.
- module_database_->OnModuleLoad(kPid1, kCreateTime1, dll1_, kSize1, kTime1,
- kGoodAddress1);
+ module_database()->OnModuleLoad(kPid1, kCreateTime1, dll1_, kSize1, kTime1,
+ kGoodAddress1);
EXPECT_EQ(1u, modules().size());
EXPECT_EQ(1u, processes().size());
@@ -426,8 +429,8 @@ TEST_F(ModuleDatabaseTest, DatabaseIsConsistent) {
EXPECT_EQ(1u, ModuleIdCount(m1->first.module_id, p1->second.loaded_modules));
// Provide a redundant load message for that module.
- module_database_->OnModuleLoad(kPid1, kCreateTime1, dll1_, kSize1, kTime1,
- kGoodAddress1);
+ module_database()->OnModuleLoad(kPid1, kCreateTime1, dll1_, kSize1, kTime1,
+ kGoodAddress1);
EXPECT_EQ(1u, modules().size());
EXPECT_EQ(1u, processes().size());
@@ -443,8 +446,8 @@ TEST_F(ModuleDatabaseTest, DatabaseIsConsistent) {
EXPECT_EQ(1u, ModuleIdCount(m1->first.module_id, p1->second.loaded_modules));
// Load a second module into the process.
- module_database_->OnModuleLoad(kPid1, kCreateTime1, dll2_, kSize2, kTime2,
- kGoodAddress2);
+ module_database()->OnModuleLoad(kPid1, kCreateTime1, dll2_, kSize2, kTime2,
+ kGoodAddress2);
EXPECT_EQ(2u, modules().size());
EXPECT_EQ(1u, processes().size());
@@ -462,7 +465,7 @@ TEST_F(ModuleDatabaseTest, DatabaseIsConsistent) {
EXPECT_EQ(1u, ModuleIdCount(m2->first.module_id, p1->second.loaded_modules));
// Unload the second module.
- module_database_->OnModuleUnload(kPid1, kCreateTime1, kGoodAddress2);
+ module_database()->OnModuleUnload(kPid1, kCreateTime1, kGoodAddress2);
EXPECT_EQ(2u, modules().size());
EXPECT_EQ(1u, processes().size());
@@ -480,8 +483,8 @@ TEST_F(ModuleDatabaseTest, DatabaseIsConsistent) {
ModuleIdCount(m2->first.module_id, p1->second.unloaded_modules));
// Start a process.
- module_database_->OnProcessStarted(kPid2, kCreateTime2,
- content::PROCESS_TYPE_RENDERER);
+ module_database()->OnProcessStarted(kPid2, kCreateTime2,
+ content::PROCESS_TYPE_RENDERER);
EXPECT_EQ(2u, modules().size());
EXPECT_EQ(2u, processes().size());
auto p2 = processes().rbegin();
@@ -492,8 +495,8 @@ TEST_F(ModuleDatabaseTest, DatabaseIsConsistent) {
EXPECT_EQ(0u, p2->second.unloaded_modules.size());
// Load the dummy.dll in the second process as well.
- module_database_->OnModuleLoad(kPid2, kCreateTime2, dll1_, kSize1, kTime1,
- kGoodAddress1);
+ module_database()->OnModuleLoad(kPid2, kCreateTime2, dll1_, kSize1, kTime1,
+ kGoodAddress1);
EXPECT_EQ(ProcessTypeToBit(content::PROCESS_TYPE_BROWSER) |
ProcessTypeToBit(content::PROCESS_TYPE_RENDERER),
m1->second.process_types);
@@ -505,7 +508,7 @@ TEST_F(ModuleDatabaseTest, DatabaseIsConsistent) {
EXPECT_EQ(1u, ModuleIdCount(m1->first.module_id, p2->second.loaded_modules));
// End the second process without an explicit unload. This invalidates |p2|.
- module_database_->OnProcessEnded(kPid2, kCreateTime2);
+ module_database()->OnProcessEnded(kPid2, kCreateTime2);
EXPECT_EQ(2u, modules().size());
EXPECT_EQ(1u, processes().size());
EXPECT_EQ(kPid1, p1->first.process_id);
@@ -517,7 +520,7 @@ TEST_F(ModuleDatabaseTest, DatabaseIsConsistent) {
m2->second.process_types);
// End the first process without an explicit unload. This invalidates |p1|.
- module_database_->OnProcessEnded(kPid1, kCreateTime1);
+ module_database()->OnProcessEnded(kPid1, kCreateTime1);
EXPECT_EQ(2u, modules().size());
EXPECT_EQ(0u, processes().size());
EXPECT_EQ(ProcessTypeToBit(content::PROCESS_TYPE_BROWSER) |
« no previous file with comments | « chrome/browser/conflicts/module_database_win.cc ('k') | chrome/browser/conflicts/module_event_sink_impl_win_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698