blob: 369c2ab6c8567e4de44d9253495e061ca3726150 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/memory/scoped_ptr.h"
#include "base/prefs/pref_registry_simple.h"
#include "base/prefs/testing_pref_service.h"
#include "base/strings/string_number_conversions.h"
#include "base/test/test_simple_task_runner.h"
#include "base/time/time.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_prefs.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_statistics_prefs.h"
#include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
// TODO Make kNumDaysInHistory accessible from DataReductionProxySettings.
const size_t kNumDaysInHistory = 60;
const int kWriteDelayMinutes = 60;
int64 GetListPrefInt64Value(
const base::ListValue& list_update, size_t index) {
std::string string_value;
EXPECT_TRUE(list_update.GetString(index, &string_value));
int64 value = 0;
EXPECT_TRUE(base::StringToInt64(string_value, &value));
return value;
}
} // namespace
namespace data_reduction_proxy {
class DataReductionProxyStatisticsPrefsTest : public testing::Test {
protected:
DataReductionProxyStatisticsPrefsTest()
: task_runner_(scoped_refptr<base::TestSimpleTaskRunner>(
new base::TestSimpleTaskRunner())) {}
void SetUp() override { RegisterPrefs(simple_pref_service_.registry()); }
// Create daily pref list of |kNumDaysInHistory| zero values.
void CreatePrefList(const char* pref) {
base::ListValue* update = statistics_prefs_->GetList(pref);
update->Clear();
for (size_t i = 0; i < kNumDaysInHistory; ++i) {
update->Insert(0, new base::StringValue(base::Int64ToString(0)));
}
}
// Verify the pref list values in |pref_service_| are equal to those in
// |simple_pref_service| for |pref|.
void VerifyPrefListWasWritten(const char* pref) {
const base::ListValue* delayed_list = statistics_prefs_->GetList(pref);
const base::ListValue* written_list = simple_pref_service_.GetList(pref);
ASSERT_EQ(delayed_list->GetSize(), written_list->GetSize());
size_t count = delayed_list->GetSize();
for (size_t i = 0; i < count; ++i) {
EXPECT_EQ(GetListPrefInt64Value(*delayed_list, i),
GetListPrefInt64Value(*written_list, i));
}
}
// Verify the pref value in |pref_service_| are equal to that in
// |simple_pref_service|.
void VerifyPrefWasWritten(const char* pref) {
int64 delayed_pref = statistics_prefs_->GetInt64(pref);
int64 written_pref = simple_pref_service_.GetInt64(pref);
EXPECT_EQ(delayed_pref, written_pref);
}
scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
TestingPrefServiceSimple simple_pref_service_;
scoped_ptr<DataReductionProxyStatisticsPrefs> statistics_prefs_;
};
TEST_F(DataReductionProxyStatisticsPrefsTest, WritePrefsDirect) {
statistics_prefs_.reset(new DataReductionProxyStatisticsPrefs(
&simple_pref_service_,
task_runner_,
base::TimeDelta()));
const int64 kOriginalLength = 150;
const int64 kReceivedLength = 100;
CreatePrefList(
data_reduction_proxy::prefs::kDailyHttpOriginalContentLength);
CreatePrefList(
data_reduction_proxy::prefs::kDailyHttpReceivedContentLength);
statistics_prefs_->SetInt64(
data_reduction_proxy::prefs::kHttpOriginalContentLength, kOriginalLength);
statistics_prefs_->SetInt64(
data_reduction_proxy::prefs::kHttpReceivedContentLength, kReceivedLength);
base::ListValue* original_daily_content_length_list =
statistics_prefs_->GetList(data_reduction_proxy::prefs::
kDailyHttpOriginalContentLength);
base::ListValue* received_daily_content_length_list =
statistics_prefs_->GetList(data_reduction_proxy::prefs::
kDailyHttpReceivedContentLength);
for (size_t i = 0; i < kNumDaysInHistory; ++i) {
original_daily_content_length_list->Set(
i, new base::StringValue(base::Int64ToString(i)));
}
received_daily_content_length_list->Clear();
for (size_t i = 0; i < kNumDaysInHistory/2; ++i) {
received_daily_content_length_list->Set(
i, new base::StringValue(base::Int64ToString(i)));
}
VerifyPrefWasWritten(data_reduction_proxy::prefs::kHttpOriginalContentLength);
VerifyPrefWasWritten(data_reduction_proxy::prefs::kHttpReceivedContentLength);
VerifyPrefListWasWritten(
data_reduction_proxy::prefs::kDailyHttpOriginalContentLength);
VerifyPrefListWasWritten(
data_reduction_proxy::prefs::kDailyHttpReceivedContentLength);
}
TEST_F(DataReductionProxyStatisticsPrefsTest, WritePrefsDelayed) {
statistics_prefs_.reset(new DataReductionProxyStatisticsPrefs(
&simple_pref_service_,
task_runner_,
base::TimeDelta::FromMinutes(kWriteDelayMinutes)));
CreatePrefList(
data_reduction_proxy::prefs::kDailyHttpOriginalContentLength);
CreatePrefList(
data_reduction_proxy::prefs::kDailyHttpReceivedContentLength);
const int64 kOriginalLength = 150;
const int64 kReceivedLength = 100;
statistics_prefs_->SetInt64(
data_reduction_proxy::prefs::kHttpOriginalContentLength, kOriginalLength);
statistics_prefs_->SetInt64(
data_reduction_proxy::prefs::kHttpReceivedContentLength, kReceivedLength);
base::ListValue* original_daily_content_length_list =
statistics_prefs_->GetList(data_reduction_proxy::prefs::
kDailyHttpOriginalContentLength);
base::ListValue* received_daily_content_length_list =
statistics_prefs_->GetList(data_reduction_proxy::prefs::
kDailyHttpReceivedContentLength);
for (size_t i = 0; i < kNumDaysInHistory; ++i) {
original_daily_content_length_list->Set(
i, new base::StringValue(base::Int64ToString(i)));
}
received_daily_content_length_list->Clear();
for (size_t i = 0; i < kNumDaysInHistory/2; ++i) {
received_daily_content_length_list->Set(
i, new base::StringValue(base::Int64ToString(i)));
}
task_runner_->RunPendingTasks();
VerifyPrefWasWritten(data_reduction_proxy::prefs::kHttpOriginalContentLength);
VerifyPrefWasWritten(data_reduction_proxy::prefs::kHttpReceivedContentLength);
VerifyPrefListWasWritten(
data_reduction_proxy::prefs::kDailyHttpOriginalContentLength);
VerifyPrefListWasWritten(
data_reduction_proxy::prefs::kDailyHttpReceivedContentLength);
}
TEST_F(DataReductionProxyStatisticsPrefsTest,
WritePrefsOnUpdateDailyReceivedContentLengths) {
statistics_prefs_.reset(new DataReductionProxyStatisticsPrefs(
&simple_pref_service_,
task_runner_,
base::TimeDelta::FromMinutes(kWriteDelayMinutes)));
CreatePrefList(
data_reduction_proxy::prefs::kDailyHttpOriginalContentLength);
CreatePrefList(
data_reduction_proxy::prefs::kDailyHttpReceivedContentLength);
const int64 kOriginalLength = 150;
const int64 kReceivedLength = 100;
statistics_prefs_->SetInt64(
data_reduction_proxy::prefs::kHttpOriginalContentLength, kOriginalLength);
statistics_prefs_->SetInt64(
data_reduction_proxy::prefs::kHttpReceivedContentLength, kReceivedLength);
base::ListValue* original_daily_content_length_list =
statistics_prefs_->GetList(data_reduction_proxy::prefs::
kDailyHttpOriginalContentLength);
base::ListValue* received_daily_content_length_list =
statistics_prefs_->GetList(data_reduction_proxy::prefs::
kDailyHttpReceivedContentLength);
for (size_t i = 0; i < kNumDaysInHistory; ++i) {
original_daily_content_length_list->Set(
i, new base::StringValue(base::Int64ToString(i)));
}
received_daily_content_length_list->Clear();
for (size_t i = 0; i < kNumDaysInHistory/2; ++i) {
received_daily_content_length_list->Set(
i, new base::StringValue(base::Int64ToString(i)));
}
simple_pref_service_.SetBoolean(
data_reduction_proxy::prefs::kUpdateDailyReceivedContentLengths, true);
VerifyPrefWasWritten(data_reduction_proxy::prefs::kHttpOriginalContentLength);
VerifyPrefWasWritten(data_reduction_proxy::prefs::kHttpReceivedContentLength);
VerifyPrefListWasWritten(
data_reduction_proxy::prefs::kDailyHttpOriginalContentLength);
VerifyPrefListWasWritten(
data_reduction_proxy::prefs::kDailyHttpReceivedContentLength);
}
} // namespace data_reduction_proxy