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..e038d4f22e3d1c5666d5edc7f95517c54a73005d 100644 |
--- a/chrome_elf/blacklist/test/blacklist_test.cc |
+++ b/chrome_elf/blacklist/test/blacklist_test.cc |
@@ -41,6 +41,8 @@ __declspec(dllimport) bool TestDll_SuccessfullyBlocked( |
int* size); |
} |
+namespace { |
+ |
class BlacklistTest : public testing::Test { |
virtual void SetUp() { |
// Force an import from blacklist_test_main_dll. |
@@ -54,6 +56,13 @@ class BlacklistTest : public testing::Test { |
} |
}; |
+void ResetRegistry(base::win::RegKey* blacklist_registry_key) { |
+ blacklist_registry_key->WriteValue(blacklist::kBeaconState, |
+ blacklist::BLACKLIST_ENABLED); |
+ blacklist_registry_key->WriteValue(blacklist::kBeaconAttemptCount, |
+ static_cast<DWORD>(0)); |
+} |
+ |
TEST_F(BlacklistTest, Beacon) { |
registry_util::RegistryOverrideManager override_manager; |
override_manager.OverrideRegistry(HKEY_CURRENT_USER, L"beacon_test"); |
@@ -76,12 +85,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) { |
@@ -207,3 +210,100 @@ TEST_F(BlacklistTest, LoadBlacklistedLibrary) { |
EXPECT_EQ(0, num_blocked_dlls); |
} |
} |
+ |
+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()); |
csharp
2014/06/10 14:07:02
Nit: Please add a blank line above
krstnmnlsn
2014/06/10 22:03:27
Done.
|
+ 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. |
+ base::win::RegKey blacklist_registry_key(HKEY_CURRENT_USER, |
csharp
2014/06/10 14:07:02
A lot of tests seem to be declaring this, is it wo
krstnmnlsn
2014/06/10 22:03:27
Done.
|
+ blacklist::kRegistryBeaconPath, |
+ KEY_QUERY_VALUE | KEY_SET_VALUE); |
+ |
+ 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); |
+ |
+ ResetRegistry(&blacklist_registry_key); |
+} |
+ |
+TEST_F(BlacklistTest, SetupFailed) { |
+ // Ensure that when the number of failed tries reaches the maximum allowed the |
csharp
2014/06/10 14:07:02
nit: allowed -> allowed,
krstnmnlsn
2014/06/10 22:03:27
Done.
|
+ // blacklist state is set to failed. |
+ base::win::RegKey blacklist_registry_key(HKEY_CURRENT_USER, |
+ blacklist::kRegistryBeaconPath, |
+ KEY_QUERY_VALUE | KEY_SET_VALUE); |
+ |
+ 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); |
+ |
+ ResetRegistry(&blacklist_registry_key); |
+} |
+ |
+TEST_F(BlacklistTest, SetupSucceeded) { |
+ // Starting with the enabled beacon should result in the setup running state |
+ // and the attempt counter reset to zero. |
+ base::win::RegKey blacklist_registry_key(HKEY_CURRENT_USER, |
+ blacklist::kRegistryBeaconPath, |
+ KEY_QUERY_VALUE | KEY_SET_VALUE); |
+ |
+ 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); |
+ |
+ ResetRegistry(&blacklist_registry_key); |
+} |
+ |
+} // namespace |
csharp
2014/06/10 14:07:02
Please add a newline to the end of the file (lint
krstnmnlsn
2014/06/10 22:03:27
Checked my previous commit (which also complained
|