1 // Copyright 2014 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.
8 #include "base/command_line.h"
9 #include "base/logging.h"
10 #include "chrome/browser/extensions/api/networking_private/networking_private_delegate.h"
11 #include "chrome/browser/extensions/extension_apitest.h"
12 #include "components/keyed_service/core/keyed_service.h"
13 #include "components/onc/onc_constants.h"
14 #include "content/public/test/test_utils.h"
15 #include "extensions/common/switches.h"
17 #if defined(OS_CHROMEOS)
18 #include "chrome/browser/extensions/api/networking_private/networking_private_factory_chromeos.h"
20 #include "chrome/browser/extensions/api/networking_private/networking_private_service_client_factory.h"
23 namespace extensions {
25 // This tests just the interface for the networkingPrivate API, i.e. it ensures
26 // that the delegate methods are called as expected.
30 const char kFailure[] = "Failure";
31 const char kSuccess[] = "Success";
32 const char kGuid[] = "SOME_GUID";
34 class TestDelegate : public KeyedService,
35 public NetworkingPrivateDelegate {
37 TestDelegate() : fail_(false) {
40 // Asynchronous methods
41 void GetProperties(const std::string& guid,
42 const DictionaryCallback& success_callback,
43 const FailureCallback& failure_callback) override {
44 DictionaryResult(guid, success_callback, failure_callback);
47 void GetManagedProperties(const std::string& guid,
48 const DictionaryCallback& success_callback,
49 const FailureCallback& failure_callback) override {
50 DictionaryResult(guid, success_callback, failure_callback);
53 void GetState(const std::string& guid,
54 const DictionaryCallback& success_callback,
55 const FailureCallback& failure_callback) override {
56 DictionaryResult(guid, success_callback, failure_callback);
59 void SetProperties(const std::string& guid,
60 scoped_ptr<base::DictionaryValue> properties,
61 const VoidCallback& success_callback,
62 const FailureCallback& failure_callback) override {
63 VoidResult(success_callback, failure_callback);
66 void CreateNetwork(bool shared,
67 scoped_ptr<base::DictionaryValue> properties,
68 const StringCallback& success_callback,
69 const FailureCallback& failure_callback) override {
70 StringResult(success_callback, failure_callback);
73 void GetNetworks(const std::string& network_type,
77 const NetworkListCallback& success_callback,
78 const FailureCallback& failure_callback) override {
80 failure_callback.Run(kFailure);
82 scoped_ptr<base::ListValue> result(new base::ListValue);
83 scoped_ptr<base::DictionaryValue> network(new base::DictionaryValue);
84 network->SetString(::onc::network_config::kType,
85 ::onc::network_config::kEthernet);
86 network->SetString(::onc::network_config::kGUID, kGuid);
87 result->Append(network.release());
88 success_callback.Run(result.Pass());
92 void StartConnect(const std::string& guid,
93 const VoidCallback& success_callback,
94 const FailureCallback& failure_callback) override {
95 VoidResult(success_callback, failure_callback);
98 void StartDisconnect(const std::string& guid,
99 const VoidCallback& success_callback,
100 const FailureCallback& failure_callback) override {
101 VoidResult(success_callback, failure_callback);
104 void VerifyDestination(const VerificationProperties& verification_properties,
105 const BoolCallback& success_callback,
106 const FailureCallback& failure_callback) override {
107 BoolResult(success_callback, failure_callback);
110 void VerifyAndEncryptCredentials(
111 const std::string& guid,
112 const VerificationProperties& verification_properties,
113 const StringCallback& success_callback,
114 const FailureCallback& failure_callback) override {
115 StringResult(success_callback, failure_callback);
118 void VerifyAndEncryptData(
119 const VerificationProperties& verification_properties,
120 const std::string& data,
121 const StringCallback& success_callback,
122 const FailureCallback& failure_callback) override {
123 StringResult(success_callback, failure_callback);
126 void SetWifiTDLSEnabledState(
127 const std::string& ip_or_mac_address,
129 const StringCallback& success_callback,
130 const FailureCallback& failure_callback) override {
131 StringResult(success_callback, failure_callback);
134 void GetWifiTDLSStatus(const std::string& ip_or_mac_address,
135 const StringCallback& success_callback,
136 const FailureCallback& failure_callback) override {
137 StringResult(success_callback, failure_callback);
140 void GetCaptivePortalStatus(
141 const std::string& guid,
142 const StringCallback& success_callback,
143 const FailureCallback& failure_callback) override {
144 StringResult(success_callback, failure_callback);
147 // Synchronous methods
148 scoped_ptr<base::ListValue> GetEnabledNetworkTypes() override {
149 scoped_ptr<base::ListValue> result;
151 result.reset(new base::ListValue);
152 result->AppendString(::onc::network_config::kEthernet);
154 return result.Pass();
157 bool EnableNetworkType(const std::string& type) override {
158 enabled_[type] = true;
162 bool DisableNetworkType(const std::string& type) override {
163 disabled_[type] = true;
167 bool RequestScan() override {
168 scan_requested_.push_back(true);
172 void set_fail(bool fail) { fail_ = fail; }
173 bool GetEnabled(const std::string& type) { return enabled_[type]; }
174 bool GetDisabled(const std::string& type) { return disabled_[type]; }
175 size_t GetScanRequested() { return scan_requested_.size(); }
178 void DictionaryResult(const std::string& guid,
179 const DictionaryCallback& success_callback,
180 const FailureCallback& failure_callback) {
182 failure_callback.Run(kFailure);
184 scoped_ptr<base::DictionaryValue> result(new base::DictionaryValue);
185 result->SetString(::onc::network_config::kGUID, guid);
186 success_callback.Run(result.Pass());
190 void StringResult(const StringCallback& success_callback,
191 const FailureCallback& failure_callback) {
193 failure_callback.Run(kFailure);
195 success_callback.Run(kSuccess);
199 void BoolResult(const BoolCallback& success_callback,
200 const FailureCallback& failure_callback) {
202 failure_callback.Run(kFailure);
204 success_callback.Run(true);
208 void VoidResult(const VoidCallback& success_callback,
209 const FailureCallback& failure_callback) {
211 failure_callback.Run(kFailure);
213 success_callback.Run();
218 std::map<std::string, bool> enabled_;
219 std::map<std::string, bool> disabled_;
220 std::vector<bool> scan_requested_;
222 DISALLOW_COPY_AND_ASSIGN(TestDelegate);
225 class NetworkingPrivateApiTest : public ExtensionApiTest {
227 NetworkingPrivateApiTest() {
228 if (!s_test_delegate_)
229 s_test_delegate_ = new TestDelegate;
232 static KeyedService* GetNetworkingPrivateDelegate(
233 content::BrowserContext* profile) {
234 CHECK(s_test_delegate_);
235 return s_test_delegate_;
238 void SetUpCommandLine(CommandLine* command_line) override {
239 ExtensionApiTest::SetUpCommandLine(command_line);
240 // Whitelist the extension ID of the test extension.
241 command_line->AppendSwitchASCII(
242 extensions::switches::kWhitelistedExtensionID,
243 "epcifkihnkjgphfkloaaleeakhpmgdmn");
246 void SetUpOnMainThread() override {
247 ExtensionApiTest::SetUpOnMainThread();
248 #if defined(OS_CHROMEOS)
249 NetworkingPrivateChromeOSFactory::GetInstance()->SetTestingFactory(
251 &NetworkingPrivateApiTest::GetNetworkingPrivateDelegate);
253 NetworkingPrivateServiceClientFactory::GetInstance()->SetTestingFactory(
255 &NetworkingPrivateApiTest::GetNetworkingPrivateDelegate);
257 content::RunAllPendingInMessageLoop();
260 bool GetEnabled(const std::string& type) {
261 return s_test_delegate_->GetEnabled(type);
264 bool GetDisabled(const std::string& type) {
265 return s_test_delegate_->GetDisabled(type);
268 size_t GetScanRequested() {
269 return s_test_delegate_->GetScanRequested();
273 bool RunNetworkingSubtest(const std::string& subtest) {
274 return RunExtensionSubtest(
275 "networking_private", "main.html?" + subtest,
276 kFlagEnableFileAccess | kFlagLoadAsComponent);
279 // Static pointer to the TestDelegate so that it can be accessed in
280 // GetNetworkingPrivateDelegate() passed to SetTestingFactory().
281 static TestDelegate* s_test_delegate_;
283 DISALLOW_COPY_AND_ASSIGN(NetworkingPrivateApiTest);
287 TestDelegate* NetworkingPrivateApiTest::s_test_delegate_ = NULL;
291 // Place each subtest into a separate browser test so that the stub networking
292 // library state is reset for each subtest run. This way they won't affect each
293 // other. TODO(stevenjb): Use extensions::ApiUnitTest once moved to
296 // These fail on Windows due to crbug.com/177163. Note: we still have partial
297 // coverage in NetworkingPrivateServiceClientApiTest. TODO(stevenjb): Enable
298 // these on Windows once we switch to extensions::ApiUnitTest.
302 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTest, GetProperties) {
303 EXPECT_TRUE(RunNetworkingSubtest("getProperties")) << message_;
306 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTest, GetManagedProperties) {
307 EXPECT_TRUE(RunNetworkingSubtest("getManagedProperties")) << message_;
310 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTest, GetState) {
311 EXPECT_TRUE(RunNetworkingSubtest("getState")) << message_;
314 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTest, SetProperties) {
315 EXPECT_TRUE(RunNetworkingSubtest("setProperties")) << message_;
318 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTest, CreateNetwork) {
319 EXPECT_TRUE(RunNetworkingSubtest("createNetwork")) << message_;
322 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTest, GetNetworks) {
323 EXPECT_TRUE(RunNetworkingSubtest("getNetworks")) << message_;
326 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTest, GetVisibleNetworks) {
327 EXPECT_TRUE(RunNetworkingSubtest("getVisibleNetworks")) << message_;
330 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTest, GetEnabledNetworkTypes) {
331 EXPECT_TRUE(RunNetworkingSubtest("getEnabledNetworkTypes")) << message_;
334 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTest, EnableNetworkType) {
335 EXPECT_TRUE(RunNetworkingSubtest("enableNetworkType")) << message_;
336 EXPECT_TRUE(GetEnabled(::onc::network_config::kEthernet));
339 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTest, DisableNetworkType) {
340 EXPECT_TRUE(RunNetworkingSubtest("disableNetworkType")) << message_;
341 EXPECT_TRUE(GetDisabled(::onc::network_config::kEthernet));
344 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTest, RequestNetworkScan) {
345 EXPECT_TRUE(RunNetworkingSubtest("requestNetworkScan")) << message_;
346 EXPECT_EQ(1u, GetScanRequested());
349 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTest, StartConnect) {
350 EXPECT_TRUE(RunNetworkingSubtest("startConnect")) << message_;
353 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTest, StartDisconnect) {
354 EXPECT_TRUE(RunNetworkingSubtest("startDisconnect")) << message_;
357 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTest, VerifyDestination) {
358 EXPECT_TRUE(RunNetworkingSubtest("verifyDestination")) << message_;
361 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTest, VerifyAndEncryptCredentials) {
362 EXPECT_TRUE(RunNetworkingSubtest("verifyAndEncryptCredentials")) << message_;
365 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTest, VerifyAndEncryptData) {
366 EXPECT_TRUE(RunNetworkingSubtest("verifyAndEncryptData")) << message_;
369 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTest, SetWifiTDLSEnabledState) {
370 EXPECT_TRUE(RunNetworkingSubtest("setWifiTDLSEnabledState")) << message_;
373 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTest, GetWifiTDLSStatus) {
374 EXPECT_TRUE(RunNetworkingSubtest("getWifiTDLSStatus")) << message_;
377 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTest, GetCaptivePortalStatus) {
378 EXPECT_TRUE(RunNetworkingSubtest("getCaptivePortalStatus")) << message_;
383 class NetworkingPrivateApiTestFail : public NetworkingPrivateApiTest {
385 NetworkingPrivateApiTestFail() {
386 s_test_delegate_->set_fail(true);
390 DISALLOW_COPY_AND_ASSIGN(NetworkingPrivateApiTestFail);
393 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTestFail, GetProperties) {
394 EXPECT_FALSE(RunNetworkingSubtest("getProperties")) << message_;
397 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTestFail, GetManagedProperties) {
398 EXPECT_FALSE(RunNetworkingSubtest("getManagedProperties")) << message_;
401 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTestFail, GetState) {
402 EXPECT_FALSE(RunNetworkingSubtest("getState")) << message_;
405 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTestFail, SetProperties) {
406 EXPECT_FALSE(RunNetworkingSubtest("setProperties")) << message_;
409 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTestFail, CreateNetwork) {
410 EXPECT_FALSE(RunNetworkingSubtest("createNetwork")) << message_;
413 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTestFail, GetNetworks) {
414 EXPECT_FALSE(RunNetworkingSubtest("getNetworks")) << message_;
417 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTestFail, GetVisibleNetworks) {
418 EXPECT_FALSE(RunNetworkingSubtest("getVisibleNetworks")) << message_;
421 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTestFail, GetEnabledNetworkTypes) {
422 EXPECT_FALSE(RunNetworkingSubtest("getEnabledNetworkTypes")) << message_;
425 // Note: Synchronous methods never fail:
426 // * disableNetworkType
427 // * enableNetworkType
428 // * requestNetworkScan
430 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTestFail, StartConnect) {
431 EXPECT_FALSE(RunNetworkingSubtest("startConnect")) << message_;
434 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTestFail, StartDisconnect) {
435 EXPECT_FALSE(RunNetworkingSubtest("startDisconnect")) << message_;
438 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTestFail, VerifyDestination) {
439 EXPECT_FALSE(RunNetworkingSubtest("verifyDestination")) << message_;
442 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTestFail,
443 VerifyAndEncryptCredentials) {
444 EXPECT_FALSE(RunNetworkingSubtest("verifyAndEncryptCredentials")) << message_;
447 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTestFail, VerifyAndEncryptData) {
448 EXPECT_FALSE(RunNetworkingSubtest("verifyAndEncryptData")) << message_;
451 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTestFail, SetWifiTDLSEnabledState) {
452 EXPECT_FALSE(RunNetworkingSubtest("setWifiTDLSEnabledState")) << message_;
455 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTestFail, GetWifiTDLSStatus) {
456 EXPECT_FALSE(RunNetworkingSubtest("getWifiTDLSStatus")) << message_;
459 IN_PROC_BROWSER_TEST_F(NetworkingPrivateApiTestFail, GetCaptivePortalStatus) {
460 EXPECT_FALSE(RunNetworkingSubtest("getCaptivePortalStatus")) << message_;
463 #endif // defined(OS_WIN)
465 } // namespace extensions