blob: b8e51b8652c83adb9c6a20889498a717db726926 [file] [log] [blame]
spirosmastorakis0df15ba2015-11-14 08:46:24 -08001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
3 * Copyright (c) 2011-2015 Regents of the University of California.
4 *
5 * This file is part of ndnSIM. See AUTHORS for complete list of ndnSIM authors and
6 * contributors.
7 *
8 * ndnSIM 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 * ndnSIM 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 * ndnSIM, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
18 **/
19
20#include "helper/ndn-scenario-helper.hpp"
21#include "helper/ndn-app-helper.hpp"
22
23#include <ndn-cxx/face.hpp>
24
25#include "../tests-common.hpp"
26
27namespace ns3 {
28namespace ndn {
29
30BOOST_FIXTURE_TEST_SUITE(ModelNdnL3Protocol, ScenarioHelperWithCleanupFixture)
31
32class TesterApp
33{
34public:
35 TesterApp(const std::function<void(::ndn::Face& face)>& func)
36 {
37 func(m_face);
38 }
39
40protected:
41 ::ndn::Face m_face;
42};
43
44class ManagerCheckFixture : public ScenarioHelperWithCleanupFixture
45{
46public:
47 void
48 setupAndRun()
49 {
50 createTopology({
51 {"1"},
52 });
53
54 requestedDatasets = {
55 "/localhost/nfd/rib/list",
56 "/localhost/nfd/faces/list",
57 "/localhost/nfd/strategy-choice/list",
Alexander Afanasyeva91aab42016-09-08 15:47:38 -070058 "/localhost/nfd/status/general"
spirosmastorakis0df15ba2015-11-14 08:46:24 -080059 };
60
61 FactoryCallbackApp::Install(getNode("1"), [this] () -> shared_ptr<void> {
62 return make_shared<TesterApp>([this] (::ndn::Face& face) {
63 for (const Name& dataset : requestedDatasets) {
Spyridon Mastorakisf6d32852017-09-27 20:28:52 -070064 Interest i(dataset);
65 face.expressInterest(i, [&] (const Interest& i, const Data& data) {
spirosmastorakis0df15ba2015-11-14 08:46:24 -080066 BOOST_TEST_MESSAGE(data.getName());
67 receivedDatasets.insert(data.getName().getPrefix(-2));
68 },
Spyridon Mastorakisf6d32852017-09-27 20:28:52 -070069 std::bind([]{}),
spirosmastorakis0df15ba2015-11-14 08:46:24 -080070 std::bind([]{}));
71 }
72 });
73 })
74 .Start(Seconds(0.01));
75
76 Simulator::Stop(Seconds(1.0));
77 Simulator::Run();
78 }
79
80public:
81 std::set<Name> requestedDatasets;
82 std::set<Name> receivedDatasets;
83};
84
85BOOST_FIXTURE_TEST_SUITE(ManagerCheck, ManagerCheckFixture)
86
87BOOST_AUTO_TEST_CASE(AllEnabled)
88{
89 setupAndRun();
90
91 BOOST_CHECK_EQUAL(requestedDatasets.size(), receivedDatasets.size());
92 BOOST_CHECK_EQUAL_COLLECTIONS(requestedDatasets.begin(), requestedDatasets.end(),
93 receivedDatasets.begin(), receivedDatasets.end());
94}
95
96BOOST_AUTO_TEST_CASE(DisabledRibManager)
97{
98 // Disable RIB manager
99 disableRibManager();
100
101 setupAndRun();
102
103 BOOST_CHECK_EQUAL(requestedDatasets.size(), receivedDatasets.size() + 1);
104
105 requestedDatasets.erase("/localhost/nfd/rib/list");
106 BOOST_CHECK_EQUAL_COLLECTIONS(requestedDatasets.begin(), requestedDatasets.end(),
107 receivedDatasets.begin(), receivedDatasets.end());
108}
109
Alexander Afanasyeva91aab42016-09-08 15:47:38 -0700110// BOOST_AUTO_TEST_CASE(DisabledFaceManager)
111// {
112// // Disable Face manager
113// disableFaceManager();
spirosmastorakis0df15ba2015-11-14 08:46:24 -0800114
Alexander Afanasyeva91aab42016-09-08 15:47:38 -0700115// setupAndRun();
spirosmastorakis0df15ba2015-11-14 08:46:24 -0800116
Alexander Afanasyeva91aab42016-09-08 15:47:38 -0700117// BOOST_CHECK_EQUAL(requestedDatasets.size(), receivedDatasets.size() + 1);
spirosmastorakis0df15ba2015-11-14 08:46:24 -0800118
Alexander Afanasyeva91aab42016-09-08 15:47:38 -0700119// requestedDatasets.erase("/localhost/nfd/faces/list");
120// BOOST_CHECK_EQUAL_COLLECTIONS(requestedDatasets.begin(), requestedDatasets.end(),
121// receivedDatasets.begin(), receivedDatasets.end());
122// }
spirosmastorakis0df15ba2015-11-14 08:46:24 -0800123
124BOOST_AUTO_TEST_CASE(DisabledStrategyChoiceManager)
125{
126 // Disable Strategy Choice Manager manager
127 disableStrategyChoiceManager();
128
129 setupAndRun();
130
131 BOOST_CHECK_EQUAL(requestedDatasets.size(), receivedDatasets.size() + 1);
132
133 requestedDatasets.erase("/localhost/nfd/strategy-choice/list");
134 BOOST_CHECK_EQUAL_COLLECTIONS(requestedDatasets.begin(), requestedDatasets.end(),
135 receivedDatasets.begin(), receivedDatasets.end());
136}
137
Alexander Afanasyevf326f942016-09-08 17:17:05 -0700138BOOST_AUTO_TEST_CASE(DisabledForwarderStatusManager)
spirosmastorakis0df15ba2015-11-14 08:46:24 -0800139{
Alexander Afanasyevf326f942016-09-08 17:17:05 -0700140 // Disable Forwarder Status Manager
141 disableForwarderStatusManager();
spirosmastorakis0df15ba2015-11-14 08:46:24 -0800142
143 setupAndRun();
144
145 BOOST_CHECK_EQUAL(requestedDatasets.size(), receivedDatasets.size() + 1);
146
Alexander Afanasyeva91aab42016-09-08 15:47:38 -0700147 requestedDatasets.erase("/localhost/nfd/status/general");
spirosmastorakis0df15ba2015-11-14 08:46:24 -0800148 BOOST_CHECK_EQUAL_COLLECTIONS(requestedDatasets.begin(), requestedDatasets.end(),
149 receivedDatasets.begin(), receivedDatasets.end());
150}
151
152BOOST_AUTO_TEST_SUITE_END() // ManagerCheck
153
154BOOST_AUTO_TEST_SUITE_END() // ModelNdnL3Protocol
155
156} // namespace ndn
157} // namespace ns3