From 9212bd43bb387afef32cdaeadc873b4bd742fbaa Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Mon, 23 Oct 2017 10:59:38 -0500 Subject: [PATCH] lsa: make base class abstract refs: #4353 Change-Id: If95c1689727f541c123623d21aec78ab8bdd58e6 --- src/lsa.cpp | 8 +++-- src/lsa.hpp | 21 +++++++++----- tests/mocks/lsa.cpp | 58 +++++++++++++++++++++++++++++++++++++ tests/mocks/lsa.hpp | 51 ++++++++++++++++++++++++++++++++ tests/tlv/test-lsa-info.cpp | 4 +-- 5 files changed, 130 insertions(+), 12 deletions(-) create mode 100644 tests/mocks/lsa.cpp create mode 100644 tests/mocks/lsa.hpp diff --git a/src/lsa.cpp b/src/lsa.cpp index 1b5e804..9c05710 100644 --- a/src/lsa.cpp +++ b/src/lsa.cpp @@ -59,7 +59,7 @@ NameLsa::NameLsa(const ndn::Name& origR, uint32_t lsn, } std::string -NameLsa::getData() +NameLsa::getData() const { std::ostringstream os; os << m_origRouter << "|" << Lsa::Type::NAME << "|" << m_lsSeqNo << "|" @@ -165,7 +165,7 @@ CoordinateLsa::isEqualContent(const CoordinateLsa& clsa) } std::string -CoordinateLsa::getData() +CoordinateLsa::getData() const { std::ostringstream os; os << m_origRouter << "|" << Lsa::Type::COORDINATE << "|" << m_lsSeqNo << "|" @@ -258,7 +258,7 @@ AdjLsa::isEqualContent(AdjLsa& alsa) } std::string -AdjLsa::getData() +AdjLsa::getData() const { std::ostringstream os; os << m_origRouter << "|" << Lsa::Type::ADJACENCY << "|" << m_lsSeqNo << "|" @@ -402,6 +402,8 @@ to_string(const nlsr::Lsa::Type& type) return "COORDINATE"; case nlsr::Lsa::Type::NAME: return "NAME"; + case nlsr::Lsa::Type::MOCK: + return "MOCK"; default: return "BASE"; } diff --git a/src/lsa.hpp b/src/lsa.hpp index dd69d8e..afd97e7 100644 --- a/src/lsa.hpp +++ b/src/lsa.hpp @@ -41,7 +41,8 @@ public: ADJACENCY, COORDINATE, NAME, - BASE + BASE, + MOCK }; Lsa() @@ -106,6 +107,12 @@ public: return m_expiringEventId; } + virtual std::string + getData() const = 0; + + virtual bool + initializeFromContent(const std::string& content) = 0; + protected: ndn::Name m_origRouter; uint32_t m_lsSeqNo; @@ -168,7 +175,7 @@ public: 2\>|...|\| */ std::string - getData(); + getData() const override; /*! \brief Initializes this LSA object with content's data. @@ -179,7 +186,7 @@ public: getData(); getData() returns data of this format, in other words. */ bool - initializeFromContent(const std::string& content); + initializeFromContent(const std::string& content) override; bool isEqualContent(const NameLsa& other) const; @@ -239,7 +246,7 @@ public: n\>|\| */ std::string - getData(); + getData() const override; /*! \brief Initializes this adj. LSA from the supplied content. @@ -247,7 +254,7 @@ public: according to getData(). */ bool - initializeFromContent(const std::string& content); + initializeFromContent(const std::string& content) override; uint32_t getNoLink() @@ -317,7 +324,7 @@ public: router\>|coordinate|\|\|\|\| */ std::string - getData(); + getData() const override; /*! \brief Initializes this coordinate LSA with the data in content. @@ -328,7 +335,7 @@ public: same as for getData(); */ bool - initializeFromContent(const std::string& content); + initializeFromContent(const std::string& content) override; double getCorRadius() const diff --git a/tests/mocks/lsa.cpp b/tests/mocks/lsa.cpp new file mode 100644 index 0000000..5d495a1 --- /dev/null +++ b/tests/mocks/lsa.cpp @@ -0,0 +1,58 @@ +/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ +/** + * Copyright (c) 2014-2017, 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 . + **/ + +#include "./lsa.hpp" + +namespace nlsr { +namespace test { + +std::string +MockLsa::getData() const +{ + return ""; +} + +bool +MockLsa::initializeFromContent(const std::string& content) +{ + boost::char_separator sep("|"); + boost::tokenizer >tokens(content, sep); + boost::tokenizer >::iterator tok_iter = + tokens.begin(); + m_origRouter = ndn::Name(*tok_iter++); + if (!(m_origRouter.size() > 0)) { + return false; + } + try { + if (*tok_iter++ != std::to_string(Lsa::Type::MOCK)) { + return false; + } + m_lsSeqNo = boost::lexical_cast(*tok_iter++); + m_expirationTimePoint = ndn::time::fromIsoString(*tok_iter++); + } + catch (const std::exception& e) { + return false; + } + return true; +} + +} // namespace test +} // namespace nlsr diff --git a/tests/mocks/lsa.hpp b/tests/mocks/lsa.hpp new file mode 100644 index 0000000..c447384 --- /dev/null +++ b/tests/mocks/lsa.hpp @@ -0,0 +1,51 @@ +/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ +/** + * Copyright (c) 2014-2017, 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 . + **/ + +#ifndef NLSR_TESTS_MOCKS_LSA_HPP +#define NLSR_TESTS_MOCKS_LSA_HPP + +#include "src/lsa.hpp" + +#include +#include +#include + +namespace nlsr { +namespace test { + +class MockLsa : public Lsa +{ +public: + MockLsa() + { + } + + std::string + getData() const override; + + bool + initializeFromContent(const std::string& content) override; +}; + +} // namespace test +} // namespace nlsr + +#endif // NLSR_TESTS_MOCKS_LSA_HPP diff --git a/tests/tlv/test-lsa-info.cpp b/tests/tlv/test-lsa-info.cpp index a179e2c..eea9b37 100644 --- a/tests/tlv/test-lsa-info.cpp +++ b/tests/tlv/test-lsa-info.cpp @@ -20,8 +20,8 @@ **/ #include "tlv/lsa-info.hpp" - #include "../boost-test.hpp" +#include "tests/mocks/lsa.hpp" namespace nlsr { namespace tlv { @@ -125,7 +125,7 @@ BOOST_AUTO_TEST_CASE(LsaInfoOutputStream) BOOST_AUTO_TEST_CASE(LsaInfoMake) { - Lsa lsa; + nlsr::test::MockLsa lsa; lsa.setOrigRouter("/test/lsa/info/tlv"); lsa.setLsSeqNo(128); lsa.setExpirationTimePoint(ndn::time::system_clock::now());