onc_translator_unittest.cc revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chromeos/network/onc/onc_translator.h"
6
7#include "base/memory/scoped_ptr.h"
8#include "base/values.h"
9#include "chromeos/network/onc/onc_constants.h"
10#include "chromeos/network/onc/onc_signature.h"
11#include "chromeos/network/onc/onc_test_utils.h"
12#include "testing/gtest/include/gtest/gtest.h"
13
14namespace chromeos {
15namespace onc {
16
17// First parameter: Filename of source ONC.
18// Second parameter: Filename of expected translated Shill json.
19class ONCTranslatorOncToShillTest
20    : public ::testing::TestWithParam<std::pair<std::string, std::string> > {
21};
22
23// Test the translation from ONC to Shill json.
24TEST_P(ONCTranslatorOncToShillTest, Translate) {
25  std::string source_onc_filename = GetParam().first;
26  scoped_ptr<const base::DictionaryValue> onc_network(
27      test_utils::ReadTestDictionary(source_onc_filename));
28  std::string result_shill_filename = GetParam().second;
29  scoped_ptr<const base::DictionaryValue> expected_shill_network(
30      test_utils::ReadTestDictionary(result_shill_filename));
31
32  scoped_ptr<base::DictionaryValue> translation(TranslateONCObjectToShill(
33      &kNetworkConfigurationSignature, *onc_network));
34
35  EXPECT_TRUE(test_utils::Equals(expected_shill_network.get(),
36                                 translation.get()));
37}
38
39// Test different network types, such that each ONC object type is tested at
40// least once.
41INSTANTIATE_TEST_CASE_P(
42    ONCTranslatorOncToShillTest,
43    ONCTranslatorOncToShillTest,
44    ::testing::Values(
45        std::make_pair("managed_ethernet.onc", "shill_ethernet.json"),
46        std::make_pair("valid_wifi_psk.onc", "shill_wifi_psk.json"),
47        std::make_pair("wifi_clientcert_with_cert_pems.onc",
48                       "shill_wifi_clientcert.json"),
49        std::make_pair("valid_wifi_clientref.onc",
50                       "shill_wifi_clientref.json"),
51        std::make_pair("valid_l2tpipsec.onc", "shill_l2tpipsec.json"),
52        std::make_pair("l2tpipsec_clientcert_with_cert_pems.onc",
53                       "shill_l2tpipsec_clientcert.json"),
54        std::make_pair("valid_openvpn_with_cert_pems.onc",
55                       "shill_openvpn.json"),
56        std::make_pair("openvpn_clientcert_with_cert_pems.onc",
57                       "shill_openvpn_clientcert.json")));
58
59// First parameter: Filename of source Shill json.
60// Second parameter: Filename of expected translated ONC network part.
61//
62// Note: This translation direction doesn't have to reconstruct all of the ONC
63// fields, as Chrome doesn't need all of a Service's properties.
64class ONCTranslatorShillToOncTest
65    : public ::testing::TestWithParam<std::pair<std::string, std::string> > {
66};
67
68TEST_P(ONCTranslatorShillToOncTest, Translate) {
69  std::string source_shill_filename = GetParam().first;
70  scoped_ptr<const base::DictionaryValue> shill_network(
71      test_utils::ReadTestDictionary(source_shill_filename));
72
73  std::string result_onc_filename = GetParam().second;
74  scoped_ptr<base::DictionaryValue> expected_onc_network(
75      test_utils::ReadTestDictionary(result_onc_filename));
76
77  scoped_ptr<base::DictionaryValue> translation(TranslateShillServiceToONCPart(
78      *shill_network, &kNetworkWithStateSignature));
79
80  EXPECT_TRUE(test_utils::Equals(expected_onc_network.get(),
81                                 translation.get()));
82}
83
84INSTANTIATE_TEST_CASE_P(
85    ONCTranslatorShillToOncTest,
86    ONCTranslatorShillToOncTest,
87    ::testing::Values(
88         std::make_pair("shill_l2tpipsec.json",
89                        "translation_of_shill_l2tpipsec.onc"),
90         std::make_pair("shill_openvpn.json",
91                        "translation_of_shill_openvpn.onc"),
92         std::make_pair("shill_openvpn_with_errors.json",
93                        "translation_of_shill_openvpn_with_errors.onc"),
94         std::make_pair("shill_wifi_with_state.json",
95                        "translation_of_shill_wifi_with_state.onc")));
96
97}  // namespace onc
98}  // namespace chromeos
99