blob: eb91a378945da30fa15cd1622de6dc0e5e3c68e3 [file] [log] [blame]
// 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