| // Copyright 2015 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "components/sync_wifi/wifi_credential.h" | 
 |  | 
 | #include <memory> | 
 |  | 
 | #include "base/logging.h" | 
 | #include "base/values.h" | 
 | #include "components/onc/onc_constants.h" | 
 | #include "testing/gtest/include/gtest/gtest.h" | 
 |  | 
 | namespace sync_wifi { | 
 |  | 
 | namespace { | 
 |  | 
 | const char kSsid[] = "fake-ssid"; | 
 | const char kSsidNonUtf8[] = "\xc0"; | 
 | const char kPassphraseWep[] = "abcde"; | 
 | const char kPassphraseWepNonUtf8[] = "\xc0\xc0\xc0\xc0\xc0"; | 
 | const char kPassphrasePsk[] = "fake-psk-passphrase"; | 
 | const char kPassphrase8021X[] = "fake-8021X-passphrase"; | 
 |  | 
 | WifiCredential MakeCredential(const std::string& ssid, | 
 |                               WifiSecurityClass security_class, | 
 |                               const std::string& passphrase) { | 
 |   std::unique_ptr<WifiCredential> credential = WifiCredential::Create( | 
 |       WifiCredential::MakeSsidBytesForTest(ssid), security_class, passphrase); | 
 |   CHECK(credential); | 
 |   return *credential; | 
 | } | 
 |  | 
 | bool TypeIsWifi(const base::DictionaryValue& onc_properties) { | 
 |   std::string network_type; | 
 |   EXPECT_TRUE( | 
 |       onc_properties.GetString(onc::toplevel_config::kType, &network_type)); | 
 |   return network_type == onc::network_type::kWiFi; | 
 | } | 
 |  | 
 | std::string GetSsid(const base::DictionaryValue& onc_properties) { | 
 |   std::string ssid; | 
 |   EXPECT_TRUE(onc_properties.GetString( | 
 |       onc::network_config::WifiProperty(onc::wifi::kSSID), &ssid)); | 
 |   return ssid; | 
 | } | 
 |  | 
 | std::string GetOncSecurity(const base::DictionaryValue& onc_properties) { | 
 |   std::string onc_security; | 
 |   EXPECT_TRUE(onc_properties.GetString( | 
 |       onc::network_config::WifiProperty(onc::wifi::kSecurity), &onc_security)); | 
 |   return onc_security; | 
 | } | 
 |  | 
 | std::string GetPassphrase(const base::DictionaryValue& onc_properties) { | 
 |   std::string passphrase; | 
 |   EXPECT_TRUE(onc_properties.GetString( | 
 |       onc::network_config::WifiProperty(onc::wifi::kPassphrase), &passphrase)); | 
 |   return passphrase; | 
 | } | 
 |  | 
 | }  // namespace | 
 |  | 
 | TEST(WifiCredentialTest, CreateWithSecurityClassInvalid) { | 
 |   std::unique_ptr<WifiCredential> credential = WifiCredential::Create( | 
 |       WifiCredential::MakeSsidBytesForTest(kSsid), SECURITY_CLASS_INVALID, ""); | 
 |   EXPECT_FALSE(credential); | 
 | } | 
 |  | 
 | TEST(WifiCredentialTest, CreateWithPassphraseNonUtf8) { | 
 |   std::unique_ptr<WifiCredential> credential = | 
 |       WifiCredential::Create(WifiCredential::MakeSsidBytesForTest(kSsid), | 
 |                              SECURITY_CLASS_WEP, kPassphraseWepNonUtf8); | 
 |   EXPECT_FALSE(credential); | 
 | } | 
 |  | 
 | TEST(WifiCredentialTest, ToOncPropertiesSecurityNone) { | 
 |   const WifiCredential credential( | 
 |       MakeCredential(kSsid, SECURITY_CLASS_NONE, "")); | 
 |   std::unique_ptr<base::DictionaryValue> onc_properties = | 
 |       credential.ToOncProperties(); | 
 |   ASSERT_TRUE(onc_properties); | 
 |   EXPECT_TRUE(TypeIsWifi(*onc_properties)); | 
 |   EXPECT_EQ(kSsid, GetSsid(*onc_properties)); | 
 |   EXPECT_EQ(onc::wifi::kSecurityNone, GetOncSecurity(*onc_properties)); | 
 | } | 
 |  | 
 | TEST(WifiCredentialTest, ToOncPropertiesSecurityWep) { | 
 |   const WifiCredential credential( | 
 |       MakeCredential(kSsid, SECURITY_CLASS_WEP, kPassphraseWep)); | 
 |   std::unique_ptr<base::DictionaryValue> onc_properties = | 
 |       credential.ToOncProperties(); | 
 |   ASSERT_TRUE(onc_properties); | 
 |   EXPECT_TRUE(TypeIsWifi(*onc_properties)); | 
 |   EXPECT_EQ(kSsid, GetSsid(*onc_properties)); | 
 |   EXPECT_EQ(onc::wifi::kWEP_PSK, GetOncSecurity(*onc_properties)); | 
 |   EXPECT_EQ(kPassphraseWep, GetPassphrase(*onc_properties)); | 
 | } | 
 |  | 
 | TEST(WifiCredentialTest, ToOncPropertiesSecurityPsk) { | 
 |   const WifiCredential credential( | 
 |       MakeCredential(kSsid, SECURITY_CLASS_PSK, kPassphrasePsk)); | 
 |   std::unique_ptr<base::DictionaryValue> onc_properties = | 
 |       credential.ToOncProperties(); | 
 |   ASSERT_TRUE(onc_properties); | 
 |   EXPECT_TRUE(TypeIsWifi(*onc_properties)); | 
 |   EXPECT_EQ(kSsid, GetSsid(*onc_properties)); | 
 |   EXPECT_EQ(onc::wifi::kWPA_PSK, GetOncSecurity(*onc_properties)); | 
 |   EXPECT_EQ(kPassphrasePsk, GetPassphrase(*onc_properties)); | 
 | } | 
 |  | 
 | TEST(WifiCredentialTest, ToOncPropertiesSecurity8021X) { | 
 |   const WifiCredential credential( | 
 |       MakeCredential(kSsid, SECURITY_CLASS_802_1X, kPassphrase8021X)); | 
 |   std::unique_ptr<base::DictionaryValue> onc_properties = | 
 |       credential.ToOncProperties(); | 
 |   ASSERT_TRUE(onc_properties); | 
 |   EXPECT_TRUE(TypeIsWifi(*onc_properties)); | 
 |   EXPECT_EQ(kSsid, GetSsid(*onc_properties)); | 
 |   EXPECT_EQ(onc::wifi::kWPA_EAP, GetOncSecurity(*onc_properties)); | 
 |   EXPECT_EQ(kPassphrase8021X, GetPassphrase(*onc_properties)); | 
 | } | 
 |  | 
 | // TODO(quiche): Update this test, once ONC suports non-UTF-8 SSIDs. | 
 | // crbug.com/432546. | 
 | TEST(WifiCredentialTest, ToOncPropertiesSsidNonUtf8) { | 
 |   const WifiCredential credential( | 
 |       MakeCredential(kSsidNonUtf8, SECURITY_CLASS_NONE, "")); | 
 |   std::unique_ptr<base::DictionaryValue> onc_properties = | 
 |       credential.ToOncProperties(); | 
 |   EXPECT_FALSE(onc_properties); | 
 | } | 
 |  | 
 | }  // namespace sync_wifi |