| Index: chromeos/network/network_configuration_handler_unittest.cc
|
| diff --git a/chromeos/network/network_configuration_handler_unittest.cc b/chromeos/network/network_configuration_handler_unittest.cc
|
| index 2ae84f39ce3f6cceee98f6ab6023f076ca0f3dd3..554d9303b1c2f4436a7db08109e529f32f932a94 100644
|
| --- a/chromeos/network/network_configuration_handler_unittest.cc
|
| +++ b/chromeos/network/network_configuration_handler_unittest.cc
|
| @@ -65,13 +65,17 @@ void DictionaryValueCallback(const std::string& expected_id,
|
| EXPECT_EQ(expected_id, service_path);
|
| }
|
|
|
| -void ErrorCallback(bool error_expected,
|
| - const std::string& expected_id,
|
| - const std::string& error_name,
|
| +void ErrorCallback(const std::string& error_name,
|
| std::unique_ptr<base::DictionaryValue> error_data) {
|
| - EXPECT_TRUE(error_expected) << "Unexpected error: " << error_name
|
| - << " with associated data: \n"
|
| - << PrettyJson(*error_data);
|
| + ADD_FAILURE() << "Unexpected error: " << error_name
|
| + << " with associated data: \n"
|
| + << PrettyJson(*error_data);
|
| +}
|
| +
|
| +void RecordError(std::string* error_name_ptr,
|
| + const std::string& error_name,
|
| + std::unique_ptr<base::DictionaryValue> error_data) {
|
| + *error_name_ptr = error_name;
|
| }
|
|
|
| void ServiceResultCallback(const std::string& expected_result,
|
| @@ -194,11 +198,19 @@ class NetworkConfigurationHandlerTest : public testing::Test {
|
| std::unique_ptr<ShillServiceClient>(mock_service_client_));
|
|
|
| EXPECT_CALL(*mock_service_client_, GetProperties(_, _)).Times(AnyNumber());
|
| + EXPECT_CALL(*mock_service_client_, AddPropertyChangedObserver(_, _))
|
| + .Times(AnyNumber());
|
| + EXPECT_CALL(*mock_service_client_, RemovePropertyChangedObserver(_, _))
|
| + .Times(AnyNumber());
|
| EXPECT_CALL(*mock_manager_client_, GetProperties(_)).Times(AnyNumber());
|
| EXPECT_CALL(*mock_manager_client_, AddPropertyChangedObserver(_))
|
| - .Times(AnyNumber());
|
| + .WillRepeatedly(Invoke(
|
| + this,
|
| + &NetworkConfigurationHandlerTest::AddPropertyChangedObserver));
|
| EXPECT_CALL(*mock_manager_client_, RemovePropertyChangedObserver(_))
|
| - .Times(AnyNumber());
|
| + .WillRepeatedly(Invoke(
|
| + this,
|
| + &NetworkConfigurationHandlerTest::RemovePropertyChangedObserver));
|
|
|
| network_state_handler_ = NetworkStateHandler::InitializeForTest();
|
| network_configuration_handler_.reset(new NetworkConfigurationHandler());
|
| @@ -214,6 +226,14 @@ class NetworkConfigurationHandlerTest : public testing::Test {
|
| DBusThreadManager::Shutdown();
|
| }
|
|
|
| + void AddPropertyChangedObserver(ShillPropertyChangedObserver* observer) {
|
| + property_changed_observers_.AddObserver(observer);
|
| + }
|
| +
|
| + void RemovePropertyChangedObserver(ShillPropertyChangedObserver* observer) {
|
| + property_changed_observers_.RemoveObserver(observer);
|
| + }
|
| +
|
| // Handles responses for GetProperties method calls.
|
| void OnGetProperties(
|
| const dbus::ObjectPath& path,
|
| @@ -258,6 +278,15 @@ class NetworkConfigurationHandlerTest : public testing::Test {
|
| const ObjectPathCallback& callback,
|
| const ShillClientHelper::ErrorCallback& error_callback) {
|
| callback.Run(dbus::ObjectPath("/service/2"));
|
| +
|
| + // Notify property changed observer that service list was changed - the
|
| + // goal is to have network state handler update it's network state list.
|
| + base::ListValue value;
|
| + value.AppendString("/service/1");
|
| + value.AppendString("/service/2");
|
| + for (auto& observer : property_changed_observers_) {
|
| + observer.OnPropertyChanged("ServiceCompleteList", value);
|
| + }
|
| }
|
|
|
| void OnGetLoadableProfileEntries(
|
| @@ -287,7 +316,7 @@ class NetworkConfigurationHandlerTest : public testing::Test {
|
| network_configuration_handler_->CreateShillConfiguration(
|
| properties, NetworkConfigurationObserver::SOURCE_USER_ACTION,
|
| base::Bind(&ServiceResultCallback, service_path),
|
| - base::Bind(&ErrorCallback, false, std::string()));
|
| + base::Bind(&ErrorCallback));
|
| }
|
|
|
| protected:
|
| @@ -298,6 +327,9 @@ class NetworkConfigurationHandlerTest : public testing::Test {
|
| std::unique_ptr<NetworkConfigurationHandler> network_configuration_handler_;
|
| base::MessageLoopForUI message_loop_;
|
| base::DictionaryValue* dictionary_value_result_;
|
| +
|
| + base::ObserverList<ShillPropertyChangedObserver, true>
|
| + property_changed_observers_;
|
| };
|
|
|
| TEST_F(NetworkConfigurationHandlerTest, GetProperties) {
|
| @@ -325,7 +357,7 @@ TEST_F(NetworkConfigurationHandlerTest, GetProperties) {
|
| network_configuration_handler_->GetShillProperties(
|
| service_path,
|
| base::Bind(&DictionaryValueCallback, service_path, expected_json),
|
| - base::Bind(&ErrorCallback, false, service_path));
|
| + base::Bind(&ErrorCallback));
|
| base::RunLoop().RunUntilIdle();
|
| }
|
|
|
| @@ -343,8 +375,7 @@ TEST_F(NetworkConfigurationHandlerTest, SetProperties) {
|
| Invoke(this, &NetworkConfigurationHandlerTest::OnSetProperties));
|
| network_configuration_handler_->SetShillProperties(
|
| service_path, value, NetworkConfigurationObserver::SOURCE_USER_ACTION,
|
| - base::Bind(&base::DoNothing),
|
| - base::Bind(&ErrorCallback, false, service_path));
|
| + base::Bind(&base::DoNothing), base::Bind(&ErrorCallback));
|
| base::RunLoop().RunUntilIdle();
|
| }
|
|
|
| @@ -363,8 +394,7 @@ TEST_F(NetworkConfigurationHandlerTest, ClearProperties) {
|
| Invoke(this, &NetworkConfigurationHandlerTest::OnSetProperties));
|
| network_configuration_handler_->SetShillProperties(
|
| service_path, value, NetworkConfigurationObserver::SOURCE_USER_ACTION,
|
| - base::Bind(&base::DoNothing),
|
| - base::Bind(&ErrorCallback, false, service_path));
|
| + base::Bind(&base::DoNothing), base::Bind(&ErrorCallback));
|
| base::RunLoop().RunUntilIdle();
|
|
|
| // Now clear it.
|
| @@ -375,7 +405,7 @@ TEST_F(NetworkConfigurationHandlerTest, ClearProperties) {
|
| Invoke(this, &NetworkConfigurationHandlerTest::OnClearProperties));
|
| network_configuration_handler_->ClearShillProperties(
|
| service_path, values_to_clear, base::Bind(&base::DoNothing),
|
| - base::Bind(&ErrorCallback, false, service_path));
|
| + base::Bind(&ErrorCallback));
|
| base::RunLoop().RunUntilIdle();
|
| }
|
|
|
| @@ -394,8 +424,7 @@ TEST_F(NetworkConfigurationHandlerTest, ClearPropertiesError) {
|
| Invoke(this, &NetworkConfigurationHandlerTest::OnSetProperties));
|
| network_configuration_handler_->SetShillProperties(
|
| service_path, value, NetworkConfigurationObserver::SOURCE_USER_ACTION,
|
| - base::Bind(&base::DoNothing),
|
| - base::Bind(&ErrorCallback, false, service_path));
|
| + base::Bind(&base::DoNothing), base::Bind(&ErrorCallback));
|
| base::RunLoop().RunUntilIdle();
|
|
|
| // Now clear it.
|
| @@ -404,9 +433,11 @@ TEST_F(NetworkConfigurationHandlerTest, ClearPropertiesError) {
|
| EXPECT_CALL(*mock_service_client_, ClearProperties(_, _, _, _))
|
| .WillOnce(Invoke(
|
| this, &NetworkConfigurationHandlerTest::OnClearPropertiesError));
|
| +
|
| + std::string error;
|
| network_configuration_handler_->ClearShillProperties(
|
| service_path, values_to_clear, base::Bind(&base::DoNothing),
|
| - base::Bind(&ErrorCallback, true, service_path));
|
| + base::Bind(&ErrorCallback));
|
| base::RunLoop().RunUntilIdle();
|
| }
|
|
|
| @@ -430,25 +461,137 @@ TEST_F(NetworkConfigurationHandlerTest, CreateConfiguration) {
|
| }
|
|
|
| TEST_F(NetworkConfigurationHandlerTest, RemoveConfiguration) {
|
| - std::string service_path = "/service/1";
|
| + std::string service_path = "/service/2";
|
|
|
| - TestCallback test_callback;
|
| - EXPECT_CALL(*mock_service_client_, GetLoadableProfileEntries(_, _))
|
| + // Set up network configuration so the associated network service has the
|
| + // profile path set to |profile|.
|
| + std::string key = "SSID";
|
| + std::string type = "wifi";
|
| + base::DictionaryValue value;
|
| + shill_property_util::SetSSID("Service", &value);
|
| + value.SetWithoutPathExpansion(shill::kTypeProperty, new base::Value(type));
|
| + value.SetWithoutPathExpansion(shill::kProfileProperty,
|
| + new base::Value("profile2"));
|
| + EXPECT_CALL(*mock_manager_client_,
|
| + ConfigureServiceForProfile(dbus::ObjectPath("profile2"), _, _, _))
|
| + .WillOnce(
|
| + Invoke(this, &NetworkConfigurationHandlerTest::OnConfigureService));
|
| +
|
| + dictionary_value_result_ = &value;
|
| + EXPECT_CALL(*mock_service_client_, GetProperties(_, _))
|
| + .WillRepeatedly(
|
| + Invoke(this, &NetworkConfigurationHandlerTest::OnGetProperties));
|
| +
|
| + CreateConfiguration(service_path, value);
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| + // Set Up mock flor GetLoadableProfileEntries - it returns
|
| + // [(profile1, entry1), (profile2, entry2)] profile-entry pairs.
|
| + EXPECT_CALL(*mock_service_client_,
|
| + GetLoadableProfileEntries(dbus::ObjectPath(service_path), _))
|
| .WillOnce(Invoke(
|
| this, &NetworkConfigurationHandlerTest::OnGetLoadableProfileEntries));
|
| - EXPECT_CALL(*mock_profile_client_, DeleteEntry(_, _, _, _))
|
| - .WillRepeatedly(
|
| - Invoke(this, &NetworkConfigurationHandlerTest::OnDeleteEntry));
|
|
|
| + // Expectations for entries deleted during the test.
|
| + EXPECT_CALL(*mock_profile_client_,
|
| + DeleteEntry(dbus::ObjectPath("profile1"), "entry1", _, _))
|
| + .WillOnce(Invoke(this, &NetworkConfigurationHandlerTest::OnDeleteEntry));
|
| + EXPECT_CALL(*mock_profile_client_,
|
| + DeleteEntry(dbus::ObjectPath("profile2"), "entry2", _, _))
|
| + .WillOnce(Invoke(this, &NetworkConfigurationHandlerTest::OnDeleteEntry));
|
| +
|
| + TestCallback test_callback;
|
| network_configuration_handler_->RemoveConfiguration(
|
| service_path, NetworkConfigurationObserver::SOURCE_USER_ACTION,
|
| base::Bind(&TestCallback::Run, base::Unretained(&test_callback)),
|
| - base::Bind(&ErrorCallback, false, service_path));
|
| + base::Bind(&ErrorCallback));
|
| +
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_EQ(1, test_callback.run_count());
|
| + EXPECT_FALSE(PendingProfileEntryDeleterForTest(service_path));
|
| +}
|
| +
|
| +TEST_F(NetworkConfigurationHandlerTest, RemoveConfigurationFromCurrentProfile) {
|
| + std::string service_path = "/service/2";
|
| +
|
| + // Set up network configuration so the associated network service has the
|
| + // profile path set to |profile|.
|
| + std::string key = "SSID";
|
| + std::string type = "wifi";
|
| + base::DictionaryValue value;
|
| + shill_property_util::SetSSID("Service", &value);
|
| + value.SetWithoutPathExpansion(shill::kTypeProperty, new base::Value(type));
|
| + value.SetWithoutPathExpansion(shill::kProfileProperty,
|
| + new base::Value("profile2"));
|
| + EXPECT_CALL(*mock_manager_client_,
|
| + ConfigureServiceForProfile(dbus::ObjectPath("profile2"), _, _, _))
|
| + .WillOnce(
|
| + Invoke(this, &NetworkConfigurationHandlerTest::OnConfigureService));
|
| +
|
| + dictionary_value_result_ = &value;
|
| + EXPECT_CALL(*mock_service_client_, GetProperties(_, _))
|
| + .WillRepeatedly(
|
| + Invoke(this, &NetworkConfigurationHandlerTest::OnGetProperties));
|
| +
|
| + CreateConfiguration(service_path, value);
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| + // Set Up mock flor GetLoadableProfileEntries - it returns
|
| + // [(profile1, entry1), (profile2, entry2)] profile-entry pairs.
|
| + EXPECT_CALL(*mock_service_client_,
|
| + GetLoadableProfileEntries(dbus::ObjectPath(service_path), _))
|
| + .WillOnce(Invoke(
|
| + this, &NetworkConfigurationHandlerTest::OnGetLoadableProfileEntries));
|
| +
|
| + // Expectations for entries deleted during the test.
|
| + EXPECT_CALL(*mock_profile_client_,
|
| + DeleteEntry(dbus::ObjectPath("profile2"), "entry2", _, _))
|
| + .WillOnce(Invoke(this, &NetworkConfigurationHandlerTest::OnDeleteEntry));
|
| + EXPECT_CALL(*mock_profile_client_,
|
| + DeleteEntry(dbus::ObjectPath("profile1"), "entry1", _, _))
|
| + .Times(0);
|
| +
|
| + TestCallback test_callback;
|
| + network_configuration_handler_->RemoveConfigurationFromCurrentProfile(
|
| + service_path, NetworkConfigurationObserver::SOURCE_USER_ACTION,
|
| + base::Bind(&TestCallback::Run, base::Unretained(&test_callback)),
|
| + base::Bind(&ErrorCallback));
|
| +
|
| base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(1, test_callback.run_count());
|
| EXPECT_FALSE(PendingProfileEntryDeleterForTest(service_path));
|
| }
|
|
|
| +TEST_F(NetworkConfigurationHandlerTest,
|
| + RemoveNonExistentConfigurationFromCurrentProfile) {
|
| + // Set Up mock flor GetLoadableProfileEntries - it returns
|
| + // [(profile1, entry1), (profile2, entry2)] profile-entry pairs.
|
| + EXPECT_CALL(*mock_service_client_,
|
| + GetLoadableProfileEntries(dbus::ObjectPath("/service/3"), _))
|
| + .WillRepeatedly(Invoke(
|
| + this, &NetworkConfigurationHandlerTest::OnGetLoadableProfileEntries));
|
| +
|
| + // Expectations for entries deleted during the test.
|
| + EXPECT_CALL(*mock_profile_client_,
|
| + DeleteEntry(dbus::ObjectPath("profile2"), "entry2", _, _))
|
| + .Times(0);
|
| + EXPECT_CALL(*mock_profile_client_,
|
| + DeleteEntry(dbus::ObjectPath("profile1"), "entry1", _, _))
|
| + .Times(0);
|
| +
|
| + TestCallback test_callback;
|
| + std::string error;
|
| + network_configuration_handler_->RemoveConfigurationFromCurrentProfile(
|
| + "/service/3", NetworkConfigurationObserver::SOURCE_USER_ACTION,
|
| + base::Bind(&TestCallback::Run, base::Unretained(&test_callback)),
|
| + base::Bind(&RecordError, base::Unretained(&error)));
|
| + EXPECT_EQ("NetworkNotConfigured", error);
|
| +
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_EQ(0, test_callback.run_count());
|
| + EXPECT_FALSE(PendingProfileEntryDeleterForTest("/service/3"));
|
| +}
|
| +
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // Stub based tests
|
|
|
| @@ -545,7 +688,7 @@ class NetworkConfigurationHandlerStubTest : public testing::Test {
|
| base::Bind(
|
| &NetworkConfigurationHandlerStubTest::CreateConfigurationCallback,
|
| base::Unretained(this)),
|
| - base::Bind(&ErrorCallback, false, service_path));
|
| + base::Bind(&ErrorCallback));
|
| base::RunLoop().RunUntilIdle();
|
| }
|
|
|
| @@ -600,7 +743,7 @@ TEST_F(NetworkConfigurationHandlerStubTest, StubSetAndClearProperties) {
|
| NetworkConfigurationObserver::SOURCE_USER_ACTION,
|
| base::Bind(&NetworkConfigurationHandlerStubTest::SuccessCallback,
|
| base::Unretained(this), "SetProperties"),
|
| - base::Bind(&ErrorCallback, false, service_path));
|
| + base::Bind(&ErrorCallback));
|
| base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ("SetProperties", success_callback_name_);
|
| @@ -621,7 +764,7 @@ TEST_F(NetworkConfigurationHandlerStubTest, StubSetAndClearProperties) {
|
| service_path, properties_to_clear,
|
| base::Bind(&NetworkConfigurationHandlerStubTest::SuccessCallback,
|
| base::Unretained(this), "ClearProperties"),
|
| - base::Bind(&ErrorCallback, false, service_path));
|
| + base::Bind(&ErrorCallback));
|
| base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ("ClearProperties", success_callback_name_);
|
| @@ -645,8 +788,7 @@ TEST_F(NetworkConfigurationHandlerStubTest, StubGetNameFromWifiHex) {
|
| network_configuration_handler_->SetShillProperties(
|
| service_path, properties_to_set,
|
| NetworkConfigurationObserver::SOURCE_USER_ACTION,
|
| - base::Bind(&base::DoNothing),
|
| - base::Bind(&ErrorCallback, false, service_path));
|
| + base::Bind(&base::DoNothing), base::Bind(&ErrorCallback));
|
| base::RunLoop().RunUntilIdle();
|
| std::string wifi_hex_result;
|
| EXPECT_TRUE(GetServiceStringProperty(service_path, shill::kWifiHexSsid,
|
| @@ -658,7 +800,7 @@ TEST_F(NetworkConfigurationHandlerStubTest, StubGetNameFromWifiHex) {
|
| service_path,
|
| base::Bind(&NetworkConfigurationHandlerStubTest::GetPropertiesCallback,
|
| base::Unretained(this)),
|
| - base::Bind(&ErrorCallback, false, service_path));
|
| + base::Bind(&ErrorCallback));
|
| base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_EQ(service_path, get_properties_path_);
|
| @@ -706,8 +848,7 @@ TEST_F(NetworkConfigurationHandlerStubTest, NetworkConfigurationObserver) {
|
| network_configuration_handler_->SetShillProperties(
|
| service_path, properties_to_set,
|
| NetworkConfigurationObserver::SOURCE_USER_ACTION,
|
| - base::Bind(&base::DoNothing),
|
| - base::Bind(&ErrorCallback, false, service_path));
|
| + base::Bind(&base::DoNothing), base::Bind(&ErrorCallback));
|
| base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(test_passphrase, test_observer->GetStringProperty(
|
| service_path, shill::kPassphraseProperty));
|
| @@ -722,8 +863,7 @@ TEST_F(NetworkConfigurationHandlerStubTest, NetworkConfigurationObserver) {
|
| network_configuration_handler_->SetNetworkProfile(
|
| service_path, user_profile,
|
| NetworkConfigurationObserver::SOURCE_USER_ACTION,
|
| - base::Bind(&base::DoNothing),
|
| - base::Bind(&ErrorCallback, false, service_path));
|
| + base::Bind(&base::DoNothing), base::Bind(&ErrorCallback));
|
| base::RunLoop().RunUntilIdle();
|
| EXPECT_TRUE(test_observer->HasConfiguration(service_path));
|
| EXPECT_FALSE(test_observer->HasConfigurationInProfile(
|
| @@ -733,8 +873,7 @@ TEST_F(NetworkConfigurationHandlerStubTest, NetworkConfigurationObserver) {
|
|
|
| network_configuration_handler_->RemoveConfiguration(
|
| service_path, NetworkConfigurationObserver::SOURCE_USER_ACTION,
|
| - base::Bind(&base::DoNothing),
|
| - base::Bind(&ErrorCallback, false, service_path));
|
| + base::Bind(&base::DoNothing), base::Bind(&ErrorCallback));
|
| base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_FALSE(test_observer->HasConfiguration(service_path));
|
|
|