blob: eb4cd45283a56c36d6eac75d21d6ddb5f09e511a [file] [log] [blame]
Zhiyi Zhang23564c82017-03-01 10:22:22 -08001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Davide Pesavento914d05f2019-07-13 16:20:19 -04002/*
swa770de007bc2020-03-24 21:26:21 -07003 * Copyright (c) 2017-2020, Regents of the University of California.
Zhiyi Zhang23564c82017-03-01 10:22:22 -08004 *
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
tylerliu36d97f52020-09-30 22:32:54 -070021#include <protocol-detail/error.hpp>
Zhiyi Zhang23564c82017-03-01 10:22:22 -080022#include "client-module.hpp"
23#include "challenge-module.hpp"
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -070024#include "ca-module.hpp"
Zhiyi Zhang5d80e1e2020-09-25 11:34:54 -070025#include "test-common.hpp"
Zhiyi Zhang23564c82017-03-01 10:22:22 -080026
27namespace ndn {
28namespace ndncert {
29namespace tests {
30
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -070031BOOST_FIXTURE_TEST_SUITE(TestClientModule, IdentityManagementTimeFixture)
Zhiyi Zhang23564c82017-03-01 10:22:22 -080032
33BOOST_AUTO_TEST_CASE(ClientModuleInitialize)
34{
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -070035 ClientModule client(m_keyChain);
Zhiyi Zhang9829da92020-09-30 16:19:34 -070036 client.getClientConf().load("tests/unit-tests/config-files/config-client-1");
Zhiyi Zhang23564c82017-03-01 10:22:22 -080037 BOOST_CHECK_EQUAL(client.getClientConf().m_caItems.size(), 2);
38}
39
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -070040BOOST_AUTO_TEST_CASE(Probe)
Zhiyi Zhang23564c82017-03-01 10:22:22 -080041{
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -070042 ClientModule client(m_keyChain);
Zhiyi Zhang9829da92020-09-30 16:19:34 -070043 client.getClientConf().load("tests/unit-tests/config-files/config-client-1");
Zhiyi Zhang23564c82017-03-01 10:22:22 -080044
Zhiyi Zhang10130782018-02-01 18:28:49 -080045 auto identity = addIdentity(Name("/site"));
Zhiyi Zhang23564c82017-03-01 10:22:22 -080046 auto key = identity.getDefaultKey();
47 auto cert = key.getDefaultCertificate();
48
Zhiyi Zhang9829da92020-09-30 16:19:34 -070049 CaConfigItem item;
50 item.m_probeParameterKeys.push_back("email");
51 item.m_probeParameterKeys.push_back("uid");
52 item.m_probeParameterKeys.push_back("name");
Suyong Won256c9062020-05-11 02:45:56 -070053 item.m_caPrefix = Name("/site");
Zhiyi Zhang9829da92020-09-30 16:19:34 -070054 item.m_cert = std::make_shared<security::v2::Certificate>(cert);
Zhiyi Zhang23564c82017-03-01 10:22:22 -080055 client.getClientConf().m_caItems.push_back(item);
56
Zhiyi Zhang9829da92020-09-30 16:19:34 -070057 std::vector<std::tuple<std::string, std::string>> probeParams;
58 probeParams.push_back(std::make_tuple("email", "zhiyi@cs.ucla.edu"));
59 probeParams.push_back(std::make_tuple("uid", "987654321"));
60 probeParams.push_back(std::make_tuple("name", "Zhiyi Zhang"));
61 auto firstInterest = client.generateProbeInterest(item, std::move(probeParams));
Davide Pesavento914d05f2019-07-13 16:20:19 -040062 BOOST_CHECK(firstInterest->getName().at(-1).isParametersSha256Digest());
63 // ignore the last name component (ParametersSha256Digest)
swa770de007bc2020-03-24 21:26:21 -070064 BOOST_CHECK_EQUAL(firstInterest->getName().getPrefix(-1), "/site/CA/PROBE");
Suyong Won7968f7a2020-05-12 01:01:25 -070065 BOOST_CHECK_EQUAL(readString(firstInterest->getApplicationParameters().get(tlv_parameter_value)),
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -070066 "zhiyi@cs.ucla.edu");
Zhiyi Zhang23564c82017-03-01 10:22:22 -080067}
68
tylerliu36d97f52020-09-30 22:32:54 -070069BOOST_AUTO_TEST_CASE(ErrorHandling)
70{
71 auto identity = addIdentity(Name("/site"));
72 auto key = identity.getDefaultKey();
73 auto cert = key.getDefaultCertificate();
74
75 ClientModule client(m_keyChain);
76 CaConfigItem item;
77 item.m_caPrefix = Name("/site");
78 item.m_cert = std::make_shared<security::v2::Certificate>(cert);
79 client.getClientConf().m_caItems.push_back(item);
80
81 client.generateProbeInterest(item,std::vector<std::tuple<std::string, std::string>>());
82
83 Data errorPacket;
84 errorPacket.setName(Name("/site/pretend/this/is/error/packet"));
85 errorPacket.setFreshnessPeriod(time::seconds(100));
86 errorPacket.setContent(ErrorTLV::encodeDataContent(ErrorCode::NO_ERROR, "This is a test."));
87 m_keyChain.sign(errorPacket, signingByIdentity(identity));
88
89 BOOST_CHECK_THROW(client.onProbeResponse(errorPacket), std::exception);
90 BOOST_CHECK_THROW(client.onNewRenewRevokeResponse(errorPacket), std::exception);
91 BOOST_CHECK_THROW(client.onChallengeResponse(errorPacket), std::exception);
92}
93
Zhiyi Zhangef6b36a2020-09-22 21:20:59 -070094// BOOST_AUTO_TEST_CASE(GenProbeRequestJson)
95// {
96// ClientModule client(m_keyChain);
Zhiyi Zhang9829da92020-09-30 16:19:34 -070097// client.getClientConf().load("tests/unit-tests/config-files/config-client-1");
Yufeng Zhang424d0362019-06-12 16:48:27 -070098
Zhiyi Zhangef6b36a2020-09-22 21:20:59 -070099// auto identity = addIdentity(Name("/site"));
100// auto key = identity.getDefaultKey();
101// auto cert = key.getDefaultCertificate();
Yufeng Zhang424d0362019-06-12 16:48:27 -0700102
Zhiyi Zhang9829da92020-09-30 16:19:34 -0700103// CaConfigItem item;
Zhiyi Zhangef6b36a2020-09-22 21:20:59 -0700104// item.m_probe = "email:uid:name";
105// item.m_caPrefix = Name("/site");
Zhiyi Zhang9829da92020-09-30 16:19:34 -0700106// item.m_cert = std::make_shared<security::v2::Certificate>(cert);
Zhiyi Zhangef6b36a2020-09-22 21:20:59 -0700107// client.getClientConf().m_caItems.push_back(item);
Yufeng Zhang424d0362019-06-12 16:48:27 -0700108
Zhiyi Zhangef6b36a2020-09-22 21:20:59 -0700109// auto interestPacket = client.genProbeRequestJson(item, "yufeng@ucla.edu:123456789:Yufeng Zhang");
110// BOOST_CHECK_EQUAL(interestPacket.get("email", ""), "yufeng@ucla.edu");
111// BOOST_CHECK_EQUAL(interestPacket.get("uid", ""), "123456789");
112// BOOST_CHECK_EQUAL(interestPacket.get("name", ""), "Yufeng Zhang");
113// }
Yufeng Zhang424d0362019-06-12 16:48:27 -0700114
Zhiyi Zhang23564c82017-03-01 10:22:22 -0800115BOOST_AUTO_TEST_SUITE_END() // TestClientModule
116
117} // namespace tests
118} // namespace ndncert
119} // namespace ndn