blob: 87c36c8f2306a74a424ca051850ae1e6650b6bbb [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/*
Davide Pesaventoa3a7a4e2022-05-29 16:06:22 -04003 * Copyright (c) 2014-2022, 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
Davide Pesaventoe422f9e2022-06-03 01:30:23 -040031namespace nfd::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
Davide Pesaventoa3a7a4e2022-05-29 16:06:22 -040052 ~DummyStrategyInfo() override
Junxiao Shie5e2fce2014-02-10 20:01:53 -070053 {
54 --g_DummyStrategyInfo_count;
55 }
Alexander Afanasyev9bcbc7c2014-04-06 19:37:37 -070056
Junxiao Shifc021862016-08-25 21:51:18 +000057public:
Junxiao Shie5e2fce2014-02-10 20:01:53 -070058 int m_id;
59};
60
Junxiao Shifc021862016-08-25 21:51:18 +000061class DummyStrategyInfo2 : public StrategyInfo, noncopyable
Junxiao Shi39ef2612014-11-29 20:35:19 -070062{
63public:
64 static constexpr int
65 getTypeId()
66 {
67 return 2;
68 }
69
70 DummyStrategyInfo2(int id)
71 : m_id(id)
72 {
73 }
74
Junxiao Shifc021862016-08-25 21:51:18 +000075public:
Junxiao Shi39ef2612014-11-29 20:35:19 -070076 int m_id;
77};
78
Junxiao Shifc021862016-08-25 21:51:18 +000079BOOST_AUTO_TEST_SUITE(Table)
Davide Pesaventocf7db2f2019-03-24 23:17:28 -040080BOOST_FIXTURE_TEST_SUITE(TestStrategyInfoHost, GlobalIoFixture)
Junxiao Shie5e2fce2014-02-10 20:01:53 -070081
Junxiao Shifc021862016-08-25 21:51:18 +000082BOOST_AUTO_TEST_CASE(Basic)
Junxiao Shie5e2fce2014-02-10 20:01:53 -070083{
84 StrategyInfoHost host;
Junxiao Shie5e2fce2014-02-10 20:01:53 -070085 g_DummyStrategyInfo_count = 0;
Alexander Afanasyev9bcbc7c2014-04-06 19:37:37 -070086
Davide Pesaventoa3a7a4e2022-05-29 16:06:22 -040087 auto [info, isNew] = host.insertStrategyInfo<DummyStrategyInfo>(3503);
Junxiao Shifc021862016-08-25 21:51:18 +000088 BOOST_CHECK_EQUAL(isNew, true);
89 BOOST_CHECK_EQUAL(g_DummyStrategyInfo_count, 1);
90 BOOST_REQUIRE(info != nullptr);
91 BOOST_CHECK_EQUAL(info->m_id, 3503);
92 BOOST_CHECK_EQUAL(host.getStrategyInfo<DummyStrategyInfo>(), info);
Junxiao Shie5e2fce2014-02-10 20:01:53 -070093
Davide Pesaventoa3a7a4e2022-05-29 16:06:22 -040094 auto [info2, isNew2] = host.insertStrategyInfo<DummyStrategyInfo>(1032);
95 BOOST_CHECK_EQUAL(isNew2, false);
Junxiao Shifc021862016-08-25 21:51:18 +000096 BOOST_CHECK_EQUAL(g_DummyStrategyInfo_count, 1);
97 BOOST_CHECK_EQUAL(info2, info);
98 BOOST_CHECK_EQUAL(info->m_id, 3503);
99 BOOST_CHECK_EQUAL(host.getStrategyInfo<DummyStrategyInfo>(), info);
Alexander Afanasyev9bcbc7c2014-04-06 19:37:37 -0700100
Junxiao Shie5e2fce2014-02-10 20:01:53 -0700101 host.clearStrategyInfo();
Junxiao Shi39ef2612014-11-29 20:35:19 -0700102 BOOST_CHECK(host.getStrategyInfo<DummyStrategyInfo>() == nullptr);
Junxiao Shie5e2fce2014-02-10 20:01:53 -0700103 BOOST_CHECK_EQUAL(g_DummyStrategyInfo_count, 0);
104}
105
Junxiao Shi39ef2612014-11-29 20:35:19 -0700106BOOST_AUTO_TEST_CASE(Types)
107{
108 StrategyInfoHost host;
Junxiao Shifc021862016-08-25 21:51:18 +0000109 g_DummyStrategyInfo_count = 0;
Junxiao Shi39ef2612014-11-29 20:35:19 -0700110
Junxiao Shi5b3feb62016-08-19 01:51:41 +0000111 host.insertStrategyInfo<DummyStrategyInfo>(8063);
Junxiao Shi39ef2612014-11-29 20:35:19 -0700112 BOOST_REQUIRE(host.getStrategyInfo<DummyStrategyInfo>() != nullptr);
113 BOOST_CHECK_EQUAL(host.getStrategyInfo<DummyStrategyInfo>()->m_id, 8063);
114
Junxiao Shi5b3feb62016-08-19 01:51:41 +0000115 host.insertStrategyInfo<DummyStrategyInfo2>(2871);
Junxiao Shi39ef2612014-11-29 20:35:19 -0700116 BOOST_REQUIRE(host.getStrategyInfo<DummyStrategyInfo2>() != nullptr);
117 BOOST_CHECK_EQUAL(host.getStrategyInfo<DummyStrategyInfo2>()->m_id, 2871);
118
119 BOOST_REQUIRE(host.getStrategyInfo<DummyStrategyInfo>() != nullptr);
120 BOOST_CHECK_EQUAL(host.getStrategyInfo<DummyStrategyInfo>()->m_id, 8063);
Junxiao Shifc021862016-08-25 21:51:18 +0000121
122 BOOST_CHECK_EQUAL(host.eraseStrategyInfo<DummyStrategyInfo>(), 1);
123 BOOST_CHECK(host.getStrategyInfo<DummyStrategyInfo>() == nullptr);
124 BOOST_CHECK_EQUAL(g_DummyStrategyInfo_count, 0);
125 BOOST_CHECK(host.getStrategyInfo<DummyStrategyInfo2>() != nullptr);
126
127 BOOST_CHECK_EQUAL(host.eraseStrategyInfo<DummyStrategyInfo>(), 0);
Junxiao Shi39ef2612014-11-29 20:35:19 -0700128}
129
Junxiao Shifc021862016-08-25 21:51:18 +0000130BOOST_AUTO_TEST_SUITE_END() // TestStrategyInfoHost
131BOOST_AUTO_TEST_SUITE_END() // Table
Junxiao Shie5e2fce2014-02-10 20:01:53 -0700132
Davide Pesaventoe422f9e2022-06-03 01:30:23 -0400133} // namespace nfd::tests