Kazuki Sakamoto 2023-07-14 10:59:39 -07:00 committed by Kazuki Sakamoto
parent 6fa8d11034
commit 39299f0d36

View File

@ -233,6 +233,11 @@ public:
m_module_spec = GetTestModuleSpec();
}
void TearDown() override {
if (m_module_sp)
ModuleList::RemoveSharedModule(m_module_sp);
}
void CheckNoCallback() {
EXPECT_FALSE(m_platform_sp->GetLocateModuleCallback());
EXPECT_EQ(m_callback_call_count, 0);
@ -257,51 +262,39 @@ protected:
TargetSP m_target_sp;
ProcessSP m_process_sp;
ModuleSpec m_module_spec;
ModuleSP m_module_sp;
int m_callback_call_count = 0;
};
} // namespace
TEST_F(LocateModuleCallbackTest, GetOrCreateModuleWithCachedModule) {
// Disable test on arm64 because of failures in the lldb incremental arm64
// bot.
#if defined(__arm64__) || defined(__aarch64__) || defined(_M_ARM64)
GTEST_SKIP() << "broken on arm64.";
#endif
// The module file is cached, and the locate module callback is not set.
// GetOrCreateModule should succeed to return the module from the cache.
FileSpec uuid_view = BuildCacheDir(m_test_dir);
CheckNoCallback();
ModuleSP module_sp =
m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(module_sp);
ASSERT_EQ(module_sp->GetFileSpec(), uuid_view);
ASSERT_FALSE(module_sp->GetSymbolFileFileSpec());
CheckStrippedSymbol(module_sp);
m_module_sp = m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(m_module_sp);
ASSERT_EQ(m_module_sp->GetFileSpec(), uuid_view);
ASSERT_FALSE(m_module_sp->GetSymbolFileFileSpec());
CheckStrippedSymbol(m_module_sp);
}
TEST_F(LocateModuleCallbackTest, GetOrCreateModuleWithCachedModuleAndSymbol) {
// The module and symbol files are cached, and the locate module callback is
// not set. GetOrCreateModule should succeed to return the module from the
// cache with the symbol.
// Disable test on arm64 because of failures in the lldb incremental arm64
// bot.
#if defined(__arm64__) || defined(__aarch64__) || defined(_M_ARM64)
GTEST_SKIP() << "broken on arm64.";
#endif
FileSpec uuid_view = BuildCacheDirWithSymbol(m_test_dir);
CheckNoCallback();
ModuleSP module_sp =
m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(module_sp);
ASSERT_EQ(module_sp->GetFileSpec(), uuid_view);
ASSERT_EQ(module_sp->GetSymbolFileFileSpec(), GetSymFileSpec(uuid_view));
CheckUnstrippedSymbol(module_sp);
m_module_sp = m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(m_module_sp);
ASSERT_EQ(m_module_sp->GetFileSpec(), uuid_view);
ASSERT_EQ(m_module_sp->GetSymbolFileFileSpec(), GetSymFileSpec(uuid_view));
CheckUnstrippedSymbol(m_module_sp);
}
TEST_F(LocateModuleCallbackTest,
@ -313,12 +306,11 @@ TEST_F(LocateModuleCallbackTest,
CheckNoCallback();
ModuleSP module_sp =
m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(module_sp);
ASSERT_EQ(module_sp->GetFileSpec(), uuid_view);
ASSERT_EQ(module_sp->GetSymbolFileFileSpec(), GetSymFileSpec(uuid_view));
CheckUnstrippedSymbol(module_sp);
m_module_sp = m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(m_module_sp);
ASSERT_EQ(m_module_sp->GetFileSpec(), uuid_view);
ASSERT_EQ(m_module_sp->GetSymbolFileFileSpec(), GetSymFileSpec(uuid_view));
CheckUnstrippedSymbol(m_module_sp);
}
TEST_F(LocateModuleCallbackTest, GetOrCreateModuleFailure) {
@ -329,9 +321,8 @@ TEST_F(LocateModuleCallbackTest, GetOrCreateModuleFailure) {
CheckNoCallback();
ModuleSP module_sp =
m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
ASSERT_FALSE(module_sp);
m_module_sp = m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
ASSERT_FALSE(m_module_sp);
}
TEST_F(LocateModuleCallbackTest, GetOrCreateModuleCallbackFailureNoCache) {
@ -347,9 +338,8 @@ TEST_F(LocateModuleCallbackTest, GetOrCreateModuleCallbackFailureNoCache) {
return Status("The locate module callback failed");
});
ModuleSP module_sp =
m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
ASSERT_FALSE(module_sp);
m_module_sp = m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
ASSERT_FALSE(m_module_sp);
}
TEST_F(LocateModuleCallbackTest, GetOrCreateModuleCallbackFailureCached) {
@ -365,12 +355,11 @@ TEST_F(LocateModuleCallbackTest, GetOrCreateModuleCallbackFailureCached) {
return Status("The locate module callback failed");
});
ModuleSP module_sp =
m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(module_sp);
ASSERT_EQ(module_sp->GetFileSpec(), uuid_view);
ASSERT_FALSE(module_sp->GetSymbolFileFileSpec());
CheckStrippedSymbol(module_sp);
m_module_sp = m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(m_module_sp);
ASSERT_EQ(m_module_sp->GetFileSpec(), uuid_view);
ASSERT_FALSE(m_module_sp->GetSymbolFileFileSpec());
CheckStrippedSymbol(m_module_sp);
}
TEST_F(LocateModuleCallbackTest, GetOrCreateModuleCallbackNoFiles) {
@ -388,12 +377,12 @@ TEST_F(LocateModuleCallbackTest, GetOrCreateModuleCallbackNoFiles) {
return Status();
});
ModuleSP module_sp =
m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(module_sp);
ASSERT_EQ(module_sp->GetFileSpec(), uuid_view);
ASSERT_FALSE(module_sp->GetSymbolFileFileSpec());
CheckStrippedSymbol(module_sp);
m_module_sp = m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(m_module_sp);
ASSERT_EQ(m_module_sp->GetFileSpec(), uuid_view);
ASSERT_FALSE(m_module_sp->GetSymbolFileFileSpec());
CheckStrippedSymbol(m_module_sp);
ModuleList::RemoveSharedModule(m_module_sp);
}
TEST_F(LocateModuleCallbackTest, GetOrCreateModuleCallbackNonExistentModule) {
@ -410,12 +399,12 @@ TEST_F(LocateModuleCallbackTest, GetOrCreateModuleCallbackNonExistentModule) {
return Status();
});
ModuleSP module_sp =
m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(module_sp);
ASSERT_EQ(module_sp->GetFileSpec(), uuid_view);
ASSERT_FALSE(module_sp->GetSymbolFileFileSpec());
CheckStrippedSymbol(module_sp);
m_module_sp = m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(m_module_sp);
ASSERT_EQ(m_module_sp->GetFileSpec(), uuid_view);
ASSERT_FALSE(m_module_sp->GetSymbolFileFileSpec());
CheckStrippedSymbol(m_module_sp);
ModuleList::RemoveSharedModule(m_module_sp);
}
TEST_F(LocateModuleCallbackTest, GetOrCreateModuleCallbackNonExistentSymbol) {
@ -435,12 +424,12 @@ TEST_F(LocateModuleCallbackTest, GetOrCreateModuleCallbackNonExistentSymbol) {
return Status();
});
ModuleSP module_sp =
m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(module_sp);
ASSERT_EQ(module_sp->GetFileSpec(), uuid_view);
ASSERT_TRUE(module_sp->GetSymbolFileFileSpec().GetPath().empty());
CheckStrippedSymbol(module_sp);
m_module_sp = m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(m_module_sp);
ASSERT_EQ(m_module_sp->GetFileSpec(), uuid_view);
ASSERT_TRUE(m_module_sp->GetSymbolFileFileSpec().GetPath().empty());
CheckStrippedSymbol(m_module_sp);
ModuleList::RemoveSharedModule(m_module_sp);
}
TEST_F(LocateModuleCallbackTest, GetOrCreateModuleCallbackSuccessWithModule) {
@ -456,13 +445,13 @@ TEST_F(LocateModuleCallbackTest, GetOrCreateModuleCallbackSuccessWithModule) {
return Status();
});
ModuleSP module_sp =
m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(module_sp);
ASSERT_EQ(module_sp->GetFileSpec(),
m_module_sp = m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(m_module_sp);
ASSERT_EQ(m_module_sp->GetFileSpec(),
FileSpec(GetInputFilePath(k_module_file)));
ASSERT_FALSE(module_sp->GetSymbolFileFileSpec());
CheckStrippedSymbol(module_sp);
ASSERT_FALSE(m_module_sp->GetSymbolFileFileSpec());
CheckStrippedSymbol(m_module_sp);
ModuleList::RemoveSharedModule(m_module_sp);
}
TEST_F(LocateModuleCallbackTest,
@ -481,13 +470,13 @@ TEST_F(LocateModuleCallbackTest,
return Status();
});
ModuleSP module_sp =
m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(module_sp);
ASSERT_EQ(module_sp->GetFileSpec(),
m_module_sp = m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(m_module_sp);
ASSERT_EQ(m_module_sp->GetFileSpec(),
FileSpec(GetInputFilePath(k_symbol_file)));
ASSERT_FALSE(module_sp->GetSymbolFileFileSpec());
CheckUnstrippedSymbol(module_sp);
ASSERT_FALSE(m_module_sp->GetSymbolFileFileSpec());
CheckUnstrippedSymbol(m_module_sp);
ModuleList::RemoveSharedModule(m_module_sp);
}
TEST_F(LocateModuleCallbackTest,
@ -507,14 +496,14 @@ TEST_F(LocateModuleCallbackTest,
return Status();
});
ModuleSP module_sp =
m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(module_sp);
ASSERT_EQ(module_sp->GetFileSpec(),
m_module_sp = m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(m_module_sp);
ASSERT_EQ(m_module_sp->GetFileSpec(),
FileSpec(GetInputFilePath(k_symbol_file)));
ASSERT_EQ(module_sp->GetSymbolFileFileSpec(),
ASSERT_EQ(m_module_sp->GetSymbolFileFileSpec(),
FileSpec(GetInputFilePath(k_symbol_file)));
CheckUnstrippedSymbol(module_sp);
CheckUnstrippedSymbol(m_module_sp);
ModuleList::RemoveSharedModule(m_module_sp);
}
TEST_F(LocateModuleCallbackTest,
@ -533,14 +522,14 @@ TEST_F(LocateModuleCallbackTest,
return Status();
});
ModuleSP module_sp =
m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(module_sp);
ASSERT_EQ(module_sp->GetFileSpec(),
m_module_sp = m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(m_module_sp);
ASSERT_EQ(m_module_sp->GetFileSpec(),
FileSpec(GetInputFilePath(k_module_file)));
ASSERT_EQ(module_sp->GetSymbolFileFileSpec(),
ASSERT_EQ(m_module_sp->GetSymbolFileFileSpec(),
FileSpec(GetInputFilePath(k_symbol_file)));
CheckUnstrippedSymbol(module_sp);
CheckUnstrippedSymbol(m_module_sp);
ModuleList::RemoveSharedModule(m_module_sp);
}
TEST_F(LocateModuleCallbackTest,
@ -559,14 +548,14 @@ TEST_F(LocateModuleCallbackTest,
return Status();
});
ModuleSP module_sp =
m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(module_sp);
ASSERT_EQ(module_sp->GetFileSpec(),
m_module_sp = m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(m_module_sp);
ASSERT_EQ(m_module_sp->GetFileSpec(),
FileSpec(GetInputFilePath(k_module_file)));
ASSERT_EQ(module_sp->GetSymbolFileFileSpec(),
ASSERT_EQ(m_module_sp->GetSymbolFileFileSpec(),
FileSpec(GetInputFilePath(k_breakpad_symbol_file)));
CheckUnstrippedSymbol(module_sp);
CheckUnstrippedSymbol(m_module_sp);
ModuleList::RemoveSharedModule(m_module_sp);
}
TEST_F(LocateModuleCallbackTest,
@ -584,13 +573,13 @@ TEST_F(LocateModuleCallbackTest,
return Status();
});
ModuleSP module_sp =
m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(module_sp);
ASSERT_EQ(module_sp->GetFileSpec(), uuid_view);
ASSERT_EQ(module_sp->GetSymbolFileFileSpec(),
m_module_sp = m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(m_module_sp);
ASSERT_EQ(m_module_sp->GetFileSpec(), uuid_view);
ASSERT_EQ(m_module_sp->GetSymbolFileFileSpec(),
FileSpec(GetInputFilePath(k_symbol_file)));
CheckUnstrippedSymbol(module_sp);
CheckUnstrippedSymbol(m_module_sp);
ModuleList::RemoveSharedModule(m_module_sp);
}
TEST_F(LocateModuleCallbackTest,
@ -608,13 +597,13 @@ TEST_F(LocateModuleCallbackTest,
return Status();
});
ModuleSP module_sp =
m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(module_sp);
ASSERT_EQ(module_sp->GetFileSpec(), uuid_view);
ASSERT_EQ(module_sp->GetSymbolFileFileSpec(),
m_module_sp = m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
CheckModule(m_module_sp);
ASSERT_EQ(m_module_sp->GetFileSpec(), uuid_view);
ASSERT_EQ(m_module_sp->GetSymbolFileFileSpec(),
FileSpec(GetInputFilePath(k_breakpad_symbol_file)));
CheckUnstrippedSymbol(module_sp);
CheckUnstrippedSymbol(m_module_sp);
ModuleList::RemoveSharedModule(m_module_sp);
}
TEST_F(LocateModuleCallbackTest,
@ -631,9 +620,8 @@ TEST_F(LocateModuleCallbackTest,
return Status();
});
ModuleSP module_sp =
m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
ASSERT_FALSE(module_sp);
m_module_sp = m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
ASSERT_FALSE(m_module_sp);
}
TEST_F(LocateModuleCallbackTest,
@ -650,7 +638,6 @@ TEST_F(LocateModuleCallbackTest,
return Status();
});
ModuleSP module_sp =
m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
ASSERT_FALSE(module_sp);
}
m_module_sp = m_target_sp->GetOrCreateModule(m_module_spec, /*notify=*/false);
ASSERT_FALSE(m_module_sp);
}