rib: Integrating NRD code into NFD codebase

Change-Id: I3e548f974255f62a4680cfc6c12be3bb7a3db4d2
Refs: #1486
diff --git a/tests/rib/rib.cpp b/tests/rib/rib.cpp
new file mode 100644
index 0000000..fd5777b
--- /dev/null
+++ b/tests/rib/rib.cpp
@@ -0,0 +1,86 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014  Regents of the University of California,
+ *                     Arizona Board of Regents,
+ *                     Colorado State University,
+ *                     University Pierre & Marie Curie, Sorbonne University,
+ *                     Washington University in St. Louis,
+ *                     Beijing Institute of Technology,
+ *                     The University of Memphis
+ *
+ * This file is part of NFD (Named Data Networking Forwarding Daemon).
+ * See AUTHORS.md for complete list of NFD authors and contributors.
+ *
+ * NFD 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.
+ *
+ * NFD 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
+ * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ **/
+
+#include "rib/rib.hpp"
+
+#include "tests/test-common.hpp"
+
+namespace nfd {
+namespace rib {
+namespace tests {
+
+BOOST_FIXTURE_TEST_SUITE(Rib, nfd::tests::BaseFixture)
+
+BOOST_AUTO_TEST_CASE(Basic)
+{
+  rib::Rib rib;
+
+  PrefixRegOptions options1;
+  options1.setName("/hello/world");
+  options1.setFlags(tlv::nrd::NDN_FORW_CHILD_INHERIT | tlv::nrd::NDN_FORW_CAPTURE);
+  options1.setCost(10);
+  options1.setExpirationPeriod(time::milliseconds(1500));
+  options1.setFaceId(1);
+
+  rib.insert(options1);
+  BOOST_CHECK_EQUAL(rib.size(), 1);
+
+  PrefixRegOptions options2;
+  options2.setName("/hello/world");
+  options2.setFlags(tlv::nrd::NDN_FORW_CHILD_INHERIT);
+  options2.setExpirationPeriod(time::seconds(0));
+  options2.setFaceId(1);
+  options2.setCost(100);
+
+  rib.insert(options2);
+  BOOST_CHECK_EQUAL(rib.size(), 1);
+
+  options2.setFaceId(2);
+  rib.insert(options2);
+  BOOST_CHECK_EQUAL(rib.size(), 2);
+
+  options2.setName("/foo/bar");
+  rib.insert(options2);
+  BOOST_CHECK_EQUAL(rib.size(), 3);
+
+  rib.erase(options2);
+  BOOST_CHECK_EQUAL(rib.size(), 2);
+
+  options2.setName("/hello/world");
+  rib.erase(options2);
+  BOOST_CHECK_EQUAL(rib.size(), 1);
+
+  BOOST_CHECK(rib.find(options2) == rib.end());
+  BOOST_CHECK(rib.find(options1) != rib.end());
+
+  rib.erase(options1);
+  BOOST_CHECK(rib.empty());
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} // namespace tests
+} // namespace rib
+} // namespace nfd
diff --git a/tests/wscript b/tests/wscript
index 423e5e3..bf56913 100644
--- a/tests/wscript
+++ b/tests/wscript
@@ -64,6 +64,15 @@
         if bld.env['HAVE_UNIX_SOCKETS']:
             unit_tests_nfd.source += bld.path.ant_glob('daemon/face/unix-*.cpp')
 
+        unit_tests_rib = bld.program(
+            target='../unit-tests-rib',
+            features='cxx cxxprogram',
+            source=bld.path.ant_glob(['rib/**/*.cpp']),
+            use='rib-objects unit-tests-main',
+            includes=['.'],
+            install_prefix=None,
+          )
+
     # Other tests (e.g., stress tests that can be enabled even if unit tests are disabled)
     if bld.env['WITH_TESTS'] or bld.env['WITH_OTHER_TESTS']:
         bld.recurse("other")