| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chromeos/network/auto_connect_handler.h" | 5 #include "chromeos/network/auto_connect_handler.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/bind.h" | |
| 11 #include "base/callback.h" | |
| 12 #include "base/files/file_util.h" | 10 #include "base/files/file_util.h" |
| 13 #include "base/json/json_reader.h" | 11 #include "base/json/json_reader.h" |
| 14 #include "base/macros.h" | 12 #include "base/macros.h" |
| 15 #include "base/message_loop/message_loop.h" | 13 #include "base/message_loop/message_loop.h" |
| 16 #include "base/run_loop.h" | 14 #include "base/run_loop.h" |
| 17 #include "base/strings/stringprintf.h" | 15 #include "base/strings/stringprintf.h" |
| 18 #include "base/test/scoped_task_scheduler.h" | 16 #include "base/test/scoped_task_scheduler.h" |
| 19 #include "chromeos/cert_loader.h" | 17 #include "chromeos/cert_loader.h" |
| 20 #include "chromeos/dbus/dbus_thread_manager.h" | 18 #include "chromeos/dbus/dbus_thread_manager.h" |
| 21 #include "chromeos/dbus/shill_device_client.h" | |
| 22 #include "chromeos/dbus/shill_manager_client.h" | |
| 23 #include "chromeos/dbus/shill_profile_client.h" | |
| 24 #include "chromeos/dbus/shill_service_client.h" | |
| 25 #include "chromeos/network/client_cert_resolver.h" | 19 #include "chromeos/network/client_cert_resolver.h" |
| 26 #include "chromeos/network/managed_network_configuration_handler_impl.h" | 20 #include "chromeos/network/managed_network_configuration_handler_impl.h" |
| 27 #include "chromeos/network/network_configuration_handler.h" | 21 #include "chromeos/network/network_configuration_handler.h" |
| 28 #include "chromeos/network/network_profile_handler.h" | 22 #include "chromeos/network/network_profile_handler.h" |
| 29 #include "chromeos/network/network_state_handler.h" | 23 #include "chromeos/network/network_state_test.h" |
| 30 #include "chromeos/network/onc/onc_utils.h" | |
| 31 #include "components/onc/onc_constants.h" | 24 #include "components/onc/onc_constants.h" |
| 32 #include "crypto/scoped_nss_types.h" | 25 #include "crypto/scoped_nss_types.h" |
| 33 #include "crypto/scoped_test_nss_db.h" | 26 #include "crypto/scoped_test_nss_db.h" |
| 34 #include "net/base/net_errors.h" | 27 #include "net/base/net_errors.h" |
| 35 #include "net/cert/nss_cert_database_chromeos.h" | 28 #include "net/cert/nss_cert_database_chromeos.h" |
| 36 #include "net/cert/x509_certificate.h" | 29 #include "net/cert/x509_certificate.h" |
| 37 #include "net/test/cert_test_util.h" | 30 #include "net/test/cert_test_util.h" |
| 38 #include "net/test/test_data_directory.h" | 31 #include "net/test/test_data_directory.h" |
| 39 #include "testing/gtest/include/gtest/gtest.h" | |
| 40 #include "third_party/cros_system_api/dbus/service_constants.h" | 32 #include "third_party/cros_system_api/dbus/service_constants.h" |
| 41 | 33 |
| 42 namespace chromeos { | 34 namespace chromeos { |
| 43 | 35 |
| 44 namespace { | 36 namespace { |
| 45 | 37 |
| 46 const char kUserHash[] = "user_hash"; | |
| 47 | |
| 48 void ConfigureCallback(const dbus::ObjectPath& result) { | |
| 49 } | |
| 50 | |
| 51 void FailErrorCallback(const std::string& error_name, | |
| 52 const std::string& error_message) { | |
| 53 // This function is not expected to be called. | |
| 54 EXPECT_TRUE(false); | |
| 55 } | |
| 56 | |
| 57 class TestCertResolveObserver : public ClientCertResolver::Observer { | 38 class TestCertResolveObserver : public ClientCertResolver::Observer { |
| 58 public: | 39 public: |
| 59 explicit TestCertResolveObserver(ClientCertResolver* cert_resolver) | 40 explicit TestCertResolveObserver(ClientCertResolver* cert_resolver) |
| 60 : changed_network_properties_(false), cert_resolver_(cert_resolver) { | 41 : changed_network_properties_(false), cert_resolver_(cert_resolver) { |
| 61 cert_resolver_->AddObserver(this); | 42 cert_resolver_->AddObserver(this); |
| 62 } | 43 } |
| 63 | 44 |
| 64 void ResolveRequestCompleted(bool changed_network_properties) override { | 45 void ResolveRequestCompleted(bool changed_network_properties) override { |
| 65 cert_resolver_->RemoveObserver(this); | 46 cert_resolver_->RemoveObserver(this); |
| 66 changed_network_properties_ = changed_network_properties; | 47 changed_network_properties_ = changed_network_properties; |
| 67 } | 48 } |
| 68 | 49 |
| 69 bool DidNetworkPropertiesChange() { return changed_network_properties_; } | 50 bool DidNetworkPropertiesChange() { return changed_network_properties_; } |
| 70 | 51 |
| 71 private: | 52 private: |
| 72 bool changed_network_properties_; | 53 bool changed_network_properties_; |
| 73 ClientCertResolver* cert_resolver_; | 54 ClientCertResolver* cert_resolver_; |
| 74 }; | 55 }; |
| 75 | 56 |
| 76 } // namespace | 57 } // namespace |
| 77 | 58 |
| 78 class AutoConnectHandlerTest : public testing::Test { | 59 class AutoConnectHandlerTest : public NetworkStateTest { |
| 79 public: | 60 public: |
| 80 AutoConnectHandlerTest() | 61 AutoConnectHandlerTest() : scoped_task_scheduler_(&message_loop_) {} |
| 81 : test_manager_client_(nullptr), | |
| 82 test_service_client_(nullptr), | |
| 83 scoped_task_scheduler_(&message_loop_) {} | |
| 84 | 62 |
| 85 void SetUp() override { | 63 void SetUp() override { |
| 86 ASSERT_TRUE(test_nssdb_.is_open()); | 64 ASSERT_TRUE(test_nssdb_.is_open()); |
| 87 | 65 |
| 88 // Use the same DB for public and private slot. | 66 // Use the same DB for public and private slot. |
| 89 test_nsscertdb_.reset(new net::NSSCertDatabaseChromeOS( | 67 test_nsscertdb_.reset(new net::NSSCertDatabaseChromeOS( |
| 90 crypto::ScopedPK11Slot(PK11_ReferenceSlot(test_nssdb_.slot())), | 68 crypto::ScopedPK11Slot(PK11_ReferenceSlot(test_nssdb_.slot())), |
| 91 crypto::ScopedPK11Slot(PK11_ReferenceSlot(test_nssdb_.slot())))); | 69 crypto::ScopedPK11Slot(PK11_ReferenceSlot(test_nssdb_.slot())))); |
| 92 test_nsscertdb_->SetSlowTaskRunnerForTest(message_loop_.task_runner()); | 70 test_nsscertdb_->SetSlowTaskRunnerForTest(message_loop_.task_runner()); |
| 93 | 71 |
| 94 CertLoader::Initialize(); | 72 CertLoader::Initialize(); |
| 95 CertLoader::ForceHardwareBackedForTesting(); | 73 CertLoader::ForceHardwareBackedForTesting(); |
| 96 | 74 |
| 97 DBusThreadManager::Initialize(); | 75 DBusThreadManager::Initialize(); |
| 98 DBusThreadManager* dbus_manager = DBusThreadManager::Get(); | |
| 99 test_manager_client_ = | |
| 100 dbus_manager->GetShillManagerClient()->GetTestInterface(); | |
| 101 test_service_client_ = | |
| 102 dbus_manager->GetShillServiceClient()->GetTestInterface(); | |
| 103 | 76 |
| 104 test_manager_client_->AddTechnology(shill::kTypeWifi, true /* enabled */); | 77 NetworkStateTest::SetUp(); |
| 105 dbus_manager->GetShillDeviceClient()->GetTestInterface()->AddDevice( | |
| 106 "/device/wifi1", shill::kTypeWifi, "wifi_device1"); | |
| 107 test_manager_client_->AddTechnology(shill::kTypeCellular, | |
| 108 true /* enabled */); | |
| 109 dbus_manager->GetShillProfileClient()->GetTestInterface()->AddProfile( | |
| 110 "shared_profile_path", std::string() /* shared profile */); | |
| 111 dbus_manager->GetShillProfileClient()->GetTestInterface()->AddProfile( | |
| 112 "user_profile_path", kUserHash); | |
| 113 | 78 |
| 114 base::RunLoop().RunUntilIdle(); | |
| 115 LoginState::Initialize(); | 79 LoginState::Initialize(); |
| 116 network_state_handler_ = NetworkStateHandler::InitializeForTest(); | 80 |
| 117 network_config_handler_.reset( | 81 network_config_handler_.reset( |
| 118 NetworkConfigurationHandler::InitializeForTest( | 82 NetworkConfigurationHandler::InitializeForTest( |
| 119 network_state_handler_.get(), NULL /* network_device_handler */)); | 83 network_state_handler(), nullptr /* network_device_handler */)); |
| 120 | 84 |
| 121 network_profile_handler_.reset(new NetworkProfileHandler()); | 85 network_profile_handler_.reset(new NetworkProfileHandler()); |
| 122 network_profile_handler_->Init(); | 86 network_profile_handler_->Init(); |
| 123 | 87 |
| 124 managed_config_handler_.reset(new ManagedNetworkConfigurationHandlerImpl()); | 88 managed_config_handler_.reset(new ManagedNetworkConfigurationHandlerImpl()); |
| 125 managed_config_handler_->Init( | 89 managed_config_handler_->Init( |
| 126 network_state_handler_.get(), network_profile_handler_.get(), | 90 network_state_handler(), network_profile_handler_.get(), |
| 127 network_config_handler_.get(), nullptr /* network_device_handler */, | 91 network_config_handler_.get(), nullptr /* network_device_handler */, |
| 128 nullptr /* prohibited_technologies_handler */); | 92 nullptr /* prohibited_technologies_handler */); |
| 129 | 93 |
| 130 client_cert_resolver_.reset(new ClientCertResolver()); | 94 client_cert_resolver_.reset(new ClientCertResolver()); |
| 131 client_cert_resolver_->Init(network_state_handler_.get(), | 95 client_cert_resolver_->Init(network_state_handler(), |
| 132 managed_config_handler_.get()); | 96 managed_config_handler_.get()); |
| 133 | 97 |
| 134 auto_connect_handler_.reset(new AutoConnectHandler()); | 98 auto_connect_handler_.reset(new AutoConnectHandler()); |
| 135 auto_connect_handler_->Init(client_cert_resolver_.get(), | 99 auto_connect_handler_->Init(client_cert_resolver_.get(), |
| 136 nullptr, // no connection handler | 100 nullptr, // no connection handler |
| 137 network_state_handler_.get(), | 101 network_state_handler(), |
| 138 managed_config_handler_.get()); | 102 managed_config_handler_.get()); |
| 139 | 103 |
| 140 base::RunLoop().RunUntilIdle(); | 104 base::RunLoop().RunUntilIdle(); |
| 141 } | 105 } |
| 142 | 106 |
| 143 void TearDown() override { | 107 void TearDown() override { |
| 144 network_state_handler_->Shutdown(); | 108 ShutdownNetworkState(); |
| 145 auto_connect_handler_.reset(); | 109 auto_connect_handler_.reset(); |
| 146 client_cert_resolver_.reset(); | 110 client_cert_resolver_.reset(); |
| 147 managed_config_handler_.reset(); | 111 managed_config_handler_.reset(); |
| 148 network_profile_handler_.reset(); | 112 network_profile_handler_.reset(); |
| 149 network_config_handler_.reset(); | 113 network_config_handler_.reset(); |
| 150 network_state_handler_.reset(); | 114 |
| 115 LoginState::Shutdown(); |
| 116 |
| 117 NetworkStateTest::TearDown(); |
| 118 |
| 119 DBusThreadManager::Shutdown(); |
| 151 CertLoader::Shutdown(); | 120 CertLoader::Shutdown(); |
| 152 LoginState::Shutdown(); | |
| 153 DBusThreadManager::Shutdown(); | |
| 154 } | 121 } |
| 155 | 122 |
| 156 protected: | 123 protected: |
| 157 bool Configure(const std::string& json_string) { | |
| 158 std::unique_ptr<base::DictionaryValue> json_dict = | |
| 159 onc::ReadDictionaryFromJson(json_string); | |
| 160 if (!json_dict) { | |
| 161 LOG(ERROR) << "Error parsing json: " << json_string; | |
| 162 return false; | |
| 163 } | |
| 164 DBusThreadManager::Get()->GetShillManagerClient()->ConfigureService( | |
| 165 *json_dict, base::Bind(&ConfigureCallback), | |
| 166 base::Bind(&FailErrorCallback)); | |
| 167 base::RunLoop().RunUntilIdle(); | |
| 168 return true; | |
| 169 } | |
| 170 | |
| 171 std::string GetServiceState(const std::string& service_path) { | 124 std::string GetServiceState(const std::string& service_path) { |
| 172 const base::DictionaryValue* properties = | 125 return GetServiceStringProperty(service_path, shill::kStateProperty); |
| 173 test_service_client_->GetServiceProperties(service_path); | |
| 174 std::string result; | |
| 175 if (properties) | |
| 176 properties->GetStringWithoutPathExpansion(shill::kStateProperty, &result); | |
| 177 return result; | |
| 178 } | 126 } |
| 179 | 127 |
| 180 void StartCertLoader() { | 128 void StartCertLoader() { |
| 181 CertLoader::Get()->StartWithNSSDB(test_nsscertdb_.get()); | 129 CertLoader::Get()->StartWithNSSDB(test_nsscertdb_.get()); |
| 182 base::RunLoop().RunUntilIdle(); | 130 base::RunLoop().RunUntilIdle(); |
| 183 } | 131 } |
| 184 | 132 |
| 185 void LoginToRegularUser() { | 133 void LoginToRegularUser() { |
| 186 LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE, | 134 LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE, |
| 187 LoginState::LOGGED_IN_USER_REGULAR); | 135 LoginState::LOGGED_IN_USER_REGULAR); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 236 } else { | 184 } else { |
| 237 managed_config_handler_->SetPolicy(::onc::ONC_SOURCE_DEVICE_POLICY, | 185 managed_config_handler_->SetPolicy(::onc::ONC_SOURCE_DEVICE_POLICY, |
| 238 std::string(), // no username hash | 186 std::string(), // no username hash |
| 239 *network_configs, global_config); | 187 *network_configs, global_config); |
| 240 } | 188 } |
| 241 base::RunLoop().RunUntilIdle(); | 189 base::RunLoop().RunUntilIdle(); |
| 242 } | 190 } |
| 243 | 191 |
| 244 std::unique_ptr<AutoConnectHandler> auto_connect_handler_; | 192 std::unique_ptr<AutoConnectHandler> auto_connect_handler_; |
| 245 std::unique_ptr<ClientCertResolver> client_cert_resolver_; | 193 std::unique_ptr<ClientCertResolver> client_cert_resolver_; |
| 246 std::unique_ptr<NetworkStateHandler> network_state_handler_; | |
| 247 std::unique_ptr<NetworkConfigurationHandler> network_config_handler_; | 194 std::unique_ptr<NetworkConfigurationHandler> network_config_handler_; |
| 248 std::unique_ptr<ManagedNetworkConfigurationHandlerImpl> | 195 std::unique_ptr<ManagedNetworkConfigurationHandlerImpl> |
| 249 managed_config_handler_; | 196 managed_config_handler_; |
| 250 std::unique_ptr<NetworkProfileHandler> network_profile_handler_; | 197 std::unique_ptr<NetworkProfileHandler> network_profile_handler_; |
| 251 ShillManagerClient::TestInterface* test_manager_client_; | |
| 252 ShillServiceClient::TestInterface* test_service_client_; | |
| 253 crypto::ScopedTestNSSDB test_nssdb_; | 198 crypto::ScopedTestNSSDB test_nssdb_; |
| 254 std::unique_ptr<net::NSSCertDatabaseChromeOS> test_nsscertdb_; | 199 std::unique_ptr<net::NSSCertDatabaseChromeOS> test_nsscertdb_; |
| 255 base::MessageLoopForUI message_loop_; | 200 base::MessageLoopForUI message_loop_; |
| 256 | 201 |
| 257 private: | 202 private: |
| 258 base::test::ScopedTaskScheduler scoped_task_scheduler_; | 203 base::test::ScopedTaskScheduler scoped_task_scheduler_; |
| 259 | 204 |
| 260 DISALLOW_COPY_AND_ASSIGN(AutoConnectHandlerTest); | 205 DISALLOW_COPY_AND_ASSIGN(AutoConnectHandlerTest); |
| 261 }; | 206 }; |
| 262 | 207 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 " \"Issuer\": {" | 239 " \"Issuer\": {" |
| 295 " \"CommonName\": \"B CA\"" | 240 " \"CommonName\": \"B CA\"" |
| 296 " }" | 241 " }" |
| 297 " }" | 242 " }" |
| 298 " }" | 243 " }" |
| 299 " }" | 244 " }" |
| 300 "} ]"; | 245 "} ]"; |
| 301 } // namespace | 246 } // namespace |
| 302 | 247 |
| 303 TEST_F(AutoConnectHandlerTest, ReconnectOnCertLoading) { | 248 TEST_F(AutoConnectHandlerTest, ReconnectOnCertLoading) { |
| 304 EXPECT_TRUE(Configure(kConfigUnmanagedSharedConnected)); | 249 EXPECT_TRUE(ConfigureService(kConfigUnmanagedSharedConnected)); |
| 305 EXPECT_TRUE(Configure(kConfigManagedSharedConnectable)); | 250 EXPECT_TRUE(ConfigureService(kConfigManagedSharedConnectable)); |
| 306 test_manager_client_->SetBestServiceToConnect("wifi1"); | 251 test_manager_client()->SetBestServiceToConnect("wifi1"); |
| 307 | 252 |
| 308 // User login shouldn't trigger any change until the certificates and policy | 253 // User login shouldn't trigger any change until the certificates and policy |
| 309 // are loaded. | 254 // are loaded. |
| 310 LoginToRegularUser(); | 255 LoginToRegularUser(); |
| 311 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); | 256 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); |
| 312 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); | 257 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); |
| 313 | 258 |
| 314 // Applying the policy which restricts autoconnect should disconnect from the | 259 // Applying the policy which restricts autoconnect should disconnect from the |
| 315 // shared, unmanaged network. | 260 // shared, unmanaged network. |
| 316 base::DictionaryValue global_config; | 261 base::DictionaryValue global_config; |
| 317 global_config.SetBooleanWithoutPathExpansion( | 262 global_config.SetBooleanWithoutPathExpansion( |
| 318 ::onc::global_network_config::kAllowOnlyPolicyNetworksToAutoconnect, | 263 ::onc::global_network_config::kAllowOnlyPolicyNetworksToAutoconnect, |
| 319 true); | 264 true); |
| 320 | 265 |
| 321 SetupPolicy(std::string(), // no network configs | 266 SetupPolicy(std::string(), // no network configs |
| 322 base::DictionaryValue(), // no global config | 267 base::DictionaryValue(), // no global config |
| 323 true); // load as user policy | 268 true); // load as user policy |
| 324 SetupPolicy(kPolicy, global_config, false /* load as device policy */); | 269 SetupPolicy(kPolicy, global_config, false /* load as device policy */); |
| 325 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi0")); | 270 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi0")); |
| 326 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); | 271 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); |
| 327 | 272 |
| 328 // Certificate loading should trigger connecting to the 'best' network. | 273 // Certificate loading should trigger connecting to the 'best' network. |
| 329 StartCertLoader(); | 274 StartCertLoader(); |
| 330 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi0")); | 275 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi0")); |
| 331 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi1")); | 276 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi1")); |
| 332 } | 277 } |
| 333 | 278 |
| 334 TEST_F(AutoConnectHandlerTest, ReconnectOnCertPatternResolved) { | 279 TEST_F(AutoConnectHandlerTest, ReconnectOnCertPatternResolved) { |
| 335 EXPECT_TRUE(Configure(kConfigUnmanagedSharedConnected)); | 280 EXPECT_TRUE(ConfigureService(kConfigUnmanagedSharedConnected)); |
| 336 EXPECT_TRUE(Configure(kConfigManagedSharedConnectable)); | 281 EXPECT_TRUE(ConfigureService(kConfigManagedSharedConnectable)); |
| 337 test_manager_client_->SetBestServiceToConnect("wifi0"); | 282 test_manager_client()->SetBestServiceToConnect("wifi0"); |
| 338 | 283 |
| 339 SetupPolicy(std::string(), // no device policy | 284 SetupPolicy(std::string(), // no device policy |
| 340 base::DictionaryValue(), // no global config | 285 base::DictionaryValue(), // no global config |
| 341 false); // load as device policy | 286 false); // load as device policy |
| 342 LoginToRegularUser(); | 287 LoginToRegularUser(); |
| 343 StartCertLoader(); | 288 StartCertLoader(); |
| 344 SetupPolicy(kPolicyCertPattern, | 289 SetupPolicy(kPolicyCertPattern, |
| 345 base::DictionaryValue(), // no global config | 290 base::DictionaryValue(), // no global config |
| 346 true); // load as user policy | 291 true); // load as user policy |
| 347 | 292 |
| 348 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); | 293 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); |
| 349 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); | 294 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); |
| 350 | 295 |
| 351 test_manager_client_->SetBestServiceToConnect("wifi1"); | 296 test_manager_client()->SetBestServiceToConnect("wifi1"); |
| 352 TestCertResolveObserver observer(client_cert_resolver_.get()); | 297 TestCertResolveObserver observer(client_cert_resolver_.get()); |
| 353 | 298 |
| 354 scoped_refptr<net::X509Certificate> cert = ImportTestClientCert(); | 299 scoped_refptr<net::X509Certificate> cert = ImportTestClientCert(); |
| 355 ASSERT_TRUE(cert.get()); | 300 ASSERT_TRUE(cert.get()); |
| 356 | 301 |
| 357 base::RunLoop().RunUntilIdle(); | 302 base::RunLoop().RunUntilIdle(); |
| 358 EXPECT_TRUE(observer.DidNetworkPropertiesChange()); | 303 EXPECT_TRUE(observer.DidNetworkPropertiesChange()); |
| 359 | 304 |
| 360 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi0")); | 305 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi0")); |
| 361 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi1")); | 306 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi1")); |
| 362 } | 307 } |
| 363 | 308 |
| 364 // Ensure that resolving of certificate patterns only triggers a reconnect if at | 309 // Ensure that resolving of certificate patterns only triggers a reconnect if at |
| 365 // least one pattern was resolved. | 310 // least one pattern was resolved. |
| 366 TEST_F(AutoConnectHandlerTest, NoReconnectIfNoCertResolved) { | 311 TEST_F(AutoConnectHandlerTest, NoReconnectIfNoCertResolved) { |
| 367 EXPECT_TRUE(Configure(kConfigUnmanagedSharedConnected)); | 312 EXPECT_TRUE(ConfigureService(kConfigUnmanagedSharedConnected)); |
| 368 EXPECT_TRUE(Configure(kConfigManagedSharedConnectable)); | 313 EXPECT_TRUE(ConfigureService(kConfigManagedSharedConnectable)); |
| 369 test_manager_client_->SetBestServiceToConnect("wifi0"); | 314 test_manager_client()->SetBestServiceToConnect("wifi0"); |
| 370 | 315 |
| 371 SetupPolicy(std::string(), // no device policy | 316 SetupPolicy(std::string(), // no device policy |
| 372 base::DictionaryValue(), // no global config | 317 base::DictionaryValue(), // no global config |
| 373 false); // load as device policy | 318 false); // load as device policy |
| 374 LoginToRegularUser(); | 319 LoginToRegularUser(); |
| 375 StartCertLoader(); | 320 StartCertLoader(); |
| 376 SetupPolicy(kPolicy, | 321 SetupPolicy(kPolicy, |
| 377 base::DictionaryValue(), // no global config | 322 base::DictionaryValue(), // no global config |
| 378 true); // load as user policy | 323 true); // load as user policy |
| 379 | 324 |
| 380 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); | 325 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); |
| 381 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); | 326 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); |
| 382 | 327 |
| 383 test_manager_client_->SetBestServiceToConnect("wifi1"); | 328 test_manager_client()->SetBestServiceToConnect("wifi1"); |
| 384 TestCertResolveObserver observer(client_cert_resolver_.get()); | 329 TestCertResolveObserver observer(client_cert_resolver_.get()); |
| 385 scoped_refptr<net::X509Certificate> cert = ImportTestClientCert(); | 330 scoped_refptr<net::X509Certificate> cert = ImportTestClientCert(); |
| 386 ASSERT_TRUE(cert.get()); | 331 ASSERT_TRUE(cert.get()); |
| 387 | 332 |
| 388 base::RunLoop().RunUntilIdle(); | 333 base::RunLoop().RunUntilIdle(); |
| 389 EXPECT_FALSE(observer.DidNetworkPropertiesChange()); | 334 EXPECT_FALSE(observer.DidNetworkPropertiesChange()); |
| 390 | 335 |
| 391 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); | 336 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); |
| 392 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); | 337 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); |
| 393 } | 338 } |
| 394 | 339 |
| 395 TEST_F(AutoConnectHandlerTest, DisconnectOnPolicyLoading) { | 340 TEST_F(AutoConnectHandlerTest, DisconnectOnPolicyLoading) { |
| 396 EXPECT_TRUE(Configure(kConfigUnmanagedSharedConnected)); | 341 EXPECT_TRUE(ConfigureService(kConfigUnmanagedSharedConnected)); |
| 397 EXPECT_TRUE(Configure(kConfigManagedSharedConnectable)); | 342 EXPECT_TRUE(ConfigureService(kConfigManagedSharedConnectable)); |
| 398 | 343 |
| 399 // User login and certificate loading shouldn't trigger any change until the | 344 // User login and certificate loading shouldn't trigger any change until the |
| 400 // policy is loaded. | 345 // policy is loaded. |
| 401 LoginToRegularUser(); | 346 LoginToRegularUser(); |
| 402 StartCertLoader(); | 347 StartCertLoader(); |
| 403 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); | 348 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); |
| 404 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); | 349 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); |
| 405 | 350 |
| 406 base::DictionaryValue global_config; | 351 base::DictionaryValue global_config; |
| 407 global_config.SetBooleanWithoutPathExpansion( | 352 global_config.SetBooleanWithoutPathExpansion( |
| (...skipping 10 matching lines...) Expand all Loading... |
| 418 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); | 363 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); |
| 419 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); | 364 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); |
| 420 | 365 |
| 421 SetupPolicy(std::string(), base::DictionaryValue(), true); | 366 SetupPolicy(std::string(), base::DictionaryValue(), true); |
| 422 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi0")); | 367 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi0")); |
| 423 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); | 368 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); |
| 424 } | 369 } |
| 425 | 370 |
| 426 TEST_F(AutoConnectHandlerTest, | 371 TEST_F(AutoConnectHandlerTest, |
| 427 DisconnectOnPolicyLoadingAllowOnlyPolicyNetworksToConnect) { | 372 DisconnectOnPolicyLoadingAllowOnlyPolicyNetworksToConnect) { |
| 428 EXPECT_TRUE(Configure(kConfigUnmanagedSharedConnected)); | 373 EXPECT_TRUE(ConfigureService(kConfigUnmanagedSharedConnected)); |
| 429 EXPECT_TRUE(Configure(kConfigManagedSharedConnectable)); | 374 EXPECT_TRUE(ConfigureService(kConfigManagedSharedConnectable)); |
| 430 | 375 |
| 431 // User login and certificate loading shouldn't trigger any change until the | 376 // User login and certificate loading shouldn't trigger any change until the |
| 432 // policy is loaded. | 377 // policy is loaded. |
| 433 LoginToRegularUser(); | 378 LoginToRegularUser(); |
| 434 StartCertLoader(); | 379 StartCertLoader(); |
| 435 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); | 380 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); |
| 436 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); | 381 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); |
| 437 | 382 |
| 438 base::DictionaryValue global_config; | 383 base::DictionaryValue global_config; |
| 439 global_config.SetBooleanWithoutPathExpansion( | 384 global_config.SetBooleanWithoutPathExpansion( |
| 440 ::onc::global_network_config::kAllowOnlyPolicyNetworksToConnect, true); | 385 ::onc::global_network_config::kAllowOnlyPolicyNetworksToConnect, true); |
| 441 | 386 |
| 442 // Applying the policy which restricts autoconnect should disconnect from the | 387 // Applying the policy which restricts autoconnect should disconnect from the |
| 443 // shared, unmanaged network. | 388 // shared, unmanaged network. |
| 444 // Because no best service is set, the fake implementation of | 389 // Because no best service is set, the fake implementation of |
| 445 // ConnectToBestServices will be a no-op. | 390 // ConnectToBestServices will be a no-op. |
| 446 SetupPolicy(kPolicy, global_config, false /* load as device policy */); | 391 SetupPolicy(kPolicy, global_config, false /* load as device policy */); |
| 447 | 392 |
| 448 // Should not trigger any change until user policy is loaded | 393 // Should not trigger any change until user policy is loaded |
| 449 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); | 394 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); |
| 450 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); | 395 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); |
| 451 | 396 |
| 452 SetupPolicy(std::string(), base::DictionaryValue(), true); | 397 SetupPolicy(std::string(), base::DictionaryValue(), true); |
| 453 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi0")); | 398 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi0")); |
| 454 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); | 399 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); |
| 455 } | 400 } |
| 456 | 401 |
| 457 // After login a reconnect is triggered even if there is no managed network. | 402 // After login a reconnect is triggered even if there is no managed network. |
| 458 TEST_F(AutoConnectHandlerTest, ReconnectAfterLogin) { | 403 TEST_F(AutoConnectHandlerTest, ReconnectAfterLogin) { |
| 459 EXPECT_TRUE(Configure(kConfigUnmanagedSharedConnected)); | 404 EXPECT_TRUE(ConfigureService(kConfigUnmanagedSharedConnected)); |
| 460 EXPECT_TRUE(Configure(kConfigManagedSharedConnectable)); | 405 EXPECT_TRUE(ConfigureService(kConfigManagedSharedConnectable)); |
| 461 test_manager_client_->SetBestServiceToConnect("wifi1"); | 406 test_manager_client()->SetBestServiceToConnect("wifi1"); |
| 462 | 407 |
| 463 // User login and certificate loading shouldn't trigger any change until the | 408 // User login and certificate loading shouldn't trigger any change until the |
| 464 // policy is loaded. | 409 // policy is loaded. |
| 465 LoginToRegularUser(); | 410 LoginToRegularUser(); |
| 466 StartCertLoader(); | 411 StartCertLoader(); |
| 467 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); | 412 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); |
| 468 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); | 413 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); |
| 469 | 414 |
| 470 // Applying an empty device policy will not trigger anything yet, until also | 415 // Applying an empty device policy will not trigger anything yet, until also |
| 471 // the user policy is applied. | 416 // the user policy is applied. |
| 472 SetupPolicy(std::string(), // no network configs | 417 SetupPolicy(std::string(), // no network configs |
| 473 base::DictionaryValue(), // no global config | 418 base::DictionaryValue(), // no global config |
| 474 false); // load as device policy | 419 false); // load as device policy |
| 475 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); | 420 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); |
| 476 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); | 421 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); |
| 477 | 422 |
| 478 // Applying also an empty user policy should trigger connecting to the 'best' | 423 // Applying also an empty user policy should trigger connecting to the 'best' |
| 479 // network. | 424 // network. |
| 480 SetupPolicy(std::string(), // no network configs | 425 SetupPolicy(std::string(), // no network configs |
| 481 base::DictionaryValue(), // no global config | 426 base::DictionaryValue(), // no global config |
| 482 true); // load as user policy | 427 true); // load as user policy |
| 483 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi0")); | 428 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi0")); |
| 484 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi1")); | 429 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi1")); |
| 485 } | 430 } |
| 486 | 431 |
| 487 TEST_F(AutoConnectHandlerTest, ManualConnectAbortsReconnectAfterLogin) { | 432 TEST_F(AutoConnectHandlerTest, ManualConnectAbortsReconnectAfterLogin) { |
| 488 EXPECT_TRUE(Configure(kConfigUnmanagedSharedConnected)); | 433 EXPECT_TRUE(ConfigureService(kConfigUnmanagedSharedConnected)); |
| 489 EXPECT_TRUE(Configure(kConfigManagedSharedConnectable)); | 434 EXPECT_TRUE(ConfigureService(kConfigManagedSharedConnectable)); |
| 490 test_manager_client_->SetBestServiceToConnect("wifi1"); | 435 test_manager_client()->SetBestServiceToConnect("wifi1"); |
| 491 | 436 |
| 492 // User login and certificate loading shouldn't trigger any change until the | 437 // User login and certificate loading shouldn't trigger any change until the |
| 493 // policy is loaded. | 438 // policy is loaded. |
| 494 LoginToRegularUser(); | 439 LoginToRegularUser(); |
| 495 StartCertLoader(); | 440 StartCertLoader(); |
| 496 SetupPolicy(std::string(), // no network configs | 441 SetupPolicy(std::string(), // no network configs |
| 497 base::DictionaryValue(), // no global config | 442 base::DictionaryValue(), // no global config |
| 498 false); // load as device policy | 443 false); // load as device policy |
| 499 | 444 |
| 500 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); | 445 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); |
| 501 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); | 446 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); |
| 502 | 447 |
| 503 // A manual connect request should prevent a reconnect after login. | 448 // A manual connect request should prevent a reconnect after login. |
| 504 auto_connect_handler_->ConnectToNetworkRequested( | 449 auto_connect_handler_->ConnectToNetworkRequested( |
| 505 std::string() /* service_path */); | 450 std::string() /* service_path */); |
| 506 | 451 |
| 507 // Applying the user policy after login would usually trigger connecting to | 452 // Applying the user policy after login would usually trigger connecting to |
| 508 // the 'best' network. But the manual connect prevents this. | 453 // the 'best' network. But the manual connect prevents this. |
| 509 SetupPolicy(std::string(), // no network configs | 454 SetupPolicy(std::string(), // no network configs |
| 510 base::DictionaryValue(), // no global config | 455 base::DictionaryValue(), // no global config |
| 511 true); // load as user policy | 456 true); // load as user policy |
| 512 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); | 457 EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0")); |
| 513 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); | 458 EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1")); |
| 514 } | 459 } |
| 515 | 460 |
| 516 } // namespace chromeos | 461 } // namespace chromeos |
| OLD | NEW |