Index: base/reg_key_unittest.cc |
diff --git a/base/reg_key_unittest.cc b/base/reg_key_unittest.cc |
deleted file mode 100644 |
index 31c5b6cf1afc672e2d6eabcec1ced603a7f30d3b..0000000000000000000000000000000000000000 |
--- a/base/reg_key_unittest.cc |
+++ /dev/null |
@@ -1,918 +0,0 @@ |
-// Copyright 2003-2009 Google Inc. |
-// |
-// Licensed under the Apache License, Version 2.0 (the "License"); |
-// you may not use this file except in compliance with the License. |
-// You may obtain a copy of the License at |
-// |
-// http://www.apache.org/licenses/LICENSE-2.0 |
-// |
-// Unless required by applicable law or agreed to in writing, software |
-// distributed under the License is distributed on an "AS IS" BASIS, |
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-// See the License for the specific language governing permissions and |
-// limitations under the License. |
-// ======================================================================== |
- |
-#include "omaha/base/reg_key.h" |
-#include "omaha/base/debug.h" |
-#include "omaha/base/utils.h" |
-#include "omaha/testing/unit_test.h" |
- |
-namespace omaha { |
- |
-#define kStTestRkeyRelativeBase _T("Software\\") SHORT_COMPANY_NAME _T("\\") PRODUCT_NAME _T("\\UnitTest") |
-#define kStTestRkeyBase _T("HKCU\\") kStTestRkeyRelativeBase |
-#define kStRkey1Name _T("TEST") |
-#define kStRkey1 kStTestRkeyBase _T("\\") kStRkey1Name |
-#define kRkey1 kStTestRkeyRelativeBase _T("\\") kStRkey1Name |
-#define kStRkey2 kStTestRkeyBase _T("\\TEST2") |
-#define kStRkey3 kStTestRkeyBase _T("\\TEST3") |
-#define kRkey1SubkeyName _T("subkey_test") |
-#define kRkey1Subkey kRkey1 _T("\\") kRkey1SubkeyName |
-#define kStRkey1Subkey kStRkey1 _T("\\") kRkey1SubkeyName |
- |
-// NON - STATIC |
- |
-#define kValNameInt _T("Int32 Value") |
-#define kRenameValNameInt _T("Renamed Int32 Value") |
-#define kIntVal (DWORD)20 |
-#define kIntVal2 (DWORD)30 |
- |
-#define kValNameInt64 _T("Int64 Value") |
-#define kIntVal64 (DWORD64)40 |
-#define kIntVal642 (DWORD64)50 |
- |
-#define kValNameStr _T("Str Value") |
-#define kStrVal _T("Some string data 1") |
-#define kStrVal2 _T("Some string data 2") |
- |
-#define kValNameBinary _T("Binary Value") |
-#define kBinaryVal "Some binary data abcdefghi 1" |
-#define kBinaryVal2 "Some binary data abcdefghi 2" |
- |
-// STATIC |
- |
-#define kStValNameInt _T("Static Int32 Value") |
-#define kStIntVal (DWORD)60 |
- |
-#define kStValNameInt64 _T("Static Int64 Value") |
-#define kStIntVal64 (DWORD64)80 |
- |
-#define kStValNameFloat _T("Static Float Value") |
-#define kStFloatVal (static_cast<float>(12.3456789)) |
- |
-#define kStValNameDouble _T("Static Double Value") |
-#define kStDoubleVal (static_cast<double>(98.7654321)) |
- |
-#define kStValNameStr _T("Static Str Value") |
-#define kRenameStValNameStr _T("Renamed Static Str Value") |
-#define kStStrVal _T("Some static string data 2") |
- |
-#define kStValNameBinary _T("Static Binary Value") |
-#define kStBinaryVal "Some static binary data abcdefghi 2" |
- |
-// Test the private member functions of RegKey |
-class RegKeyTestClass : public testing::Test { |
- protected: |
- static const HKEY GetHKey(const RegKey& reg) { |
- return reg.h_key_; |
- } |
- |
- static CString GetParentKeyInfo(CString* key_name) { |
- return RegKey::GetParentKeyInfo(key_name); |
- } |
-}; |
- |
-class RegKeyCleanupTestKeyTest : public testing::Test { |
- protected: |
- virtual void SetUp() { |
- EXPECT_SUCCEEDED(RegKey::DeleteKey(kStTestRkeyBase)); |
- } |
- |
- virtual void TearDown() { |
- EXPECT_SUCCEEDED(RegKey::DeleteKey(kStTestRkeyBase)); |
- } |
- |
- RegKey key_; |
-}; |
- |
-// Make sure the RegKey is nice and clean when we first initialize it |
-TEST_F(RegKeyTestClass, Init) { |
- // Make a new RegKey object so we can test its pristine state |
- RegKey reg; |
- |
- ASSERT_TRUE(GetHKey(reg) == NULL); |
-} |
- |
-// Make sure the helper functions work |
-TEST_F(RegKeyTestClass, Helper) { |
- // Dud items cause NULL |
- CString temp_key; |
- |
- // RegKey::GetRootKeyInfo turns a string into the HKEY and subtree value |
- |
- // Try out some dud values |
- temp_key = _T(""); |
- ASSERT_TRUE(RegKey::GetRootKeyInfo(&temp_key) == NULL); |
- ASSERT_STREQ(temp_key, _T("")); |
- |
- temp_key = _T("a"); |
- ASSERT_TRUE(RegKey::GetRootKeyInfo(&temp_key) == NULL); |
- ASSERT_STREQ(temp_key, _T("")); |
- |
- // The basics |
- temp_key = _T("HKLM\\a"); |
- ASSERT_EQ(RegKey::GetRootKeyInfo(&temp_key), HKEY_LOCAL_MACHINE); |
- ASSERT_STREQ(temp_key, _T("a")); |
- |
- temp_key = _T("HKEY_LOCAL_MACHINE\\a"); |
- ASSERT_EQ(RegKey::GetRootKeyInfo(&temp_key), HKEY_LOCAL_MACHINE); |
- ASSERT_STREQ(temp_key, _T("a")); |
- |
- temp_key = _T("HKCU\\a"); |
- ASSERT_EQ(RegKey::GetRootKeyInfo(&temp_key), HKEY_CURRENT_USER); |
- ASSERT_STREQ(temp_key, _T("a")); |
- |
- temp_key = _T("HKEY_CURRENT_USER\\a"); |
- ASSERT_EQ(RegKey::GetRootKeyInfo(&temp_key), HKEY_CURRENT_USER); |
- ASSERT_STREQ(temp_key, _T("a")); |
- |
- temp_key = _T("HKU\\a"); |
- ASSERT_EQ(RegKey::GetRootKeyInfo(&temp_key), HKEY_USERS); |
- ASSERT_STREQ(temp_key, _T("a")); |
- |
- temp_key = _T("HKEY_USERS\\a"); |
- ASSERT_EQ(RegKey::GetRootKeyInfo(&temp_key), HKEY_USERS); |
- ASSERT_STREQ(temp_key, _T("a")); |
- |
- temp_key = _T("HKCR\\a"); |
- ASSERT_EQ(RegKey::GetRootKeyInfo(&temp_key), HKEY_CLASSES_ROOT); |
- ASSERT_STREQ(temp_key, _T("a")); |
- |
- temp_key = _T("HKEY_CLASSES_ROOT\\a"); |
- ASSERT_EQ(RegKey::GetRootKeyInfo(&temp_key), HKEY_CLASSES_ROOT); |
- ASSERT_STREQ(temp_key, _T("a")); |
- |
- // Make sure it is case insensitive |
- temp_key = _T("hkcr\\a"); |
- ASSERT_EQ(RegKey::GetRootKeyInfo(&temp_key), HKEY_CLASSES_ROOT); |
- ASSERT_STREQ(temp_key, _T("a")); |
- |
- temp_key = _T("hkey_CLASSES_ROOT\\a"); |
- ASSERT_EQ(RegKey::GetRootKeyInfo(&temp_key), HKEY_CLASSES_ROOT); |
- ASSERT_STREQ(temp_key, _T("a")); |
- |
- // Test out temp_GetParentKeyInfo |
- |
- // dud cases |
- temp_key = _T(""); |
- ASSERT_STREQ(GetParentKeyInfo(&temp_key), _T("")); |
- ASSERT_STREQ(temp_key, _T("")); |
- |
- temp_key = _T("a"); |
- ASSERT_STREQ(GetParentKeyInfo(&temp_key), _T("")); |
- ASSERT_STREQ(temp_key, _T("a")); |
- |
- temp_key = _T("a\\b"); |
- ASSERT_STREQ(GetParentKeyInfo(&temp_key), _T("a")); |
- ASSERT_STREQ(temp_key, _T("b")); |
- |
- temp_key = _T("\\b"); |
- ASSERT_STREQ(GetParentKeyInfo(&temp_key), _T("")); |
- ASSERT_STREQ(temp_key, _T("b")); |
- |
- |
- // Some regular cases |
- temp_key = _T("HKEY_CLASSES_ROOT\\moon"); |
- ASSERT_STREQ(GetParentKeyInfo(&temp_key), _T("HKEY_CLASSES_ROOT")); |
- ASSERT_STREQ(temp_key, _T("moon")); |
- |
- temp_key = _T("HKEY_CLASSES_ROOT\\moon\\doggy"); |
- ASSERT_STREQ(GetParentKeyInfo(&temp_key), |
- _T("HKEY_CLASSES_ROOT\\moon")); |
- ASSERT_STREQ(temp_key, _T("doggy")); |
-} |
- |
- |
-TEST(RegKeyTest, RegKey) { |
- // |
- // PRIVATE MEMBER WHITE BOX TESTS |
- // |
- RegKeyWithChangeEvent r_key; |
- bool bool_res = false; |
- HRESULT hr = E_FAIL; |
- DWORD int_val = 0; |
- DWORD64 int64_val = 0; |
- time64 t = 0; |
- float float_val = 0; |
- double double_val = 0; |
- TCHAR * str_val = NULL; |
- byte * binary_val = NULL; |
- DWORD byte_count = 0; |
- |
- // Just in case... |
- // make sure the no test key residue is left from previous aborted runs |
- hr = RegKey::DeleteKey(kStTestRkeyBase); |
- |
- // first test the non-static version |
- |
- // create a reg key |
- hr = r_key.Create(HKEY_CURRENT_USER, kRkey1); |
- ASSERT_SUCCEEDED(hr); |
- |
- // do the create twice - it should return the already created one |
- hr = r_key.Create(HKEY_CURRENT_USER, kRkey1); |
- ASSERT_SUCCEEDED(hr); |
- |
- // now do an open - should work just fine |
- hr = r_key.Open(HKEY_CURRENT_USER, kRkey1); |
- ASSERT_SUCCEEDED(hr); |
- |
- // get an in-existent value |
- hr = r_key.GetValue(kValNameInt, &int_val); |
- ASSERT_EQ(hr, HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)); |
- |
- // get an in-existent value type |
- DWORD value_type = REG_NONE; |
- hr = r_key.GetValueType(kValNameInt, &value_type); |
- ASSERT_EQ(hr, HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)); |
- |
- // set-up an event to watch for changes |
- hr = r_key.SetupEvent(TRUE, |
- REG_NOTIFY_CHANGE_NAME | REG_NOTIFY_CHANGE_LAST_SET); |
- ASSERT_SUCCEEDED(hr); |
- HANDLE change_event = r_key.change_event(); |
- ASSERT_EQ(::WaitForSingleObject(change_event, 0), WAIT_TIMEOUT); |
- |
- // set and get some values and verify that the handle gets signaled |
- |
- // set an INT 32 |
- hr = r_key.SetValue(kValNameInt, kIntVal); |
- ASSERT_SUCCEEDED(hr); |
- |
- hr = r_key.GetValueType(kValNameInt, &value_type); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(REG_DWORD, value_type); |
- hr = RegKey::GetValueType(kStRkey1, kValNameInt, &value_type); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(REG_DWORD, value_type); |
- |
- // verify that we got the change and that the event got reset appropriately |
- // and set-up the notification again (use the actual event this time) |
- ASSERT_EQ(::WaitForSingleObject(change_event, 0), WAIT_OBJECT_0); |
- hr = r_key.SetupEvent(TRUE, |
- REG_NOTIFY_CHANGE_NAME | REG_NOTIFY_CHANGE_LAST_SET); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_FALSE(r_key.HasChangeOccurred()); |
- |
- // check that the value exists |
- bool_res = r_key.HasValue(kValNameInt); |
- ASSERT_TRUE(bool_res); |
- // No change expected on a read |
- ASSERT_FALSE(r_key.HasChangeOccurred()); |
- |
- // read it back |
- hr = r_key.GetValue(kValNameInt, &int_val); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(int_val, kIntVal); |
- // No change expected on a read |
- ASSERT_FALSE(r_key.HasChangeOccurred()); |
- |
- // set it again! |
- hr = r_key.SetValue(kValNameInt, kIntVal2); |
- ASSERT_SUCCEEDED(hr); |
- // verify that we got the change and that the event got reset appropriately |
- // and set-up the notification again |
- ASSERT_TRUE(r_key.HasChangeOccurred()); |
- hr = r_key.SetupEvent(TRUE, |
- REG_NOTIFY_CHANGE_NAME | REG_NOTIFY_CHANGE_LAST_SET); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_FALSE(r_key.HasChangeOccurred()); |
- |
- // read it again |
- hr = r_key.GetValue(kValNameInt, &int_val); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(int_val, kIntVal2); |
- // No change expected on a read |
- ASSERT_FALSE(r_key.HasChangeOccurred()); |
- |
- // delete the value |
- hr = r_key.DeleteValue(kValNameInt); |
- ASSERT_SUCCEEDED(hr); |
- // verify that we got the change |
- ASSERT_TRUE(r_key.HasChangeOccurred()); |
- |
- // check that the value is gone |
- bool_res = r_key.HasValue(kValNameInt); |
- ASSERT_FALSE(bool_res); |
- |
- // set an INT 64 |
- hr = r_key.SetValue(kValNameInt64, kIntVal64); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value exists |
- bool_res = r_key.HasValue(kValNameInt64); |
- ASSERT_TRUE(bool_res); |
- |
- // read it back |
- hr = r_key.GetValue(kValNameInt64, &int64_val); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(int64_val, kIntVal64); |
- |
- // delete the value |
- hr = r_key.DeleteValue(kValNameInt64); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value is gone |
- bool_res = r_key.HasValue(kValNameInt64); |
- ASSERT_FALSE(bool_res); |
- |
- // set a string |
- hr = r_key.SetValue(kValNameStr, kStrVal); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value exists |
- bool_res = r_key.HasValue(kValNameStr); |
- ASSERT_TRUE(bool_res); |
- |
- // read it back |
- hr = r_key.GetValue(kValNameStr, &str_val); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_STREQ(str_val, kStrVal); |
- delete [] str_val; |
- |
- // set it again |
- hr = r_key.SetValue(kValNameStr, kStrVal2); |
- ASSERT_SUCCEEDED(hr); |
- |
- // read it again |
- hr = r_key.GetValue(kValNameStr, &str_val); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_STREQ(str_val, kStrVal2); |
- delete [] str_val; |
- |
- // delete the value |
- hr = r_key.DeleteValue(kValNameStr); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value is gone |
- bool_res = r_key.HasValue(kValNameInt); |
- ASSERT_FALSE(bool_res); |
- |
- // set a binary value |
- hr = r_key.SetValue(kValNameBinary, (const byte *)kBinaryVal, |
- sizeof(kBinaryVal)-1); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value exists |
- bool_res = r_key.HasValue(kValNameBinary); |
- ASSERT_TRUE(bool_res); |
- |
- // read it back |
- hr = r_key.GetValue(kValNameBinary, &binary_val, &byte_count); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(0, memcmp(binary_val, kBinaryVal, sizeof(kBinaryVal)-1)); |
- delete [] binary_val; |
- |
- // set it again |
- hr = r_key.SetValue(kValNameBinary, (const byte *)kBinaryVal2, |
- sizeof(kBinaryVal)-1); |
- ASSERT_SUCCEEDED(hr); |
- |
- // read it again |
- hr = r_key.GetValue(kValNameBinary, &binary_val, &byte_count); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(0, memcmp(binary_val, kBinaryVal2, sizeof(kBinaryVal2)-1)); |
- delete [] binary_val; |
- |
- // delete the value |
- hr = r_key.DeleteValue(kValNameBinary); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value is gone |
- bool_res = r_key.HasValue(kValNameBinary); |
- ASSERT_FALSE(bool_res); |
- |
- // set some values and check the total count |
- |
- // set an INT 32 |
- hr = r_key.SetValue(kValNameInt, kIntVal); |
- ASSERT_SUCCEEDED(hr); |
- |
- // set an INT 64 |
- hr = r_key.SetValue(kValNameInt64, kIntVal64); |
- ASSERT_SUCCEEDED(hr); |
- |
- // set a string |
- hr = r_key.SetValue(kValNameStr, kStrVal); |
- ASSERT_SUCCEEDED(hr); |
- |
- hr = r_key.GetValueType(kValNameStr, &value_type); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(REG_SZ, value_type); |
- hr = RegKey::GetValueType(kStRkey1, kValNameStr, &value_type); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(REG_SZ, value_type); |
- |
- // set a binary value |
- hr = r_key.SetValue(kValNameBinary, (const byte *)kBinaryVal, |
- sizeof(kBinaryVal)-1); |
- ASSERT_SUCCEEDED(hr); |
- |
- // get the value count |
- uint32 value_count = r_key.GetValueCount(); |
- ASSERT_EQ(value_count, 4); |
- |
- // check the value names |
- CString value_name; |
- DWORD type; |
- |
- hr = r_key.GetValueNameAt(0, &value_name, &type); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(value_name, kValNameInt); |
- ASSERT_EQ(type, REG_DWORD); |
- |
- hr = r_key.GetValueNameAt(1, &value_name, &type); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(value_name, kValNameInt64); |
- ASSERT_EQ(type, REG_QWORD); |
- |
- hr = r_key.GetValueNameAt(2, &value_name, &type); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(value_name, kValNameStr); |
- ASSERT_EQ(type, REG_SZ); |
- |
- hr = r_key.GetValueNameAt(3, &value_name, &type); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(value_name, kValNameBinary); |
- ASSERT_EQ(type, REG_BINARY); |
- |
- // check that there are no more values |
- hr = r_key.GetValueNameAt(4, &value_name, &type); |
- ASSERT_FAILED(hr); |
- |
- uint32 subkey_count = r_key.GetSubkeyCount(); |
- ASSERT_EQ(subkey_count, 0); |
- |
- RegKey temp_key; |
- |
- // now create a subkey and make sure we can get the name |
- hr = temp_key.Create(HKEY_CURRENT_USER, kRkey1Subkey); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check the subkey exists |
- bool_res = r_key.HasSubkey(kRkey1SubkeyName); |
- ASSERT_TRUE(bool_res); |
- |
- // check the name |
- subkey_count = r_key.GetSubkeyCount(); |
- ASSERT_EQ(subkey_count, 1); |
- |
- CString subkey_name; |
- hr = r_key.GetSubkeyNameAt(0, &subkey_name); |
- ASSERT_EQ(subkey_name, kRkey1SubkeyName); |
- |
- // verify that the event handle remained the same throughout everything |
- ASSERT_EQ(change_event, r_key.change_event()); |
- |
- // close this key |
- r_key.Close(); |
- |
- // whack the whole key |
- hr = RegKey::DeleteKey(kStTestRkeyBase); |
- ASSERT_SUCCEEDED(hr); |
- |
- // STATIC |
- // now set a different value using the static versions |
- |
- // get an in-existent value from an un-existent key |
- hr = RegKey::GetValue(kStRkey1, kStValNameInt, &int_val); |
- ASSERT_EQ(hr, HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)); |
- |
- // set int32 |
- hr = RegKey::SetValue(kStRkey1, kStValNameInt, kStIntVal); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value exists |
- bool_res = RegKey::HasValue(kStRkey1, kStValNameInt); |
- ASSERT_TRUE(bool_res); |
- |
- // get an in-existent value from an existent key |
- hr = RegKey::GetValue(kStRkey1, _T("bogus"), &int_val); |
- ASSERT_EQ(hr, HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)); |
- |
- // read it back |
- hr = RegKey::GetValue(kStRkey1, kStValNameInt, &int_val); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(int_val, kStIntVal); |
- |
- // delete the value |
- hr = RegKey::DeleteValue(kStRkey1, kStValNameInt); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value is gone |
- bool_res = RegKey::HasValue(kStRkey1, kStValNameInt); |
- ASSERT_FALSE(bool_res); |
- |
- |
- // set int64 |
- hr = RegKey::SetValue(kStRkey1, kStValNameInt64, kStIntVal64); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value exists |
- bool_res = RegKey::HasValue(kStRkey1, kStValNameInt64); |
- ASSERT_TRUE(bool_res); |
- |
- // read it back |
- hr = RegKey::GetValue(kStRkey1, kStValNameInt64, &int64_val); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(int64_val, kStIntVal64); |
- |
- // read it back to test time64 |
- bool limited_value; |
- hr = GetLimitedTimeValue(kStRkey1, kStValNameInt64, kStIntVal64 + 10, &t, |
- &limited_value); |
- ASSERT_SUCCEEDED(hr); |
- EXPECT_FALSE(limited_value); |
- ASSERT_EQ(t, kStIntVal64); |
- hr = GetLimitedTimeValue(kStRkey1, kStValNameInt64, kStIntVal64 - 10, &t, |
- &limited_value); |
- EXPECT_TRUE(limited_value); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(t, kStIntVal64 - 10); |
- // Verify that the GetValue permanently made the value lower |
- hr = GetLimitedTimeValue(kStRkey1, kStValNameInt64, kStIntVal64, &t, |
- &limited_value); |
- EXPECT_FALSE(limited_value); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(t, kStIntVal64 - 10); |
- |
- // delete the value |
- hr = RegKey::DeleteValue(kStRkey1, kStValNameInt64); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value is gone |
- bool_res = RegKey::HasValue(kStRkey1, kStValNameInt64); |
- ASSERT_FALSE(bool_res); |
- |
- // set float |
- hr = RegKey::SetValue(kStRkey1, kStValNameFloat, kStFloatVal); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value exists |
- bool_res = RegKey::HasValue(kStRkey1, kStValNameFloat); |
- ASSERT_TRUE(bool_res); |
- |
- // read it back |
- hr = RegKey::GetValue(kStRkey1, kStValNameFloat, &float_val); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(float_val, kStFloatVal); |
- |
- // delete the value |
- hr = RegKey::DeleteValue(kStRkey1, kStValNameFloat); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value is gone |
- bool_res = RegKey::HasValue(kStRkey1, kStValNameFloat); |
- ASSERT_FALSE(bool_res); |
- hr = RegKey::GetValue(kStRkey1, kStValNameFloat, &float_val); |
- ASSERT_FAILED(hr); |
- |
- |
- // set double |
- hr = RegKey::SetValue(kStRkey1, kStValNameDouble, kStDoubleVal); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value exists |
- bool_res = RegKey::HasValue(kStRkey1, kStValNameDouble); |
- ASSERT_TRUE(bool_res); |
- |
- // read it back |
- hr = RegKey::GetValue(kStRkey1, kStValNameDouble, &double_val); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(double_val, kStDoubleVal); |
- |
- // delete the value |
- hr = RegKey::DeleteValue(kStRkey1, kStValNameDouble); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value is gone |
- bool_res = RegKey::HasValue(kStRkey1, kStValNameDouble); |
- ASSERT_FALSE(bool_res); |
- hr = RegKey::GetValue(kStRkey1, kStValNameDouble, &double_val); |
- ASSERT_FAILED(hr); |
- |
- // set string |
- hr = RegKey::SetValue(kStRkey1, kStValNameStr, kStStrVal); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value exists |
- bool_res = RegKey::HasValue(kStRkey1, kStValNameStr); |
- ASSERT_TRUE(bool_res); |
- |
- // read it back |
- hr = RegKey::GetValue(kStRkey1, kStValNameStr, &str_val); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_STREQ(str_val, kStStrVal); |
- delete [] str_val; |
- |
- // get an in-existent value from an existent key |
- hr = RegKey::GetValue(kStRkey1, _T("bogus"), &str_val); |
- ASSERT_EQ(hr, HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)); |
- |
- // delete the value |
- hr = RegKey::DeleteValue(kStRkey1, kStValNameStr); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value is gone |
- bool_res = RegKey::HasValue(kStRkey1, kStValNameStr); |
- ASSERT_FALSE(bool_res); |
- |
- // set binary |
- hr = RegKey::SetValue(kStRkey1, kStValNameBinary, (const byte *)kStBinaryVal, |
- sizeof(kStBinaryVal)-1); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value exists |
- bool_res = RegKey::HasValue(kStRkey1, kStValNameBinary); |
- ASSERT_TRUE(bool_res); |
- |
- // read it back |
- hr = RegKey::GetValue(kStRkey1, kStValNameBinary, &binary_val, &byte_count); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(0, memcmp(binary_val, kStBinaryVal, sizeof(kStBinaryVal)-1)); |
- delete [] binary_val; |
- |
- // delete the value |
- hr = RegKey::DeleteValue(kStRkey1, kStValNameBinary); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value is gone |
- bool_res = RegKey::HasValue(kStRkey1, kStValNameBinary); |
- ASSERT_FALSE(bool_res); |
- |
- // special case - set a binary value with length 0 |
- hr = RegKey::SetValue(kStRkey1, kStValNameBinary, |
- (const byte *)kStBinaryVal, 0); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value exists |
- bool_res = RegKey::HasValue(kStRkey1, kStValNameBinary); |
- ASSERT_TRUE(bool_res); |
- |
- // read it back |
- hr = RegKey::GetValue(kStRkey1, kStValNameBinary, &binary_val, &byte_count); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(byte_count, 0); |
- ASSERT_TRUE(binary_val == NULL); |
- delete [] binary_val; |
- |
- // delete the value |
- hr = RegKey::DeleteValue(kStRkey1, kStValNameBinary); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value is gone |
- bool_res = RegKey::HasValue(kStRkey1, kStValNameBinary); |
- ASSERT_FALSE(bool_res); |
- |
- // special case - set a NULL binary value |
- hr = RegKey::SetValue(kStRkey1, kStValNameBinary, NULL, 100); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value exists |
- bool_res = RegKey::HasValue(kStRkey1, kStValNameBinary); |
- ASSERT_TRUE(bool_res); |
- |
- // read it back |
- hr = RegKey::GetValue(kStRkey1, kStValNameBinary, &binary_val, &byte_count); |
- ASSERT_SUCCEEDED(hr); |
- ASSERT_EQ(byte_count, 0); |
- ASSERT_TRUE(binary_val == NULL); |
- delete [] binary_val; |
- |
- // delete the value |
- hr = RegKey::DeleteValue(kStRkey1, kStValNameBinary); |
- ASSERT_SUCCEEDED(hr); |
- |
- // check that the value is gone |
- bool_res = RegKey::HasValue(kStRkey1, kStValNameBinary); |
- ASSERT_FALSE(bool_res); |
- |
- // whack the whole key |
- |
- hr = RegKey::DeleteKey(kStTestRkeyBase); |
- ASSERT_SUCCEEDED(hr); |
-} |
- |
-// RegKey::GetValue changes the output CString when errors occur. |
-TEST_F(RegKeyTestClass, ChangesStringOnErrors) { |
- CString string_val = _T("foo"); |
- EXPECT_FAILED(RegKey::GetValue(_T("HCKU"), _T("no_such_value"), &string_val)); |
- ASSERT_TRUE(string_val.IsEmpty()); |
-} |
- |
-TEST_F(RegKeyCleanupTestKeyTest, CreateKeys) { |
- // 3 keys specified but the count is two. |
- const TCHAR* keys[] = {kStRkey1, kStRkey2, kStRkey3}; |
- ASSERT_SUCCEEDED(RegKey::CreateKeys(keys, 2)); |
- |
- EXPECT_TRUE(RegKey::HasKey(kStRkey1)); |
- EXPECT_TRUE(RegKey::HasKey(kStRkey2)); |
- EXPECT_FALSE(RegKey::HasKey(kStRkey3)); |
-} |
- |
-TEST_F(RegKeyCleanupTestKeyTest, CreateKey) { |
- ASSERT_SUCCEEDED(RegKey::CreateKey(kStRkey1)); |
- |
- EXPECT_TRUE(RegKey::HasKey(kStRkey1)); |
-} |
- |
-TEST_F(RegKeyCleanupTestKeyTest, RenameValue) { |
- RegKey reg_key; |
- ASSERT_SUCCEEDED(reg_key.Create(HKEY_CURRENT_USER, kRkey1)); |
- ASSERT_SUCCEEDED(reg_key.SetValue(kValNameInt, kIntVal)); |
- ASSERT_TRUE(reg_key.HasValue(kValNameInt)); |
- |
- ASSERT_SUCCEEDED(reg_key.RenameValue(kValNameInt, kRenameValNameInt)); |
- ASSERT_FALSE(reg_key.HasValue(kValNameInt)); |
- |
- DWORD int_val = 0; |
- EXPECT_SUCCEEDED(reg_key.GetValue(kRenameValNameInt, &int_val)); |
- EXPECT_EQ(kIntVal, int_val); |
- |
- EXPECT_SUCCEEDED(reg_key.Close()); |
-} |
- |
-TEST_F(RegKeyCleanupTestKeyTest, RenameValueStatic) { |
- ASSERT_SUCCEEDED(RegKey::SetValue(kStRkey1, kStValNameStr, kStStrVal)); |
- ASSERT_TRUE(RegKey::HasValue(kStRkey1, kStValNameStr)); |
- |
- RegKey::RenameValue(kStRkey1, kStValNameStr, kRenameStValNameStr); |
- ASSERT_FALSE(RegKey::HasValue(kStRkey1, kStValNameStr)); |
- |
- CString str_val; |
- EXPECT_SUCCEEDED(RegKey::GetValue(kStRkey1, kRenameStValNameStr, &str_val)); |
- EXPECT_STREQ(kStStrVal, str_val); |
-} |
- |
-TEST_F(RegKeyCleanupTestKeyTest, CopyValue) { |
- EXPECT_SUCCEEDED(RegKey::SetValue(kStRkey1, kStValNameStr, kStStrVal)); |
- EXPECT_SUCCEEDED(RegKey::SetValue(kStRkey1, NULL, kStStrVal)); |
- EXPECT_TRUE(RegKey::HasValue(kStRkey1, kStValNameStr)); |
- |
- // Test that CopyValue fails when the to_key does not exist. |
- EXPECT_FALSE(RegKey::HasKey(kStRkey2)); |
- EXPECT_FAILED(RegKey::CopyValue(kStRkey1, kStRkey2, kStValNameStr)); |
- EXPECT_FALSE(RegKey::HasKey(kStRkey2)); |
- |
- EXPECT_SUCCEEDED(RegKey::CreateKey(kStRkey2)); |
- // Test CopyValue(full_from_key_name, full_to_key_name, value_name). |
- EXPECT_FALSE(RegKey::HasValue(kStRkey2, kStValNameStr)); |
- RegKey::CopyValue(kStRkey1, kStRkey2, kStValNameStr); |
- CString str_val; |
- EXPECT_SUCCEEDED(RegKey::GetValue(kStRkey2, kStValNameStr, &str_val)); |
- EXPECT_STREQ(kStStrVal, str_val); |
- |
- // Test CopyValue to a (Default) value. |
- EXPECT_FALSE(RegKey::HasValue(kStRkey2, NULL)); |
- RegKey::CopyValue(kStRkey1, kStRkey2, NULL); |
- str_val.Empty(); |
- EXPECT_SUCCEEDED(RegKey::GetValue(kStRkey2, NULL, &str_val)); |
- EXPECT_STREQ(kStStrVal, str_val); |
- |
- // Test CopyValue(full_from_key_name, from_value_name, full_to_key_name, |
- // to_value_name). |
- EXPECT_FALSE(RegKey::HasValue(kStRkey2, kRenameStValNameStr)); |
- RegKey::CopyValue(kStRkey1, kStValNameStr, kStRkey2, kRenameStValNameStr); |
- str_val.Empty(); |
- EXPECT_SUCCEEDED(RegKey::GetValue(kStRkey2, kRenameStValNameStr, &str_val)); |
- EXPECT_STREQ(kStStrVal, str_val); |
-} |
- |
-// Delete a key that does not have children. |
- |
-TEST_F(RegKeyCleanupTestKeyTest, DeleteKey_NoChildren_Recursively) { |
- EXPECT_SUCCEEDED(RegKey::CreateKey(kStRkey1)); |
- |
- EXPECT_EQ(S_OK, RegKey::DeleteKey(kStRkey1, true)); |
- EXPECT_FALSE(RegKey::HasKey(kStRkey1)); |
-} |
- |
-TEST_F(RegKeyCleanupTestKeyTest, DeleteKey_NoChildren_NotRecursively) { |
- EXPECT_SUCCEEDED(RegKey::CreateKey(kStRkey1)); |
- |
- EXPECT_EQ(S_OK, RegKey::DeleteKey(kStRkey1, false)); |
- EXPECT_FALSE(RegKey::HasKey(kStRkey1)); |
-} |
- |
-TEST_F(RegKeyCleanupTestKeyTest, RecurseDeleteSubKey_NoChildren) { |
- EXPECT_SUCCEEDED(RegKey::CreateKey(kStRkey1)); |
- EXPECT_SUCCEEDED(key_.Open(kStTestRkeyBase)); |
- |
- EXPECT_EQ(S_OK, key_.RecurseDeleteSubKey(kStRkey1Name)); |
- EXPECT_FALSE(RegKey::HasKey(kStRkey1)); |
-} |
- |
-TEST_F(RegKeyCleanupTestKeyTest, DeleteSubKey_NoChildren) { |
- EXPECT_SUCCEEDED(RegKey::CreateKey(kStRkey1)); |
- EXPECT_SUCCEEDED(key_.Open(kStTestRkeyBase)); |
- |
- EXPECT_EQ(S_OK, key_.DeleteSubKey(kStRkey1Name)); |
- EXPECT_FALSE(RegKey::HasKey(kStRkey1)); |
-} |
- |
-// Delete a key that has a child. |
- |
-TEST_F(RegKeyCleanupTestKeyTest, DeleteKey_WithChild_Recursively) { |
- EXPECT_SUCCEEDED(RegKey::CreateKey(kStRkey1Subkey)); |
- |
- EXPECT_EQ(S_OK, RegKey::DeleteKey(kStRkey1, true)); |
- EXPECT_FALSE(RegKey::HasKey(kStRkey1)); |
- EXPECT_FALSE(RegKey::HasKey(kStRkey1Subkey)); |
-} |
- |
-// Deleting a key with children present results in ERROR_ACCESS_DENIED. |
-TEST_F(RegKeyCleanupTestKeyTest, DeleteKey_WithChild_NotRecursively) { |
- EXPECT_SUCCEEDED(RegKey::CreateKey(kStRkey1Subkey)); |
- |
- EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED), |
- RegKey::DeleteKey(kStRkey1, false)); |
- EXPECT_TRUE(RegKey::HasKey(kStRkey1)); |
- EXPECT_TRUE(RegKey::HasKey(kStRkey1Subkey)); |
-} |
- |
-TEST_F(RegKeyCleanupTestKeyTest, RecurseDeleteSubKey_WithChild) { |
- EXPECT_SUCCEEDED(RegKey::CreateKey(kStRkey1Subkey)); |
- EXPECT_SUCCEEDED(key_.Open(kStTestRkeyBase)); |
- |
- EXPECT_EQ(S_OK, key_.RecurseDeleteSubKey(kStRkey1Name)); |
- EXPECT_FALSE(RegKey::HasKey(kStRkey1)); |
- EXPECT_FALSE(RegKey::HasKey(kStRkey1Subkey)); |
-} |
- |
-// Deleting a key with children present results in ERROR_ACCESS_DENIED. |
-TEST_F(RegKeyCleanupTestKeyTest, DeleteSubKey_WithChild) { |
- EXPECT_SUCCEEDED(RegKey::CreateKey(kStRkey1Subkey)); |
- EXPECT_SUCCEEDED(key_.Open(kStTestRkeyBase)); |
- |
- EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED), |
- key_.DeleteSubKey(kStRkey1Name)); |
- EXPECT_TRUE(RegKey::HasKey(kStRkey1)); |
- EXPECT_TRUE(RegKey::HasKey(kStRkey1Subkey)); |
-} |
- |
-// Delete a key that does not exist. |
- |
-TEST_F(RegKeyCleanupTestKeyTest, DeleteKey_KeyDoesNotExist_Recursively) { |
- EXPECT_SUCCEEDED(RegKey::CreateKey(kStRkey1)); |
- EXPECT_FALSE(RegKey::HasKey(kStRkey1Subkey)); |
- |
- EXPECT_EQ(S_FALSE, RegKey::DeleteKey(kStRkey1Subkey, true)); |
- EXPECT_FALSE(RegKey::HasKey(kStRkey1Subkey)); |
-} |
- |
-TEST_F(RegKeyCleanupTestKeyTest, DeleteKey_KeyDoesNotExist_NotRecursively) { |
- EXPECT_SUCCEEDED(RegKey::CreateKey(kStRkey1)); |
- EXPECT_FALSE(RegKey::HasKey(kStRkey1Subkey)); |
- |
- EXPECT_EQ(S_FALSE, RegKey::DeleteKey(kStRkey1Subkey, false)); |
- EXPECT_FALSE(RegKey::HasKey(kStRkey1Subkey)); |
-} |
- |
-TEST_F(RegKeyCleanupTestKeyTest, RecurseDeleteSubKey_KeyDoesNotExist) { |
- EXPECT_SUCCEEDED(RegKey::CreateKey(kStRkey1)); |
- EXPECT_SUCCEEDED(key_.Open(kStRkey1)); |
- EXPECT_FALSE(RegKey::HasKey(kStRkey1Subkey)); |
- |
- EXPECT_EQ(S_FALSE, key_.RecurseDeleteSubKey(kRkey1SubkeyName)); |
- EXPECT_FALSE(RegKey::HasKey(kStRkey1Subkey)); |
-} |
- |
-TEST_F(RegKeyCleanupTestKeyTest, DeleteSubKey_KeyDoesNotExist) { |
- EXPECT_SUCCEEDED(RegKey::CreateKey(kStRkey1)); |
- EXPECT_SUCCEEDED(key_.Open(kStRkey1)); |
- EXPECT_FALSE(RegKey::HasKey(kStRkey1Subkey)); |
- |
- EXPECT_EQ(S_FALSE, key_.DeleteSubKey(kRkey1SubkeyName)); |
- EXPECT_FALSE(RegKey::HasKey(kStRkey1Subkey)); |
-} |
- |
-// Delete a key whose parent does not exist. |
-// There is no equivalent test for RecurseDeleteSubKey and DeleteSubKey. |
- |
-TEST_F(RegKeyCleanupTestKeyTest, DeleteKey_ParentKeyDoesNotExist_Recursively) { |
- EXPECT_FALSE(RegKey::HasKey(kStRkey1)); |
- |
- EXPECT_EQ(S_FALSE, RegKey::DeleteKey(kStRkey1Subkey, true)); |
- EXPECT_FALSE(RegKey::HasKey(kStRkey1Subkey)); |
-} |
- |
-TEST_F(RegKeyCleanupTestKeyTest, |
- DeleteKey_ParentKeyDoesNotExist_NotRecursively) { |
- EXPECT_FALSE(RegKey::HasKey(kStRkey1)); |
- |
- EXPECT_EQ(S_FALSE, RegKey::DeleteKey(kStRkey1Subkey, false)); |
- EXPECT_FALSE(RegKey::HasKey(kStRkey1Subkey)); |
-} |
- |
-} // namespace omaha |