Index: extensions/browser/api/networking_private/networking_private_chromeos_unittest.cc |
diff --git a/extensions/browser/api/networking_private/networking_private_chromeos_unittest.cc b/extensions/browser/api/networking_private/networking_private_chromeos_unittest.cc |
index 6bed63200f9235161eae415ca9b73c42546e2b2b..2ad5b3f2c31ea4c5f5b463318bf3a3146767ec63 100644 |
--- a/extensions/browser/api/networking_private/networking_private_chromeos_unittest.cc |
+++ b/extensions/browser/api/networking_private/networking_private_chromeos_unittest.cc |
@@ -5,6 +5,7 @@ |
#include "base/macros.h" |
#include "base/message_loop/message_loop.h" |
#include "base/run_loop.h" |
+#include "base/strings/string_number_conversions.h" |
#include "base/strings/stringprintf.h" |
#include "chromeos/dbus/dbus_thread_manager.h" |
#include "chromeos/dbus/shill_device_client.h" |
@@ -15,6 +16,7 @@ |
#include "chromeos/network/network_handler.h" |
#include "chromeos/network/network_state.h" |
#include "chromeos/network/network_state_handler.h" |
+#include "components/onc/onc_constants.h" |
#include "extensions/browser/api/networking_private/networking_private_api.h" |
#include "extensions/browser/api_unittest.h" |
#include "extensions/common/value_builder.h" |
@@ -37,6 +39,12 @@ const char kPrivateWifiServicePath[] = "/service/private_wifi"; |
const char kPrivateWifiGuid[] = "private_wifi_guid"; |
const char kPrivateWifiName[] = "private_wifi"; |
+const char kManagedUserWifiGuid[] = "managed_user_wifi_guid"; |
+const char kManagedUserWifiSsid[] = "managed_user_wifi"; |
+ |
+const char kManagedDeviceWifiGuid[] = "managed_device_wifi_guid"; |
+const char kManagedDeviceWifiSsid[] = "managed_device_wifi"; |
+ |
} // namespace |
class NetworkingPrivateApiTest : public ApiUnitTest { |
@@ -128,11 +136,45 @@ class NetworkingPrivateApiTest : public ApiUnitTest { |
chromeos::NetworkHandler::Get() |
->managed_network_configuration_handler(); |
- config_handler->SetPolicy(::onc::ONC_SOURCE_USER_POLICY, kUserHash, |
- base::ListValue(), base::DictionaryValue()); |
+ const std::string user_policy_ssid = kManagedUserWifiSsid; |
+ std::unique_ptr<base::ListValue> user_policy_onc = |
+ ListBuilder() |
+ .Append(DictionaryBuilder() |
+ .Set("GUID", kManagedUserWifiGuid) |
+ .Set("Type", "WiFi") |
+ .Set("WiFi", |
+ DictionaryBuilder() |
+ .Set("Passphrase", "fake") |
+ .Set("SSID", user_policy_ssid) |
+ .Set("HexSSID", |
+ base::HexEncode(user_policy_ssid.c_str(), |
+ user_policy_ssid.size())) |
+ .Set("Security", "WPA-PSK") |
+ .Build()) |
+ .Build()) |
+ .Build(); |
+ config_handler->SetPolicy(::onc::ONC_SOURCE_USER_POLICY, kUserHash, |
+ *user_policy_onc, base::DictionaryValue()); |
+ |
+ const std::string device_policy_ssid = kManagedDeviceWifiSsid; |
+ std::unique_ptr<base::ListValue> device_policy_onc = |
+ ListBuilder() |
+ .Append(DictionaryBuilder() |
+ .Set("GUID", kManagedDeviceWifiGuid) |
+ .Set("Type", "WiFi") |
+ .Set("WiFi", |
+ DictionaryBuilder() |
+ .Set("SSID", device_policy_ssid) |
+ .Set("HexSSID", base::HexEncode( |
+ device_policy_ssid.c_str(), |
+ device_policy_ssid.size())) |
+ .Set("Security", "None") |
+ .Build()) |
+ .Build()) |
+ .Build(); |
config_handler->SetPolicy(::onc::ONC_SOURCE_DEVICE_POLICY, "", |
- base::ListValue(), base::DictionaryValue()); |
+ *device_policy_onc, base::DictionaryValue()); |
} |
void AddSharedNetworkToUserProfile() { |
@@ -172,7 +214,7 @@ TEST_F(NetworkingPrivateApiTest, SetSharedNetworkProperties) { |
RunFunctionAndReturnError( |
new NetworkingPrivateSetPropertiesFunction(), |
base::StringPrintf( |
- "[\"%s\", {\"WiFi\": {\"Passphrase\": \"passphrase\"}}]", |
+ R"(["%s", {"WiFi": {"Passphrase": "passphrase"}}])", |
kSharedWifiGuid))); |
} |
@@ -183,7 +225,7 @@ TEST_F(NetworkingPrivateApiTest, SetPrivateNetworkPropertiesWebUI) { |
RunFunction( |
set_properties.get(), |
- base::StringPrintf("[\"%s\", {\"Priority\": 0}]", kSharedWifiGuid)); |
+ base::StringPrintf(R"(["%s", {"Priority": 0}])", kSharedWifiGuid)); |
EXPECT_EQ(ExtensionFunction::SUCCEEDED, *set_properties->response_type()); |
const chromeos::NetworkState* network = |
@@ -200,7 +242,7 @@ TEST_F(NetworkingPrivateApiTest, SetPrivateNetworkProperties) { |
new NetworkingPrivateSetPropertiesFunction(); |
RunFunction( |
set_properties.get(), |
- base::StringPrintf("[\"%s\", {\"Priority\": 0}]", kPrivateWifiGuid)); |
+ base::StringPrintf(R"(["%s", {"Priority": 0}])", kPrivateWifiGuid)); |
EXPECT_EQ(ExtensionFunction::SUCCEEDED, *set_properties->response_type()); |
const chromeos::NetworkState* network = |
@@ -216,12 +258,13 @@ TEST_F(NetworkingPrivateApiTest, CreateSharedNetwork) { |
EXPECT_EQ( |
networking_private::kErrorAccessToSharedConfig, |
RunFunctionAndReturnError(new NetworkingPrivateCreateNetworkFunction(), |
- "[true, {" |
- " \"Type\": \"WiFi\"," |
- " \"WiFi\": {" |
- " \"SSID\": \"New network\"," |
- " \"Security\": \"None\"" |
- "}}]")); |
+ R"([true, { |
+ "Type": "WiFi", |
+ "WiFi": { |
+ "SSID": "New network", |
+ "Security": "None" |
+ } |
+ }])")); |
} |
TEST_F(NetworkingPrivateApiTest, CreateSharedNetworkWebUI) { |
@@ -231,13 +274,14 @@ TEST_F(NetworkingPrivateApiTest, CreateSharedNetworkWebUI) { |
std::unique_ptr<base::Value> result = |
RunFunctionAndReturnValue(create_network.get(), |
- "[true, {" |
- " \"Priority\": 1," |
- " \"Type\": \"WiFi\"," |
- " \"WiFi\": {" |
- " \"SSID\": \"New network\"," |
- " \"Security\": \"None\"" |
- "}}]"); |
+ R"([true, { |
+ "Priority": 1, |
+ "Type": "WiFi", |
+ "WiFi": { |
+ "SSID": "New network", |
+ "Security": "None" |
+ } |
+ }])"); |
ASSERT_TRUE(result); |
ASSERT_TRUE(result->is_string()); |
@@ -254,13 +298,14 @@ TEST_F(NetworkingPrivateApiTest, CreateSharedNetworkWebUI) { |
TEST_F(NetworkingPrivateApiTest, CreatePrivateNetwork) { |
std::unique_ptr<base::Value> result = |
RunFunctionAndReturnValue(new NetworkingPrivateCreateNetworkFunction(), |
- "[false, {" |
- " \"Priority\": 1," |
- " \"Type\": \"WiFi\"," |
- " \"WiFi\": {" |
- " \"SSID\": \"New WiFi\"," |
- " \"Security\": \"WPA-PSK\"" |
- "}}]"); |
+ R"([false, { |
+ "Priority": 1, |
+ "Type": "WiFi", |
+ "WiFi": { |
+ "SSID": "New WiFi", |
+ "Security": "WPA-PSK" |
+ } |
+ }])"); |
ASSERT_TRUE(result); |
ASSERT_TRUE(result->is_string()); |
@@ -278,10 +323,146 @@ TEST_F(NetworkingPrivateApiTest, CreatePrivateNetwork) { |
new NetworkingPrivateSetPropertiesFunction(); |
RunFunction(set_properties.get(), |
- base::StringPrintf("[\"%s\", {\"Priority\": 2}]", guid.c_str())); |
+ base::StringPrintf(R"(["%s", {"Priority": 2}])", guid.c_str())); |
EXPECT_EQ(ExtensionFunction::SUCCEEDED, *set_properties->response_type()); |
EXPECT_EQ(2, GetNetworkPriority(network)); |
} |
+TEST_F(NetworkingPrivateApiTest, CreatePrivateNetwork_NonMatchingSsids) { |
+ const std::string network_ssid = "new_wifi_config"; |
+ const std::string network_hex_ssid = |
+ base::HexEncode(network_ssid.c_str(), network_ssid.size()); |
+ std::unique_ptr<base::Value> result = |
+ RunFunctionAndReturnValue(new NetworkingPrivateCreateNetworkFunction(), |
+ base::StringPrintf(R"([false, { |
+ "Priority": 1, |
+ "Type": "WiFi", |
+ "WiFi": { |
+ "SSID": "New WiFi", |
+ "HexSSID": "%s", |
+ "Security": "WPA-PSK" |
+ } |
+ }])", |
+ network_hex_ssid.c_str())); |
+ |
+ ASSERT_TRUE(result); |
+ ASSERT_TRUE(result->is_string()); |
+ |
+ // Test the created config can be changed now. |
+ const std::string guid = result->GetString(); |
+ const chromeos::NetworkState* network = chromeos::NetworkHandler::Get() |
+ ->network_state_handler() |
+ ->GetNetworkStateFromGuid(guid); |
+ ASSERT_TRUE(network); |
+ EXPECT_TRUE(network->IsPrivate()); |
+ EXPECT_EQ(1, GetNetworkPriority(network)); |
+ EXPECT_EQ(network_hex_ssid, network->GetHexSsid()); |
+ EXPECT_EQ(network_ssid, network->name()); |
+} |
+ |
+TEST_F(NetworkingPrivateApiTest, |
+ CreateAlreadyConfiguredUserPrivateNetwork_BySsid) { |
+ EXPECT_EQ( |
+ "NetworkAlreadyConfigured", |
+ RunFunctionAndReturnError(new NetworkingPrivateCreateNetworkFunction(), |
+ base::StringPrintf(R"([false, { |
+ "Priority": 1, |
+ "Type": "WiFi", |
+ "WiFi": { |
+ "SSID": "%s", |
+ "Security": "WPA-PSK" |
+ } |
+ }])", |
+ kManagedUserWifiSsid))); |
+} |
+ |
+TEST_F(NetworkingPrivateApiTest, |
+ CreateAlreadyConfiguredUserPrivateNetwork_ByHexSsid) { |
+ std::string network_hex_ssid = |
+ base::HexEncode(kManagedUserWifiSsid, sizeof(kManagedUserWifiSsid) - 1); |
+ EXPECT_EQ( |
+ "NetworkAlreadyConfigured", |
+ RunFunctionAndReturnError(new NetworkingPrivateCreateNetworkFunction(), |
+ base::StringPrintf(R"([false, { |
+ "Priority": 1, |
+ "Type": "WiFi", |
+ "WiFi": { |
+ "HexSSID": "%s", |
+ "Security": "WPA-PSK" |
+ } |
+ }])", |
+ network_hex_ssid.c_str()))); |
+} |
+ |
+TEST_F(NetworkingPrivateApiTest, |
+ CreateAlreadyConfiguredUserPrivateNetwork_NonMatchingSsids) { |
+ std::string network_hex_ssid = |
+ base::HexEncode(kManagedUserWifiSsid, sizeof(kManagedUserWifiSsid) - 1); |
+ // HexSSID should take presedence over SSID. |
+ EXPECT_EQ( |
+ "NetworkAlreadyConfigured", |
+ RunFunctionAndReturnError(new NetworkingPrivateCreateNetworkFunction(), |
+ base::StringPrintf(R"([false, { |
+ "Priority": 1, |
+ "Type": "WiFi", |
+ "WiFi": { |
+ "SSID": "wrong_ssid", |
+ "HexSSID": "%s", |
+ "Security": "WPA-PSK" |
+ } |
+ }])", |
+ network_hex_ssid.c_str()))); |
+} |
+ |
+TEST_F(NetworkingPrivateApiTest, |
+ CreateAlreadyConfiguredUserPrivateNetwork_ByHexSSID) { |
+ std::string network_hex_ssid = |
+ base::HexEncode(kManagedUserWifiSsid, sizeof(kManagedUserWifiSsid) - 1); |
+ EXPECT_EQ( |
+ "NetworkAlreadyConfigured", |
+ RunFunctionAndReturnError(new NetworkingPrivateCreateNetworkFunction(), |
+ base::StringPrintf(R"([false, { |
+ "Priority": 1, |
+ "Type": "WiFi", |
+ "WiFi": { |
+ "HexSSID": "%s", |
+ "Security": "WPA-PSK" |
+ } |
+ }])", |
+ network_hex_ssid.c_str()))); |
+} |
+ |
+TEST_F(NetworkingPrivateApiTest, CreateAlreadyConfiguredDeviceNetwork) { |
+ EXPECT_EQ( |
+ "NetworkAlreadyConfigured", |
+ RunFunctionAndReturnError(new NetworkingPrivateCreateNetworkFunction(), |
+ base::StringPrintf(R"([false, { |
+ "Priority": 1, |
+ "Type": "WiFi", |
+ "WiFi": { |
+ "SSID": "%s" |
+ } |
+ }])", |
+ kManagedDeviceWifiSsid))); |
+} |
+ |
+TEST_F(NetworkingPrivateApiTest, |
+ CreateAlreadyConfiguredDeviceNetwork_ByHexSSID) { |
+ std::string network_hex_ssid = base::HexEncode( |
+ kManagedDeviceWifiSsid, sizeof(kManagedDeviceWifiSsid) - 1); |
+ EXPECT_EQ( |
+ "NetworkAlreadyConfigured", |
+ RunFunctionAndReturnError(new NetworkingPrivateCreateNetworkFunction(), |
+ base::StringPrintf(R"([false, { |
+ "Priority": 1, |
+ "Type": "WiFi", |
+ "WiFi": { |
+ "HexSSID": "%s", |
+ "Security": "WPA-PSK" |
+ } |
+ }])", |
+ network_hex_ssid.c_str()))); |
+} |
+ |
} // namespace extensions |