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 1f91956ab72006bf18c72c6a8c59a5d0f532d8c7..7fd3d260252348f1f0f57336172513d07f16dc04 100644 |
| --- a/chrome_elf/blacklist/test/blacklist_test.cc |
| +++ b/chrome_elf/blacklist/test/blacklist_test.cc |
| @@ -42,41 +42,48 @@ __declspec(dllimport) bool TestDll_SuccessfullyBlocked( |
| int* size); |
| } |
| +namespace { |
| + |
| class BlacklistTest : public testing::Test { |
| + protected: |
| + BlacklistTest() : override_manager_() { |
| + override_manager_.OverrideRegistry(HKEY_CURRENT_USER, L"beacon_test"); |
| + } |
| + |
| + base::win::RegKey* blacklist_registry_key_; |
|
robertshield
2014/06/16 13:56:54
While this case is quite simple, still prefer usin
krstnmnlsn
2014/06/16 17:37:43
Done. I will try to remember this!
|
| + registry_util::RegistryOverrideManager override_manager_; |
| + |
| + private: |
| virtual void SetUp() { |
| // Force an import from blacklist_test_main_dll. |
| InitBlacklistTestDll(); |
| + blacklist_registry_key_ = |
| + new base::win::RegKey(HKEY_CURRENT_USER, |
| + blacklist::kRegistryBeaconPath, |
| + KEY_QUERY_VALUE | KEY_SET_VALUE); |
| } |
| virtual void TearDown() { |
| TestDll_RemoveDllFromBlacklist(kTestDllName1); |
| TestDll_RemoveDllFromBlacklist(kTestDllName2); |
| TestDll_RemoveDllFromBlacklist(kTestDllName3); |
| + delete blacklist_registry_key_; |
| } |
| }; |
| -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"); |
| - |
| - base::win::RegKey blacklist_registry_key(HKEY_CURRENT_USER, |
| - blacklist::kRegistryBeaconPath, |
| - KEY_QUERY_VALUE | KEY_SET_VALUE); |
| - |
| - // Ensure that the beacon state starts off enabled for this version. |
| - LONG result = blacklist_registry_key.WriteValue(blacklist::kBeaconState, |
| - blacklist::BLACKLIST_ENABLED); |
| + // Ensure that the beacon state starts off 'running' for this version. |
| + LONG result = blacklist_registry_key_->WriteValue( |
| + blacklist::kBeaconState, blacklist::BLACKLIST_SETUP_RUNNING); |
| EXPECT_EQ(ERROR_SUCCESS, result); |
| - result = blacklist_registry_key.WriteValue(blacklist::kBeaconVersion, |
| - TEXT(CHROME_VERSION_STRING)); |
| + result = blacklist_registry_key_->WriteValue(blacklist::kBeaconVersion, |
| + TEXT(CHROME_VERSION_STRING)); |
| EXPECT_EQ(ERROR_SUCCESS, result); |
| // First call should find the beacon and reset it. |
| @@ -84,12 +91,6 @@ TEST_F(BlacklistTest, Beacon) { |
| // First call should succeed as the beacon is enabled. |
| EXPECT_TRUE(blacklist::LeaveSetupBeacon()); |
| - |
| - // Second call should fail indicating the beacon wasn't set as enabled. |
| - EXPECT_FALSE(blacklist::LeaveSetupBeacon()); |
| - |
| - // Resetting the beacon should work when setup beacon is present. |
| - EXPECT_TRUE(blacklist::ResetBeacon()); |
| } |
| TEST_F(BlacklistTest, AddAndRemoveModules) { |
| @@ -244,4 +245,83 @@ TEST_F(BlacklistTest, AddDllsFromRegistryToBlacklist) { |
| CheckBlacklistedDllsNotLoaded(); |
| } |
| +void TestResetBeacon(base::win::RegKey* key, |
| + DWORD input_state, |
| + DWORD expected_output_state) { |
| + LONG result = key->WriteValue(blacklist::kBeaconState, input_state); |
| + EXPECT_EQ(ERROR_SUCCESS, result); |
| + |
| + EXPECT_TRUE(blacklist::ResetBeacon()); |
| + DWORD blacklist_state = blacklist::BLACKLIST_STATE_MAX; |
| + result = key->ReadValueDW(blacklist::kBeaconState, &blacklist_state); |
| + EXPECT_EQ(ERROR_SUCCESS, result); |
| + EXPECT_EQ(expected_output_state, blacklist_state); |
| +} |
| + |
| +TEST_F(BlacklistTest, ResetBeacon) { |
| + // Ensure that ResetBeacon resets properly on successful runs and not on |
| + // failed or disabled runs. |
| + TestResetBeacon(blacklist_registry_key_, |
| + blacklist::BLACKLIST_SETUP_RUNNING, |
| + blacklist::BLACKLIST_ENABLED); |
| + |
| + TestResetBeacon(blacklist_registry_key_, |
| + blacklist::BLACKLIST_SETUP_FAILED, |
| + blacklist::BLACKLIST_SETUP_FAILED); |
| + |
| + TestResetBeacon(blacklist_registry_key_, |
| + blacklist::BLACKLIST_DISABLED, |
| + blacklist::BLACKLIST_DISABLED); |
| +} |
| + |
| +TEST_F(BlacklistTest, SetupFailed) { |
| + // Ensure that when the number of failed tries reaches the maximum allowed, |
| + // the blacklist state is set to failed. |
| + LONG result = blacklist_registry_key_->WriteValue( |
| + blacklist::kBeaconState, blacklist::BLACKLIST_SETUP_RUNNING); |
| + EXPECT_EQ(ERROR_SUCCESS, result); |
| + |
| + // Set the attempt count so that on the next failure the blacklist is |
| + // disabled. |
| + result = blacklist_registry_key_->WriteValue( |
| + blacklist::kBeaconAttemptCount, blacklist::kBeaconMaxAttempts - 1); |
| + EXPECT_EQ(ERROR_SUCCESS, result); |
| + |
| + EXPECT_FALSE(blacklist::LeaveSetupBeacon()); |
| + |
| + DWORD attempt_count = 0; |
| + blacklist_registry_key_->ReadValueDW(blacklist::kBeaconAttemptCount, |
| + &attempt_count); |
| + EXPECT_EQ(attempt_count, blacklist::kBeaconMaxAttempts); |
| + |
| + DWORD blacklist_state = blacklist::BLACKLIST_STATE_MAX; |
| + result = blacklist_registry_key_->ReadValueDW(blacklist::kBeaconState, |
| + &blacklist_state); |
| + EXPECT_EQ(ERROR_SUCCESS, result); |
| + EXPECT_EQ(blacklist_state, blacklist::BLACKLIST_SETUP_FAILED); |
| +} |
| + |
| +TEST_F(BlacklistTest, SetupSucceeded) { |
| + // Starting with the enabled beacon should result in the setup running state |
| + // and the attempt counter reset to zero. |
| + LONG result = blacklist_registry_key_->WriteValue( |
| + blacklist::kBeaconState, blacklist::BLACKLIST_ENABLED); |
| + EXPECT_EQ(ERROR_SUCCESS, result); |
| + result = blacklist_registry_key_->WriteValue(blacklist::kBeaconAttemptCount, |
| + blacklist::kBeaconMaxAttempts); |
| + EXPECT_EQ(ERROR_SUCCESS, result); |
| + |
| + EXPECT_TRUE(blacklist::LeaveSetupBeacon()); |
| + |
| + DWORD blacklist_state = blacklist::BLACKLIST_STATE_MAX; |
| + blacklist_registry_key_->ReadValueDW(blacklist::kBeaconState, |
| + &blacklist_state); |
| + EXPECT_EQ(blacklist_state, blacklist::BLACKLIST_SETUP_RUNNING); |
| + |
| + DWORD attempt_count = blacklist::kBeaconMaxAttempts; |
| + blacklist_registry_key_->ReadValueDW(blacklist::kBeaconAttemptCount, |
| + &attempt_count); |
| + EXPECT_EQ(static_cast<DWORD>(0), attempt_count); |
| +} |
| + |
| } // namespace |