tlv: remove unused class LsdbStatus
refs: #4787 Change-Id: I9c7ce59238a3bac06d3db32423853f11f22e9160
This commit is contained in:
1 parent
fd021d5e3d
commit
f89878c12c
4 files changed
+1
-789
No files matched your search
@@ -1,6 +1,6 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/**
|
||||
* Copyright (c) 2014-2019, The University of Memphis,
|
||||
* Copyright (c) 2014-2020, The University of Memphis,
|
||||
* Regents of the University of California,
|
||||
* Arizona Board of Regents.
|
||||
*
|
||||
@@ -21,7 +21,6 @@
|
||||
|
||||
#include "dataset-interest-handler.hpp"
|
||||
#include "nlsr.hpp"
|
||||
#include "tlv/lsdb-status.hpp"
|
||||
#include "logger.hpp"
|
||||
|
||||
#include <ndn-cxx/mgmt/nfd/control-response.hpp>
|
||||
|
||||
@@ -1,239 +0,0 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/*
|
||||
* Copyright (c) 2014-2018, The University of Memphis,
|
||||
* Regents of the University of California,
|
||||
* Arizona Board of Regents.
|
||||
*
|
||||
* This file is part of NLSR (Named-data Link State Routing).
|
||||
* See AUTHORS.md for complete list of NLSR authors and contributors.
|
||||
*
|
||||
* NLSR is free software: you can redistribute it and/or modify it under the terms
|
||||
* of the GNU General Public License as published by the Free Software Foundation,
|
||||
* either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
* PURPOSE. See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "lsdb-status.hpp"
|
||||
#include "tlv-nlsr.hpp"
|
||||
|
||||
#include <ndn-cxx/util/concepts.hpp>
|
||||
#include <ndn-cxx/encoding/block-helpers.hpp>
|
||||
|
||||
namespace nlsr {
|
||||
namespace tlv {
|
||||
|
||||
BOOST_CONCEPT_ASSERT((ndn::WireEncodable<LsdbStatus>));
|
||||
BOOST_CONCEPT_ASSERT((ndn::WireDecodable<LsdbStatus>));
|
||||
static_assert(std::is_base_of<ndn::tlv::Error, LsdbStatus::Error>::value,
|
||||
"LsdbStatus::Error must inherit from tlv::Error");
|
||||
|
||||
LsdbStatus::LsdbStatus()
|
||||
: m_hasAdjacencyLsas(false)
|
||||
, m_hasCoordinateLsas(false)
|
||||
, m_hasNameLsas(false)
|
||||
{
|
||||
}
|
||||
|
||||
LsdbStatus::LsdbStatus(const ndn::Block& block)
|
||||
{
|
||||
wireDecode(block);
|
||||
}
|
||||
|
||||
LsdbStatus&
|
||||
LsdbStatus::addAdjacencyLsa(const AdjacencyLsa& adjacencyLsa)
|
||||
{
|
||||
m_adjacencyLsas.push_back(adjacencyLsa);
|
||||
m_wire.reset();
|
||||
m_hasAdjacencyLsas = true;
|
||||
return *this;
|
||||
}
|
||||
|
||||
LsdbStatus&
|
||||
LsdbStatus::clearAdjacencyLsas()
|
||||
{
|
||||
m_adjacencyLsas.clear();
|
||||
m_hasAdjacencyLsas = false;
|
||||
return *this;
|
||||
}
|
||||
|
||||
LsdbStatus&
|
||||
LsdbStatus::addCoordinateLsa(const CoordinateLsa& coordinateLsa)
|
||||
{
|
||||
m_coordinateLsas.push_back(coordinateLsa);
|
||||
m_wire.reset();
|
||||
m_hasCoordinateLsas = true;
|
||||
return *this;
|
||||
}
|
||||
|
||||
LsdbStatus&
|
||||
LsdbStatus::clearCoordinateLsas()
|
||||
{
|
||||
m_coordinateLsas.clear();
|
||||
m_hasCoordinateLsas = false;
|
||||
return *this;
|
||||
}
|
||||
|
||||
LsdbStatus&
|
||||
LsdbStatus::addNameLsa(const NameLsa& nameLsa)
|
||||
{
|
||||
m_nameLsas.push_back(nameLsa);
|
||||
m_wire.reset();
|
||||
m_hasNameLsas = true;
|
||||
return *this;
|
||||
}
|
||||
|
||||
LsdbStatus&
|
||||
LsdbStatus::clearNameLsas()
|
||||
{
|
||||
m_nameLsas.clear();
|
||||
m_hasNameLsas = false;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<ndn::encoding::Tag TAG>
|
||||
size_t
|
||||
LsdbStatus::wireEncode(ndn::EncodingImpl<TAG>& block) const
|
||||
{
|
||||
size_t totalLength = 0;
|
||||
|
||||
for (std::list<NameLsa>::const_reverse_iterator it = m_nameLsas.rbegin();
|
||||
it != m_nameLsas.rend(); ++it) {
|
||||
totalLength += it->wireEncode(block);
|
||||
}
|
||||
|
||||
for (std::list<CoordinateLsa>::const_reverse_iterator it = m_coordinateLsas.rbegin();
|
||||
it != m_coordinateLsas.rend(); ++it) {
|
||||
totalLength += it->wireEncode(block);
|
||||
}
|
||||
|
||||
for (std::list<AdjacencyLsa>::const_reverse_iterator it = m_adjacencyLsas.rbegin();
|
||||
it != m_adjacencyLsas.rend(); ++it) {
|
||||
totalLength += it->wireEncode(block);
|
||||
}
|
||||
|
||||
totalLength += block.prependVarNumber(totalLength);
|
||||
totalLength += block.prependVarNumber(ndn::tlv::nlsr::LsdbStatus);
|
||||
|
||||
return totalLength;
|
||||
}
|
||||
|
||||
NDN_CXX_DEFINE_WIRE_ENCODE_INSTANTIATIONS(LsdbStatus);
|
||||
|
||||
const ndn::Block&
|
||||
LsdbStatus::wireEncode() const
|
||||
{
|
||||
if (m_wire.hasWire()) {
|
||||
return m_wire;
|
||||
}
|
||||
|
||||
ndn::EncodingEstimator estimator;
|
||||
size_t estimatedSize = wireEncode(estimator);
|
||||
|
||||
ndn::EncodingBuffer buffer(estimatedSize, 0);
|
||||
wireEncode(buffer);
|
||||
|
||||
m_wire = buffer.block();
|
||||
|
||||
return m_wire;
|
||||
}
|
||||
|
||||
void
|
||||
LsdbStatus::wireDecode(const ndn::Block& wire)
|
||||
{
|
||||
m_adjacencyLsas.clear();
|
||||
m_coordinateLsas.clear();
|
||||
m_nameLsas.clear();
|
||||
|
||||
m_hasAdjacencyLsas = false;
|
||||
m_hasCoordinateLsas = false;
|
||||
m_hasNameLsas = false;
|
||||
|
||||
m_wire = wire;
|
||||
|
||||
if (m_wire.type() != ndn::tlv::nlsr::LsdbStatus) {
|
||||
std::stringstream error;
|
||||
error << "Expected LsdbStatus Block, but Block is of a different type: #"
|
||||
<< m_wire.type();
|
||||
BOOST_THROW_EXCEPTION(Error(error.str()));
|
||||
}
|
||||
|
||||
m_wire.parse();
|
||||
|
||||
ndn::Block::element_const_iterator val = m_wire.elements_begin();
|
||||
|
||||
for (; val != m_wire.elements_end() && val->type() == ndn::tlv::nlsr::AdjacencyLsa; ++val) {
|
||||
m_adjacencyLsas.push_back(AdjacencyLsa(*val));
|
||||
m_hasAdjacencyLsas = true;
|
||||
}
|
||||
|
||||
for (; val != m_wire.elements_end() && val->type() == ndn::tlv::nlsr::CoordinateLsa; ++val) {
|
||||
m_coordinateLsas.push_back(CoordinateLsa(*val));
|
||||
m_hasCoordinateLsas = true;
|
||||
}
|
||||
|
||||
for (; val != m_wire.elements_end() && val->type() == ndn::tlv::nlsr::NameLsa; ++val) {
|
||||
m_nameLsas.push_back(NameLsa(*val));
|
||||
m_hasNameLsas = true;
|
||||
}
|
||||
|
||||
if (val != m_wire.elements_end()) {
|
||||
std::stringstream error;
|
||||
error << "Expected the end of elements, but Block is of a different type: #"
|
||||
<< val->type();
|
||||
BOOST_THROW_EXCEPTION(Error(error.str()));
|
||||
}
|
||||
}
|
||||
|
||||
std::ostream&
|
||||
operator<<(std::ostream& os, const LsdbStatus& lsdbStatus)
|
||||
{
|
||||
os << "LsdbStatus(";
|
||||
|
||||
bool isFirst = true;
|
||||
|
||||
for (const auto& adjacencyLsa : lsdbStatus.getAdjacencyLsas()) {
|
||||
if (isFirst) {
|
||||
isFirst = false;
|
||||
}
|
||||
else {
|
||||
os << ", ";
|
||||
}
|
||||
|
||||
os << adjacencyLsa;
|
||||
}
|
||||
|
||||
for (const auto& coordinateLsa : lsdbStatus.getCoordinateLsas()) {
|
||||
if (isFirst) {
|
||||
isFirst = false;
|
||||
}
|
||||
else {
|
||||
os << ", ";
|
||||
}
|
||||
|
||||
os << coordinateLsa;
|
||||
}
|
||||
|
||||
for (const auto& nameLsa : lsdbStatus.getNameLsas()) {
|
||||
if (isFirst) {
|
||||
isFirst = false;
|
||||
}
|
||||
else {
|
||||
os << ", ";
|
||||
}
|
||||
|
||||
os << nameLsa;
|
||||
}
|
||||
|
||||
os << ")";
|
||||
|
||||
return os;
|
||||
}
|
||||
|
||||
} // namespace tlv
|
||||
} // namespace nlsr
|
||||
@@ -1,176 +0,0 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/*
|
||||
* Copyright (c) 2014-2018, The University of Memphis,
|
||||
* Regents of the University of California,
|
||||
* Arizona Board of Regents.
|
||||
*
|
||||
* This file is part of NLSR (Named-data Link State Routing).
|
||||
* See AUTHORS.md for complete list of NLSR authors and contributors.
|
||||
*
|
||||
* NLSR is free software: you can redistribute it and/or modify it under the terms
|
||||
* of the GNU General Public License as published by the Free Software Foundation,
|
||||
* either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
* PURPOSE. See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef NLSR_TLV_LSDB_STATUS_HPP
|
||||
#define NLSR_TLV_LSDB_STATUS_HPP
|
||||
|
||||
#include "adjacency-lsa.hpp"
|
||||
#include "coordinate-lsa.hpp"
|
||||
#include "name-lsa.hpp"
|
||||
|
||||
#include <ndn-cxx/util/time.hpp>
|
||||
#include <ndn-cxx/encoding/block.hpp>
|
||||
#include <ndn-cxx/encoding/encoding-buffer.hpp>
|
||||
#include <ndn-cxx/encoding/tlv.hpp>
|
||||
#include <ndn-cxx/name.hpp>
|
||||
|
||||
#include <list>
|
||||
|
||||
namespace nlsr {
|
||||
namespace tlv {
|
||||
|
||||
/*! \brief Data abstraction for LsdbStatus
|
||||
*
|
||||
* LsdbStatus := LSDB-STATUS-TYPE TLV-LENGTH
|
||||
* AdjacencyLsa*
|
||||
* CoordinateLsa*
|
||||
* NameLsa*
|
||||
*
|
||||
* \sa https://redmine.named-data.net/projects/nlsr/wiki/LSDB_DataSet
|
||||
*/
|
||||
class LsdbStatus
|
||||
{
|
||||
public:
|
||||
class Error : public ndn::tlv::Error
|
||||
{
|
||||
public:
|
||||
explicit
|
||||
Error(const std::string& what)
|
||||
: ndn::tlv::Error(what)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
typedef std::list<AdjacencyLsa> AdjacencyLsaList;
|
||||
typedef std::list<CoordinateLsa> CoordinateLsaList;
|
||||
typedef std::list<NameLsa> NameLsaList;
|
||||
|
||||
LsdbStatus();
|
||||
|
||||
explicit
|
||||
LsdbStatus(const ndn::Block& block);
|
||||
|
||||
const std::list<AdjacencyLsa>&
|
||||
getAdjacencyLsas() const
|
||||
{
|
||||
return m_adjacencyLsas;
|
||||
}
|
||||
|
||||
LsdbStatus&
|
||||
addAdjacencyLsa(const AdjacencyLsa& adjacencyLsa);
|
||||
|
||||
LsdbStatus&
|
||||
clearAdjacencyLsas();
|
||||
|
||||
bool
|
||||
hasAdjacencyLsas()
|
||||
{
|
||||
return m_hasAdjacencyLsas;
|
||||
}
|
||||
|
||||
const std::list<CoordinateLsa>&
|
||||
getCoordinateLsas() const
|
||||
{
|
||||
return m_coordinateLsas;
|
||||
}
|
||||
|
||||
LsdbStatus&
|
||||
addCoordinateLsa(const CoordinateLsa& coordinateLsa);
|
||||
|
||||
LsdbStatus&
|
||||
clearCoordinateLsas();
|
||||
|
||||
bool
|
||||
hasCoordinateLsas()
|
||||
{
|
||||
return m_hasCoordinateLsas;
|
||||
}
|
||||
|
||||
const std::list<NameLsa>&
|
||||
getNameLsas() const
|
||||
{
|
||||
return m_nameLsas;
|
||||
}
|
||||
|
||||
LsdbStatus&
|
||||
addNameLsa(const NameLsa& nameLsa);
|
||||
|
||||
LsdbStatus&
|
||||
clearNameLsas();
|
||||
|
||||
bool
|
||||
hasNameLsas()
|
||||
{
|
||||
return m_hasNameLsas;
|
||||
}
|
||||
|
||||
/*! \brief Encodes the LSA objects and some info for each LSA using
|
||||
* the method in TAG.
|
||||
*
|
||||
* This function will TLV-format the LSA objects and some LSA
|
||||
* info using the implementation specified by TAG. Usually this is
|
||||
* called with an estimator first to guess how long the buffer needs
|
||||
* to be, then with an encoder to do the real work. This process is
|
||||
* automated by the other wireEncode.
|
||||
* \sa LsdbStatus::wireEncode()
|
||||
*/
|
||||
template<ndn::encoding::Tag TAG>
|
||||
size_t
|
||||
wireEncode(ndn::EncodingImpl<TAG>& block) const;
|
||||
|
||||
/*! \brief Create a TLV encoding of this object.
|
||||
*
|
||||
* Create a block containing the TLV encoding of this object. That
|
||||
* involves two steps: estimating the size that the information will
|
||||
* take up, and then creating a buffer of that size and encoding the
|
||||
* information into it. Both steps are accomplished by
|
||||
* LsdbStatus::wireEncode(ndn::EncodingImpl<TAG>&)
|
||||
*/
|
||||
const ndn::Block&
|
||||
wireEncode() const;
|
||||
|
||||
/*! \brief Populate this object by decoding the one contained in the
|
||||
* given block.
|
||||
*/
|
||||
void
|
||||
wireDecode(const ndn::Block& wire);
|
||||
|
||||
private:
|
||||
AdjacencyLsaList m_adjacencyLsas;
|
||||
CoordinateLsaList m_coordinateLsas;
|
||||
NameLsaList m_nameLsas;
|
||||
|
||||
bool m_hasAdjacencyLsas;
|
||||
bool m_hasCoordinateLsas;
|
||||
bool m_hasNameLsas;
|
||||
|
||||
mutable ndn::Block m_wire;
|
||||
};
|
||||
|
||||
NDN_CXX_DECLARE_WIRE_ENCODE_INSTANTIATIONS(LsdbStatus);
|
||||
|
||||
std::ostream&
|
||||
operator<<(std::ostream& os, const LsdbStatus& lsdbStatus);
|
||||
|
||||
} // namespace tlv
|
||||
} // namespace nlsr
|
||||
|
||||
#endif // NLSR_TLV_LSDB_STATUS_HPP
|
||||
@@ -1,372 +0,0 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/**
|
||||
* Copyright (c) 2014-2019, The University of Memphis,
|
||||
* Regents of the University of California,
|
||||
* Arizona Board of Regents.
|
||||
*
|
||||
* This file is part of NLSR (Named-data Link State Routing).
|
||||
* See AUTHORS.md for complete list of NLSR authors and contributors.
|
||||
*
|
||||
* NLSR is free software: you can redistribute it and/or modify it under the terms
|
||||
* of the GNU General Public License as published by the Free Software Foundation,
|
||||
* either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
* PURPOSE. See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
|
||||
**/
|
||||
|
||||
#include "tlv/lsdb-status.hpp"
|
||||
|
||||
#include "tests/boost-test.hpp"
|
||||
|
||||
#include <boost/mpl/vector.hpp>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
|
||||
namespace nlsr {
|
||||
namespace tlv {
|
||||
namespace test {
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(TlvTestLsdbStatus)
|
||||
|
||||
const uint8_t LsdbStatusData1[] =
|
||||
{
|
||||
// Header
|
||||
0x8a, 0x7b,
|
||||
// AdjacencyLsa
|
||||
0x83, 0x32,
|
||||
// LsaInfo
|
||||
0x80, 0x11, 0x81, 0x08, 0x07, 0x06, 0x08, 0x04, 0x74, 0x65, 0x73, 0x74, 0x82, 0x01,
|
||||
0x80, 0x8b, 0x02, 0x27, 0x10,
|
||||
// Adjacency
|
||||
0x84, 0x1d, 0x07, 0x0c, 0x08, 0x0a, 0x61, 0x64, 0x6a, 0x61, 0x63, 0x65, 0x6e, 0x63,
|
||||
0x79, 0x31, 0x8d, 0x0a, 0x61, 0x64, 0x6a, 0x61, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x31,
|
||||
0x8c, 0x01, 0x80,
|
||||
// CoordinateLsa
|
||||
0x85, 0x27,
|
||||
// LsaInfo
|
||||
0x80, 0x11, 0x81, 0x08, 0x07, 0x06, 0x08, 0x04, 0x74, 0x65, 0x73, 0x74, 0x82, 0x01,
|
||||
0x80, 0x8b, 0x02, 0x27, 0x10,
|
||||
// HyperbolicRadius
|
||||
0x87, 0x08, 0x3f, 0xfa, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
|
||||
// HyperbolicAngle
|
||||
0x88, 0x08, 0x3f, 0xfc, 0x7a, 0xe1, 0x47, 0xae, 0x14, 0x7b,
|
||||
// NameLsa
|
||||
0x89, 0x1c,
|
||||
// LsaInfo
|
||||
0x80, 0x11, 0x81, 0x08, 0x07, 0x06, 0x08, 0x04, 0x74, 0x65, 0x73, 0x74, 0x82, 0x01,
|
||||
0x80, 0x8b, 0x02, 0x27, 0x10,
|
||||
// Name
|
||||
0x07, 0x07, 0x08, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x31
|
||||
};
|
||||
|
||||
const uint8_t LsdbStatusData2[] =
|
||||
{
|
||||
// Header
|
||||
0x8a, 0x00
|
||||
};
|
||||
|
||||
const uint8_t LsdbStatusData3[] =
|
||||
{
|
||||
// Header
|
||||
0x8a, 0x7b,
|
||||
// CoordianteLsa
|
||||
0x85, 0x27,
|
||||
// LsaInfo
|
||||
0x80, 0x11, 0x81, 0x08, 0x07, 0x06, 0x08, 0x04, 0x74, 0x65, 0x73, 0x74, 0x82, 0x01,
|
||||
0x80, 0x8B, 0x02, 0x27, 0x10,
|
||||
// HyperbolicRadius
|
||||
0x87, 0x08, 0x3F, 0xFA, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
|
||||
// HyperbolicAngle
|
||||
0x88, 0x08, 0x3F, 0xFC, 0x7A, 0xE1, 0x47, 0xAE, 0x14, 0x7B,
|
||||
// NameLsa
|
||||
0x89, 0x1c,
|
||||
// LsaInfo
|
||||
0x80, 0x11, 0x81, 0x08, 0x07, 0x06, 0x08, 0x04, 0x74, 0x65, 0x73, 0x74, 0x82, 0x01,
|
||||
0x80, 0x8b, 0x02, 0x27, 0x10,
|
||||
// Name
|
||||
0x07, 0x07, 0x08, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x31,
|
||||
// AdjacencyLsa
|
||||
0x83, 0x32,
|
||||
// LsaInfo
|
||||
0x80, 0x11, 0x81, 0x08, 0x07, 0x06, 0x08, 0x04, 0x74, 0x65, 0x73, 0x74, 0x82, 0x01,
|
||||
0x80, 0x8B, 0x02, 0x27, 0x10,
|
||||
// Adjacency
|
||||
0x84, 0x1d, 0x07, 0x0c, 0x08, 0x0a, 0x61, 0x64, 0x6a, 0x61, 0x63, 0x65, 0x6e, 0x63,
|
||||
0x79, 0x31, 0x8d, 0x0a, 0x61, 0x64, 0x6a, 0x61, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x31,
|
||||
0x8c, 0x01, 0x80
|
||||
};
|
||||
|
||||
BOOST_AUTO_TEST_CASE(LsdbStatusEncode1)
|
||||
{
|
||||
LsdbStatus lsdbStatus;
|
||||
|
||||
LsaInfo lsaInfo;
|
||||
lsaInfo.setOriginRouter("test");
|
||||
lsaInfo.setSequenceNumber(128);
|
||||
lsaInfo.setExpirationPeriod(ndn::time::milliseconds(10000));
|
||||
|
||||
// AdjacencyLsa
|
||||
AdjacencyLsa adjacencyLsa;
|
||||
adjacencyLsa.setLsaInfo(lsaInfo);
|
||||
|
||||
Adjacency adjacency1;
|
||||
adjacency1.setName("adjacency1");
|
||||
adjacency1.setUri("adjacency1");
|
||||
adjacency1.setCost(128);
|
||||
adjacencyLsa.addAdjacency(adjacency1);
|
||||
|
||||
lsdbStatus.addAdjacencyLsa(adjacencyLsa);
|
||||
|
||||
// CoordinateLsa
|
||||
CoordinateLsa coordinateLsa;
|
||||
coordinateLsa.setLsaInfo(lsaInfo);
|
||||
|
||||
coordinateLsa.setHyperbolicRadius(1.65);
|
||||
std::vector<double> angles;
|
||||
angles.push_back(1.78);
|
||||
coordinateLsa.setHyperbolicAngle(angles);
|
||||
|
||||
lsdbStatus.addCoordinateLsa(coordinateLsa);
|
||||
|
||||
// NameLsa
|
||||
NameLsa nameLsa;
|
||||
nameLsa.setLsaInfo(lsaInfo);
|
||||
nameLsa.addName("name1");
|
||||
|
||||
lsdbStatus.addNameLsa(nameLsa);
|
||||
|
||||
const ndn::Block& wire = lsdbStatus.wireEncode();
|
||||
|
||||
BOOST_REQUIRE_EQUAL_COLLECTIONS(LsdbStatusData1,
|
||||
LsdbStatusData1 + sizeof(LsdbStatusData1),
|
||||
wire.begin(), wire.end());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(LsdbStatusEncode2)
|
||||
{
|
||||
LsdbStatus lsdbStatus;
|
||||
|
||||
const ndn::Block& wire = lsdbStatus.wireEncode();
|
||||
BOOST_REQUIRE_EQUAL_COLLECTIONS(LsdbStatusData2,
|
||||
LsdbStatusData2 + sizeof(LsdbStatusData2),
|
||||
wire.begin(), wire.end());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(LsdbStatusDecode1)
|
||||
{
|
||||
LsdbStatus lsdbStatus;
|
||||
|
||||
lsdbStatus.wireDecode(ndn::Block(LsdbStatusData1, sizeof(LsdbStatusData1)));
|
||||
|
||||
std::list<AdjacencyLsa> adjacencyLsas = lsdbStatus.getAdjacencyLsas();
|
||||
std::list<AdjacencyLsa>::const_iterator it1 = adjacencyLsas.begin();
|
||||
|
||||
LsaInfo lsaInfo = it1->getLsaInfo();
|
||||
BOOST_CHECK_EQUAL(lsaInfo.getOriginRouter(), "test");
|
||||
BOOST_CHECK_EQUAL(lsaInfo.getSequenceNumber(), 128);
|
||||
BOOST_CHECK_EQUAL(lsaInfo.getExpirationPeriod(), ndn::time::milliseconds(10000));
|
||||
|
||||
std::list<Adjacency> adjacencies = it1->getAdjacencies();
|
||||
std::list<Adjacency>::const_iterator it2 = adjacencies.begin();
|
||||
BOOST_CHECK_EQUAL(it2->getName(), "adjacency1");
|
||||
BOOST_CHECK_EQUAL(it2->getUri(), "adjacency1");
|
||||
BOOST_CHECK_EQUAL(it2->getCost(), 128);
|
||||
|
||||
BOOST_CHECK_EQUAL(lsdbStatus.hasAdjacencyLsas(), true);
|
||||
|
||||
std::list<CoordinateLsa> coordinateLsas = lsdbStatus.getCoordinateLsas();
|
||||
std::list<CoordinateLsa>::const_iterator it3 = coordinateLsas.begin();
|
||||
|
||||
lsaInfo = it3->getLsaInfo();
|
||||
BOOST_CHECK_EQUAL(lsaInfo.getOriginRouter(), "test");
|
||||
BOOST_CHECK_EQUAL(lsaInfo.getSequenceNumber(), 128);
|
||||
BOOST_CHECK_EQUAL(lsaInfo.getExpirationPeriod(), ndn::time::milliseconds(10000));
|
||||
|
||||
BOOST_REQUIRE_EQUAL(it3->getHyperbolicRadius(), 1.65);
|
||||
std::vector<double> angles;
|
||||
angles.push_back(1.78);
|
||||
BOOST_REQUIRE(it3->getHyperbolicAngle() == angles);
|
||||
|
||||
BOOST_CHECK_EQUAL(lsdbStatus.hasCoordinateLsas(), true);
|
||||
|
||||
std::list<NameLsa> nameLsas = lsdbStatus.getNameLsas();
|
||||
std::list<NameLsa>::const_iterator it4 = nameLsas.begin();
|
||||
|
||||
lsaInfo = it4->getLsaInfo();
|
||||
BOOST_CHECK_EQUAL(lsaInfo.getOriginRouter(), "test");
|
||||
BOOST_CHECK_EQUAL(lsaInfo.getSequenceNumber(), 128);
|
||||
BOOST_CHECK_EQUAL(lsaInfo.getExpirationPeriod(), ndn::time::milliseconds(10000));
|
||||
|
||||
std::list<ndn::Name> names = it4->getNames();
|
||||
std::list<ndn::Name>::const_iterator it5 = names.begin();
|
||||
BOOST_CHECK_EQUAL(*it5, "name1");
|
||||
|
||||
BOOST_CHECK_EQUAL(lsdbStatus.hasNameLsas(), true);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(LsdbStatusDecode2)
|
||||
{
|
||||
LsdbStatus lsdbStatus;
|
||||
|
||||
lsdbStatus.wireDecode(ndn::Block(LsdbStatusData2, sizeof(LsdbStatusData2)));
|
||||
|
||||
BOOST_CHECK_EQUAL(lsdbStatus.hasAdjacencyLsas(), false);
|
||||
BOOST_CHECK_EQUAL(lsdbStatus.hasCoordinateLsas(), false);
|
||||
BOOST_CHECK_EQUAL(lsdbStatus.hasNameLsas(), false);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(LsdbStatusDecode3)
|
||||
{
|
||||
LsdbStatus lsdbStatus;
|
||||
|
||||
BOOST_CHECK_THROW(lsdbStatus.wireDecode(ndn::Block(LsdbStatusData3, sizeof(LsdbStatusData3))),
|
||||
LsdbStatus::Error);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(LsdbStatusClear)
|
||||
{
|
||||
LsdbStatus lsdbStatus;
|
||||
|
||||
LsaInfo lsaInfo;
|
||||
lsaInfo.setOriginRouter("test");
|
||||
lsaInfo.setSequenceNumber(128);
|
||||
lsaInfo.setExpirationPeriod(ndn::time::milliseconds(10000));
|
||||
|
||||
// AdjacencyLsa
|
||||
AdjacencyLsa adjacencyLsa;
|
||||
adjacencyLsa.setLsaInfo(lsaInfo);
|
||||
|
||||
Adjacency adjacency1;
|
||||
adjacency1.setName("adjacency1");
|
||||
adjacency1.setUri("adjacency1");
|
||||
adjacency1.setCost(128);
|
||||
adjacencyLsa.addAdjacency(adjacency1);
|
||||
|
||||
lsdbStatus.addAdjacencyLsa(adjacencyLsa);
|
||||
BOOST_CHECK_EQUAL(lsdbStatus.hasAdjacencyLsas(), true);
|
||||
lsdbStatus.clearAdjacencyLsas();
|
||||
BOOST_CHECK_EQUAL(lsdbStatus.hasAdjacencyLsas(), false);
|
||||
|
||||
// CoordinateLsa
|
||||
CoordinateLsa coordinateLsa;
|
||||
coordinateLsa.setLsaInfo(lsaInfo);
|
||||
|
||||
coordinateLsa.setHyperbolicRadius(1.65);
|
||||
std::vector<double> angles;
|
||||
angles.push_back(1.78);
|
||||
coordinateLsa.setHyperbolicAngle(angles);
|
||||
|
||||
lsdbStatus.addCoordinateLsa(coordinateLsa);
|
||||
BOOST_CHECK_EQUAL(lsdbStatus.hasCoordinateLsas(), true);
|
||||
lsdbStatus.clearCoordinateLsas();
|
||||
BOOST_CHECK_EQUAL(lsdbStatus.hasCoordinateLsas(), false);
|
||||
|
||||
// NameLsa
|
||||
NameLsa nameLsa;
|
||||
nameLsa.setLsaInfo(lsaInfo);
|
||||
nameLsa.addName("name1");
|
||||
|
||||
lsdbStatus.addNameLsa(nameLsa);
|
||||
BOOST_CHECK_EQUAL(lsdbStatus.hasNameLsas(), true);
|
||||
lsdbStatus.clearNameLsas();
|
||||
BOOST_CHECK_EQUAL(lsdbStatus.hasNameLsas(), false);
|
||||
}
|
||||
|
||||
class Theta
|
||||
{
|
||||
public:
|
||||
std::vector<double> angles = {1.78};
|
||||
};
|
||||
|
||||
class ThetaAndPhi
|
||||
{
|
||||
public:
|
||||
std::vector<double> angles = {1.78, 3.21};
|
||||
};
|
||||
|
||||
typedef boost::mpl::vector<Theta, ThetaAndPhi> HyperbolicAngleVectorFixture;
|
||||
|
||||
BOOST_AUTO_TEST_CASE_TEMPLATE(LsdbStatusOutputStream, HRAngleVector, HyperbolicAngleVectorFixture)
|
||||
{
|
||||
HRAngleVector angleVector;
|
||||
LsdbStatus lsdbStatus;
|
||||
|
||||
LsaInfo lsaInfo;
|
||||
lsaInfo.setOriginRouter("test");
|
||||
lsaInfo.setSequenceNumber(128);
|
||||
lsaInfo.setExpirationPeriod(ndn::time::milliseconds(10000));
|
||||
|
||||
// AdjacencyLsa
|
||||
AdjacencyLsa adjacencyLsa;
|
||||
adjacencyLsa.setLsaInfo(lsaInfo);
|
||||
|
||||
Adjacency adjacency1;
|
||||
adjacency1.setName("adjacency1");
|
||||
adjacency1.setUri("adjacency1");
|
||||
adjacency1.setCost(128);
|
||||
adjacencyLsa.addAdjacency(adjacency1);
|
||||
|
||||
lsdbStatus.addAdjacencyLsa(adjacencyLsa);
|
||||
|
||||
// NameLsa
|
||||
NameLsa nameLsa;
|
||||
nameLsa.setLsaInfo(lsaInfo);
|
||||
nameLsa.addName("name1");
|
||||
|
||||
lsdbStatus.addNameLsa(nameLsa);
|
||||
|
||||
// CoordinateLsa
|
||||
CoordinateLsa coordinateLsa;
|
||||
coordinateLsa.setLsaInfo(lsaInfo);
|
||||
|
||||
coordinateLsa.setHyperbolicRadius(1.65);
|
||||
coordinateLsa.setHyperbolicAngle(angleVector.angles);
|
||||
|
||||
std::string outputAngles = "HyperbolicAngles: ";
|
||||
for (uint i = 0; i < angleVector.angles.size(); i++) {
|
||||
std::string angle = boost::lexical_cast<std::string>(angleVector.angles[i]);
|
||||
if (i == angleVector.angles.size()-1) {
|
||||
outputAngles += angle;
|
||||
}
|
||||
else {
|
||||
outputAngles += angle + ", ";
|
||||
}
|
||||
}
|
||||
outputAngles += "), ";
|
||||
|
||||
lsdbStatus.addCoordinateLsa(coordinateLsa);
|
||||
|
||||
std::ostringstream os;
|
||||
os << lsdbStatus;
|
||||
|
||||
BOOST_CHECK_EQUAL(os.str(), "LsdbStatus("
|
||||
"AdjacencyLsa("
|
||||
"LsaInfo("
|
||||
"OriginRouter: /test, "
|
||||
"SequenceNumber: 128, "
|
||||
"ExpirationPeriod: 10000 milliseconds), "
|
||||
"Adjacency(Name: /adjacency1, Uri: adjacency1, Cost: 128)), "
|
||||
"CoordinateLsa("
|
||||
"LsaInfo("
|
||||
"OriginRouter: /test, "
|
||||
"SequenceNumber: 128, "
|
||||
"ExpirationPeriod: 10000 milliseconds), "
|
||||
"HyperbolicRadius: 1.65, "
|
||||
+ outputAngles +
|
||||
"NameLsa("
|
||||
"LsaInfo("
|
||||
"OriginRouter: /test, "
|
||||
"SequenceNumber: 128, "
|
||||
"ExpirationPeriod: 10000 milliseconds), "
|
||||
"Name: /name1))");
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
} // namespace test
|
||||
} // namespace tlv
|
||||
} // namespace nlsr
|
||||
Reference in new issue
Block a user