blob: 0c5aec79ad42b2525ab315049e1458556eb799e9 [file] [log] [blame]
// Copyright 2013 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.
#ifndef CHROME_BROWSER_NET_SPDYPROXY_DATA_REDUCTION_PROXY_SETTINGS_UNITTEST_H_
#define CHROME_BROWSER_NET_SPDYPROXY_DATA_REDUCTION_PROXY_SETTINGS_UNITTEST_H_
#include "base/metrics/field_trial.h"
#include "base/prefs/testing_pref_service.h"
#include "chrome/browser/net/spdyproxy/data_reduction_proxy_settings.h"
#include "net/url_request/test_url_fetcher_factory.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
class PrefService;
class TestingPrefServiceSimple;
template <class C>
class MockDataReductionProxySettings : public C {
public:
MOCK_METHOD0(GetURLFetcher, net::URLFetcher*());
MOCK_METHOD0(GetOriginalProfilePrefs, PrefService*());
MOCK_METHOD0(GetLocalStatePrefs, PrefService*());
MOCK_METHOD2(LogProxyState, void(bool enabled, bool at_startup));
// SetProxyConfigs should always call LogProxyState exactly once.
virtual void SetProxyConfigs(bool enabled, bool at_startup) OVERRIDE {
EXPECT_CALL(*this, LogProxyState(enabled, at_startup)).Times(1);
C::SetProxyConfigs(enabled, at_startup);
}
};
class DataReductionProxySettingsTestBase : public testing::Test {
public:
DataReductionProxySettingsTestBase();
virtual ~DataReductionProxySettingsTestBase();
void AddProxyToCommandLine();
virtual void SetUp() OVERRIDE;
template <class C> void ResetSettings();
virtual void ResetSettings() = 0;
template <class C> void SetProbeResult(
const std::string& test_url,
const std::string& response,
bool success,
int expected_calls);
virtual void SetProbeResult(const std::string& test_url,
const std::string& response,
bool success,
int expected_calls) = 0;
void CheckProxyPref(const std::string& expected_servers,
const std::string& expected_mode);
void CheckProxyConfigs(bool expected_enabled);
void CheckProbe(bool initially_enabled,
const std::string& probe_url,
const std::string& response,
bool request_success,
bool expected_enabled);
void CheckProbeOnIPChange(const std::string& probe_url,
const std::string& response,
bool request_success,
bool expected_enabled);
void CheckOnPrefChange(bool enabled,
const std::string& probe_url,
const std::string& response,
bool request_success,
bool expected_enabled);
void CheckInitDataReductionProxy(bool enabled_at_startup);
TestingPrefServiceSimple pref_service_;
scoped_ptr<DataReductionProxySettings> settings_;
base::Time last_update_time_;
// This is a singleton that will clear all set field trials on destruction.
scoped_ptr<base::FieldTrialList> field_trial_list_;
};
// Test implementations should be subclasses of an instantiation of this
// class parameterized for whatever DataReductionProxySettings class
// is being tested.
template <class C>
class ConcreteDataReductionProxySettingsTest
: public DataReductionProxySettingsTestBase {
public:
typedef MockDataReductionProxySettings<C> MockSettings;
virtual void ResetSettings() OVERRIDE {
return DataReductionProxySettingsTestBase::ResetSettings<C>();
}
virtual void SetProbeResult(const std::string& test_url,
const std::string& response,
bool success,
int expected_calls) OVERRIDE {
return DataReductionProxySettingsTestBase::SetProbeResult<C>(
test_url, response, success, expected_calls);
}
};
#endif // CHROME_BROWSER_NET_SPDYPROXY_DATA_REDUCTION_PROXY_SETTINGS_UNITTEST_H_