data_use_tracker_unittest.cc 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. // Copyright 2016 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/metrics/data_use_tracker.h"
  5. #include "base/time/time.h"
  6. #include "components/metrics/metrics_pref_names.h"
  7. #include "components/prefs/pref_registry_simple.h"
  8. #include "components/prefs/testing_pref_service.h"
  9. #include "testing/gtest/include/gtest/gtest.h"
  10. namespace metrics {
  11. namespace {
  12. const char kTodayStr[] = "2016-03-16";
  13. const char kYesterdayStr[] = "2016-03-15";
  14. const char kExpiredDateStr1[] = "2016-03-09";
  15. const char kExpiredDateStr2[] = "2016-03-01";
  16. class TestDataUsePrefService : public TestingPrefServiceSimple {
  17. public:
  18. TestDataUsePrefService() { DataUseTracker::RegisterPrefs(registry()); }
  19. TestDataUsePrefService(const TestDataUsePrefService&) = delete;
  20. TestDataUsePrefService& operator=(const TestDataUsePrefService&) = delete;
  21. void ClearDataUsePrefs() {
  22. ClearPref(metrics::prefs::kUserCellDataUse);
  23. ClearPref(metrics::prefs::kUmaCellDataUse);
  24. }
  25. };
  26. class FakeDataUseTracker : public DataUseTracker {
  27. public:
  28. FakeDataUseTracker(PrefService* local_state) : DataUseTracker(local_state) {}
  29. FakeDataUseTracker(const FakeDataUseTracker&) = delete;
  30. FakeDataUseTracker& operator=(const FakeDataUseTracker&) = delete;
  31. bool GetUmaWeeklyQuota(int* uma_weekly_quota_bytes) const override {
  32. *uma_weekly_quota_bytes = 200;
  33. return true;
  34. }
  35. bool GetUmaRatio(double* ratio) const override {
  36. *ratio = 0.05;
  37. return true;
  38. }
  39. base::Time GetCurrentMeasurementDate() const override {
  40. base::Time today_for_test;
  41. EXPECT_TRUE(base::Time::FromUTCString(kTodayStr, &today_for_test));
  42. return today_for_test;
  43. }
  44. std::string GetCurrentMeasurementDateAsString() const override {
  45. return kTodayStr;
  46. }
  47. };
  48. // Sets up data usage prefs with mock values so that UMA traffic is above the
  49. // allowed ratio.
  50. void SetPrefTestValuesOverRatio(PrefService* local_state) {
  51. base::DictionaryValue user_pref_dict;
  52. user_pref_dict.SetInteger(kTodayStr, 2 * 100);
  53. user_pref_dict.SetInteger(kYesterdayStr, 2 * 100);
  54. user_pref_dict.SetInteger(kExpiredDateStr1, 2 * 100);
  55. user_pref_dict.SetInteger(kExpiredDateStr2, 2 * 100);
  56. local_state->Set(prefs::kUserCellDataUse, user_pref_dict);
  57. base::DictionaryValue uma_pref_dict;
  58. uma_pref_dict.SetInteger(kTodayStr, 50);
  59. uma_pref_dict.SetInteger(kYesterdayStr, 50);
  60. uma_pref_dict.SetInteger(kExpiredDateStr1, 50);
  61. uma_pref_dict.SetInteger(kExpiredDateStr2, 50);
  62. local_state->Set(prefs::kUmaCellDataUse, uma_pref_dict);
  63. }
  64. // Sets up data usage prefs with mock values which can be valid.
  65. void SetPrefTestValuesValidRatio(PrefService* local_state) {
  66. base::DictionaryValue user_pref_dict;
  67. user_pref_dict.SetInteger(kTodayStr, 100 * 100);
  68. user_pref_dict.SetInteger(kYesterdayStr, 100 * 100);
  69. user_pref_dict.SetInteger(kExpiredDateStr1, 100 * 100);
  70. user_pref_dict.SetInteger(kExpiredDateStr2, 100 * 100);
  71. local_state->Set(prefs::kUserCellDataUse, user_pref_dict);
  72. // Should be 4% of user traffic
  73. base::DictionaryValue uma_pref_dict;
  74. uma_pref_dict.SetInteger(kTodayStr, 4 * 100);
  75. uma_pref_dict.SetInteger(kYesterdayStr, 4 * 100);
  76. uma_pref_dict.SetInteger(kExpiredDateStr1, 4 * 100);
  77. uma_pref_dict.SetInteger(kExpiredDateStr2, 4 * 100);
  78. local_state->Set(prefs::kUmaCellDataUse, uma_pref_dict);
  79. }
  80. } // namespace
  81. TEST(DataUseTrackerTest, CheckUpdateUsagePref) {
  82. TestDataUsePrefService local_state;
  83. FakeDataUseTracker data_use_tracker(&local_state);
  84. local_state.ClearDataUsePrefs();
  85. data_use_tracker.UpdateMetricsUsagePrefsInternal(2 * 100, true, false);
  86. EXPECT_EQ(
  87. 2 * 100,
  88. local_state.GetValueDict(prefs::kUserCellDataUse).FindInt(kTodayStr));
  89. EXPECT_FALSE(
  90. local_state.GetValueDict(prefs::kUmaCellDataUse).FindInt(kTodayStr));
  91. data_use_tracker.UpdateMetricsUsagePrefsInternal(100, true, true);
  92. EXPECT_EQ(
  93. 3 * 100,
  94. local_state.GetValueDict(prefs::kUserCellDataUse).FindInt(kTodayStr));
  95. EXPECT_EQ(
  96. 100, local_state.GetValueDict(prefs::kUmaCellDataUse).FindInt(kTodayStr));
  97. }
  98. TEST(DataUseTrackerTest, CheckRemoveExpiredEntries) {
  99. TestDataUsePrefService local_state;
  100. FakeDataUseTracker data_use_tracker(&local_state);
  101. local_state.ClearDataUsePrefs();
  102. SetPrefTestValuesOverRatio(&local_state);
  103. data_use_tracker.RemoveExpiredEntries();
  104. EXPECT_FALSE(local_state.GetValueDict(prefs::kUserCellDataUse)
  105. .FindInt(kExpiredDateStr1));
  106. EXPECT_FALSE(local_state.GetValueDict(prefs::kUmaCellDataUse)
  107. .FindInt(kExpiredDateStr1));
  108. EXPECT_FALSE(local_state.GetValueDict(prefs::kUserCellDataUse)
  109. .FindInt(kExpiredDateStr2));
  110. EXPECT_FALSE(local_state.GetValueDict(prefs::kUmaCellDataUse)
  111. .FindInt(kExpiredDateStr2));
  112. EXPECT_EQ(
  113. 2 * 100,
  114. local_state.GetValueDict(prefs::kUserCellDataUse).FindInt(kTodayStr));
  115. EXPECT_EQ(
  116. 50, local_state.GetValueDict(prefs::kUmaCellDataUse).FindInt(kTodayStr));
  117. EXPECT_EQ(
  118. 2 * 100,
  119. local_state.GetValueDict(prefs::kUserCellDataUse).FindInt(kYesterdayStr));
  120. EXPECT_EQ(
  121. 50,
  122. local_state.GetValueDict(prefs::kUmaCellDataUse).FindInt(kYesterdayStr));
  123. }
  124. TEST(DataUseTrackerTest, CheckComputeTotalDataUse) {
  125. TestDataUsePrefService local_state;
  126. FakeDataUseTracker data_use_tracker(&local_state);
  127. local_state.ClearDataUsePrefs();
  128. SetPrefTestValuesOverRatio(&local_state);
  129. int user_data_use =
  130. data_use_tracker.ComputeTotalDataUse(prefs::kUserCellDataUse);
  131. EXPECT_EQ(8 * 100, user_data_use);
  132. int uma_data_use =
  133. data_use_tracker.ComputeTotalDataUse(prefs::kUmaCellDataUse);
  134. EXPECT_EQ(4 * 50, uma_data_use);
  135. }
  136. TEST(DataUseTrackerTest, CheckShouldUploadLogOnCellular) {
  137. TestDataUsePrefService local_state;
  138. FakeDataUseTracker data_use_tracker(&local_state);
  139. local_state.ClearDataUsePrefs();
  140. SetPrefTestValuesOverRatio(&local_state);
  141. bool can_upload = data_use_tracker.ShouldUploadLogOnCellular(50);
  142. EXPECT_TRUE(can_upload);
  143. can_upload = data_use_tracker.ShouldUploadLogOnCellular(100);
  144. EXPECT_TRUE(can_upload);
  145. can_upload = data_use_tracker.ShouldUploadLogOnCellular(150);
  146. EXPECT_FALSE(can_upload);
  147. local_state.ClearDataUsePrefs();
  148. SetPrefTestValuesValidRatio(&local_state);
  149. can_upload = data_use_tracker.ShouldUploadLogOnCellular(100);
  150. EXPECT_TRUE(can_upload);
  151. // this is about 0.49%
  152. can_upload = data_use_tracker.ShouldUploadLogOnCellular(200);
  153. EXPECT_TRUE(can_upload);
  154. can_upload = data_use_tracker.ShouldUploadLogOnCellular(300);
  155. EXPECT_FALSE(can_upload);
  156. }
  157. } // namespace metrics