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