blob: 0a3dc2adec81525d43de388584cc4ea841f5832b [file] [log] [blame]
Junxiao Shie5e2fce2014-02-10 20:01:53 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
Junxiao Shi5b3feb62016-08-19 01:51:41 +00003 * Copyright (c) 2014-2016, Regents of the University of California,
Spyridon Mastorakisd0381c02015-02-19 10:29:41 -08004 * Arizona Board of Regents,
5 * Colorado State University,
6 * University Pierre & Marie Curie, Sorbonne University,
7 * Washington University in St. Louis,
8 * Beijing Institute of Technology,
9 * The University of Memphis.
Alexander Afanasyev9bcbc7c2014-04-06 19:37:37 -070010 *
11 * This file is part of NFD (Named Data Networking Forwarding Daemon).
12 * See AUTHORS.md for complete list of NFD authors and contributors.
13 *
14 * NFD is free software: you can redistribute it and/or modify it under the terms
15 * of the GNU General Public License as published by the Free Software Foundation,
16 * either version 3 of the License, or (at your option) any later version.
17 *
18 * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
19 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
20 * PURPOSE. See the GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License along with
23 * NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
Junxiao Shi39ef2612014-11-29 20:35:19 -070024 */
Junxiao Shie5e2fce2014-02-10 20:01:53 -070025
26#include "table/strategy-info-host.hpp"
27
Junxiao Shid9ee45c2014-02-27 15:38:11 -070028#include "tests/test-common.hpp"
Junxiao Shie5e2fce2014-02-10 20:01:53 -070029
30namespace nfd {
Junxiao Shid9ee45c2014-02-27 15:38:11 -070031namespace tests {
Junxiao Shie5e2fce2014-02-10 20:01:53 -070032
Junxiao Shi39ef2612014-11-29 20:35:19 -070033using fw::StrategyInfo;
34
Junxiao Shie5e2fce2014-02-10 20:01:53 -070035static int g_DummyStrategyInfo_count = 0;
36
Junxiao Shifc021862016-08-25 21:51:18 +000037class DummyStrategyInfo : public StrategyInfo, noncopyable
Junxiao Shie5e2fce2014-02-10 20:01:53 -070038{
39public:
Junxiao Shi39ef2612014-11-29 20:35:19 -070040 static constexpr int
41 getTypeId()
42 {
43 return 1;
44 }
45
Junxiao Shie5e2fce2014-02-10 20:01:53 -070046 DummyStrategyInfo(int id)
47 : m_id(id)
48 {
49 ++g_DummyStrategyInfo_count;
50 }
Alexander Afanasyev9bcbc7c2014-04-06 19:37:37 -070051
Junxiao Shi39ef2612014-11-29 20:35:19 -070052 virtual
53 ~DummyStrategyInfo()
Junxiao Shie5e2fce2014-02-10 20:01:53 -070054 {
55 --g_DummyStrategyInfo_count;
56 }
Alexander Afanasyev9bcbc7c2014-04-06 19:37:37 -070057
Junxiao Shifc021862016-08-25 21:51:18 +000058public:
Junxiao Shie5e2fce2014-02-10 20:01:53 -070059 int m_id;
60};
61
Junxiao Shifc021862016-08-25 21:51:18 +000062class DummyStrategyInfo2 : public StrategyInfo, noncopyable
Junxiao Shi39ef2612014-11-29 20:35:19 -070063{
64public:
65 static constexpr int
66 getTypeId()
67 {
68 return 2;
69 }
70
71 DummyStrategyInfo2(int id)
72 : m_id(id)
73 {
74 }
75
Junxiao Shifc021862016-08-25 21:51:18 +000076public:
Junxiao Shi39ef2612014-11-29 20:35:19 -070077 int m_id;
78};
79
Junxiao Shifc021862016-08-25 21:51:18 +000080BOOST_AUTO_TEST_SUITE(Table)
81BOOST_FIXTURE_TEST_SUITE(TestStrategyInfoHost, BaseFixture)
Junxiao Shie5e2fce2014-02-10 20:01:53 -070082
Junxiao Shifc021862016-08-25 21:51:18 +000083BOOST_AUTO_TEST_CASE(Basic)
Junxiao Shie5e2fce2014-02-10 20:01:53 -070084{
85 StrategyInfoHost host;
Junxiao Shie5e2fce2014-02-10 20:01:53 -070086 g_DummyStrategyInfo_count = 0;
Junxiao Shifc021862016-08-25 21:51:18 +000087 bool isNew = false;
Alexander Afanasyev9bcbc7c2014-04-06 19:37:37 -070088
Junxiao Shifc021862016-08-25 21:51:18 +000089 DummyStrategyInfo* info = nullptr;
90 std::tie(info, isNew) = host.insertStrategyInfo<DummyStrategyInfo>(3503);
91 BOOST_CHECK_EQUAL(isNew, true);
92 BOOST_CHECK_EQUAL(g_DummyStrategyInfo_count, 1);
93 BOOST_REQUIRE(info != nullptr);
94 BOOST_CHECK_EQUAL(info->m_id, 3503);
95 BOOST_CHECK_EQUAL(host.getStrategyInfo<DummyStrategyInfo>(), info);
Junxiao Shie5e2fce2014-02-10 20:01:53 -070096
Junxiao Shifc021862016-08-25 21:51:18 +000097 DummyStrategyInfo* info2 = nullptr;
98 std::tie(info2, isNew) = host.insertStrategyInfo<DummyStrategyInfo>(1032);
99 BOOST_CHECK_EQUAL(isNew, false);
100 BOOST_CHECK_EQUAL(g_DummyStrategyInfo_count, 1);
101 BOOST_CHECK_EQUAL(info2, info);
102 BOOST_CHECK_EQUAL(info->m_id, 3503);
103 BOOST_CHECK_EQUAL(host.getStrategyInfo<DummyStrategyInfo>(), info);
Alexander Afanasyev9bcbc7c2014-04-06 19:37:37 -0700104
Junxiao Shie5e2fce2014-02-10 20:01:53 -0700105 host.clearStrategyInfo();
Junxiao Shi39ef2612014-11-29 20:35:19 -0700106 BOOST_CHECK(host.getStrategyInfo<DummyStrategyInfo>() == nullptr);
Junxiao Shie5e2fce2014-02-10 20:01:53 -0700107 BOOST_CHECK_EQUAL(g_DummyStrategyInfo_count, 0);
108}
109
Junxiao Shi39ef2612014-11-29 20:35:19 -0700110BOOST_AUTO_TEST_CASE(Types)
111{
112 StrategyInfoHost host;
Junxiao Shifc021862016-08-25 21:51:18 +0000113 g_DummyStrategyInfo_count = 0;
Junxiao Shi39ef2612014-11-29 20:35:19 -0700114
Junxiao Shi5b3feb62016-08-19 01:51:41 +0000115 host.insertStrategyInfo<DummyStrategyInfo>(8063);
Junxiao Shi39ef2612014-11-29 20:35:19 -0700116 BOOST_REQUIRE(host.getStrategyInfo<DummyStrategyInfo>() != nullptr);
117 BOOST_CHECK_EQUAL(host.getStrategyInfo<DummyStrategyInfo>()->m_id, 8063);
118
Junxiao Shi5b3feb62016-08-19 01:51:41 +0000119 host.insertStrategyInfo<DummyStrategyInfo2>(2871);
Junxiao Shi39ef2612014-11-29 20:35:19 -0700120 BOOST_REQUIRE(host.getStrategyInfo<DummyStrategyInfo2>() != nullptr);
121 BOOST_CHECK_EQUAL(host.getStrategyInfo<DummyStrategyInfo2>()->m_id, 2871);
122
123 BOOST_REQUIRE(host.getStrategyInfo<DummyStrategyInfo>() != nullptr);
124 BOOST_CHECK_EQUAL(host.getStrategyInfo<DummyStrategyInfo>()->m_id, 8063);
Junxiao Shifc021862016-08-25 21:51:18 +0000125
126 BOOST_CHECK_EQUAL(host.eraseStrategyInfo<DummyStrategyInfo>(), 1);
127 BOOST_CHECK(host.getStrategyInfo<DummyStrategyInfo>() == nullptr);
128 BOOST_CHECK_EQUAL(g_DummyStrategyInfo_count, 0);
129 BOOST_CHECK(host.getStrategyInfo<DummyStrategyInfo2>() != nullptr);
130
131 BOOST_CHECK_EQUAL(host.eraseStrategyInfo<DummyStrategyInfo>(), 0);
Junxiao Shi39ef2612014-11-29 20:35:19 -0700132}
133
Junxiao Shifc021862016-08-25 21:51:18 +0000134BOOST_AUTO_TEST_SUITE_END() // TestStrategyInfoHost
135BOOST_AUTO_TEST_SUITE_END() // Table
Junxiao Shie5e2fce2014-02-10 20:01:53 -0700136
Junxiao Shid9ee45c2014-02-27 15:38:11 -0700137} // namespace tests
Junxiao Shie5e2fce2014-02-10 20:01:53 -0700138} // namespace nfd