// Copyright (c) 2012 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 "chrome/browser/chromeos/cros/network_ui_data.h" #include "testing/gtest/include/gtest/gtest.h" namespace chromeos { class NetworkUIDataTest : public testing::Test { protected: NetworkUIDataTest() {} virtual ~NetworkUIDataTest() {} void CheckProperty(const NetworkPropertyUIData& property, const base::Value* expected_default_value, bool expected_managed, bool expected_recommended, bool expected_editable) { if (expected_default_value) { EXPECT_TRUE(base::Value::Equals(expected_default_value, property.default_value())); } else { EXPECT_FALSE(property.default_value()); } EXPECT_EQ(expected_managed, property.managed()); EXPECT_EQ(expected_recommended, property.recommended()); EXPECT_EQ(expected_editable, property.editable()); } }; TEST_F(NetworkUIDataTest, ONCSource) { base::DictionaryValue ui_data_dict; ui_data_dict.SetString(NetworkUIData::kKeyONCSource, "user_import"); { NetworkUIData ui_data(ui_data_dict); EXPECT_EQ(NetworkUIData::ONC_SOURCE_USER_IMPORT, ui_data.onc_source()); EXPECT_FALSE(ui_data.is_managed()); } ui_data_dict.SetString(NetworkUIData::kKeyONCSource, "device_policy"); { NetworkUIData ui_data(ui_data_dict); EXPECT_EQ(NetworkUIData::ONC_SOURCE_DEVICE_POLICY, ui_data.onc_source()); EXPECT_TRUE(ui_data.is_managed()); } ui_data_dict.SetString(NetworkUIData::kKeyONCSource, "user_policy"); { NetworkUIData ui_data(ui_data_dict); EXPECT_EQ(NetworkUIData::ONC_SOURCE_USER_POLICY, ui_data.onc_source()); EXPECT_TRUE(ui_data.is_managed()); } } TEST_F(NetworkUIDataTest, CertificateType) { { base::DictionaryValue ui_data_dict; ui_data_dict.SetString(NetworkUIData::kKeyCertificateType, "none"); NetworkUIData ui_data(ui_data_dict); EXPECT_EQ(CLIENT_CERT_TYPE_NONE, ui_data.certificate_type()); } { base::DictionaryValue ui_data_dict; ui_data_dict.SetString(NetworkUIData::kKeyCertificateType, "ref"); NetworkUIData ui_data(ui_data_dict); EXPECT_EQ(CLIENT_CERT_TYPE_REF, ui_data.certificate_type()); } { // for type pattern we need to have some kind of pattern std::string organization("Little If Any, Inc."); base::DictionaryValue ui_data_dict; base::DictionaryValue* pattern_dict = new base::DictionaryValue; base::DictionaryValue* issuer_dict = new base::DictionaryValue; issuer_dict->SetString("Organization", organization); pattern_dict->Set("Issuer", issuer_dict); ui_data_dict.Set("certificate_pattern", pattern_dict); ui_data_dict.SetString(NetworkUIData::kKeyCertificateType, "pattern"); NetworkUIData ui_data(ui_data_dict); EXPECT_EQ(CLIENT_CERT_TYPE_PATTERN, ui_data.certificate_type()); } } TEST_F(NetworkUIDataTest, CertificatePattern) { std::string organization("Little If Any, Inc."); base::DictionaryValue ui_data_dict; base::DictionaryValue* pattern_dict = new base::DictionaryValue; base::DictionaryValue* issuer_dict = new base::DictionaryValue; issuer_dict->SetString("Organization", organization); pattern_dict->Set("Issuer", issuer_dict); ui_data_dict.Set("certificate_pattern", pattern_dict); NetworkUIData ui_data(ui_data_dict); EXPECT_FALSE(ui_data.certificate_pattern().Empty()); EXPECT_EQ(organization, ui_data.certificate_pattern().issuer().organization()); } TEST_F(NetworkUIDataTest, PropertyInit) { NetworkPropertyUIData empty_prop; CheckProperty(empty_prop, NULL, false, false, true); NetworkUIData empty_data; NetworkPropertyUIData null_prop(empty_data); CheckProperty(null_prop, NULL, false, false, true); base::DictionaryValue empty_dict; NetworkUIData empty_data_2(empty_dict); NetworkPropertyUIData empty_dict_prop(empty_data_2); CheckProperty(empty_dict_prop, NULL, false, false, true); } TEST_F(NetworkUIDataTest, ParseOncProperty) { base::DictionaryValue ui_data_dict; NetworkUIData ui_data; base::DictionaryValue onc; base::StringValue val_a("a"); base::StringValue val_b("b"); base::StringValue val_a_a("a_a"); base::StringValue val_a_b("a_b"); onc.Set("a", val_a.DeepCopy()); onc.Set("b", val_b.DeepCopy()); onc.Set("a.a", val_a_a.DeepCopy()); onc.Set("a.b", val_a_b.DeepCopy()); base::ListValue recommended; recommended.Append(base::Value::CreateStringValue("b")); recommended.Append(base::Value::CreateStringValue("c")); recommended.Append(base::Value::CreateStringValue("a.a")); onc.Set("Recommended", recommended.DeepCopy()); onc.Set("a.Recommended", recommended.DeepCopy()); NetworkPropertyUIData prop; ui_data.set_onc_source(NetworkUIData::ONC_SOURCE_USER_IMPORT); ui_data.FillDictionary(&ui_data_dict); NetworkUIData empty_data; prop.ParseOncProperty(empty_data, &onc, "a"); CheckProperty(prop, NULL, false, false, true); prop.ParseOncProperty(ui_data, &onc, "a"); CheckProperty(prop, NULL, false, false, true); prop.ParseOncProperty(ui_data, &onc, "a.b"); CheckProperty(prop, NULL, false, false, true); prop.ParseOncProperty(ui_data, &onc, "c"); CheckProperty(prop, NULL, false, false, true); ui_data.set_onc_source(NetworkUIData::ONC_SOURCE_USER_POLICY); ui_data.FillDictionary(&ui_data_dict); prop.ParseOncProperty(ui_data, &onc, "a"); CheckProperty(prop, NULL, true, false, false); prop.ParseOncProperty(ui_data, &onc, "b"); CheckProperty(prop, &val_b, false, true, true); prop.ParseOncProperty(ui_data, &onc, "c"); CheckProperty(prop, NULL, false, false, true); prop.ParseOncProperty(ui_data, &onc, "d"); CheckProperty(prop, NULL, true, false, false); prop.ParseOncProperty(ui_data, &onc, "a.a"); CheckProperty(prop, NULL, true, false, false); prop.ParseOncProperty(ui_data, &onc, "a.b"); CheckProperty(prop, &val_a_b, false, true, true); prop.ParseOncProperty(ui_data, &onc, "a.c"); CheckProperty(prop, NULL, false, false, true); prop.ParseOncProperty(ui_data, &onc, "a.d"); CheckProperty(prop, NULL, true, false, false); prop.ParseOncProperty(ui_data, NULL, "a.e"); CheckProperty(prop, NULL, true, false, false); } } // namespace chromeos