Index: chrome/browser/chromeos/policy/network_configuration_updater_unittest.cc |
diff --git a/chrome/browser/chromeos/policy/network_configuration_updater_unittest.cc b/chrome/browser/chromeos/policy/network_configuration_updater_unittest.cc |
index 7290ff3bfe8d9a84fcaf2129330f52be75d3ab63..b50f777c26410b57f46f3af73cb06348503815d3 100644 |
--- a/chrome/browser/chromeos/policy/network_configuration_updater_unittest.cc |
+++ b/chrome/browser/chromeos/policy/network_configuration_updater_unittest.cc |
@@ -4,6 +4,9 @@ |
#include "chrome/browser/chromeos/policy/network_configuration_updater.h" |
+#include "base/command_line.h" |
+#include "base/file_util.h" |
+#include "base/files/file_path.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/message_loop.h" |
#include "base/run_loop.h" |
@@ -11,13 +14,19 @@ |
#include "chrome/browser/policy/mock_configuration_policy_provider.h" |
#include "chrome/browser/policy/policy_map.h" |
#include "chrome/browser/policy/policy_service_impl.h" |
+#include "chrome/common/chrome_switches.h" |
#include "chromeos/network/onc/onc_constants.h" |
#include "chromeos/network/onc/onc_utils.h" |
+#include "content/public/test/test_browser_thread.h" |
+#include "content/public/test/test_utils.h" |
+#include "net/base/cert_trust_anchor_provider.h" |
+#include "net/base/test_data_directory.h" |
+#include "net/base/x509_certificate.h" |
#include "policy/policy_constants.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
-using testing::AtLeast; |
+using testing::AnyNumber; |
using testing::Mock; |
using testing::Ne; |
using testing::Return; |
@@ -25,11 +34,24 @@ using testing::_; |
namespace policy { |
-static const char kFakeONC[] = "{ \"GUID\": \"1234\" }"; |
+namespace { |
+ |
+const char kFakeONC[] = "{ \"GUID\": \"1234\" }"; |
+ |
+ACTION_P(SetCertificateList, list) { |
+ *arg3 = list; |
+ return true; |
+} |
+ |
+} // namespace |
class NetworkConfigurationUpdaterTest |
: public testing::TestWithParam<const char*>{ |
protected: |
+ NetworkConfigurationUpdaterTest() |
+ : ui_thread_(content::BrowserThread::UI, &loop_), |
+ io_thread_(content::BrowserThread::IO, &loop_) {} |
+ |
virtual void SetUp() OVERRIDE { |
EXPECT_CALL(provider_, IsInitializationComplete(_)) |
.WillRepeatedly(Return(true)); |
@@ -37,10 +59,14 @@ class NetworkConfigurationUpdaterTest |
PolicyServiceImpl::Providers providers; |
providers.push_back(&provider_); |
policy_service_.reset(new PolicyServiceImpl(providers)); |
+ |
+ CommandLine* command_line = CommandLine::ForCurrentProcess(); |
+ command_line->AppendSwitch(switches::kEnableWebTrustCerts); |
} |
virtual void TearDown() OVERRIDE { |
provider_.Shutdown(); |
+ content::RunAllPendingInMessageLoop(content::BrowserThread::IO); |
} |
void UpdateProviderPolicy(const PolicyMap& policy) { |
@@ -63,6 +89,8 @@ class NetworkConfigurationUpdaterTest |
MockConfigurationPolicyProvider provider_; |
scoped_ptr<PolicyServiceImpl> policy_service_; |
MessageLoop loop_; |
+ content::TestBrowserThread ui_thread_; |
+ content::TestBrowserThread io_thread_; |
}; |
TEST_P(NetworkConfigurationUpdaterTest, InitialUpdates) { |
@@ -106,26 +134,52 @@ TEST_P(NetworkConfigurationUpdaterTest, AllowWebTrust) { |
{ |
EXPECT_CALL(network_library_, AddNetworkProfileObserver(_)); |
- // Initially web trust is disabled. |
- EXPECT_CALL(network_library_, LoadOncNetworks(_, _, _, false)) |
- .Times(AtLeast(0)); |
+ const net::CertificateList empty_cert_list; |
+ |
+ base::FilePath cert_path = |
+ net::GetTestCertsDirectory().AppendASCII("ok_cert.pem"); |
+ std::string cert_data; |
+ ASSERT_TRUE(file_util::ReadFileToString(cert_path, &cert_data)); |
pneubeck (no reviews)
2013/03/26 10:01:25
is there a way to create fake certs?
how about tha
Joao da Silva
2013/03/31 19:22:14
These certificate files are used in several unit t
|
+ net::CertificateList cert_list = |
+ net::X509Certificate::CreateCertificateListFromBytes( |
+ cert_data.data(), |
+ cert_data.size(), |
+ net::X509Certificate::FORMAT_AUTO); |
+ ASSERT_EQ(1u, cert_list.size()); |
Ryan Sleevi
2013/03/25 21:09:53
Use https://code.google.com/p/chromium/codesearch#
Joao da Silva
2013/03/31 19:22:14
Thanks for the pointer, done.
|
+ |
+ EXPECT_CALL(network_library_, LoadOncNetworks(_, _, _, _)) |
+ .WillRepeatedly(SetCertificateList(empty_cert_list)); |
NetworkConfigurationUpdater updater(policy_service_.get(), |
&network_library_); |
+ net::CertTrustAnchorProvider* trust_provider = |
+ updater.GetCertTrustAnchorProvider(); |
+ ASSERT_TRUE(trust_provider); |
+ // The initial list of trust anchors is empty. |
+ content::RunAllPendingInMessageLoop(content::BrowserThread::IO); |
+ EXPECT_TRUE(trust_provider->GetAdditionalTrustAnchors().empty()); |
+ |
+ // Initially web trust is disabled. |
Ryan Sleevi
2013/03/25 21:09:53
nit: same comments re: "web trust"
Joao da Silva
2013/03/31 19:22:14
Done.
|
updater.OnUserPolicyInitialized(); |
+ content::RunAllPendingInMessageLoop(content::BrowserThread::IO); |
Mock::VerifyAndClearExpectations(&network_library_); |
+ EXPECT_TRUE(trust_provider->GetAdditionalTrustAnchors().empty()); |
- // Web trust should be forwarded to LoadOncNetworks. |
- EXPECT_CALL(network_library_, LoadOncNetworks(_, _, _, true)) |
- .Times(AtLeast(0)); |
- |
+ // Certificates with web trust should be forwarded to the trust provider. |
+ EXPECT_CALL(network_library_, LoadOncNetworks(_, _, _, _)) |
+ .WillRepeatedly(SetCertificateList(cert_list)); |
updater.set_allow_web_trust(true); |
- |
- PolicyMap policy; |
- policy.Set(GetParam(), POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
- Value::CreateStringValue(kFakeONC)); |
- UpdateProviderPolicy(policy); |
+ updater.OnUserPolicyInitialized(); |
pneubeck (no reviews)
2013/03/26 10:01:25
this call shouldn't be used a second time.
the imp
Joao da Silva
2013/03/31 19:22:14
Using the old trigger.
|
+ content::RunAllPendingInMessageLoop(content::BrowserThread::IO); |
Mock::VerifyAndClearExpectations(&network_library_); |
+ // Certificates are only provided as trust anchors if they come from user |
+ // policy. |
+ size_t expected_certs = 0u; |
+ if (GetParam() == key::kOpenNetworkConfiguration) |
+ expected_certs = 1u; |
+ EXPECT_EQ(expected_certs, |
+ trust_provider->GetAdditionalTrustAnchors().size()); |
+ |
EXPECT_CALL(network_library_, RemoveNetworkProfileObserver(_)); |
} |
Mock::VerifyAndClearExpectations(&network_library_); |
@@ -137,7 +191,7 @@ TEST_P(NetworkConfigurationUpdaterTest, PolicyChange) { |
// Ignore the initial updates. |
EXPECT_CALL(network_library_, LoadOncNetworks(_, _, _, _)) |
- .Times(AtLeast(0)); |
+ .Times(AnyNumber()); |
NetworkConfigurationUpdater updater(policy_service_.get(), |
&network_library_); |
updater.OnUserPolicyInitialized(); |