Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "net/base/network_change_notifier_chromeos.h" | |
| 6 | |
| 7 #include <string> | |
| 8 | |
| 9 #include "base/basictypes.h" | |
| 10 #include "chromeos/network/network_state.h" | |
| 11 #include "net/base/network_change_notifier.h" | |
| 12 #include "net/base/network_change_notifier_factory_chromeos.h" | |
| 13 #include "testing/gtest/include/gtest/gtest.h" | |
| 14 #include "third_party/cros_system_api/dbus/service_constants.h" | |
| 15 | |
| 16 namespace net { | |
| 17 | |
| 18 TEST(NetworkChangeNotifierChromeosTest, ConnectionTypeFromShill) { | |
| 19 struct TypeMapping { | |
| 20 const char* shill_type; | |
| 21 const char* technology; | |
| 22 NetworkChangeNotifier::ConnectionType connection_type; | |
| 23 } type_mappings[] = { | |
|
stevenjb
2012/12/13 19:28:22
nit: define named struct separately
gauravsh
2012/12/15 00:42:45
Done.
| |
| 24 {flimflam::kTypeEthernet, "", NetworkChangeNotifier::CONNECTION_ETHERNET}, | |
|
stevenjb
2012/12/13 19:28:22
' ' after { and before }
gauravsh
2012/12/15 00:42:45
Done.
| |
| 25 {flimflam::kTypeWifi, "", NetworkChangeNotifier::CONNECTION_WIFI}, | |
| 26 {flimflam::kTypeWimax, "", NetworkChangeNotifier::CONNECTION_4G}, | |
| 27 {"unknown type", "unknown technology", | |
| 28 NetworkChangeNotifier::CONNECTION_UNKNOWN}, | |
| 29 {flimflam::kTypeCellular, flimflam::kNetworkTechnology1Xrtt, | |
| 30 NetworkChangeNotifier::CONNECTION_2G}, | |
| 31 {flimflam::kTypeCellular, flimflam::kNetworkTechnologyGprs, | |
| 32 NetworkChangeNotifier::CONNECTION_2G}, | |
| 33 {flimflam::kTypeCellular, flimflam::kNetworkTechnologyEdge, | |
| 34 NetworkChangeNotifier::CONNECTION_2G}, | |
| 35 {flimflam::kTypeCellular, flimflam::kNetworkTechnologyEvdo, | |
| 36 NetworkChangeNotifier::CONNECTION_3G}, | |
| 37 {flimflam::kTypeCellular, flimflam::kNetworkTechnologyGsm, | |
| 38 NetworkChangeNotifier::CONNECTION_3G}, | |
| 39 {flimflam::kTypeCellular, flimflam::kNetworkTechnologyUmts, | |
| 40 NetworkChangeNotifier::CONNECTION_3G}, | |
| 41 {flimflam::kTypeCellular, flimflam::kNetworkTechnologyHspa, | |
| 42 NetworkChangeNotifier::CONNECTION_3G}, | |
| 43 {flimflam::kTypeCellular, flimflam::kNetworkTechnologyHspaPlus, | |
| 44 NetworkChangeNotifier::CONNECTION_4G}, | |
| 45 {flimflam::kTypeCellular, flimflam::kNetworkTechnologyLte, | |
| 46 NetworkChangeNotifier::CONNECTION_4G}, | |
| 47 {flimflam::kTypeCellular, flimflam::kNetworkTechnologyLteAdvanced, | |
| 48 NetworkChangeNotifier::CONNECTION_4G}, | |
| 49 {flimflam::kTypeCellular, "unknown technology", | |
| 50 NetworkChangeNotifier::CONNECTION_2G} | |
| 51 }; | |
| 52 | |
| 53 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(type_mappings); ++i) { | |
| 54 NetworkChangeNotifier::ConnectionType type = | |
| 55 NetworkChangeNotifierChromeos::ConnectionTypeFromShill( | |
| 56 type_mappings[i].shill_type, type_mappings[i].technology); | |
| 57 EXPECT_EQ(type_mappings[i].connection_type, type); | |
| 58 } | |
| 59 } | |
| 60 | |
| 61 class NetworkChangeNotifierChromeosUpdateTest : public testing::Test { | |
| 62 protected: | |
| 63 NetworkChangeNotifierChromeosUpdateTest() : active_network_("") { | |
| 64 } | |
| 65 virtual ~NetworkChangeNotifierChromeosUpdateTest() {} | |
| 66 | |
| 67 void SetNotifierState(NetworkChangeNotifier::ConnectionType type, | |
| 68 std::string service_path, | |
| 69 std::string ip_address) { | |
| 70 notifier_.ip_address_ = ip_address; | |
| 71 notifier_.service_path_ = service_path; | |
| 72 notifier_.connection_type_ = type; | |
| 73 } | |
| 74 | |
| 75 void VerifyNotifierState(NetworkChangeNotifier::ConnectionType expected_type, | |
| 76 std::string expected_service_path, | |
| 77 std::string expected_ip_address) { | |
| 78 EXPECT_EQ(expected_type, notifier_.connection_type_); | |
| 79 EXPECT_EQ(expected_ip_address, notifier_.ip_address_); | |
| 80 EXPECT_EQ(expected_service_path, notifier_.service_path_); | |
| 81 } | |
| 82 | |
| 83 // A helper for initializing an network state with given values. Caller | |
| 84 // owns the returned pointer and must delete it. | |
|
stevenjb
2012/12/13 19:28:22
Update comment (no returned pointer)
gauravsh
2012/12/15 00:42:45
Done.
| |
| 85 void SetActiveNetworkState(bool is_connected, | |
| 86 std::string type, | |
| 87 std::string technology, | |
| 88 std::string service_path, | |
| 89 std::string ip_address) { | |
| 90 if (is_connected) | |
| 91 active_network_.state_ = flimflam::kStateOnline; | |
| 92 else | |
| 93 active_network_.state_ = flimflam::kStateConfiguration; | |
| 94 active_network_.type_ = type; | |
| 95 active_network_.technology_ = technology; | |
| 96 active_network_.path_ = service_path; | |
| 97 active_network_.ip_address_ = ip_address; | |
| 98 } | |
| 99 | |
| 100 // Process an active network update based on the state of |active_network_|. | |
| 101 void ProcessActiveNetworkUpdate(bool* type_changed, | |
| 102 bool* ip_changed, | |
| 103 bool* dns_changed) { | |
| 104 notifier_.UpdateActiveNetwork(&active_network_, type_changed, ip_changed, | |
| 105 dns_changed); | |
| 106 } | |
| 107 | |
| 108 private: | |
| 109 chromeos::NetworkState active_network_; | |
| 110 NetworkChangeNotifier::DisableForTest disable_for_test; | |
| 111 NetworkChangeNotifierChromeos notifier_; | |
| 112 }; | |
| 113 | |
| 114 TEST_F(NetworkChangeNotifierChromeosUpdateTest, UpdateActiveNetworkOffline) { | |
| 115 // Test that Online to Offline transitions are correctly handled. | |
| 116 SetNotifierState(NetworkChangeNotifier::CONNECTION_ETHERNET, "/service/1", | |
| 117 "192.168.1.1"); | |
| 118 SetActiveNetworkState(false, // offline. | |
| 119 flimflam::kTypeEthernet, "", "/service/1", ""); | |
| 120 bool type_changed = false, ip_changed = false, dns_changed = false; | |
| 121 ProcessActiveNetworkUpdate(&type_changed, &ip_changed, &dns_changed); | |
| 122 VerifyNotifierState(NetworkChangeNotifier::CONNECTION_NONE, "", ""); | |
| 123 EXPECT_TRUE(type_changed); | |
| 124 EXPECT_TRUE(ip_changed); | |
| 125 EXPECT_TRUE(dns_changed); | |
| 126 } | |
| 127 | |
| 128 TEST_F(NetworkChangeNotifierChromeosUpdateTest, UpdateActiveNetworkOnline) { | |
| 129 // Test that Offline to Online transitions are correctly handled. | |
| 130 SetNotifierState(NetworkChangeNotifier::CONNECTION_NONE, "", ""); | |
| 131 | |
| 132 SetActiveNetworkState(false, // offline. | |
| 133 flimflam::kTypeEthernet, "", | |
| 134 "192.168.0.1", "/service/1"); | |
| 135 bool type_changed = false, ip_changed = false, dns_changed = false; | |
| 136 ProcessActiveNetworkUpdate(&type_changed, &ip_changed, &dns_changed); | |
| 137 // If the new active network is still offline, nothing should have changed. | |
| 138 VerifyNotifierState(NetworkChangeNotifier::CONNECTION_NONE, "", ""); | |
| 139 EXPECT_FALSE(type_changed); | |
| 140 EXPECT_FALSE(ip_changed); | |
| 141 EXPECT_FALSE(dns_changed); | |
| 142 | |
| 143 SetActiveNetworkState(true, // online. | |
| 144 flimflam::kTypeEthernet, "", "/service/1", | |
| 145 "192.168.0.1"); | |
| 146 ProcessActiveNetworkUpdate(&type_changed, &ip_changed, &dns_changed); | |
| 147 // Now the new active network is online, so this should trigger a notifier | |
| 148 // state change. | |
| 149 VerifyNotifierState(NetworkChangeNotifier::CONNECTION_ETHERNET, "/service/1", | |
| 150 "192.168.0.1"); | |
| 151 EXPECT_TRUE(type_changed); | |
| 152 EXPECT_TRUE(ip_changed); | |
| 153 EXPECT_TRUE(dns_changed); | |
| 154 } | |
| 155 | |
| 156 TEST_F(NetworkChangeNotifierChromeosUpdateTest, UpdateActiveNetworkChanged) { | |
| 157 // Test that Online to Online transisions (active network changes) are | |
| 158 // correctly handled. | |
| 159 SetNotifierState(NetworkChangeNotifier::CONNECTION_ETHERNET, "/service/1", | |
| 160 "192.168.1.1"); | |
| 161 | |
| 162 SetActiveNetworkState(true, // online. | |
| 163 flimflam::kTypeWifi, "", "/service/2", "192.168.1.2"); | |
| 164 bool type_changed = false, ip_changed = false, dns_changed = false; | |
| 165 ProcessActiveNetworkUpdate(&type_changed, &ip_changed, &dns_changed); | |
| 166 VerifyNotifierState(NetworkChangeNotifier::CONNECTION_WIFI, "/service/2", | |
| 167 "192.168.1.2" ); | |
| 168 EXPECT_TRUE(type_changed); | |
| 169 EXPECT_TRUE(ip_changed); | |
| 170 EXPECT_TRUE(dns_changed); | |
| 171 | |
| 172 SetActiveNetworkState(true, // online. | |
| 173 flimflam::kTypeWifi, "", "/service/3", "192.168.1.2"); | |
| 174 ProcessActiveNetworkUpdate(&type_changed, &ip_changed, &dns_changed); | |
| 175 VerifyNotifierState(NetworkChangeNotifier::CONNECTION_WIFI, "/service/3", | |
| 176 "192.168.1.2" ); | |
| 177 EXPECT_FALSE(type_changed); | |
| 178 // A service path change (even with a corresponding IP change) should still | |
| 179 // trigger an IP address update to observers. | |
| 180 EXPECT_TRUE(ip_changed); | |
| 181 EXPECT_TRUE(dns_changed); | |
| 182 } | |
| 183 | |
| 184 } // namespace net | |
| OLD | NEW |