network_change_notifier_chromeos_unittest.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/network_change_notifier_chromeos.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/network_change_notifier_factory_chromeos.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/network_state.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/network_change_notifier.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chromeos { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using net::NetworkChangeNotifier; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(NetworkChangeNotifierChromeosTest, ConnectionTypeFromShill) { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct TypeMapping { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* shill_type; 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* technology; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::ConnectionType connection_type; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TypeMapping type_mappings[] = { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { flimflam::kTypeEthernet, "", NetworkChangeNotifier::CONNECTION_ETHERNET }, 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { flimflam::kTypeWifi, "", NetworkChangeNotifier::CONNECTION_WIFI }, 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { flimflam::kTypeWimax, "", NetworkChangeNotifier::CONNECTION_4G }, 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "unknown type", "unknown technology", 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_UNKNOWN }, 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { flimflam::kTypeCellular, flimflam::kNetworkTechnology1Xrtt, 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_2G }, 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { flimflam::kTypeCellular, flimflam::kNetworkTechnologyGprs, 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_2G }, 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { flimflam::kTypeCellular, flimflam::kNetworkTechnologyEdge, 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_2G }, 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { flimflam::kTypeCellular, flimflam::kNetworkTechnologyEvdo, 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_3G }, 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { flimflam::kTypeCellular, flimflam::kNetworkTechnologyGsm, 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_3G }, 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { flimflam::kTypeCellular, flimflam::kNetworkTechnologyUmts, 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_3G }, 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { flimflam::kTypeCellular, flimflam::kNetworkTechnologyHspa, 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_3G }, 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { flimflam::kTypeCellular, flimflam::kNetworkTechnologyHspaPlus, 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_4G }, 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { flimflam::kTypeCellular, flimflam::kNetworkTechnologyLte, 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_4G }, 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { flimflam::kTypeCellular, flimflam::kNetworkTechnologyLteAdvanced, 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_4G }, 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { flimflam::kTypeCellular, "unknown technology", 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_2G } 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(type_mappings); ++i) { 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::ConnectionType type = 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifierChromeos::ConnectionTypeFromShill( 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type_mappings[i].shill_type, type_mappings[i].technology); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(type_mappings[i].connection_type, type); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class NetworkChangeNotifierChromeosUpdateTest : public testing::Test { 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifierChromeosUpdateTest() : default_network_("") { 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~NetworkChangeNotifierChromeosUpdateTest() {} 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetNotifierState(NetworkChangeNotifier::ConnectionType type, 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string service_path, 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string ip_address) { 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) notifier_.ip_address_ = ip_address; 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) notifier_.service_path_ = service_path; 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) notifier_.connection_type_ = type; 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void VerifyNotifierState(NetworkChangeNotifier::ConnectionType expected_type, 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string expected_service_path, 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string expected_ip_address) { 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_type, notifier_.connection_type_); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_ip_address, notifier_.ip_address_); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_service_path, notifier_.service_path_); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets the default network state used for notifier updates. 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetDefaultNetworkState(bool is_connected, 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string type, 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string technology, 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string service_path, 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string ip_address) { 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (is_connected) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_network_.connection_state_ = flimflam::kStateOnline; 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_network_.connection_state_ = flimflam::kStateConfiguration; 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_network_.type_ = type; 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_network_.technology_ = technology; 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_network_.path_ = service_path; 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_network_.ip_address_ = ip_address; 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Process an default network update based on the state of |default_network_|. 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ProcessDefaultNetworkUpdate(bool* type_changed, 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool* ip_changed, 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool* dns_changed) { 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) notifier_.UpdateState(&default_network_, type_changed, ip_changed, 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dns_changed); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkState default_network_; 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifierChromeos notifier_; 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(NetworkChangeNotifierChromeosUpdateTest, UpdateDefaultNetworkOffline) { 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Test that Online to Offline transitions are correctly handled. 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetNotifierState(NetworkChangeNotifier::CONNECTION_ETHERNET, "/service/1", 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "192.168.1.1"); 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetDefaultNetworkState(false, // offline. 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flimflam::kTypeEthernet, "", "/service/1", ""); 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool type_changed = false, ip_changed = false, dns_changed = false; 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProcessDefaultNetworkUpdate(&type_changed, &ip_changed, &dns_changed); 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNotifierState(NetworkChangeNotifier::CONNECTION_NONE, "", ""); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(type_changed); 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ip_changed); 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(dns_changed); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(NetworkChangeNotifierChromeosUpdateTest, UpdateDefaultNetworkOnline) { 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Test that Offline to Online transitions are correctly handled. 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetNotifierState(NetworkChangeNotifier::CONNECTION_NONE, "", ""); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetDefaultNetworkState(false, // offline. 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flimflam::kTypeEthernet, "", 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "192.168.0.1", "/service/1"); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool type_changed = false, ip_changed = false, dns_changed = false; 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProcessDefaultNetworkUpdate(&type_changed, &ip_changed, &dns_changed); 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the new default network is still offline, nothing should have changed. 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNotifierState(NetworkChangeNotifier::CONNECTION_NONE, "", ""); 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(type_changed); 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ip_changed); 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(dns_changed); 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetDefaultNetworkState(true, // online. 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flimflam::kTypeEthernet, "", "/service/1", 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "192.168.0.1"); 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProcessDefaultNetworkUpdate(&type_changed, &ip_changed, &dns_changed); 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Now the new default network is online, so this should trigger a notifier 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // state change. 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNotifierState(NetworkChangeNotifier::CONNECTION_ETHERNET, "/service/1", 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "192.168.0.1"); 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(type_changed); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ip_changed); 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(dns_changed); 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(NetworkChangeNotifierChromeosUpdateTest, UpdateDefaultNetworkChanged) { 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Test that Online to Online transitions (default network changes) are 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // correctly handled. 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetNotifierState(NetworkChangeNotifier::CONNECTION_ETHERNET, "/service/1", 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "192.168.1.1"); 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetDefaultNetworkState(true, // online. 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flimflam::kTypeWifi, "", "/service/2", "192.168.1.2"); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool type_changed = false, ip_changed = false, dns_changed = false; 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProcessDefaultNetworkUpdate(&type_changed, &ip_changed, &dns_changed); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNotifierState(NetworkChangeNotifier::CONNECTION_WIFI, "/service/2", 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "192.168.1.2" ); 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(type_changed); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ip_changed); 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(dns_changed); 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetDefaultNetworkState(true, // online. 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flimflam::kTypeWifi, "", "/service/3", "192.168.1.2"); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProcessDefaultNetworkUpdate(&type_changed, &ip_changed, &dns_changed); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNotifierState(NetworkChangeNotifier::CONNECTION_WIFI, "/service/3", 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "192.168.1.2" ); 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(type_changed); 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A service path change (even with a corresponding IP change) should still 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // trigger an IP address update to observers. 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ip_changed); 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(dns_changed); 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace chromeos 186