1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/network/network_ui_data.h"
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/values.h"
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/network/onc/onc_test_utils.h"
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace chromeos {
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(NetworkUIDataTest, ONCSource) {
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::DictionaryValue ui_data_dict;
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ui_data_dict.SetString(NetworkUIData::kKeyONCSource, "user_import");
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  {
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    NetworkUIData ui_data(ui_data_dict);
194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    EXPECT_EQ(::onc::ONC_SOURCE_USER_IMPORT, ui_data.onc_source());
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    EXPECT_FALSE(ui_data.is_managed());
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ui_data_dict.SetString(NetworkUIData::kKeyONCSource, "device_policy");
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  {
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    NetworkUIData ui_data(ui_data_dict);
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    EXPECT_EQ(::onc::ONC_SOURCE_DEVICE_POLICY, ui_data.onc_source());
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    EXPECT_TRUE(ui_data.is_managed());
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ui_data_dict.SetString(NetworkUIData::kKeyONCSource, "user_policy");
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  {
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    NetworkUIData ui_data(ui_data_dict);
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    EXPECT_EQ(::onc::ONC_SOURCE_USER_POLICY, ui_data.onc_source());
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    EXPECT_TRUE(ui_data.is_managed());
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(NetworkUIDataTest, CertificateType) {
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  {
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    base::DictionaryValue ui_data_dict;
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ui_data_dict.SetString(NetworkUIData::kKeyCertificateType, "none");
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    NetworkUIData ui_data(ui_data_dict);
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    EXPECT_EQ(CLIENT_CERT_TYPE_NONE, ui_data.certificate_type());
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  {
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    base::DictionaryValue ui_data_dict;
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ui_data_dict.SetString(NetworkUIData::kKeyCertificateType, "ref");
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    NetworkUIData ui_data(ui_data_dict);
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    EXPECT_EQ(CLIENT_CERT_TYPE_REF, ui_data.certificate_type());
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  {
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // for type pattern we need to have some kind of pattern
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    std::string organization("Little If Any, Inc.");
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    base::DictionaryValue ui_data_dict;
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    base::DictionaryValue* pattern_dict = new base::DictionaryValue;
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    base::DictionaryValue* issuer_dict = new base::DictionaryValue;
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    issuer_dict->SetString("Organization", organization);
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    pattern_dict->Set("Issuer", issuer_dict);
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ui_data_dict.Set("certificate_pattern", pattern_dict);
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ui_data_dict.SetString(NetworkUIData::kKeyCertificateType, "pattern");
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    NetworkUIData ui_data(ui_data_dict);
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    EXPECT_EQ(CLIENT_CERT_TYPE_PATTERN, ui_data.certificate_type());
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(NetworkUIDataTest, CertificatePattern) {
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string organization("Little If Any, Inc.");
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::DictionaryValue ui_data_dict;
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::DictionaryValue* pattern_dict = new base::DictionaryValue;
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::DictionaryValue* issuer_dict = new base::DictionaryValue;
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  issuer_dict->SetString("Organization", organization);
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  pattern_dict->Set("Issuer", issuer_dict);
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ui_data_dict.SetString("certificate_type", "pattern");
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ui_data_dict.Set("certificate_pattern", pattern_dict);
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  NetworkUIData ui_data(ui_data_dict);
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FALSE(ui_data.certificate_pattern().Empty());
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(organization,
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            ui_data.certificate_pattern().issuer().organization());
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class CreateUIDataTest
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    : public ::testing::TestWithParam<std::pair<std::string, std::string> > {
82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_P(CreateUIDataTest, CreateUIDataFromONC) {
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  namespace test_utils = onc::test_utils;
86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<base::DictionaryValue> onc_network =
87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      test_utils::ReadTestDictionary(GetParam().first);
88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<base::DictionaryValue> expected_uidata =
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      test_utils::ReadTestDictionary(GetParam().second);
91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<NetworkUIData> actual_uidata =
93a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)      NetworkUIData::CreateFromONC(
944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)          ::onc::ONC_SOURCE_USER_POLICY, *onc_network);
95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(actual_uidata != NULL);
96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::DictionaryValue actual_uidata_dict;
98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  actual_uidata->FillDictionary(&actual_uidata_dict);
99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(test_utils::Equals(&actual_uidata_dict, expected_uidata.get()));
100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)INSTANTIATE_TEST_CASE_P(
103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    CreateUIDataTest,
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    CreateUIDataTest,
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ::testing::Values(
106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch         std::make_pair("wifi_clientcert_with_cert_pems.onc",
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        "uidata_for_wifi_clientcert.json"),
108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)         std::make_pair("valid_wifi_clientref.onc",
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        "uidata_for_wifi_clientref.json"),
110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)         std::make_pair("valid_wifi_psk.onc",
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        "uidata_for_wifi_psk.json"),
112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch         std::make_pair("openvpn_clientcert_with_cert_pems.onc",
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        "uidata_for_openvpn_clientcert.json"),
114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch         std::make_pair("l2tpipsec_clientcert_with_cert_pems.onc",
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        "uidata_for_l2tpipsec_clientcert.json")));
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace chromeos
118