1c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 2c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Copyright (C) 2014 The Android Open Source Project 3c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 4c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Licensed under the Apache License, Version 2.0 (the "License"); 5c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// you may not use this file except in compliance with the License. 6c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// You may obtain a copy of the License at 7c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 8c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// http://www.apache.org/licenses/LICENSE-2.0 9c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 10c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Unless required by applicable law or agreed to in writing, software 11c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// distributed under the License is distributed on an "AS IS" BASIS, 12c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// See the License for the specific language governing permissions and 14c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// limitations under the License. 15c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 1626692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 17c54afe521739065a5d77e7c049acdb5e603f0592Ben Chan#include "shill/cellular/cellular_bearer.h" 1826692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 1926692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan#include <ModemManager/ModemManager.h> 2026692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 21608ec29525f553d51f0a92e84176e3d4b45930a9Peter Qiu#include "shill/mock_control.h" 2226692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan#include "shill/mock_dbus_properties_proxy.h" 2326692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan#include "shill/testing.h" 2426692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 2526692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chanusing std::string; 2626692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chanusing std::vector; 2726692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chanusing testing::Return; 2826692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chanusing testing::ReturnNull; 2926692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chanusing testing::_; 3026692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 3126692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Channamespace shill { 3226692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 3326692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Channamespace { 3426692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 3526692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chanconst char kBearerDBusPath[] = "/org/freedesktop/ModemManager/Bearer/0"; 3626692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chanconst char kBearerDBusService[] = "org.freedesktop.ModemManager"; 3726692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chanconst char kDataInterface[] = "/dev/ppp0"; 3826692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chanconst char kIPv4Address[] = "10.0.0.1"; 3926692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chanconst char kIPv4Gateway[] = "10.0.0.254"; 4026692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chanconst int kIPv4SubnetPrefix = 8; 412f6c78991e37f5fa71f2ba4d1669be73f0a6dfd4Paul Stewartconst char* const kIPv4DNS[] = { "10.0.0.2", "8.8.4.4", "8.8.8.8" }; 4226692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chanconst char kIPv6Address[] = "0:0:0:0:0:ffff:a00:1"; 4326692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chanconst char kIPv6Gateway[] = "0:0:0:0:0:ffff:a00:fe"; 4426692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chanconst int kIPv6SubnetPrefix = 16; 452f6c78991e37f5fa71f2ba4d1669be73f0a6dfd4Paul Stewartconst char* const kIPv6DNS[] = { 4626692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan "0:0:0:0:0:ffff:a00:fe", "0:0:0:0:0:ffff:808:404", "0:0:0:0:0:ffff:808:808" 4726692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan}; 4826692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 4926692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan} // namespace 5026692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 5126692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chanclass CellularBearerTest : public testing::Test { 5226692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan public: 5326692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan CellularBearerTest() 54608ec29525f553d51f0a92e84176e3d4b45930a9Peter Qiu : control_(new MockControl()), 55608ec29525f553d51f0a92e84176e3d4b45930a9Peter Qiu bearer_(control_.get(), kBearerDBusPath, kBearerDBusService) {} 5626692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 5726692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan protected: 5826692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan void VerifyDefaultProperties() { 5926692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(kBearerDBusPath, bearer_.dbus_path()); 6026692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(kBearerDBusService, bearer_.dbus_service()); 6126692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_FALSE(bearer_.connected()); 6226692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ("", bearer_.data_interface()); 6326692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(IPConfig::kMethodUnknown, bearer_.ipv4_config_method()); 64ea18c6c99743aeee9b2e544532ef9fe55dbd182dBen Chan EXPECT_EQ(nullptr, bearer_.ipv4_config_properties());; 6526692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(IPConfig::kMethodUnknown, bearer_.ipv6_config_method()); 66ea18c6c99743aeee9b2e544532ef9fe55dbd182dBen Chan EXPECT_EQ(nullptr, bearer_.ipv6_config_properties());; 6726692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan } 6826692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 6905d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu static KeyValueStore ConstructIPv4ConfigProperties( 7026692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan MMBearerIpMethod ipconfig_method) { 7105d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu KeyValueStore ipconfig_properties; 7205d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ipconfig_properties.SetUint("method", ipconfig_method); 7326692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan if (ipconfig_method == MM_BEARER_IP_METHOD_STATIC) { 7405d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ipconfig_properties.SetString("address", kIPv4Address); 7505d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ipconfig_properties.SetString("gateway", kIPv4Gateway); 7605d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ipconfig_properties.SetUint("prefix", kIPv4SubnetPrefix); 7705d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ipconfig_properties.SetString("dns1", kIPv4DNS[0]); 7805d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ipconfig_properties.SetString("dns2", kIPv4DNS[1]); 7905d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ipconfig_properties.SetString("dns3", kIPv4DNS[2]); 8026692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan } 8126692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan return ipconfig_properties; 8226692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan } 8326692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 8405d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu static KeyValueStore ConstructIPv6ConfigProperties( 8526692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan MMBearerIpMethod ipconfig_method) { 8605d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu KeyValueStore ipconfig_properties; 8705d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ipconfig_properties.SetUint("method", ipconfig_method); 8826692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan if (ipconfig_method == MM_BEARER_IP_METHOD_STATIC) { 8905d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ipconfig_properties.SetString("address", kIPv6Address); 9005d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ipconfig_properties.SetString("gateway", kIPv6Gateway); 9105d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ipconfig_properties.SetUint("prefix", kIPv6SubnetPrefix); 9205d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ipconfig_properties.SetString("dns1", kIPv6DNS[0]); 9305d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ipconfig_properties.SetString("dns2", kIPv6DNS[1]); 9405d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ipconfig_properties.SetString("dns3", kIPv6DNS[2]); 9526692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan } 9626692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan return ipconfig_properties; 9726692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan } 9826692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 9905d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu static KeyValueStore ConstructBearerProperties( 1002f6c78991e37f5fa71f2ba4d1669be73f0a6dfd4Paul Stewart bool connected, const string& data_interface, 10126692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan MMBearerIpMethod ipv4_config_method, 10226692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan MMBearerIpMethod ipv6_config_method) { 10305d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu KeyValueStore properties; 10405d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.SetBool(MM_BEARER_PROPERTY_CONNECTED, connected); 10505d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.SetString(MM_BEARER_PROPERTY_INTERFACE, data_interface); 10605d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu 10705d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.SetKeyValueStore( 10805d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu MM_BEARER_PROPERTY_IP4CONFIG, 10905d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ConstructIPv4ConfigProperties(ipv4_config_method)); 11005d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.SetKeyValueStore( 11105d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu MM_BEARER_PROPERTY_IP6CONFIG, 11205d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ConstructIPv6ConfigProperties(ipv6_config_method)); 11326692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan return properties; 11426692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan } 11526692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 11626692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan void VerifyStaticIPv4ConfigMethodAndProperties() { 11726692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(IPConfig::kMethodStatic, bearer_.ipv4_config_method()); 1182f6c78991e37f5fa71f2ba4d1669be73f0a6dfd4Paul Stewart const IPConfig::Properties* ipv4_config_properties = 11926692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan bearer_.ipv4_config_properties(); 120ea18c6c99743aeee9b2e544532ef9fe55dbd182dBen Chan ASSERT_NE(nullptr, ipv4_config_properties);; 12126692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(IPAddress::kFamilyIPv4, ipv4_config_properties->address_family); 12226692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(kIPv4Address, ipv4_config_properties->address); 12326692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(kIPv4Gateway, ipv4_config_properties->gateway); 12426692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(kIPv4SubnetPrefix, ipv4_config_properties->subnet_prefix); 12526692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan ASSERT_EQ(3, ipv4_config_properties->dns_servers.size()); 12626692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(kIPv4DNS[0], ipv4_config_properties->dns_servers[0]); 12726692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(kIPv4DNS[1], ipv4_config_properties->dns_servers[1]); 12826692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(kIPv4DNS[2], ipv4_config_properties->dns_servers[2]); 12926692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan } 13026692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 13126692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan void VerifyStaticIPv6ConfigMethodAndProperties() { 13226692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(IPConfig::kMethodStatic, bearer_.ipv6_config_method()); 1332f6c78991e37f5fa71f2ba4d1669be73f0a6dfd4Paul Stewart const IPConfig::Properties* ipv6_config_properties = 13426692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan bearer_.ipv6_config_properties(); 135ea18c6c99743aeee9b2e544532ef9fe55dbd182dBen Chan ASSERT_NE(nullptr, ipv6_config_properties);; 13626692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(IPAddress::kFamilyIPv6, ipv6_config_properties->address_family); 13726692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(kIPv6Address, ipv6_config_properties->address); 13826692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(kIPv6Gateway, ipv6_config_properties->gateway); 13926692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(kIPv6SubnetPrefix, ipv6_config_properties->subnet_prefix); 14026692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan ASSERT_EQ(3, ipv6_config_properties->dns_servers.size()); 14126692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(kIPv6DNS[0], ipv6_config_properties->dns_servers[0]); 14226692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(kIPv6DNS[1], ipv6_config_properties->dns_servers[1]); 14326692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(kIPv6DNS[2], ipv6_config_properties->dns_servers[2]); 14426692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan } 14526692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 146608ec29525f553d51f0a92e84176e3d4b45930a9Peter Qiu std::unique_ptr<MockControl> control_; 14726692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan CellularBearer bearer_; 14826692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan}; 14926692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 15026692bd03e56c3e71d2887e83e4cbbe71a64a191Ben ChanTEST_F(CellularBearerTest, Constructor) { 15126692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan VerifyDefaultProperties(); 15226692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan} 15326692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 15426692bd03e56c3e71d2887e83e4cbbe71a64a191Ben ChanTEST_F(CellularBearerTest, Init) { 15526692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan // Ownership of |properties_proxy| is transferred to |bearer_| via 156608ec29525f553d51f0a92e84176e3d4b45930a9Peter Qiu // |control_|. 157c20ed13f5c0e87e7a5164d1b5330ccd99cced58fBen Chan std::unique_ptr<MockDBusPropertiesProxy> properties_proxy( 15826692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan new MockDBusPropertiesProxy); 159608ec29525f553d51f0a92e84176e3d4b45930a9Peter Qiu EXPECT_CALL(*control_.get(), 16026692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan CreateDBusPropertiesProxy(kBearerDBusPath, kBearerDBusService)) 16126692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan .WillOnce(ReturnAndReleasePointee(&properties_proxy)); 16226692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_CALL(*properties_proxy.get(), set_properties_changed_callback(_)) 16326692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan .Times(1); 16426692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_CALL(*properties_proxy.get(), GetAll(MM_DBUS_INTERFACE_BEARER)) 16526692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan .WillOnce(Return(ConstructBearerProperties(true, kDataInterface, 16626692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan MM_BEARER_IP_METHOD_STATIC, 16726692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan MM_BEARER_IP_METHOD_STATIC))); 16826692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan bearer_.Init(); 16926692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_TRUE(bearer_.connected()); 17026692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(kDataInterface, bearer_.data_interface()); 17126692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan VerifyStaticIPv4ConfigMethodAndProperties(); 17226692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan VerifyStaticIPv6ConfigMethodAndProperties(); 17326692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan} 17426692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 17526692bd03e56c3e71d2887e83e4cbbe71a64a191Ben ChanTEST_F(CellularBearerTest, InitAndCreateDBusPropertiesProxyFails) { 176608ec29525f553d51f0a92e84176e3d4b45930a9Peter Qiu EXPECT_CALL(*control_.get(), 17726692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan CreateDBusPropertiesProxy(kBearerDBusPath, kBearerDBusService)) 17826692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan .WillOnce(ReturnNull()); 17926692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan bearer_.Init(); 18026692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan VerifyDefaultProperties(); 18126692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan} 18226692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 18305d87e34869f44473edc1eec25d2fe1110d777a7Peter QiuTEST_F(CellularBearerTest, OnPropertiesChanged) { 18405d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu KeyValueStore properties; 18526692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 18626692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan // If interface is not MM_DBUS_INTERFACE_BEARER, no updates should be done. 18705d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu bearer_.OnPropertiesChanged("", properties, vector<string>()); 18826692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan VerifyDefaultProperties(); 18926692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 19005d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.SetBool(MM_BEARER_PROPERTY_CONNECTED, true); 19105d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu bearer_.OnPropertiesChanged("", properties, vector<string>()); 19226692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan VerifyDefaultProperties(); 19326692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 19426692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan // Update 'interface' property. 19505d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.Clear(); 19605d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.SetString(MM_BEARER_PROPERTY_INTERFACE, kDataInterface); 19705d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu bearer_.OnPropertiesChanged(MM_DBUS_INTERFACE_BEARER, properties, 19805d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu vector<string>()); 19926692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(kDataInterface, bearer_.data_interface()); 20026692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 20126692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan // Update 'connected' property. 20205d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.Clear(); 20305d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.SetBool(MM_BEARER_PROPERTY_CONNECTED, true); 20405d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu bearer_.OnPropertiesChanged(MM_DBUS_INTERFACE_BEARER, properties, 20505d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu vector<string>()); 20626692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_TRUE(bearer_.connected()); 20726692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan // 'interface' property remains unchanged. 20826692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(kDataInterface, bearer_.data_interface()); 20926692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 21026692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan // Update 'ip4config' property. 21105d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.Clear(); 21205d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.SetKeyValueStore( 21305d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu MM_BEARER_PROPERTY_IP4CONFIG, 21405d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ConstructIPv4ConfigProperties(MM_BEARER_IP_METHOD_UNKNOWN)); 21505d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu bearer_.OnPropertiesChanged(MM_DBUS_INTERFACE_BEARER, properties, 21605d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu vector<string>()); 21726692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(IPConfig::kMethodUnknown, bearer_.ipv4_config_method()); 21826692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 21905d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.Clear(); 22005d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.SetKeyValueStore( 22105d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu MM_BEARER_PROPERTY_IP4CONFIG, 22205d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ConstructIPv4ConfigProperties(MM_BEARER_IP_METHOD_PPP)); 22305d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu bearer_.OnPropertiesChanged(MM_DBUS_INTERFACE_BEARER, properties, 22405d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu vector<string>()); 22526692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(IPConfig::kMethodPPP, bearer_.ipv4_config_method()); 22626692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 22705d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.Clear(); 22805d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.SetKeyValueStore( 22905d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu MM_BEARER_PROPERTY_IP4CONFIG, 23005d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ConstructIPv4ConfigProperties(MM_BEARER_IP_METHOD_STATIC)); 23105d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu bearer_.OnPropertiesChanged(MM_DBUS_INTERFACE_BEARER, properties, 23205d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu vector<string>()); 23326692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(IPConfig::kMethodStatic, bearer_.ipv4_config_method()); 23426692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan VerifyStaticIPv4ConfigMethodAndProperties(); 23526692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 23605d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.Clear(); 23705d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.SetKeyValueStore( 23805d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu MM_BEARER_PROPERTY_IP4CONFIG, 23905d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ConstructIPv4ConfigProperties(MM_BEARER_IP_METHOD_DHCP)); 24005d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu bearer_.OnPropertiesChanged(MM_DBUS_INTERFACE_BEARER, properties, 24105d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu vector<string>()); 24226692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(IPConfig::kMethodDHCP, bearer_.ipv4_config_method()); 24326692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 24426692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan // Update 'ip6config' property. 24505d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.Clear(); 24605d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.SetKeyValueStore( 24705d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu MM_BEARER_PROPERTY_IP6CONFIG, 24805d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ConstructIPv6ConfigProperties(MM_BEARER_IP_METHOD_UNKNOWN)); 24905d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu bearer_.OnPropertiesChanged(MM_DBUS_INTERFACE_BEARER, properties, 25005d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu vector<string>()); 25126692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(IPConfig::kMethodUnknown, bearer_.ipv6_config_method()); 25226692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 25305d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.Clear(); 25405d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.SetKeyValueStore( 25505d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu MM_BEARER_PROPERTY_IP6CONFIG, 25605d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ConstructIPv6ConfigProperties(MM_BEARER_IP_METHOD_PPP)); 25705d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu bearer_.OnPropertiesChanged(MM_DBUS_INTERFACE_BEARER, properties, 25805d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu vector<string>()); 25926692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(IPConfig::kMethodPPP, bearer_.ipv6_config_method()); 26026692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 26105d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.Clear(); 26205d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.SetKeyValueStore( 26305d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu MM_BEARER_PROPERTY_IP6CONFIG, 26405d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ConstructIPv6ConfigProperties(MM_BEARER_IP_METHOD_STATIC)); 26505d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu bearer_.OnPropertiesChanged(MM_DBUS_INTERFACE_BEARER, properties, 26605d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu vector<string>()); 26726692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(IPConfig::kMethodStatic, bearer_.ipv6_config_method()); 26826692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan VerifyStaticIPv6ConfigMethodAndProperties(); 26926692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 27005d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.Clear(); 27105d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu properties.SetKeyValueStore( 27205d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu MM_BEARER_PROPERTY_IP6CONFIG, 27305d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu ConstructIPv6ConfigProperties(MM_BEARER_IP_METHOD_DHCP)); 27405d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu bearer_.OnPropertiesChanged(MM_DBUS_INTERFACE_BEARER, properties, 27505d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu vector<string>()); 27626692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan EXPECT_EQ(IPConfig::kMethodDHCP, bearer_.ipv6_config_method()); 27726692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan} 27826692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan 27926692bd03e56c3e71d2887e83e4cbbe71a64a191Ben Chan} // namespace shill 280