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" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/string_split.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/network_change_notifier_factory_chromeos.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/network_state.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/network_change_notifier.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chromeos { 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace { 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kDnsServers1[] = "192.168.0.1,192.168.0.2"; 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kDnsServers2[] = "192.168.3.1,192.168.3.2"; 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kIpAddress1[] = "192.168.1.1"; 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kIpAddress2[] = "192.168.1.2"; 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kService1[] = "/service/1"; 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kService2[] = "/service/2"; 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kService3[] = "/service/3"; 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct NotifierState { 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::NetworkChangeNotifier::ConnectionType type; 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char* service_path; 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char* ip_address; 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char* dns_servers; 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct DefaultNetworkState { 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool is_connected; 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char* type; 39a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const char* network_technology; 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char* service_path; 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char* ip_address; 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char* dns_servers; 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct NotifierUpdateTestCase { 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char* test_description; 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NotifierState initial_state; 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DefaultNetworkState default_network_state; 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NotifierState expected_state; 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool expected_type_changed; 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool expected_ip_changed; 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool expected_dns_changed; 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using net::NetworkChangeNotifier; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(NetworkChangeNotifierChromeosTest, ConnectionTypeFromShill) { 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct TypeMapping { 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* shill_type; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* technology; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::ConnectionType connection_type; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TypeMapping type_mappings[] = { 6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { shill::kTypeEthernet, "", NetworkChangeNotifier::CONNECTION_ETHERNET }, 6768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { shill::kTypeWifi, "", NetworkChangeNotifier::CONNECTION_WIFI }, 6868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { shill::kTypeWimax, "", NetworkChangeNotifier::CONNECTION_4G }, 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "unknown type", "unknown technology", 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_UNKNOWN }, 7168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { shill::kTypeCellular, shill::kNetworkTechnology1Xrtt, 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_2G }, 7368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { shill::kTypeCellular, shill::kNetworkTechnologyGprs, 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_2G }, 7568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { shill::kTypeCellular, shill::kNetworkTechnologyEdge, 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_2G }, 7768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { shill::kTypeCellular, shill::kNetworkTechnologyEvdo, 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_3G }, 7968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { shill::kTypeCellular, shill::kNetworkTechnologyGsm, 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_3G }, 8168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { shill::kTypeCellular, shill::kNetworkTechnologyUmts, 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_3G }, 8368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { shill::kTypeCellular, shill::kNetworkTechnologyHspa, 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_3G }, 8568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { shill::kTypeCellular, shill::kNetworkTechnologyHspaPlus, 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_4G }, 8768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { shill::kTypeCellular, shill::kNetworkTechnologyLte, 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_4G }, 8968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { shill::kTypeCellular, shill::kNetworkTechnologyLteAdvanced, 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_4G }, 9168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { shill::kTypeCellular, "unknown technology", 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::CONNECTION_2G } 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(type_mappings); ++i) { 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::ConnectionType type = 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifierChromeos::ConnectionTypeFromShill( 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type_mappings[i].shill_type, type_mappings[i].technology); 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(type_mappings[i].connection_type, type); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class NetworkChangeNotifierChromeosUpdateTest : public testing::Test { 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifierChromeosUpdateTest() : default_network_("") { 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~NetworkChangeNotifierChromeosUpdateTest() {} 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetNotifierState(const NotifierState& notifier_state) { 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) notifier_.connection_type_ = notifier_state.type; 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) notifier_.service_path_ = notifier_state.service_path; 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) notifier_.ip_address_ = notifier_state.ip_address; 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::string> dns_servers; 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::SplitString(notifier_state.dns_servers, ',', &dns_servers); 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) notifier_.dns_servers_ = dns_servers; 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void VerifyNotifierState(const NotifierState& notifier_state) { 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(notifier_state.type, notifier_.connection_type_); 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(notifier_state.service_path, notifier_.service_path_); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(notifier_state.ip_address, notifier_.ip_address_); 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::string> dns_servers; 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::SplitString(notifier_state.dns_servers, ',', &dns_servers); 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(dns_servers, notifier_.dns_servers_); 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets the default network state used for notifier updates. 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetDefaultNetworkState( 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const DefaultNetworkState& default_network_state) { 130f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) default_network_.visible_ = true; 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (default_network_state.is_connected) 13268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) default_network_.connection_state_ = shill::kStateOnline; 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 13468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) default_network_.connection_state_ = shill::kStateConfiguration; 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) default_network_.type_ = default_network_state.type; 136a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) default_network_.network_technology_ = 137a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) default_network_state.network_technology; 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) default_network_.path_ = default_network_state.service_path; 1397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch default_network_.ip_address_ = default_network_state.ip_address; 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::string> dns_servers; 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::SplitString(default_network_state.dns_servers, ',', &dns_servers); 1427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch default_network_.dns_servers_ = dns_servers; 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Process an default network update based on the state of |default_network_|. 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ProcessDefaultNetworkUpdate(bool* type_changed, 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool* ip_changed, 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool* dns_changed) { 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) notifier_.UpdateState(&default_network_, type_changed, ip_changed, 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dns_changed); 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkState default_network_; 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifierChromeos notifier_; 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)NotifierUpdateTestCase test_cases[] = { 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "Online -> Offline", 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { NetworkChangeNotifier::CONNECTION_ETHERNET, kService1, kIpAddress1, 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kDnsServers1 }, 16268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { false, shill::kTypeEthernet, "", kService1, "", "" }, 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { NetworkChangeNotifier::CONNECTION_NONE, "", "", "" }, 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, true, true 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "Offline -> Offline", 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { NetworkChangeNotifier::CONNECTION_NONE, "", "", "" }, 16868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { false, shill::kTypeEthernet, "", kService1, kIpAddress1, 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kDnsServers1 }, 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { NetworkChangeNotifier::CONNECTION_NONE, "", "", "" }, 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, false, false 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "Offline -> Online", 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { NetworkChangeNotifier::CONNECTION_NONE, "", "", "" }, 17568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { true, shill::kTypeEthernet, "", kService1, kIpAddress1, kDnsServers1 }, 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { NetworkChangeNotifier::CONNECTION_ETHERNET, kService1, kIpAddress1, 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kDnsServers1 }, 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, true, true 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "Online -> Online (new default service, different connection type)", 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { NetworkChangeNotifier::CONNECTION_ETHERNET, kService1, kIpAddress1, 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kDnsServers1 }, 18368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { true, shill::kTypeWifi, "", kService2, kIpAddress1, kDnsServers1 }, 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { NetworkChangeNotifier::CONNECTION_WIFI, kService2, kIpAddress1, 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kDnsServers1 }, 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, true, true 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "Online -> Online (new default service, same connection type)", 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { NetworkChangeNotifier::CONNECTION_WIFI, kService2, kIpAddress1, 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kDnsServers1 }, 19168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { true, shill::kTypeWifi, "", kService3, kIpAddress1, kDnsServers1 }, 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { NetworkChangeNotifier::CONNECTION_WIFI, kService3, kIpAddress1, 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kDnsServers1 }, 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, true, true 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, 196868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) { "Online -> Online (same default service, first IP address update)", 197868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) { NetworkChangeNotifier::CONNECTION_WIFI, kService3, "", kDnsServers1 }, 19868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { true, shill::kTypeWifi, "", kService3, kIpAddress2, kDnsServers1 }, 199868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) { NetworkChangeNotifier::CONNECTION_WIFI, kService3, kIpAddress2, 200868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) kDnsServers1 }, 201868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, false, false 202868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) }, 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "Online -> Online (same default service, new IP address, same DNS)", 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { NetworkChangeNotifier::CONNECTION_WIFI, kService3, kIpAddress1, 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kDnsServers1 }, 20668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { true, shill::kTypeWifi, "", kService3, kIpAddress2, kDnsServers1 }, 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { NetworkChangeNotifier::CONNECTION_WIFI, kService3, kIpAddress2, 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kDnsServers1 }, 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, true, false 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "Online -> Online (same default service, same IP address, new DNS)", 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { NetworkChangeNotifier::CONNECTION_WIFI, kService3, kIpAddress2, 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kDnsServers1 }, 21468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { true, shill::kTypeWifi, "", kService3, kIpAddress2, kDnsServers2 }, 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { NetworkChangeNotifier::CONNECTION_WIFI, kService3, kIpAddress2, 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kDnsServers2 }, 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, false, true 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(NetworkChangeNotifierChromeosUpdateTest, UpdateDefaultNetwork) { 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < arraysize(test_cases); ++i) { 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SCOPED_TRACE(test_cases[i].test_description); 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetNotifierState(test_cases[i].initial_state); 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetDefaultNetworkState(test_cases[i].default_network_state); 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool type_changed = false, ip_changed = false, dns_changed = false; 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ProcessDefaultNetworkUpdate(&type_changed, &ip_changed, &dns_changed); 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VerifyNotifierState(test_cases[i].expected_state); 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(type_changed == test_cases[i].expected_type_changed); 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(ip_changed == test_cases[i].expected_ip_changed); 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(dns_changed == test_cases[i].expected_dns_changed); 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace chromeos 236