blob: 3c73f12e77384cd012e6830e78cb926318dbc4c6 [file] [log] [blame]
Zhiyi Zhang9829da92020-09-30 16:19:34 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/*
3 * Copyright (c) 2017-2019, Regents of the University of California.
4 *
5 * This file is part of ndncert, a certificate management system based on NDN.
6 *
7 * ndncert is free software: you can redistribute it and/or modify it under the terms
8 * of the GNU General Public License as published by the Free Software Foundation, either
9 * version 3 of the License, or (at your option) any later version.
10 *
11 * ndncert is distributed in the hope that it will be useful, but WITHOUT ANY
12 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13 * PARTICULAR PURPOSE. See the GNU General Public License for more details.
14 *
15 * You should have received copies of the GNU General Public License along with
16 * ndncert, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
17 *
18 * See AUTHORS.md for complete list of ndncert authors and contributors.
19 */
20
21#include "configuration.hpp"
22#include "protocol-detail/info.hpp"
23#include "test-common.hpp"
24
25namespace ndn {
26namespace ndncert {
27namespace tests {
28
29BOOST_FIXTURE_TEST_SUITE(TestConfig, IdentityManagementFixture)
30
31BOOST_AUTO_TEST_CASE(CAConfigFile)
32{
33 CaConfig config;
34 config.load("tests/unit-tests/config-files/config-ca-1");
35 BOOST_CHECK_EQUAL(config.m_caItem.m_caPrefix, "/ndn");
36 BOOST_CHECK_EQUAL(config.m_caItem.m_caInfo, "ndn testbed ca");
37 BOOST_CHECK_EQUAL(config.m_caItem.m_maxValidityPeriod, time::seconds(864000));
38 BOOST_CHECK_EQUAL(*config.m_caItem.m_maxSuffixLength, 3);
39 BOOST_CHECK_EQUAL(config.m_caItem.m_probeParameterKeys.size(), 1);
40 BOOST_CHECK_EQUAL(config.m_caItem.m_probeParameterKeys.front(), "full name");
41 BOOST_CHECK_EQUAL(config.m_caItem.m_supportedChallenges.size(), 1);
42 BOOST_CHECK_EQUAL(config.m_caItem.m_supportedChallenges.front(), "pin");
43
44 config.load("tests/unit-tests/config-files/config-ca-2");
45 BOOST_CHECK_EQUAL(config.m_caItem.m_caPrefix, "/ndn");
46 BOOST_CHECK_EQUAL(config.m_caItem.m_caInfo, "missing max validity period, max suffix length, and probe");
47 BOOST_CHECK_EQUAL(config.m_caItem.m_maxValidityPeriod, time::seconds(86400));
48 BOOST_CHECK(!config.m_caItem.m_maxSuffixLength);
49 BOOST_CHECK_EQUAL(config.m_caItem.m_probeParameterKeys.size(), 0);
Zhiyi Zhangb940aa12020-09-30 16:38:57 -070050 BOOST_CHECK_EQUAL(config.m_caItem.m_supportedChallenges.size(), 2);
Zhiyi Zhang9829da92020-09-30 16:19:34 -070051 BOOST_CHECK_EQUAL(config.m_caItem.m_supportedChallenges.front(), "pin");
52 BOOST_CHECK_EQUAL(config.m_caItem.m_supportedChallenges.back(), "email");
Zhiyi Zhangfde50112020-10-01 16:36:33 -070053
54 config.load("tests/unit-tests/config-files/config-ca-5");
55 BOOST_CHECK_EQUAL(config.m_redirection->size(), 1);
56 BOOST_CHECK_EQUAL(std::get<0>(config.m_redirection->at(0)), Name("/ndn/edu/ucla"));
57 BOOST_CHECK_EQUAL(std::get<1>(config.m_redirection->at(0))->getName(),
58 "/ndn/site1/KEY/%11%BC%22%F4c%15%FF%17/self/%FD%00%00%01Y%C8%14%D9%A5");
Zhiyi Zhang9829da92020-09-30 16:19:34 -070059}
60
61BOOST_AUTO_TEST_CASE(CAConfigFileWithErrors)
62{
63 CaConfig config;
64 // nonexistent file
65 BOOST_CHECK_THROW(config.load("tests/unit-tests/config-files/Nonexist"), std::runtime_error);
66 // missing challenge
67 BOOST_CHECK_THROW(config.load("tests/unit-tests/config-files/config-ca-3"), std::runtime_error);
68 // unsupported challenge
69 BOOST_CHECK_THROW(config.load("tests/unit-tests/config-files/config-ca-4"), std::runtime_error);
70}
71
72BOOST_AUTO_TEST_CASE(ClientConfigFile)
73{
74 ClientConfig config;
75 config.load("tests/unit-tests/config-files/config-client-1");
76 BOOST_CHECK_EQUAL(config.m_caItems.size(), 2);
77
78 auto& config1 = config.m_caItems.front();
Zhiyi Zhangb940aa12020-09-30 16:38:57 -070079 BOOST_CHECK_EQUAL(config1.m_caPrefix, "/ndn/edu/ucla");
Zhiyi Zhang9829da92020-09-30 16:19:34 -070080 BOOST_CHECK_EQUAL(config1.m_caInfo, "ndn testbed ca");
81 BOOST_CHECK_EQUAL(config1.m_maxValidityPeriod, time::seconds(864000));
82 BOOST_CHECK_EQUAL(*config1.m_maxSuffixLength, 3);
83 BOOST_CHECK_EQUAL(config1.m_probeParameterKeys.size(), 1);
84 BOOST_CHECK_EQUAL(config1.m_probeParameterKeys.front(), "email");
85 BOOST_CHECK_EQUAL(config1.m_cert->getName(),
86 "/ndn/site1/KEY/%11%BC%22%F4c%15%FF%17/self/%FD%00%00%01Y%C8%14%D9%A5");
87
Zhiyi Zhangb940aa12020-09-30 16:38:57 -070088 auto& config2 = config.m_caItems.back();
89 BOOST_CHECK_EQUAL(config2.m_caPrefix, "/ndn/edu/ucla/zhiyi");
90 BOOST_CHECK_EQUAL(config2.m_caInfo, "");
Zhiyi Zhang9829da92020-09-30 16:19:34 -070091 BOOST_CHECK_EQUAL(config2.m_maxValidityPeriod, time::seconds(86400));
92 BOOST_CHECK(!config2.m_maxSuffixLength);
93 BOOST_CHECK_EQUAL(config2.m_probeParameterKeys.size(), 0);
94 BOOST_CHECK_EQUAL(config2.m_cert->getName(),
95 "/ndn/site1/KEY/%11%BC%22%F4c%15%FF%17/self/%FD%00%00%01Y%C8%14%D9%A5");
96}
97
98BOOST_AUTO_TEST_CASE(ClientConfigFileWithErrors)
99{
100 ClientConfig config;
101 // nonexistent file
102 BOOST_CHECK_THROW(config.load("tests/unit-tests/config-files/Nonexist"), std::runtime_error);
103 // missing certificate
104 BOOST_CHECK_THROW(config.load("tests/unit-tests/config-files/config-client-2"), std::runtime_error);
105 // missing ca prefix
106 BOOST_CHECK_THROW(config.load("tests/unit-tests/config-files/config-client-3"), std::runtime_error);
107}
108
109BOOST_AUTO_TEST_CASE(ClientConfigFileAddAndRemoveCaItem)
110{
111 ClientConfig config;
112 config.load("tests/unit-tests/config-files/config-client-1");
113
114 CaConfigItem item;
115 item.m_caPrefix = Name("/test");
116 item.m_caInfo = "test";
117
118 config.m_caItems.push_back(item);
119 BOOST_CHECK_EQUAL(config.m_caItems.size(), 3);
120 auto lastItem = config.m_caItems.back();
121 BOOST_CHECK_EQUAL(lastItem.m_caPrefix, "/test");
122
123 config.removeCaItem(Name("/test"));
124 BOOST_CHECK_EQUAL(config.m_caItems.size(), 2);
125 lastItem = config.m_caItems.back();
126 BOOST_CHECK_EQUAL(lastItem.m_caPrefix, "/ndn/edu/ucla/zhiyi");
127}
128
129BOOST_AUTO_TEST_CASE(InfoEncodingDecoding)
130{
131 CaConfig config;
132 config.load("tests/unit-tests/config-files/config-ca-1");
133
134 const auto& identity = addIdentity("/test");
135 const auto& cert = identity.getDefaultKey().getDefaultCertificate();
136 auto encoded = INFO::encodeDataContent(config.m_caItem, cert);
Zhiyi Zhang3e8ca252020-09-30 17:18:38 -0700137 auto decoded = INFO::decodeDataContent(encoded);
Zhiyi Zhang9829da92020-09-30 16:19:34 -0700138 BOOST_CHECK_EQUAL(config.m_caItem.m_caPrefix, decoded.m_caPrefix);
139 BOOST_CHECK_EQUAL(config.m_caItem.m_caInfo, decoded.m_caInfo);
140 BOOST_CHECK_EQUAL(config.m_caItem.m_maxValidityPeriod, decoded.m_maxValidityPeriod);
141 BOOST_CHECK_EQUAL(*config.m_caItem.m_maxSuffixLength, *decoded.m_maxSuffixLength);
142 BOOST_CHECK_EQUAL(config.m_caItem.m_probeParameterKeys.size(), decoded.m_probeParameterKeys.size());
143 BOOST_CHECK_EQUAL(config.m_caItem.m_probeParameterKeys.front(), decoded.m_probeParameterKeys.front());
144 BOOST_CHECK_EQUAL(cert.wireEncode(), decoded.m_cert->wireEncode());
145}
146
147BOOST_AUTO_TEST_SUITE_END() // TestCaConfig
148
149} // namespace tests
150} // namespace ndncert
151} // namespace ndn