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