blob: 00fe2cff34482e1610ae5664b8628a3722a29721 [file] [log] [blame]
Junxiao Shi5ec80222014-03-25 20:08:05 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
2/**
3 * Copyright (C) 2013 Regents of the University of California.
4 * See COPYING for copyright and distribution information.
5 */
6
7#include "management/nfd-control-command.hpp"
Junxiao Shi5ec80222014-03-25 20:08:05 -07008
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -07009#include "boost-test.hpp"
Junxiao Shi5ec80222014-03-25 20:08:05 -070010
11namespace ndn {
12namespace nfd {
13
Alexander Afanasyevd1b5c412014-03-27 15:03:51 -070014BOOST_AUTO_TEST_SUITE(ManagementTestNfdControlCommand)
Junxiao Shi5ec80222014-03-25 20:08:05 -070015
16BOOST_AUTO_TEST_CASE(FaceCreate)
17{
18 FaceCreateCommand command;
19 BOOST_CHECK_EQUAL(command.getPrefix(), "ndn:/localhost/nfd/faces/create");
20
21 ControlParameters p1;
22 p1.setUri("tcp4://192.0.2.1")
23 .setFaceId(4);
24 BOOST_CHECK_THROW(command.validateRequest(p1), ControlCommand::ArgumentError);
25 BOOST_CHECK_NO_THROW(command.validateResponse(p1));
26
27 ControlParameters p2;
28 p2.setName("ndn:/example");
29 BOOST_CHECK_THROW(command.validateRequest(p2), ControlCommand::ArgumentError);
30 BOOST_CHECK_THROW(command.validateResponse(p2), ControlCommand::ArgumentError);
31
32 ControlParameters p3;
33 p3.setUri("tcp4://192.0.2.1")
34 .setFaceId(0);
35 BOOST_CHECK_THROW(command.validateResponse(p3), ControlCommand::ArgumentError);
36}
37
38BOOST_AUTO_TEST_CASE(FaceDestroy)
39{
40 FaceDestroyCommand command;
41 BOOST_CHECK_EQUAL(command.getPrefix(), "ndn:/localhost/nfd/faces/destroy");
42
43 ControlParameters p1;
44 p1.setUri("tcp4://192.0.2.1")
45 .setFaceId(4);
46 BOOST_CHECK_THROW(command.validateRequest(p1), ControlCommand::ArgumentError);
47 BOOST_CHECK_THROW(command.validateResponse(p1), ControlCommand::ArgumentError);
48
49 ControlParameters p2;
50 p2.setFaceId(0);
51 BOOST_CHECK_THROW(command.validateRequest(p2), ControlCommand::ArgumentError);
52 BOOST_CHECK_THROW(command.validateResponse(p2), ControlCommand::ArgumentError);
53
54 ControlParameters p3;
55 p3.setFaceId(6);
56 BOOST_CHECK_NO_THROW(command.validateRequest(p3));
57 BOOST_CHECK_NO_THROW(command.validateResponse(p3));
58}
59
60BOOST_AUTO_TEST_CASE(FaceEnableLocalControl)
61{
62 FaceEnableLocalControlCommand command;
63 BOOST_CHECK_EQUAL(command.getPrefix(), "ndn:/localhost/nfd/faces/enable-local-control");
64
65 ControlParameters p1;
66 p1.setLocalControlFeature(LOCAL_CONTROL_FEATURE_INCOMING_FACE_ID);
67 BOOST_CHECK_NO_THROW(command.validateRequest(p1));
68 BOOST_CHECK_NO_THROW(command.validateResponse(p1));
69
70 ControlParameters p2;
71 p2.setLocalControlFeature(LOCAL_CONTROL_FEATURE_INCOMING_FACE_ID)
72 .setFaceId(9);
73 BOOST_CHECK_THROW(command.validateRequest(p2), ControlCommand::ArgumentError);
74 BOOST_CHECK_THROW(command.validateResponse(p2), ControlCommand::ArgumentError);
Junxiao Shi6888bc12014-03-29 23:01:41 -070075
76 ControlParameters p3;
77 p3.setLocalControlFeature(static_cast<LocalControlFeature>(666));
78 BOOST_CHECK_THROW(command.validateRequest(p3), ControlCommand::ArgumentError);
79 BOOST_CHECK_THROW(command.validateResponse(p3), ControlCommand::ArgumentError);
Junxiao Shi5ec80222014-03-25 20:08:05 -070080}
81
82BOOST_AUTO_TEST_CASE(FaceDisableLocalControl)
83{
84 FaceDisableLocalControlCommand command;
85 BOOST_CHECK_EQUAL(command.getPrefix(), "ndn:/localhost/nfd/faces/disable-local-control");
86
87 ControlParameters p1;
88 p1.setLocalControlFeature(LOCAL_CONTROL_FEATURE_INCOMING_FACE_ID);
89 BOOST_CHECK_NO_THROW(command.validateRequest(p1));
90 BOOST_CHECK_NO_THROW(command.validateResponse(p1));
91
92 ControlParameters p2;
93 p2.setLocalControlFeature(LOCAL_CONTROL_FEATURE_INCOMING_FACE_ID)
94 .setFaceId(9);
95 BOOST_CHECK_THROW(command.validateRequest(p2), ControlCommand::ArgumentError);
96 BOOST_CHECK_THROW(command.validateResponse(p2), ControlCommand::ArgumentError);
Junxiao Shi6888bc12014-03-29 23:01:41 -070097
98 ControlParameters p3;
99 p3.setLocalControlFeature(static_cast<LocalControlFeature>(666));
100 BOOST_CHECK_THROW(command.validateRequest(p3), ControlCommand::ArgumentError);
101 BOOST_CHECK_THROW(command.validateResponse(p3), ControlCommand::ArgumentError);
Junxiao Shi5ec80222014-03-25 20:08:05 -0700102}
103
104BOOST_AUTO_TEST_CASE(FibAddNextHop)
105{
106 FibAddNextHopCommand command;
107 BOOST_CHECK_EQUAL(command.getPrefix(), "ndn:/localhost/nfd/fib/add-nexthop");
108
109 ControlParameters p1;
110 p1.setName("ndn:/")
111 .setFaceId(22);
112 BOOST_CHECK_NO_THROW(command.validateRequest(p1));
113 BOOST_CHECK_THROW(command.validateResponse(p1), ControlCommand::ArgumentError);
114
115 ControlParameters p2;
116 p2.setName("ndn:/example")
117 .setFaceId(0)
118 .setCost(6);
119 BOOST_CHECK_NO_THROW(command.validateRequest(p2));
120 BOOST_CHECK_THROW(command.validateResponse(p2), ControlCommand::ArgumentError);
121
122 command.applyDefaultsToRequest(p1);
123 BOOST_REQUIRE(p1.hasCost());
124 BOOST_CHECK_EQUAL(p1.getCost(), 0);
125}
126
127BOOST_AUTO_TEST_CASE(FibRemoveNextHop)
128{
129 FibRemoveNextHopCommand command;
130 BOOST_CHECK_EQUAL(command.getPrefix(), "ndn:/localhost/nfd/fib/remove-nexthop");
131
132 ControlParameters p1;
133 p1.setName("ndn:/")
134 .setFaceId(22);
135 BOOST_CHECK_NO_THROW(command.validateRequest(p1));
136 BOOST_CHECK_NO_THROW(command.validateResponse(p1));
137
138 ControlParameters p2;
139 p2.setName("ndn:/example")
140 .setFaceId(0);
141 BOOST_CHECK_NO_THROW(command.validateRequest(p2));
142 BOOST_CHECK_THROW(command.validateResponse(p2), ControlCommand::ArgumentError);
143}
144
145BOOST_AUTO_TEST_CASE(StrategyChoiceSet)
146{
147 StrategyChoiceSetCommand command;
148 BOOST_CHECK_EQUAL(command.getPrefix(), "ndn:/localhost/nfd/strategy-choice/set");
149
150 ControlParameters p1;
151 p1.setName("ndn:/")
152 .setStrategy("ndn:/strategy/P");
153 BOOST_CHECK_NO_THROW(command.validateRequest(p1));
154 BOOST_CHECK_NO_THROW(command.validateResponse(p1));
155
156 ControlParameters p2;
157 p2.setName("ndn:/example");
158 BOOST_CHECK_THROW(command.validateRequest(p2), ControlCommand::ArgumentError);
159 BOOST_CHECK_THROW(command.validateResponse(p2), ControlCommand::ArgumentError);
160}
161
162BOOST_AUTO_TEST_CASE(StrategyChoiceUnset)
163{
164 StrategyChoiceUnsetCommand command;
165 BOOST_CHECK_EQUAL(command.getPrefix(), "ndn:/localhost/nfd/strategy-choice/unset");
166
167 ControlParameters p1;
168 p1.setName("ndn:/example");
169 BOOST_CHECK_NO_THROW(command.validateRequest(p1));
170 BOOST_CHECK_NO_THROW(command.validateResponse(p1));
171
172 ControlParameters p2;
173 p2.setName("ndn:/example")
174 .setStrategy("ndn:/strategy/P");
175 BOOST_CHECK_THROW(command.validateRequest(p2), ControlCommand::ArgumentError);
176 BOOST_CHECK_THROW(command.validateResponse(p2), ControlCommand::ArgumentError);
177
178 ControlParameters p3;
179 p3.setName("ndn:/");
180 BOOST_CHECK_THROW(command.validateRequest(p3), ControlCommand::ArgumentError);
181 BOOST_CHECK_THROW(command.validateResponse(p3), ControlCommand::ArgumentError);
182}
183
Junxiao Shi5f6c74f2014-04-18 16:29:44 -0700184BOOST_AUTO_TEST_CASE(RibRegister)
185{
186 RibRegisterCommand command;
187 BOOST_CHECK_EQUAL(command.getPrefix(), "ndn:/localhost/nfd/rib/register");
188
189 ControlParameters p1;
190 p1.setName("ndn:/");
191 BOOST_CHECK_NO_THROW(command.validateRequest(p1));
192 BOOST_CHECK_THROW(command.validateResponse(p1), ControlCommand::ArgumentError);
193
194 command.applyDefaultsToRequest(p1);
195 BOOST_REQUIRE(p1.hasOrigin());
196 BOOST_CHECK_EQUAL(p1.getOrigin(), static_cast<uint64_t>(ROUTE_ORIGIN_APP));
197 BOOST_REQUIRE(p1.hasCost());
198 BOOST_CHECK_EQUAL(p1.getCost(), 0);
199 BOOST_REQUIRE(p1.hasFlags());
200 BOOST_CHECK_EQUAL(p1.getFlags(), static_cast<uint64_t>(ROUTE_FLAG_CHILD_INHERIT));
201 BOOST_REQUIRE(p1.hasExpirationPeriod());
202 BOOST_CHECK_GT(p1.getExpirationPeriod(), time::hours(240));
203
204 ControlParameters p2;
205 p2.setName("ndn:/example")
206 .setFaceId(2)
207 .setCost(6);
208 BOOST_CHECK_NO_THROW(command.validateRequest(p2));
209 command.applyDefaultsToRequest(p2);
210 BOOST_CHECK_EQUAL(p2.getExpirationPeriod(), time::hours(1));
211 BOOST_CHECK_NO_THROW(command.validateResponse(p2));
212}
213
214BOOST_AUTO_TEST_CASE(RibUnregister)
215{
216 RibUnregisterCommand command;
217 BOOST_CHECK_EQUAL(command.getPrefix(), "ndn:/localhost/nfd/rib/unregister");
218
219 ControlParameters p1;
220 p1.setName("ndn:/")
221 .setFaceId(22)
222 .setOrigin(ROUTE_ORIGIN_STATIC);
223 BOOST_CHECK_NO_THROW(command.validateRequest(p1));
224 BOOST_CHECK_NO_THROW(command.validateResponse(p1));
225
226 ControlParameters p2;
227 p2.setName("ndn:/example")
228 .setFaceId(0)
229 .setOrigin(ROUTE_ORIGIN_APP);
230 BOOST_CHECK_NO_THROW(command.validateRequest(p2));
231 BOOST_CHECK_THROW(command.validateResponse(p2), ControlCommand::ArgumentError);
232
233 p2.unsetFaceId();
234 BOOST_CHECK_NO_THROW(command.validateRequest(p2));
235 BOOST_CHECK_THROW(command.validateResponse(p2), ControlCommand::ArgumentError);
236}
237
Junxiao Shi5ec80222014-03-25 20:08:05 -0700238BOOST_AUTO_TEST_SUITE_END()
239
240} // namespace nfd
241} // namespace ndn