Chromium Code Reviews| 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 90ce267634ac3a0cfc0b6bf350377250903534e0..1b7feee24fb13c2f37de6e5d94b27534a534e98d 100644 |
| --- a/chrome_elf/blacklist/test/blacklist_test.cc |
| +++ b/chrome_elf/blacklist/test/blacklist_test.cc |
| @@ -5,6 +5,7 @@ |
| #include "base/environment.h" |
| #include "base/files/file_path.h" |
| #include "base/files/scoped_temp_dir.h" |
| +#include "base/i18n/case_conversion.h" |
| #include "base/path_service.h" |
| #include "base/scoped_native_library.h" |
| #include "base/strings/string16.h" |
| @@ -30,8 +31,8 @@ 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) void TestDll_AddDllToBlacklist(const wchar_t* dll_name); |
| -__declspec(dllimport) void TestDll_RemoveDllFromBlacklist( |
| +__declspec(dllimport) bool TestDll_AddDllToBlacklist(const wchar_t* dll_name); |
| +__declspec(dllimport) bool TestDll_RemoveDllFromBlacklist( |
| const wchar_t* dll_name); |
| } |
| @@ -44,6 +45,7 @@ class BlacklistTest : public testing::Test { |
| virtual void TearDown() { |
| TestDll_RemoveDllFromBlacklist(kTestDllName1); |
| TestDll_RemoveDllFromBlacklist(kTestDllName2); |
| + TestDll_RemoveDllFromBlacklist(kTestDllName3); |
| } |
| }; |
| @@ -95,18 +97,23 @@ TEST_F(BlacklistTest, AddAndRemoveModules) { |
| EXPECT_TRUE(blacklist::RemoveDllFromBlacklist(L"foo.dll")); |
| EXPECT_FALSE(blacklist::RemoveDllFromBlacklist(L"foo.dll")); |
| + // Increase the blacklist size by 1 to include the NULL pointer |
| + // that marks the end. |
| + int empty_spaces = blacklist::kTroublesomeDllsMaxCount - ( |
| + blacklist::BlacklistSize() + 1); |
| std::vector<base::string16> added_dlls; |
| - added_dlls.reserve(blacklist::kTroublesomeDllsMaxCount); |
| - for (int i = 0; i < blacklist::kTroublesomeDllsMaxCount; ++i) { |
| + added_dlls.reserve(empty_spaces); |
| + for (int i = 0; i < empty_spaces; ++i) { |
| added_dlls.push_back(base::IntToString16(i) + L".dll"); |
| EXPECT_TRUE(blacklist::AddDllToBlacklist(added_dlls[i].c_str())) << i; |
| } |
| EXPECT_FALSE(blacklist::AddDllToBlacklist(L"overflow.dll")); |
| - for (int i = 0; i < blacklist::kTroublesomeDllsMaxCount; ++i) { |
| + for (int i = 0; i < empty_spaces; ++i) { |
| EXPECT_TRUE(blacklist::RemoveDllFromBlacklist(added_dlls[i].c_str())) << i; |
| } |
| - EXPECT_FALSE(blacklist::RemoveDllFromBlacklist(L"0.dll")); |
| - EXPECT_FALSE(blacklist::RemoveDllFromBlacklist(L"63.dll")); |
| + EXPECT_FALSE(blacklist::RemoveDllFromBlacklist(added_dlls[0].c_str())); |
| + EXPECT_FALSE(blacklist::RemoveDllFromBlacklist( |
| + added_dlls[empty_spaces - 1].c_str())); |
| } |
| TEST_F(BlacklistTest, LoadBlacklistedLibrary) { |
| @@ -131,7 +138,7 @@ TEST_F(BlacklistTest, LoadBlacklistedLibrary) { |
| // 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. |
| - TestDll_AddDllToBlacklist(test_data[i].dll_name); |
| + EXPECT_TRUE(TestDll_AddDllToBlacklist(test_data[i].dll_name)); |
| base::ScopedNativeLibrary dll_blacklisted( |
| current_dir.Append(test_data[i].dll_name)); |
| EXPECT_FALSE(dll_blacklisted.is_valid()); |
| @@ -140,11 +147,25 @@ TEST_F(BlacklistTest, LoadBlacklistedLibrary) { |
| // Remove the DLL from the blacklist. Ensure that it loads and that its |
| // entry point was called. |
| - TestDll_RemoveDllFromBlacklist(test_data[i].dll_name); |
| + EXPECT_TRUE(TestDll_RemoveDllFromBlacklist(test_data[i].dll_name)); |
| base::ScopedNativeLibrary dll(current_dir.Append(test_data[i].dll_name)); |
| EXPECT_TRUE(dll.is_valid()); |
| EXPECT_NE(0u, ::GetEnvironmentVariable(test_data[i].dll_beacon, NULL, 0)); |
| dll.Reset(NULL); |
| + |
| + ::SetEnvironmentVariable(test_data[i].dll_beacon, NULL); |
| + |
| + // Ensure that the dll won't load even if the name has different |
| + // capitalization. |
| + base::string16 uppercase_name = base::i18n::ToUpper(test_data[i].dll_name); |
| + EXPECT_TRUE(TestDll_AddDllToBlacklist(uppercase_name.c_str())); |
|
robertshield
2014/01/24 01:50:24
shouldn't only one of the name in the blacklist an
csharp
2014/01/24 16:22:59
Done.
|
| + base::ScopedNativeLibrary dll_blacklisted_different_case( |
| + current_dir.Append(uppercase_name.c_str())); |
| + EXPECT_FALSE(dll_blacklisted_different_case.is_valid()); |
| + EXPECT_EQ(0u, ::GetEnvironmentVariable(test_data[i].dll_beacon, NULL, 0)); |
| + dll_blacklisted_different_case.Reset(NULL); |
| + |
| + EXPECT_TRUE(TestDll_RemoveDllFromBlacklist(uppercase_name.c_str())); |
| } |
| #endif |
| } |