Index: common/stats_uploader_unittest.cc |
diff --git a/common/stats_uploader_unittest.cc b/common/stats_uploader_unittest.cc |
deleted file mode 100644 |
index a28248b088f2ebc85f57a543f97e77d65fb6096c..0000000000000000000000000000000000000000 |
--- a/common/stats_uploader_unittest.cc |
+++ /dev/null |
@@ -1,262 +0,0 @@ |
-// Copyright 2008-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. |
-// ======================================================================== |
- |
-// All tests are user only. |
- |
-#include <windows.h> |
-#include <limits.h> |
-#include <ctime> |
-#include "base/basictypes.h" |
-#include "base/scoped_ptr.h" |
-#include "omaha/base/constants.h" |
-#include "omaha/base/error.h" |
-#include "omaha/base/reg_key.h" |
-#include "omaha/base/scoped_ptr_address.h" |
-#include "omaha/common/stats_uploader.h" |
-#include "omaha/statsreport/metrics.h" |
-#include "omaha/testing/unit_test.h" |
- |
-namespace omaha { |
- |
-namespace { |
- |
-DEFINE_METRIC_bool(test_bool); |
- |
-} // namespace |
- |
-class StatsUploaderTest : public testing::Test { |
- protected: |
- // These tests assume that metric collection is enabled. Since HKLM is not |
- // overridden, save the existing value if present before overriding it. |
- static void SetUpTestCase() { |
- is_updatedev_usagestats_present_ = |
- SUCCEEDED(RegKey::GetValue(MACHINE_REG_UPDATE_DEV, |
- kRegValueForceUsageStats, |
- &existing_updatedev_usagestats_value_)); |
- |
- EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE_DEV, |
- kRegValueForceUsageStats, |
- static_cast<DWORD>(1))); |
- } |
- |
- static void TearDownTestCase() { |
- if (is_updatedev_usagestats_present_) { |
- EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE_DEV, |
- kRegValueForceUsageStats, |
- existing_updatedev_usagestats_value_)); |
- } else { |
- EXPECT_SUCCEEDED(RegKey::DeleteValue(MACHINE_REG_UPDATE_DEV, |
- kRegValueForceUsageStats)); |
- } |
- } |
- |
- virtual void SetUp() { |
- RegKey::DeleteKey(kRegistryHiveOverrideRoot); |
- |
- // Overriding HKLM prevents the Windows DNS resolver from working. |
- // Only override HKCU and run the tests as user. |
- OverrideSpecifiedRegistryHives(kRegistryHiveOverrideRoot, false, true); |
- stats_report::g_global_metrics.Initialize(); |
- } |
- |
- virtual void TearDown() { |
- stats_report::g_global_metrics.Uninitialize(); |
- RestoreRegistryHives(); |
- RegKey::DeleteKey(kRegistryHiveOverrideRoot); |
- } |
- |
- HRESULT GetMetricValue(const TCHAR* value_name, bool* value) { |
- CString key_name = key_name_ + CString(_T("Booleans")); |
- |
- scoped_array<byte> buffer; |
- DWORD byte_count(0); |
- HRESULT hr = RegKey::GetValue(key_name, |
- value_name, |
- address(buffer), |
- &byte_count); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- if (byte_count != sizeof(uint32)) { // NOLINT |
- return HRESULT_FROM_WIN32(ERROR_INVALID_DATA); |
- } |
- *value = *reinterpret_cast<uint32*>(buffer.get()) != 0; |
- return S_OK; |
- } |
- |
- HRESULT GetLastTrasmission(DWORD* last_transmission) { |
- const TCHAR value_name[] = _T("LastTransmission"); |
- return RegKey::GetValue(key_name_, value_name, last_transmission); |
- } |
- |
- HRESULT SetLastTransmission(DWORD last_transmission) { |
- const TCHAR value_name[] = _T("LastTransmission"); |
- return RegKey::SetValue(key_name_, value_name, last_transmission); |
- } |
- |
- bool AreMetricsEmpty() { |
- RegKey reg_key; |
- HRESULT hr = reg_key.Open(key_name_, KEY_READ); |
- if (FAILED(hr)) { |
- return true; |
- } |
- return reg_key.GetSubkeyCount() == 0; |
- } |
- |
- static const TCHAR key_name_[]; |
- static const TCHAR metric_name_[]; |
- |
- private: |
- static bool is_updatedev_usagestats_present_; |
- static DWORD existing_updatedev_usagestats_value_; |
-}; |
- |
-const TCHAR StatsUploaderTest::key_name_[] = |
- _T("HKCU\\Software\\") SHORT_COMPANY_NAME |
- _T("\\") PRODUCT_NAME _T("\\UsageStats\\Daily\\"); |
-const TCHAR StatsUploaderTest::metric_name_[] = _T("test_bool"); |
- |
-bool StatsUploaderTest::is_updatedev_usagestats_present_ = false; |
-DWORD StatsUploaderTest::existing_updatedev_usagestats_value_ = 0; |
- |
-TEST_F(StatsUploaderTest, AggregateMetrics) { |
- bool value = false; |
- EXPECT_HRESULT_FAILED(GetMetricValue(metric_name_, &value)); |
- |
- metric_test_bool = true; |
- EXPECT_HRESULT_SUCCEEDED(AggregateMetrics(false)); // User. |
- |
- EXPECT_HRESULT_SUCCEEDED(GetMetricValue(metric_name_, &value)); |
- EXPECT_EQ(true, value); |
- |
- metric_test_bool = false; |
- EXPECT_HRESULT_SUCCEEDED(AggregateMetrics(false)); // User. |
- |
- EXPECT_HRESULT_SUCCEEDED(GetMetricValue(metric_name_, &value)); |
- EXPECT_EQ(false, value); |
-} |
- |
-TEST_F(StatsUploaderTest, AggregateAndReportMetrics) { |
- metric_test_bool = true; |
- |
- // Metrics are not in the registry until they are aggregated. |
- bool value = false; |
- EXPECT_HRESULT_FAILED(GetMetricValue(metric_name_, &value)); |
- |
- // AggregateAndReportMetrics resets metrics and updates 'LastTransmission' to |
- // the current time since there was no 'LastTransmission'. |
- EXPECT_HRESULT_SUCCEEDED(AggregateAndReportMetrics(false, false)); |
- EXPECT_TRUE(AreMetricsEmpty()); |
- DWORD last_transmission(0); |
- EXPECT_HRESULT_SUCCEEDED(GetLastTrasmission(&last_transmission)); |
- EXPECT_NE(0, last_transmission); |
- |
- // AggregateAndReportMetrics aggregates but it does not report since |
- // 'LastTransmission is current. |
- EXPECT_HRESULT_SUCCEEDED(AggregateAndReportMetrics(false, false)); |
- EXPECT_FALSE(AreMetricsEmpty()); |
- EXPECT_HRESULT_SUCCEEDED(GetMetricValue(metric_name_, &value)); |
- EXPECT_EQ(true, value); |
- DWORD previous_last_transmission = last_transmission; |
- EXPECT_HRESULT_SUCCEEDED(GetLastTrasmission(&last_transmission)); |
- EXPECT_EQ(previous_last_transmission, last_transmission); |
- |
- // Roll back 'Last Trasmission' by 26 hours. AggregateAndReportMetrics |
- // aggregates, reports metrics, and updates 'LastTransmission'. |
- metric_test_bool = true; |
- last_transmission -= 26 * 60 * 60; |
- EXPECT_HRESULT_SUCCEEDED(SetLastTransmission(last_transmission)); |
- EXPECT_HRESULT_SUCCEEDED(AggregateAndReportMetrics(false, false)); |
- EXPECT_TRUE(AreMetricsEmpty()); |
- previous_last_transmission = last_transmission; |
- EXPECT_HRESULT_SUCCEEDED(GetLastTrasmission(&last_transmission)); |
- EXPECT_NE(previous_last_transmission, last_transmission); |
- |
- // Roll forward the 'LastTransmission' by 60 seconds. |
- // AggregateAndReportMetrics resets metrics and updates 'LastTransmission' to |
- // the current time since there 'LastTransmission' was in the future. |
- metric_test_bool = true; |
- last_transmission = static_cast<DWORD>(time(NULL)) + 60; |
- EXPECT_HRESULT_SUCCEEDED(SetLastTransmission(last_transmission)); |
- EXPECT_HRESULT_SUCCEEDED(AggregateAndReportMetrics(false, false)); |
- EXPECT_TRUE(AreMetricsEmpty()); |
- EXPECT_HRESULT_SUCCEEDED(GetLastTrasmission(&last_transmission)); |
- EXPECT_NE(0, last_transmission); |
- |
- // Force reporting the metrics. |
- metric_test_bool = true; |
- EXPECT_HRESULT_SUCCEEDED(AggregateAndReportMetrics(false, true)); |
- EXPECT_TRUE(AreMetricsEmpty()); |
-} |
- |
-TEST_F(StatsUploaderTest, ResetPersistentMetricsTest) { |
- const TCHAR* keys[] = { |
- _T("HKCU\\Software\\") SHORT_COMPANY_NAME _T("\\") PRODUCT_NAME _T("\\UsageStats\\Daily\\Timings"), // NOLINT |
- _T("HKCU\\Software\\") SHORT_COMPANY_NAME _T("\\") PRODUCT_NAME _T("\\UsageStats\\Daily\\Counts"), // NOLINT |
- _T("HKCU\\Software\\") SHORT_COMPANY_NAME _T("\\") PRODUCT_NAME _T("\\UsageStats\\Daily\\Integers"), // NOLINT |
- _T("HKCU\\Software\\") SHORT_COMPANY_NAME _T("\\") PRODUCT_NAME _T("\\UsageStats\\Daily\\Booleans"), // NOLINT |
- }; |
- EXPECT_HRESULT_SUCCEEDED(RegKey::CreateKeys(keys, arraysize(keys))); |
- EXPECT_HRESULT_SUCCEEDED(ResetMetrics(false)); // User. |
- |
- for (size_t i = 0; i != arraysize(keys); ++i) { |
- EXPECT_FALSE(RegKey::HasKey(keys[i])); |
- } |
- EXPECT_TRUE(AreMetricsEmpty()); |
- |
- DWORD last_transmission(ULONG_MAX); |
- EXPECT_HRESULT_SUCCEEDED(GetLastTrasmission(&last_transmission)); |
- EXPECT_NE(0, last_transmission); |
-} |
- |
-// AggregateAndReportMetrics aggregates, but is unable to report metrics and |
-// does not update 'LastTransmission'. |
-TEST_F(StatsUploaderTest, |
- AggregateAndReportMetrics_GoogleUpdateEulaNotAccepted_DoNotForce) { |
- EXPECT_SUCCEEDED(RegKey::SetValue(USER_REG_UPDATE, |
- _T("eulaaccepted"), |
- static_cast<DWORD>(0))); |
- |
- metric_test_bool = true; |
- DWORD last_transmission = 12345678; |
- EXPECT_HRESULT_SUCCEEDED(SetLastTransmission(last_transmission)); |
- EXPECT_EQ(GOOPDATE_E_CANNOT_USE_NETWORK, |
- AggregateAndReportMetrics(false, false)); |
- EXPECT_FALSE(AreMetricsEmpty()); |
- DWORD previous_last_transmission = last_transmission; |
- EXPECT_HRESULT_SUCCEEDED(GetLastTrasmission(&last_transmission)); |
- EXPECT_EQ(12345678, last_transmission); |
-} |
- |
-// AggregateAndReportMetrics aggregates, but is unable to report metrics and |
-// does not update 'LastTransmission'. |
-TEST_F(StatsUploaderTest, |
- AggregateAndReportMetrics_GoogleUpdateEulaNotAccepted_Force) { |
- EXPECT_SUCCEEDED(RegKey::SetValue(USER_REG_UPDATE, |
- _T("eulaaccepted"), |
- static_cast<DWORD>(0))); |
- |
- metric_test_bool = true; |
- DWORD last_transmission = 12345678; |
- EXPECT_HRESULT_SUCCEEDED(SetLastTransmission(last_transmission)); |
- EXPECT_EQ(GOOPDATE_E_CANNOT_USE_NETWORK, |
- AggregateAndReportMetrics(false, true)); |
- EXPECT_FALSE(AreMetricsEmpty()); |
- DWORD previous_last_transmission = last_transmission; |
- EXPECT_HRESULT_SUCCEEDED(GetLastTrasmission(&last_transmission)); |
- EXPECT_EQ(12345678, last_transmission); |
-} |
- |
-} // namespace omaha |