| Index: chrome_elf/blacklist/test/blacklist_test.cc
|
| diff --git a/chrome_elf/blacklist/test/blacklist_test.cc b/chrome_elf/blacklist/test/blacklist_test.cc
|
| index 05aeb14f1b123611451b66dd3111cc8665f8ef85..1f91956ab72006bf18c72c6a8c59a5d0f532d8c7 100644
|
| --- a/chrome_elf/blacklist/test/blacklist_test.cc
|
| +++ b/chrome_elf/blacklist/test/blacklist_test.cc
|
| @@ -32,6 +32,7 @@ extern "C" {
|
| // When modifying the blacklist in the test process, use the exported test dll
|
| // functions on the test blacklist dll, not the ones linked into the test
|
| // executable itself.
|
| +__declspec(dllimport) bool TestDll_AddDllsFromRegistryToBlacklist();
|
| __declspec(dllimport) bool TestDll_AddDllToBlacklist(const wchar_t* dll_name);
|
| __declspec(dllimport) bool TestDll_IsBlacklistInitialized();
|
| __declspec(dllimport) bool TestDll_RemoveDllFromBlacklist(
|
| @@ -54,6 +55,13 @@ class BlacklistTest : public testing::Test {
|
| }
|
| };
|
|
|
| +namespace {
|
| +
|
| +struct TestData {
|
| + const wchar_t* dll_name;
|
| + const wchar_t* dll_beacon;
|
| +} test_data[] = {{kTestDllName2, kDll2Beacon}, {kTestDllName3, kDll3Beacon}};
|
| +
|
| TEST_F(BlacklistTest, Beacon) {
|
| registry_util::RegistryOverrideManager override_manager;
|
| override_manager.OverrideRegistry(HKEY_CURRENT_USER, L"beacon_test");
|
| @@ -138,34 +146,14 @@ TEST_F(BlacklistTest, SuccessfullyBlocked) {
|
| }
|
| }
|
|
|
| -TEST_F(BlacklistTest, LoadBlacklistedLibrary) {
|
| +void CheckBlacklistedDllsNotLoaded() {
|
| base::FilePath current_dir;
|
| ASSERT_TRUE(PathService::Get(base::DIR_EXE, ¤t_dir));
|
|
|
| - // Ensure that the blacklist is loaded.
|
| - ASSERT_TRUE(TestDll_IsBlacklistInitialized());
|
| -
|
| - // Test that an un-blacklisted DLL can load correctly.
|
| - base::ScopedNativeLibrary dll1(current_dir.Append(kTestDllName1));
|
| - EXPECT_TRUE(dll1.is_valid());
|
| - dll1.Reset(NULL);
|
| -
|
| - int num_blocked_dlls = 0;
|
| - TestDll_SuccessfullyBlocked(NULL, &num_blocked_dlls);
|
| - EXPECT_EQ(0, num_blocked_dlls);
|
| -
|
| - struct TestData {
|
| - const wchar_t* dll_name;
|
| - const wchar_t* dll_beacon;
|
| - } test_data[] = {
|
| - { kTestDllName2, kDll2Beacon },
|
| - { kTestDllName3, kDll3Beacon }
|
| - };
|
| - for (int i = 0 ; i < arraysize(test_data); ++i) {
|
| - // Add the DLL to the blacklist, ensure that it is not loaded both by
|
| - // inspecting the handle returned by LoadLibrary and by looking for an
|
| - // environment variable that is set when the DLL's entry point is called.
|
| - EXPECT_TRUE(TestDll_AddDllToBlacklist(test_data[i].dll_name));
|
| + for (int i = 0; i < arraysize(test_data); ++i) {
|
| + // Ensure that the dll has not been loaded both by inspecting the handle
|
| + // returned by LoadLibrary and by looking for an environment variable that
|
| + // is set when the DLL's entry point is called.
|
| base::ScopedNativeLibrary dll_blacklisted(
|
| current_dir.Append(test_data[i].dll_name));
|
| EXPECT_FALSE(dll_blacklisted.is_valid());
|
| @@ -203,7 +191,57 @@ TEST_F(BlacklistTest, LoadBlacklistedLibrary) {
|
|
|
| // The blocked dll was removed, so we shouldn't get anything returned
|
| // here.
|
| + int num_blocked_dlls = 0;
|
| TestDll_SuccessfullyBlocked(NULL, &num_blocked_dlls);
|
| EXPECT_EQ(0, num_blocked_dlls);
|
| }
|
| }
|
| +
|
| +TEST_F(BlacklistTest, LoadBlacklistedLibrary) {
|
| + base::FilePath current_dir;
|
| + ASSERT_TRUE(PathService::Get(base::DIR_EXE, ¤t_dir));
|
| +
|
| + // Ensure that the blacklist is loaded.
|
| + ASSERT_TRUE(TestDll_IsBlacklistInitialized());
|
| +
|
| + // Test that an un-blacklisted DLL can load correctly.
|
| + base::ScopedNativeLibrary dll1(current_dir.Append(kTestDllName1));
|
| + EXPECT_TRUE(dll1.is_valid());
|
| + dll1.Reset(NULL);
|
| +
|
| + int num_blocked_dlls = 0;
|
| + TestDll_SuccessfullyBlocked(NULL, &num_blocked_dlls);
|
| + EXPECT_EQ(0, num_blocked_dlls);
|
| +
|
| + // Add all DLLs to the blacklist then check they are blocked.
|
| + for (int i = 0; i < arraysize(test_data); ++i) {
|
| + EXPECT_TRUE(TestDll_AddDllToBlacklist(test_data[i].dll_name));
|
| + }
|
| + CheckBlacklistedDllsNotLoaded();
|
| +}
|
| +
|
| +TEST_F(BlacklistTest, AddDllsFromRegistryToBlacklist) {
|
| + // Ensure that the blacklist is loaded.
|
| + ASSERT_TRUE(TestDll_IsBlacklistInitialized());
|
| +
|
| + // Delete the finch registry key to clear its values.
|
| + base::win::RegKey key(HKEY_CURRENT_USER,
|
| + blacklist::kRegistryFinchListPath,
|
| + KEY_QUERY_VALUE | KEY_SET_VALUE);
|
| + key.DeleteKey(L"");
|
| +
|
| + // Add the test dlls to the registry (with their name as both key and value).
|
| + base::win::RegKey finch_blacklist_registry_key(
|
| + HKEY_CURRENT_USER,
|
| + blacklist::kRegistryFinchListPath,
|
| + KEY_QUERY_VALUE | KEY_SET_VALUE);
|
| + for (int i = 0; i < arraysize(test_data); ++i) {
|
| + finch_blacklist_registry_key.WriteValue(test_data[i].dll_name,
|
| + test_data[i].dll_name);
|
| + }
|
| +
|
| + EXPECT_TRUE(TestDll_AddDllsFromRegistryToBlacklist());
|
| + CheckBlacklistedDllsNotLoaded();
|
| +}
|
| +
|
| +} // namespace
|
|
|