11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file.
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/scoped_ptr.h"
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/prefs/pref_registry_simple.h"
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/prefs/testing_pref_service.h"
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/strings/string_number_conversions.h"
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/test/test_simple_task_runner.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/data_reduction_proxy/browser/data_reduction_proxy_prefs.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/data_reduction_proxy/browser/data_reduction_proxy_statistics_prefs.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/data_reduction_proxy/common/data_reduction_proxy_pref_names.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "testing/gtest/include/gtest/gtest.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace {
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// TODO Make kNumDaysInHistory accessible from DataReductionProxySettings.
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst size_t kNumDaysInHistory = 60;
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst int kWriteDelayMinutes = 60;
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint64 GetListPrefInt64Value(
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const base::ListValue& list_update, size_t index) {
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  std::string string_value;
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(list_update.GetString(index, &string_value));
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  int64 value = 0;
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(base::StringToInt64(string_value, &value));
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return value;
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace data_reduction_proxy {
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass DataReductionProxyStatisticsPrefsTest : public testing::Test {
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected:
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DataReductionProxyStatisticsPrefsTest()
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      : task_runner_(scoped_refptr<base::TestSimpleTaskRunner>(
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            new base::TestSimpleTaskRunner())) {}
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetUp() OVERRIDE {
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    RegisterPrefs(simple_pref_service_.registry());
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Create daily pref list of |kNumDaysInHistory| zero values.
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void CreatePrefList(const char* pref) {
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    base::ListValue* update = statistics_prefs_->GetList(pref);
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    update->Clear();
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    for (size_t i = 0; i < kNumDaysInHistory; ++i) {
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      update->Insert(0, new base::StringValue(base::Int64ToString(0)));
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Verify the pref list values in |pref_service_| are equal to those in
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // |simple_pref_service| for |pref|.
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void VerifyPrefListWasWritten(const char* pref) {
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const base::ListValue* delayed_list = statistics_prefs_->GetList(pref);
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const base::ListValue* written_list = simple_pref_service_.GetList(pref);
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ASSERT_EQ(delayed_list->GetSize(), written_list->GetSize());
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    size_t count = delayed_list->GetSize();
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    for (size_t i = 0; i < count; ++i) {
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EXPECT_EQ(GetListPrefInt64Value(*delayed_list, i),
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                GetListPrefInt64Value(*written_list, i));
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Verify the pref value in |pref_service_| are equal to that in
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // |simple_pref_service|.
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void VerifyPrefWasWritten(const char* pref) {
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    int64 delayed_pref = statistics_prefs_->GetInt64(pref);
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    int64 written_pref = simple_pref_service_.GetInt64(pref);
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_EQ(delayed_pref, written_pref);
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  TestingPrefServiceSimple simple_pref_service_;
781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<DataReductionProxyStatisticsPrefs> statistics_prefs_;
791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(DataReductionProxyStatisticsPrefsTest, WritePrefsDirect) {
821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  statistics_prefs_.reset(new DataReductionProxyStatisticsPrefs(
831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      &simple_pref_service_,
841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      task_runner_,
851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      base::TimeDelta()));
861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const int64 kOriginalLength = 150;
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const int64 kReceivedLength = 100;
881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CreatePrefList(
901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      data_reduction_proxy::prefs::kDailyHttpOriginalContentLength);
911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CreatePrefList(
921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      data_reduction_proxy::prefs::kDailyHttpReceivedContentLength);
931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  statistics_prefs_->SetInt64(
951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      data_reduction_proxy::prefs::kHttpOriginalContentLength, kOriginalLength);
961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  statistics_prefs_->SetInt64(
971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      data_reduction_proxy::prefs::kHttpReceivedContentLength, kReceivedLength);
981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::ListValue* original_daily_content_length_list =
1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      statistics_prefs_->GetList(data_reduction_proxy::prefs::
1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                 kDailyHttpOriginalContentLength);
1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::ListValue* received_daily_content_length_list =
1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      statistics_prefs_->GetList(data_reduction_proxy::prefs::
1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                 kDailyHttpReceivedContentLength);
1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  for (size_t i = 0; i < kNumDaysInHistory; ++i) {
1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    original_daily_content_length_list->Set(
1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        i, new base::StringValue(base::Int64ToString(i)));
1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  received_daily_content_length_list->Clear();
1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  for (size_t i = 0; i < kNumDaysInHistory/2; ++i) {
1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    received_daily_content_length_list->Set(
1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        i, new base::StringValue(base::Int64ToString(i)));
1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  VerifyPrefWasWritten(data_reduction_proxy::prefs::kHttpOriginalContentLength);
1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  VerifyPrefWasWritten(data_reduction_proxy::prefs::kHttpReceivedContentLength);
1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  VerifyPrefListWasWritten(
1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      data_reduction_proxy::prefs::kDailyHttpOriginalContentLength);
1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  VerifyPrefListWasWritten(
1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      data_reduction_proxy::prefs::kDailyHttpReceivedContentLength);
1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(DataReductionProxyStatisticsPrefsTest, WritePrefsDelayed) {
1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  statistics_prefs_.reset(new DataReductionProxyStatisticsPrefs(
1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      &simple_pref_service_,
1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      task_runner_,
1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      base::TimeDelta::FromMinutes(kWriteDelayMinutes)));
1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  statistics_prefs_->Init();
1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CreatePrefList(
1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      data_reduction_proxy::prefs::kDailyHttpOriginalContentLength);
1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CreatePrefList(
1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      data_reduction_proxy::prefs::kDailyHttpReceivedContentLength);
1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const int64 kOriginalLength = 150;
1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const int64 kReceivedLength = 100;
1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  statistics_prefs_->SetInt64(
1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      data_reduction_proxy::prefs::kHttpOriginalContentLength, kOriginalLength);
1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  statistics_prefs_->SetInt64(
1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      data_reduction_proxy::prefs::kHttpReceivedContentLength, kReceivedLength);
1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::ListValue* original_daily_content_length_list =
1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      statistics_prefs_->GetList(data_reduction_proxy::prefs::
1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                 kDailyHttpOriginalContentLength);
1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::ListValue* received_daily_content_length_list =
1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      statistics_prefs_->GetList(data_reduction_proxy::prefs::
1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                 kDailyHttpReceivedContentLength);
1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  for (size_t i = 0; i < kNumDaysInHistory; ++i) {
1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    original_daily_content_length_list->Set(
1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        i, new base::StringValue(base::Int64ToString(i)));
1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  received_daily_content_length_list->Clear();
1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  for (size_t i = 0; i < kNumDaysInHistory/2; ++i) {
1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    received_daily_content_length_list->Set(
1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        i, new base::StringValue(base::Int64ToString(i)));
1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  task_runner_->RunPendingTasks();
1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  VerifyPrefWasWritten(data_reduction_proxy::prefs::kHttpOriginalContentLength);
1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  VerifyPrefWasWritten(data_reduction_proxy::prefs::kHttpReceivedContentLength);
1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  VerifyPrefListWasWritten(
1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      data_reduction_proxy::prefs::kDailyHttpOriginalContentLength);
1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  VerifyPrefListWasWritten(
1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      data_reduction_proxy::prefs::kDailyHttpReceivedContentLength);
1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace data_reduction_proxy
174