blob: 896e7b310b8ec819fed0e88fcdd1a930df294a73 [file] [log] [blame]
Jiewen Tana0497d82015-02-02 21:59:18 -08001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
laqinfan35731852017-08-08 06:17:39 -05003 * Copyright (c) 2014-2018, The University of Memphis,
Jiewen Tana0497d82015-02-02 21:59:18 -08004 * Regents of the University of California,
5 * Arizona Board of Regents.
6 *
7 * This file is part of NLSR (Named-data Link State Routing).
8 * See AUTHORS.md for complete list of NLSR authors and contributors.
9 *
10 * NLSR is free software: you can redistribute it and/or modify it under the terms
11 * of the GNU General Public License as published by the Free Software Foundation,
12 * either version 3 of the License, or (at your option) any later version.
13 *
14 * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
15 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16 * PURPOSE. See the GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License along with
19 * NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
20 **/
21
dmcoomes9f936662017-03-02 10:33:09 -060022#ifndef NLSR_PUBLISHER_FIXTURE_HPP
23#define NLSR_PUBLISHER_FIXTURE_HPP
24
laqinfan35731852017-08-08 06:17:39 -050025#include "publisher/dataset-interest-handler.hpp"
Jiewen Tana0497d82015-02-02 21:59:18 -080026#include "nlsr.hpp"
27
28#include "../boost-test.hpp"
29#include "../test-common.hpp"
30
31#include <ndn-cxx/util/dummy-client-face.hpp>
laqinfand22da512017-05-25 17:29:53 -050032#include <ndn-cxx/security/key-chain.hpp>
Muktadir Chowdhuryf04f9892017-08-20 20:42:56 -050033#include <ndn-cxx/security/pib/identity.hpp>
34
35#include <ndn-cxx/util/io.hpp>
laqinfand22da512017-05-25 17:29:53 -050036
37#include <boost/filesystem.hpp>
38
39using namespace ndn;
Jiewen Tana0497d82015-02-02 21:59:18 -080040
41namespace nlsr {
42namespace test {
43
44class PublisherFixture : public BaseFixture
45{
46public:
47 PublisherFixture()
Muktadir Chowdhuryf04f9892017-08-20 20:42:56 -050048 : face(m_ioService, m_keyChain, {true, true})
49 , nlsr(m_ioService, m_scheduler, face, m_keyChain)
laqinfand22da512017-05-25 17:29:53 -050050 , lsdb(nlsr.getLsdb())
laqinfan35731852017-08-08 06:17:39 -050051 , rt1(nlsr.getRoutingTable())
Jiewen Tana0497d82015-02-02 21:59:18 -080052 {
Muktadir Chowdhuryf04f9892017-08-20 20:42:56 -050053 INIT_LOGGERS("/tmp/", "TRACE");
laqinfand22da512017-05-25 17:29:53 -050054 nlsr.getConfParameter().setNetwork("/ndn");
55 nlsr.getConfParameter().setRouterName("/This/Router");
Muktadir Chowdhuryf04f9892017-08-20 20:42:56 -050056
57 routerId = addIdentity("/ndn/This/Router");
58
laqinfand22da512017-05-25 17:29:53 -050059 nlsr.initialize();
Ashlesh Gawande793e8702017-08-01 15:59:26 -050060 face.processEvents(ndn::time::milliseconds(100));
Jiewen Tana0497d82015-02-02 21:59:18 -080061 }
62
63 void
64 addAdjacency(AdjLsa& lsa, const std::string& name, const std::string& faceUri, double cost)
65 {
Muktadir Chowdhuryf04f9892017-08-20 20:42:56 -050066 Adjacent adjacency(name, ndn::FaceUri(faceUri), cost, Adjacent::STATUS_ACTIVE, 0, 0);
Nick Gordone9733ed2017-04-26 10:48:39 -050067 lsa.addAdjacent(std::move(adjacency));
Jiewen Tana0497d82015-02-02 21:59:18 -080068 }
69
70 void
71 checkTlvLsaInfo(const tlv::LsaInfo& info, Lsa& lsa)
72 {
73 BOOST_CHECK_EQUAL(info.getOriginRouter(), lsa.getOrigRouter());
74 BOOST_CHECK_EQUAL(info.getSequenceNumber(), lsa.getLsSeqNo());
75 BOOST_CHECK_LE(info.getExpirationPeriod(), ndn::time::milliseconds(0));
76 }
77
78 void
79 checkTlvAdjLsa(const ndn::Block& block, AdjLsa& lsa)
80 {
81 BOOST_CHECK_EQUAL(block.type(), ndn::tlv::nlsr::AdjacencyLsa);
82
83 tlv::AdjacencyLsa tlvLsa;
84 BOOST_REQUIRE_NO_THROW(tlvLsa.wireDecode(block));
85
86 checkTlvAdjLsa(tlvLsa, lsa);
87 }
88
89 void
90 checkTlvAdjLsa(const tlv::AdjacencyLsa& tlvLsa, AdjLsa& lsa)
91 {
92 checkTlvLsaInfo(tlvLsa.getLsaInfo(), lsa);
93
94 std::list<tlv::Adjacency>::const_iterator it = tlvLsa.getAdjacencies().begin();
95
96 for (const Adjacent& adjacency : lsa.getAdl().getAdjList()) {
97 BOOST_CHECK_EQUAL(it->getName(), adjacency.getName());
Nick Gordone9733ed2017-04-26 10:48:39 -050098 BOOST_CHECK_EQUAL(it->getUri(), adjacency.getFaceUri().toString());
Jiewen Tana0497d82015-02-02 21:59:18 -080099 BOOST_CHECK_EQUAL(it->getCost(), adjacency.getLinkCost());
100 ++it;
101 }
102 }
103
laqinfan35731852017-08-08 06:17:39 -0500104 NextHop
105 createNextHop(const std::string& faceUri, double cost)
106 {
107 NextHop nexthop(faceUri, cost);
108 return nexthop;
109 }
110
Jiewen Tana0497d82015-02-02 21:59:18 -0800111 CoordinateLsa
Muktadir R Chowdhuryb00dc2a2016-11-05 10:48:58 -0600112 createCoordinateLsa(const std::string& origin, double radius, std::vector<double> angle)
Jiewen Tana0497d82015-02-02 21:59:18 -0800113 {
Ashlesh Gawanded02c3882015-12-29 16:02:51 -0600114 CoordinateLsa lsa(origin, 1, ndn::time::system_clock::now(),
Jiewen Tana0497d82015-02-02 21:59:18 -0800115 radius, angle);
Alexander Afanasyevf9f39102015-12-01 17:43:40 -0800116 return lsa;
Jiewen Tana0497d82015-02-02 21:59:18 -0800117 }
118
119 void
120 checkTlvCoordinateLsa(const ndn::Block& block, CoordinateLsa& lsa)
121 {
122 BOOST_CHECK_EQUAL(block.type(), ndn::tlv::nlsr::CoordinateLsa);
123
124 tlv::CoordinateLsa tlvLsa;
125 BOOST_REQUIRE_NO_THROW(tlvLsa.wireDecode(block));
126
127 checkTlvCoordinateLsa(tlvLsa, lsa);
128 }
129
130 void
131 checkTlvCoordinateLsa(const tlv::CoordinateLsa& tlvLsa, CoordinateLsa& lsa)
132 {
133 checkTlvLsaInfo(tlvLsa.getLsaInfo(), lsa);
134
135 BOOST_CHECK_EQUAL(tlvLsa.getHyperbolicRadius(), lsa.getCorRadius());
Muktadir R Chowdhuryb00dc2a2016-11-05 10:48:58 -0600136 BOOST_CHECK(tlvLsa.getHyperbolicAngle() == lsa.getCorTheta());
Jiewen Tana0497d82015-02-02 21:59:18 -0800137 }
138
139 void
140 checkTlvNameLsa(const ndn::Block& block, NameLsa& lsa)
141 {
142 BOOST_CHECK_EQUAL(block.type(), ndn::tlv::nlsr::NameLsa);
143
144 tlv::NameLsa tlvLsa;
145 BOOST_REQUIRE_NO_THROW(tlvLsa.wireDecode(block));
146
147 checkTlvNameLsa(tlvLsa, lsa);
148 }
149
150 void
151 checkTlvNameLsa(const tlv::NameLsa& tlvLsa, NameLsa& lsa)
152 {
153 checkTlvLsaInfo(tlvLsa.getLsaInfo(), lsa);
154
155 std::list<ndn::Name>::const_iterator it = tlvLsa.getNames().begin();
156
Nick Gordonf14ec352017-07-24 16:09:58 -0500157 for (const ndn::Name& name : lsa.getNpl().getNames()) {
Jiewen Tana0497d82015-02-02 21:59:18 -0800158 BOOST_CHECK_EQUAL(*it, name);
159 ++it;
160 }
161 }
162
163public:
laqinfand22da512017-05-25 17:29:53 -0500164 ndn::util::DummyClientFace face;
laqinfand22da512017-05-25 17:29:53 -0500165
166 Nlsr nlsr;
167 Lsdb& lsdb;
Muktadir Chowdhuryf04f9892017-08-20 20:42:56 -0500168
169 ndn::security::pib::Identity routerId;
laqinfan35731852017-08-08 06:17:39 -0500170 RoutingTable& rt1;
Jiewen Tana0497d82015-02-02 21:59:18 -0800171};
172
173} // namespace test
174} // namespace nlsr
dmcoomes9f936662017-03-02 10:33:09 -0600175
176#endif // NLSR_PUBLISHER_FIXTURE_HPP