cc: Added inline to Tile::IsReadyToDraw
[chromium-blink-merge.git] / chromeos / network / network_change_notifier_chromeos_unittest.cc
blobf8462d80629f613f047a5f3dd571c9c24b9bf262
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.
5 #include "chromeos/network/network_change_notifier_chromeos.h"
7 #include <string>
9 #include "base/basictypes.h"
10 #include "base/strings/string_split.h"
11 #include "chromeos/network/network_change_notifier_factory_chromeos.h"
12 #include "chromeos/network/network_state.h"
13 #include "net/base/network_change_notifier.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "third_party/cros_system_api/dbus/service_constants.h"
17 namespace chromeos {
19 namespace {
21 const char kDnsServers1[] = "192.168.0.1,192.168.0.2";
22 const char kDnsServers2[] = "192.168.3.1,192.168.3.2";
23 const char kIpAddress1[] = "192.168.1.1";
24 const char kIpAddress2[] = "192.168.1.2";
25 const char kService1[] = "/service/1";
26 const char kService2[] = "/service/2";
27 const char kService3[] = "/service/3";
29 struct NotifierState {
30 net::NetworkChangeNotifier::ConnectionType type;
31 const char* service_path;
32 const char* ip_address;
33 const char* dns_servers;
36 struct DefaultNetworkState {
37 bool is_connected;
38 const char* type;
39 const char* network_technology;
40 const char* service_path;
41 const char* ip_address;
42 const char* dns_servers;
45 struct NotifierUpdateTestCase {
46 const char* test_description;
47 NotifierState initial_state;
48 DefaultNetworkState default_network_state;
49 NotifierState expected_state;
50 bool expected_type_changed;
51 bool expected_ip_changed;
52 bool expected_dns_changed;
55 } // namespace
57 using net::NetworkChangeNotifier;
59 TEST(NetworkChangeNotifierChromeosTest, ConnectionTypeFromShill) {
60 struct TypeMapping {
61 const char* shill_type;
62 const char* technology;
63 NetworkChangeNotifier::ConnectionType connection_type;
65 TypeMapping type_mappings[] = {
66 { flimflam::kTypeEthernet, "", NetworkChangeNotifier::CONNECTION_ETHERNET },
67 { flimflam::kTypeWifi, "", NetworkChangeNotifier::CONNECTION_WIFI },
68 { flimflam::kTypeWimax, "", NetworkChangeNotifier::CONNECTION_4G },
69 { "unknown type", "unknown technology",
70 NetworkChangeNotifier::CONNECTION_UNKNOWN },
71 { flimflam::kTypeCellular, flimflam::kNetworkTechnology1Xrtt,
72 NetworkChangeNotifier::CONNECTION_2G },
73 { flimflam::kTypeCellular, flimflam::kNetworkTechnologyGprs,
74 NetworkChangeNotifier::CONNECTION_2G },
75 { flimflam::kTypeCellular, flimflam::kNetworkTechnologyEdge,
76 NetworkChangeNotifier::CONNECTION_2G },
77 { flimflam::kTypeCellular, flimflam::kNetworkTechnologyEvdo,
78 NetworkChangeNotifier::CONNECTION_3G },
79 { flimflam::kTypeCellular, flimflam::kNetworkTechnologyGsm,
80 NetworkChangeNotifier::CONNECTION_3G },
81 { flimflam::kTypeCellular, flimflam::kNetworkTechnologyUmts,
82 NetworkChangeNotifier::CONNECTION_3G },
83 { flimflam::kTypeCellular, flimflam::kNetworkTechnologyHspa,
84 NetworkChangeNotifier::CONNECTION_3G },
85 { flimflam::kTypeCellular, flimflam::kNetworkTechnologyHspaPlus,
86 NetworkChangeNotifier::CONNECTION_4G },
87 { flimflam::kTypeCellular, flimflam::kNetworkTechnologyLte,
88 NetworkChangeNotifier::CONNECTION_4G },
89 { flimflam::kTypeCellular, flimflam::kNetworkTechnologyLteAdvanced,
90 NetworkChangeNotifier::CONNECTION_4G },
91 { flimflam::kTypeCellular, "unknown technology",
92 NetworkChangeNotifier::CONNECTION_2G }
95 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(type_mappings); ++i) {
96 NetworkChangeNotifier::ConnectionType type =
97 NetworkChangeNotifierChromeos::ConnectionTypeFromShill(
98 type_mappings[i].shill_type, type_mappings[i].technology);
99 EXPECT_EQ(type_mappings[i].connection_type, type);
103 class NetworkChangeNotifierChromeosUpdateTest : public testing::Test {
104 protected:
105 NetworkChangeNotifierChromeosUpdateTest() : default_network_("") {
107 virtual ~NetworkChangeNotifierChromeosUpdateTest() {}
109 void SetNotifierState(const NotifierState& notifier_state) {
110 notifier_.connection_type_ = notifier_state.type;
111 notifier_.service_path_ = notifier_state.service_path;
112 notifier_.ip_address_ = notifier_state.ip_address;
113 std::vector<std::string> dns_servers;
114 base::SplitString(notifier_state.dns_servers, ',', &dns_servers);
115 notifier_.dns_servers_ = dns_servers;
118 void VerifyNotifierState(const NotifierState& notifier_state) {
119 EXPECT_EQ(notifier_state.type, notifier_.connection_type_);
120 EXPECT_EQ(notifier_state.service_path, notifier_.service_path_);
121 EXPECT_EQ(notifier_state.ip_address, notifier_.ip_address_);
122 std::vector<std::string> dns_servers;
123 base::SplitString(notifier_state.dns_servers, ',', &dns_servers);
124 EXPECT_EQ(dns_servers, notifier_.dns_servers_);
127 // Sets the default network state used for notifier updates.
128 void SetDefaultNetworkState(
129 const DefaultNetworkState& default_network_state) {
130 if (default_network_state.is_connected)
131 default_network_.connection_state_ = flimflam::kStateOnline;
132 else
133 default_network_.connection_state_ = flimflam::kStateConfiguration;
134 default_network_.type_ = default_network_state.type;
135 default_network_.network_technology_ =
136 default_network_state.network_technology;
137 default_network_.path_ = default_network_state.service_path;
138 default_network_.ip_address_ = default_network_state.ip_address;
139 std::vector<std::string> dns_servers;
140 base::SplitString(default_network_state.dns_servers, ',', &dns_servers);
141 default_network_.dns_servers_ = dns_servers;
144 // Process an default network update based on the state of |default_network_|.
145 void ProcessDefaultNetworkUpdate(bool* type_changed,
146 bool* ip_changed,
147 bool* dns_changed) {
148 notifier_.UpdateState(&default_network_, type_changed, ip_changed,
149 dns_changed);
152 private:
153 NetworkState default_network_;
154 NetworkChangeNotifierChromeos notifier_;
157 NotifierUpdateTestCase test_cases[] = {
158 { "Online -> Offline",
159 { NetworkChangeNotifier::CONNECTION_ETHERNET, kService1, kIpAddress1,
160 kDnsServers1 },
161 { false, flimflam::kTypeEthernet, "", kService1, "", "" },
162 { NetworkChangeNotifier::CONNECTION_NONE, "", "", "" },
163 true, true, true
165 { "Offline -> Offline",
166 { NetworkChangeNotifier::CONNECTION_NONE, "", "", "" },
167 { false, flimflam::kTypeEthernet, "", kService1, kIpAddress1,
168 kDnsServers1 },
169 { NetworkChangeNotifier::CONNECTION_NONE, "", "", "" },
170 false, false, false
172 { "Offline -> Online",
173 { NetworkChangeNotifier::CONNECTION_NONE, "", "", "" },
174 { true, flimflam::kTypeEthernet, "", kService1, kIpAddress1, kDnsServers1 },
175 { NetworkChangeNotifier::CONNECTION_ETHERNET, kService1, kIpAddress1,
176 kDnsServers1 },
177 true, true, true
179 { "Online -> Online (new default service, different connection type)",
180 { NetworkChangeNotifier::CONNECTION_ETHERNET, kService1, kIpAddress1,
181 kDnsServers1 },
182 { true, flimflam::kTypeWifi, "", kService2, kIpAddress1, kDnsServers1 },
183 { NetworkChangeNotifier::CONNECTION_WIFI, kService2, kIpAddress1,
184 kDnsServers1 },
185 true, true, true
187 { "Online -> Online (new default service, same connection type)",
188 { NetworkChangeNotifier::CONNECTION_WIFI, kService2, kIpAddress1,
189 kDnsServers1 },
190 { true, flimflam::kTypeWifi, "", kService3, kIpAddress1, kDnsServers1 },
191 { NetworkChangeNotifier::CONNECTION_WIFI, kService3, kIpAddress1,
192 kDnsServers1 },
193 false, true, true
195 { "Online -> Online (same default service, first IP address update)",
196 { NetworkChangeNotifier::CONNECTION_WIFI, kService3, "", kDnsServers1 },
197 { true, flimflam::kTypeWifi, "", kService3, kIpAddress2, kDnsServers1 },
198 { NetworkChangeNotifier::CONNECTION_WIFI, kService3, kIpAddress2,
199 kDnsServers1 },
200 false, false, false
202 { "Online -> Online (same default service, new IP address, same DNS)",
203 { NetworkChangeNotifier::CONNECTION_WIFI, kService3, kIpAddress1,
204 kDnsServers1 },
205 { true, flimflam::kTypeWifi, "", kService3, kIpAddress2, kDnsServers1 },
206 { NetworkChangeNotifier::CONNECTION_WIFI, kService3, kIpAddress2,
207 kDnsServers1 },
208 false, true, false
210 { "Online -> Online (same default service, same IP address, new DNS)",
211 { NetworkChangeNotifier::CONNECTION_WIFI, kService3, kIpAddress2,
212 kDnsServers1 },
213 { true, flimflam::kTypeWifi, "", kService3, kIpAddress2, kDnsServers2 },
214 { NetworkChangeNotifier::CONNECTION_WIFI, kService3, kIpAddress2,
215 kDnsServers2 },
216 false, false, true
220 TEST_F(NetworkChangeNotifierChromeosUpdateTest, UpdateDefaultNetwork) {
221 for (size_t i = 0; i < arraysize(test_cases); ++i) {
222 SCOPED_TRACE(test_cases[i].test_description);
223 SetNotifierState(test_cases[i].initial_state);
224 SetDefaultNetworkState(test_cases[i].default_network_state);
225 bool type_changed = false, ip_changed = false, dns_changed = false;
226 ProcessDefaultNetworkUpdate(&type_changed, &ip_changed, &dns_changed);
227 VerifyNotifierState(test_cases[i].expected_state);
228 EXPECT_TRUE(type_changed == test_cases[i].expected_type_changed);
229 EXPECT_TRUE(ip_changed == test_cases[i].expected_ip_changed);
230 EXPECT_TRUE(dns_changed == test_cases[i].expected_dns_changed);
234 } // namespace chromeos