blob: 553f6519a62feeef8a875472fe04247098a7fee6 [file] [log] [blame]
Nick Gordon190e4dc2017-10-04 16:54:10 -05001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Davide Pesavento4a160042020-04-13 16:50:02 -04002/*
Davide Pesaventob4966422023-08-10 21:15:32 -04003 * Copyright (c) 2014-2023, Regents of the University of California.
Nick Gordon190e4dc2017-10-04 16:54:10 -05004 *
5 * This file is part of NDN repo-ng (Next generation of NDN repository).
6 * See AUTHORS.md for complete list of repo-ng authors and contributors.
7 *
8 * repo-ng is free software: you can redistribute it and/or modify it under the terms
9 * of the GNU General Public License as published by the Free Software Foundation,
10 * either version 3 of the License, or (at your option) any later version.
11 *
12 * repo-ng is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
13 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 * PURPOSE. See the GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along with
17 * repo-ng, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#include "handles/read-handle.hpp"
21#include "storage/sqlite-storage.hpp"
22#include "storage/repo-storage.hpp"
23
24#include "../repo-storage-fixture.hpp"
25
26#include <boost/test/unit_test.hpp>
27#include <ndn-cxx/util/dummy-client-face.hpp>
28
Davide Pesavento9bf1a1d2020-04-14 16:50:03 -040029#define CHECK_INTERESTS(NAME, COMPONENT, EXPECTED) \
30 do { \
31 bool didMatch = false; \
32 for (const auto& interest : face.sentInterests) { \
33 didMatch = didMatch || containsNameComponent(NAME, COMPONENT); \
34 } \
35 BOOST_CHECK_EQUAL(didMatch, EXPECTED); \
36 } while (false)
Nick Gordon190e4dc2017-10-04 16:54:10 -050037
Davide Pesavento11904062022-04-14 22:33:28 -040038namespace repo::tests {
Nick Gordon190e4dc2017-10-04 16:54:10 -050039
40BOOST_AUTO_TEST_SUITE(TestReadHandle)
41
42class Fixture : public RepoStorageFixture
43{
44public:
45 Fixture()
Davide Pesavento9bf1a1d2020-04-14 16:50:03 -040046 : face({true, true})
Davide Pesavento164ae3b2023-11-11 22:00:23 -050047 , scheduler(face.getIoContext())
Nick Gordon190e4dc2017-10-04 16:54:10 -050048 , subsetLength(1)
49 , dataPrefix("/ndn/test/prefix")
50 , identity("/ndn/test/identity")
weijia yuan82cf9142018-10-21 12:25:02 -070051 , readHandle(face, *handle, subsetLength)
Nick Gordon190e4dc2017-10-04 16:54:10 -050052 , numPrefixRegistrations(0)
53 , numPrefixUnregistrations(0)
54 {
55 readHandle.connectAutoListen();
56 }
57
Davide Pesavento9bf1a1d2020-04-14 16:50:03 -040058 static bool
Davide Pesavento11904062022-04-14 22:33:28 -040059 containsNameComponent(const Name& name, const Name::Component& component)
Nick Gordon190e4dc2017-10-04 16:54:10 -050060 {
Davide Pesavento9bf1a1d2020-04-14 16:50:03 -040061 for (const auto& c : name) {
62 if (c == component)
63 return true;
Nick Gordon190e4dc2017-10-04 16:54:10 -050064 }
Davide Pesavento9bf1a1d2020-04-14 16:50:03 -040065 return false;
Nick Gordon190e4dc2017-10-04 16:54:10 -050066 }
67
68public:
Davide Pesaventob4966422023-08-10 21:15:32 -040069 ndn::DummyClientFace face;
Nick Gordon190e4dc2017-10-04 16:54:10 -050070 ndn::KeyChain keyChain;
71 ndn::Scheduler scheduler;
72
73 size_t subsetLength;
74 ndn::Name dataPrefix;
75 ndn::Name identity;
76 ReadHandle readHandle;
77
78 size_t numPrefixRegistrations;
79 size_t numPrefixUnregistrations;
80};
81
82BOOST_FIXTURE_TEST_CASE(DataPrefixes, Fixture)
83{
84 const std::vector<uint8_t> content(100, 'x');
Davide Pesavento4a160042020-04-13 16:50:02 -040085 auto data1 = std::make_shared<Data>(Name{dataPrefix}.appendNumber(1));
86 auto data2 = std::make_shared<Data>(Name{dataPrefix}.appendNumber(2));
Nick Gordon190e4dc2017-10-04 16:54:10 -050087
Davide Pesavento9c0bd8d2022-03-14 16:48:12 -040088 data1->setContent(content);
89 data2->setContent(content);
Nick Gordon190e4dc2017-10-04 16:54:10 -050090
91 keyChain.createIdentity(identity);
92 keyChain.sign(*data1, ndn::security::SigningInfo(ndn::security::SigningInfo::SIGNER_TYPE_ID,
Davide Pesavento11904062022-04-14 22:33:28 -040093 identity));
Nick Gordon190e4dc2017-10-04 16:54:10 -050094 keyChain.sign(*data2, ndn::security::SigningInfo(ndn::security::SigningInfo::SIGNER_TYPE_ID,
Davide Pesavento11904062022-04-14 22:33:28 -040095 identity));
Nick Gordon190e4dc2017-10-04 16:54:10 -050096
Nick Gordon190e4dc2017-10-04 16:54:10 -050097 face.sentInterests.clear();
98 handle->insertData(*data1);
weijia yuan82cf9142018-10-21 12:25:02 -070099 face.processEvents(-1_ms);
Davide Pesavento11904062022-04-14 22:33:28 -0400100 CHECK_INTERESTS(interest.getName(), Name::Component{"register"}, true);
Nick Gordon190e4dc2017-10-04 16:54:10 -0500101
102 face.sentInterests.clear();
103 handle->deleteData(data1->getFullName());
weijia yuan82cf9142018-10-21 12:25:02 -0700104 face.processEvents(-1_ms);
Davide Pesavento11904062022-04-14 22:33:28 -0400105 CHECK_INTERESTS(interest.getName(), Name::Component{"unregister"}, true);
Nick Gordon190e4dc2017-10-04 16:54:10 -0500106
107 face.sentInterests.clear();
108 handle->insertData(*data1);
weijia yuan82cf9142018-10-21 12:25:02 -0700109 face.processEvents(-1_ms);
Davide Pesavento11904062022-04-14 22:33:28 -0400110 CHECK_INTERESTS(interest.getName(), Name::Component{"register"}, true);
Nick Gordon190e4dc2017-10-04 16:54:10 -0500111
112 face.sentInterests.clear();
113 handle->insertData(*data2);
weijia yuan82cf9142018-10-21 12:25:02 -0700114 face.processEvents(-1_ms);
Davide Pesavento11904062022-04-14 22:33:28 -0400115 CHECK_INTERESTS(interest.getName(), Name::Component{"register"}, false);
Nick Gordon190e4dc2017-10-04 16:54:10 -0500116
117 face.sentInterests.clear();
118 handle->deleteData(data1->getFullName());
weijia yuan82cf9142018-10-21 12:25:02 -0700119 face.processEvents(-1_ms);
Davide Pesavento11904062022-04-14 22:33:28 -0400120 CHECK_INTERESTS(interest.getName(), Name::Component{"unregister"}, false);
Nick Gordon190e4dc2017-10-04 16:54:10 -0500121
122 face.sentInterests.clear();
123 handle->deleteData(data2->getFullName());
weijia yuan82cf9142018-10-21 12:25:02 -0700124 face.processEvents(-1_ms);
Davide Pesavento11904062022-04-14 22:33:28 -0400125 CHECK_INTERESTS(interest.getName(), Name::Component{"unregister"}, true);
Nick Gordon190e4dc2017-10-04 16:54:10 -0500126}
127
128BOOST_AUTO_TEST_SUITE_END() // TestReadHandle
129
Davide Pesavento11904062022-04-14 22:33:28 -0400130} // namespace repo::tests