blob: 2a3a33e01c2c88d72a6246a917c25b716d208e00 [file] [log] [blame]
Junxiao Shie5e2fce2014-02-10 20:01:53 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Davide Pesaventocf7db2f2019-03-24 23:17:28 -04002/*
3 * Copyright (c) 2014-2019, 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"
Davide Pesaventocf7db2f2019-03-24 23:17:28 -040029#include "tests/daemon/global-io-fixture.hpp"
Junxiao Shie5e2fce2014-02-10 20:01:53 -070030
31namespace nfd {
Junxiao Shid9ee45c2014-02-27 15:38:11 -070032namespace tests {
Junxiao Shie5e2fce2014-02-10 20:01:53 -070033
Junxiao Shi39ef2612014-11-29 20:35:19 -070034using fw::StrategyInfo;
35
Junxiao Shie5e2fce2014-02-10 20:01:53 -070036static int g_DummyStrategyInfo_count = 0;
37
Junxiao Shifc021862016-08-25 21:51:18 +000038class DummyStrategyInfo : public StrategyInfo, noncopyable
Junxiao Shie5e2fce2014-02-10 20:01:53 -070039{
40public:
Junxiao Shi39ef2612014-11-29 20:35:19 -070041 static constexpr int
42 getTypeId()
43 {
44 return 1;
45 }
46
Junxiao Shie5e2fce2014-02-10 20:01:53 -070047 DummyStrategyInfo(int id)
48 : m_id(id)
49 {
50 ++g_DummyStrategyInfo_count;
51 }
Alexander Afanasyev9bcbc7c2014-04-06 19:37:37 -070052
Junxiao Shi39ef2612014-11-29 20:35:19 -070053 virtual
54 ~DummyStrategyInfo()
Junxiao Shie5e2fce2014-02-10 20:01:53 -070055 {
56 --g_DummyStrategyInfo_count;
57 }
Alexander Afanasyev9bcbc7c2014-04-06 19:37:37 -070058
Junxiao Shifc021862016-08-25 21:51:18 +000059public:
Junxiao Shie5e2fce2014-02-10 20:01:53 -070060 int m_id;
61};
62
Junxiao Shifc021862016-08-25 21:51:18 +000063class DummyStrategyInfo2 : public StrategyInfo, noncopyable
Junxiao Shi39ef2612014-11-29 20:35:19 -070064{
65public:
66 static constexpr int
67 getTypeId()
68 {
69 return 2;
70 }
71
72 DummyStrategyInfo2(int id)
73 : m_id(id)
74 {
75 }
76
Junxiao Shifc021862016-08-25 21:51:18 +000077public:
Junxiao Shi39ef2612014-11-29 20:35:19 -070078 int m_id;
79};
80
Junxiao Shifc021862016-08-25 21:51:18 +000081BOOST_AUTO_TEST_SUITE(Table)
Davide Pesaventocf7db2f2019-03-24 23:17:28 -040082BOOST_FIXTURE_TEST_SUITE(TestStrategyInfoHost, GlobalIoFixture)
Junxiao Shie5e2fce2014-02-10 20:01:53 -070083
Junxiao Shifc021862016-08-25 21:51:18 +000084BOOST_AUTO_TEST_CASE(Basic)
Junxiao Shie5e2fce2014-02-10 20:01:53 -070085{
86 StrategyInfoHost host;
Junxiao Shie5e2fce2014-02-10 20:01:53 -070087 g_DummyStrategyInfo_count = 0;
Junxiao Shifc021862016-08-25 21:51:18 +000088 bool isNew = false;
Alexander Afanasyev9bcbc7c2014-04-06 19:37:37 -070089
Junxiao Shifc021862016-08-25 21:51:18 +000090 DummyStrategyInfo* info = nullptr;
91 std::tie(info, isNew) = host.insertStrategyInfo<DummyStrategyInfo>(3503);
92 BOOST_CHECK_EQUAL(isNew, true);
93 BOOST_CHECK_EQUAL(g_DummyStrategyInfo_count, 1);
94 BOOST_REQUIRE(info != nullptr);
95 BOOST_CHECK_EQUAL(info->m_id, 3503);
96 BOOST_CHECK_EQUAL(host.getStrategyInfo<DummyStrategyInfo>(), info);
Junxiao Shie5e2fce2014-02-10 20:01:53 -070097
Junxiao Shifc021862016-08-25 21:51:18 +000098 DummyStrategyInfo* info2 = nullptr;
99 std::tie(info2, isNew) = host.insertStrategyInfo<DummyStrategyInfo>(1032);
100 BOOST_CHECK_EQUAL(isNew, false);
101 BOOST_CHECK_EQUAL(g_DummyStrategyInfo_count, 1);
102 BOOST_CHECK_EQUAL(info2, info);
103 BOOST_CHECK_EQUAL(info->m_id, 3503);
104 BOOST_CHECK_EQUAL(host.getStrategyInfo<DummyStrategyInfo>(), info);
Alexander Afanasyev9bcbc7c2014-04-06 19:37:37 -0700105
Junxiao Shie5e2fce2014-02-10 20:01:53 -0700106 host.clearStrategyInfo();
Junxiao Shi39ef2612014-11-29 20:35:19 -0700107 BOOST_CHECK(host.getStrategyInfo<DummyStrategyInfo>() == nullptr);
Junxiao Shie5e2fce2014-02-10 20:01:53 -0700108 BOOST_CHECK_EQUAL(g_DummyStrategyInfo_count, 0);
109}
110
Junxiao Shi39ef2612014-11-29 20:35:19 -0700111BOOST_AUTO_TEST_CASE(Types)
112{
113 StrategyInfoHost host;
Junxiao Shifc021862016-08-25 21:51:18 +0000114 g_DummyStrategyInfo_count = 0;
Junxiao Shi39ef2612014-11-29 20:35:19 -0700115
Junxiao Shi5b3feb62016-08-19 01:51:41 +0000116 host.insertStrategyInfo<DummyStrategyInfo>(8063);
Junxiao Shi39ef2612014-11-29 20:35:19 -0700117 BOOST_REQUIRE(host.getStrategyInfo<DummyStrategyInfo>() != nullptr);
118 BOOST_CHECK_EQUAL(host.getStrategyInfo<DummyStrategyInfo>()->m_id, 8063);
119
Junxiao Shi5b3feb62016-08-19 01:51:41 +0000120 host.insertStrategyInfo<DummyStrategyInfo2>(2871);
Junxiao Shi39ef2612014-11-29 20:35:19 -0700121 BOOST_REQUIRE(host.getStrategyInfo<DummyStrategyInfo2>() != nullptr);
122 BOOST_CHECK_EQUAL(host.getStrategyInfo<DummyStrategyInfo2>()->m_id, 2871);
123
124 BOOST_REQUIRE(host.getStrategyInfo<DummyStrategyInfo>() != nullptr);
125 BOOST_CHECK_EQUAL(host.getStrategyInfo<DummyStrategyInfo>()->m_id, 8063);
Junxiao Shifc021862016-08-25 21:51:18 +0000126
127 BOOST_CHECK_EQUAL(host.eraseStrategyInfo<DummyStrategyInfo>(), 1);
128 BOOST_CHECK(host.getStrategyInfo<DummyStrategyInfo>() == nullptr);
129 BOOST_CHECK_EQUAL(g_DummyStrategyInfo_count, 0);
130 BOOST_CHECK(host.getStrategyInfo<DummyStrategyInfo2>() != nullptr);
131
132 BOOST_CHECK_EQUAL(host.eraseStrategyInfo<DummyStrategyInfo>(), 0);
Junxiao Shi39ef2612014-11-29 20:35:19 -0700133}
134
Junxiao Shifc021862016-08-25 21:51:18 +0000135BOOST_AUTO_TEST_SUITE_END() // TestStrategyInfoHost
136BOOST_AUTO_TEST_SUITE_END() // Table
Junxiao Shie5e2fce2014-02-10 20:01:53 -0700137
Junxiao Shid9ee45c2014-02-27 15:38:11 -0700138} // namespace tests
Junxiao Shie5e2fce2014-02-10 20:01:53 -0700139} // namespace nfd