diff options
author | rsleevi@chromium.org <rsleevi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-20 02:56:33 +0000 |
---|---|---|
committer | rsleevi@chromium.org <rsleevi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-20 02:56:33 +0000 |
commit | 604fbfde84d00714b1b97372bccda238d73a4edf (patch) | |
tree | 3970e82ccc856bd204d5bbd4c33d4d1146adf08b /net/base/ssl_config_service_unittest.cc | |
parent | 3d09c1a3c0789800ea299f539be700dbbd617e90 (diff) | |
download | chromium_src-604fbfde84d00714b1b97372bccda238d73a4edf.zip chromium_src-604fbfde84d00714b1b97372bccda238d73a4edf.tar.gz chromium_src-604fbfde84d00714b1b97372bccda238d73a4edf.tar.bz2 |
Detect when the disabled SSL/TLS cipher suites change within an SSLConfig
BUG=58831
TEST=net_unittests --gtest_filter=SSLConfigServiceTest.*
Review URL: http://codereview.chromium.org/7395026
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@93159 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base/ssl_config_service_unittest.cc')
-rw-r--r-- | net/base/ssl_config_service_unittest.cc | 109 |
1 files changed, 108 insertions, 1 deletions
diff --git a/net/base/ssl_config_service_unittest.cc b/net/base/ssl_config_service_unittest.cc index 528cf99..67036bb 100644 --- a/net/base/ssl_config_service_unittest.cc +++ b/net/base/ssl_config_service_unittest.cc @@ -3,15 +3,53 @@ // found in the LICENSE file. #include "net/base/ssl_config_service.h" + +#include <vector> + +#include "base/basictypes.h" +#include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +namespace net { + namespace { bool IsFalseStartIncompatible(const std::string& hostname) { - return net::SSLConfigService::IsKnownFalseStartIncompatibleServer( + return SSLConfigService::IsKnownFalseStartIncompatibleServer( hostname); } +class MockSSLConfigService : public SSLConfigService { + public: + explicit MockSSLConfigService(const SSLConfig& config) : config_(config) {} + + // SSLConfigService implementation + virtual void GetSSLConfig(SSLConfig* config) { + *config = config_; + } + + // Sets the SSLConfig to be returned by GetSSLConfig and processes any + // updates. + void SetSSLConfig(const SSLConfig& config) { + SSLConfig old_config = config_; + config_ = config; + ProcessConfigUpdate(old_config, config_); + } + + private: + virtual ~MockSSLConfigService() {} + + SSLConfig config_; +}; + +class MockSSLConfigServiceObserver : public SSLConfigService::Observer { + public: + MockSSLConfigServiceObserver() {} + virtual ~MockSSLConfigServiceObserver() {} + + MOCK_METHOD0(OnSSLConfigChanged, void()); +}; + } // namespace TEST(SSLConfigServiceTest, FalseStartDisabledHosts) { @@ -28,3 +66,72 @@ TEST(SSLConfigServiceTest, FalseStartDisabledDomains) { EXPECT_FALSE(IsFalseStartIncompatible("yodleea.com")); EXPECT_FALSE(IsFalseStartIncompatible("yodlee.org")); } + +TEST(SSLConfigServiceTest, NoChangesWontNotifyObservers) { + SSLConfig initial_config; + initial_config.rev_checking_enabled = true; + initial_config.ssl3_enabled = true; + initial_config.tls1_enabled = true; + + scoped_refptr<MockSSLConfigService> mock_service( + new MockSSLConfigService(initial_config)); + MockSSLConfigServiceObserver observer; + mock_service->AddObserver(&observer); + + EXPECT_CALL(observer, OnSSLConfigChanged()).Times(0); + mock_service->SetSSLConfig(initial_config); + + mock_service->RemoveObserver(&observer); +} + +TEST(SSLConfigServiceTest, ConfigUpdatesNotifyObservers) { + SSLConfig initial_config; + initial_config.rev_checking_enabled = true; + initial_config.ssl3_enabled = true; + initial_config.tls1_enabled = true; + + scoped_refptr<MockSSLConfigService> mock_service( + new MockSSLConfigService(initial_config)); + MockSSLConfigServiceObserver observer; + mock_service->AddObserver(&observer); + + // Test that the basic boolean preferences trigger updates. + initial_config.rev_checking_enabled = false; + EXPECT_CALL(observer, OnSSLConfigChanged()).Times(1); + mock_service->SetSSLConfig(initial_config); + + initial_config.ssl3_enabled = false; + EXPECT_CALL(observer, OnSSLConfigChanged()).Times(1); + mock_service->SetSSLConfig(initial_config); + + initial_config.tls1_enabled = false; + EXPECT_CALL(observer, OnSSLConfigChanged()).Times(1); + mock_service->SetSSLConfig(initial_config); + + // Test that disabling certain cipher suites triggers an update. + std::vector<uint16> disabled_ciphers; + disabled_ciphers.push_back(0x0004u); + disabled_ciphers.push_back(0xBEEFu); + disabled_ciphers.push_back(0xDEADu); + initial_config.disabled_cipher_suites = disabled_ciphers; + EXPECT_CALL(observer, OnSSLConfigChanged()).Times(1); + mock_service->SetSSLConfig(initial_config); + + // Ensure that changing a disabled cipher suite, while still maintaining + // sorted order, triggers an update. + disabled_ciphers[1] = 0xCAFEu; + initial_config.disabled_cipher_suites = disabled_ciphers; + EXPECT_CALL(observer, OnSSLConfigChanged()).Times(1); + mock_service->SetSSLConfig(initial_config); + + // Ensure that removing a disabled cipher suite, while still keeping some + // cipher suites disabled, triggers an update. + disabled_ciphers.pop_back(); + initial_config.disabled_cipher_suites = disabled_ciphers; + EXPECT_CALL(observer, OnSSLConfigChanged()).Times(1); + mock_service->SetSSLConfig(initial_config); + + mock_service->RemoveObserver(&observer); +} + +} // namespace net |