blob: 6ac4a7fe349cae4ba80637ea3c6ca7aa5bbe18e9 [file] [log] [blame]
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
* Copyright (C) 2014 Named Data Networking Project
* See COPYING for copyright and distribution information.
*/
#include "mgmt/fib-manager.hpp"
#include "fw/forwarder.hpp"
#include "table/fib.hpp"
#include "face/face.hpp"
#include "mgmt/internal-face.hpp"
#include "../face/dummy-face.hpp"
#include <ndn-cpp-dev/management/fib-management-options.hpp>
#include <boost/test/unit_test.hpp>
static nfd::FaceId g_faceCount = 1;
static std::vector<nfd::shared_ptr<nfd::Face> > g_faces;
static nfd::shared_ptr<nfd::Face>
getFace(nfd::FaceId id)
{
if (g_faces.size() < id)
{
BOOST_FAIL("Attempted to access invalid FaceId: " << id);
}
return g_faces[id-1];
}
// namespace nfd {
// NFD_LOG_INIT("FibManagerTest");
// BOOST_AUTO_TEST_SUITE(MgmtFibManager)
// BOOST_AUTO_TEST_CASE(MalformedCommmand)
// {
// shared_ptr<InternalFace> face(new InternalFace);
// Fib fib;
// FibManager manager(fib, &getFace, face);
// Interest command(manager.getRequestPrefix());
// manager.onFibRequest(command);
// }
// BOOST_AUTO_TEST_CASE(UnsupportedVerb)
// {
// shared_ptr<InternalFace> face(new InternalFace);
// Fib fib;
// FibManager manager(fib, &getFace, face);
// ndn::FibManagementOptions options;
// options.setName("/hello");
// options.setFaceId(1);
// options.setCost(1);
// Block encodedOptions(options.wireEncode());
// Name commandName(manager.getRequestPrefix());
// commandName.append("unsupported");
// commandName.append(encodedOptions);
// Interest command(commandName);
// manager.onFibRequest(command);
// }
// BOOST_AUTO_TEST_CASE(AddNextHopVerbInitialAdd)
// {
// g_faceCount = 1;
// g_faces.clear();
// g_faces.push_back(make_shared<DummyFace>());
// shared_ptr<InternalFace> face(new InternalFace);
// Fib fib;
// FibManager manager(fib, &getFace, face);
// ndn::FibManagementOptions options;
// options.setName("/hello");
// options.setFaceId(1);
// options.setCost(1);
// Block encodedOptions(options.wireEncode());
// Name commandName(manager.getRequestPrefix());
// commandName.append("add-nexthop");
// commandName.append(encodedOptions);
// Interest command(commandName);
// manager.onFibRequest(command);
// shared_ptr<fib::Entry> entry = fib.findLongestPrefixMatch("/hello");
// if (entry)
// {
// const fib::NextHopList& hops = entry->getNextHops();
// BOOST_REQUIRE(hops.size() == 1);
// // BOOST_CHECK(hops[0].getFace()->getFaceId() == 1);
// BOOST_CHECK(hops[0].getCost() == 1);
// }
// else
// {
// BOOST_FAIL("Failed to find expected fib entry");
// }
// }
// BOOST_AUTO_TEST_CASE(AddNextHopVerbAddToExisting)
// {
// g_faceCount = 1;
// g_faces.clear();
// g_faces.push_back(make_shared<DummyFace>());
// g_faces.push_back(make_shared<DummyFace>());
// shared_ptr<InternalFace> face(new InternalFace);
// Fib fib;
// FibManager manager(fib, &getFace, face);
// // Add faces with cost == FaceID for the name /hello
// // This test assumes:
// // FaceIDs are assigned from 1 to N
// // Faces are store sequentially in the NextHopList
// // NextHopList supports random access
// for (int i = 1; i <= 2; i++)
// {
// ndn::FibManagementOptions options;
// options.setName("/hello");
// options.setFaceId(i);
// options.setCost(i);
// Block encodedOptions(options.wireEncode());
// Name commandName(manager.getRequestPrefix());
// commandName.append("add-nexthop");
// commandName.append(encodedOptions);
// Interest command(commandName);
// manager.onFibRequest(command);
// shared_ptr<fib::Entry> entry = fib.findLongestPrefixMatch("/hello");
// if (entry)
// {
// const fib::NextHopList& hops = entry->getNextHops();
// for (int j = 1; j <= i; j++)
// {
// BOOST_REQUIRE(hops.size() == i);
// BOOST_CHECK(hops[j-1].getCost() == j);
// }
// }
// else
// {
// BOOST_FAIL("Failed to find expected fib entry");
// }
// }
// }
// BOOST_AUTO_TEST_CASE(AddNextHopVerbUpdateFaceCost)
// {
// g_faceCount = 1;
// g_faces.clear();
// g_faces.push_back(make_shared<DummyFace>());
// shared_ptr<InternalFace> face(new InternalFace);
// Fib fib;
// FibManager manager(fib, &getFace, face);
// ndn::FibManagementOptions options;
// options.setName("/hello");
// options.setFaceId(1);
// {
// options.setCost(1);
// Block encodedOptions(options.wireEncode());
// Name commandName(manager.getRequestPrefix());
// commandName.append("add-nexthop");
// commandName.append(encodedOptions);
// Interest command(commandName);
// manager.onFibRequest(command);
// }
// {
// options.setCost(2);
// Block encodedOptions(options.wireEncode());
// Name commandName(manager.getRequestPrefix());
// commandName.append("add-nexthop");
// commandName.append(encodedOptions);
// Interest command(commandName);
// manager.onFibRequest(command);
// }
// shared_ptr<fib::Entry> entry = fib.findLongestPrefixMatch("/hello");
// // Add faces with cost == FaceID for the name /hello
// // This test assumes:
// // FaceIDs are assigned from 1 to N
// // Faces are store sequentially in the NextHopList
// // NextHopList supports random access
// if (entry)
// {
// const fib::NextHopList& hops = entry->getNextHops();
// BOOST_REQUIRE(hops.size() == 1);
// // BOOST_CHECK(hops[0].getFace()->getFaceId() == 1);
// BOOST_CHECK(hops[0].getCost() == 2);
// }
// else
// {
// BOOST_FAIL("Failed to find expected fib entry");
// }
// }
// BOOST_AUTO_TEST_SUITE_END()
// } // namespace nfd