blob: 299620eaaa03455d4511bbd5a246eb5ad3cc431c [file] [log] [blame]
Wentao Shang77949212014-02-01 23:42:24 -08001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
Alexander Afanasyeveaf105c2014-01-30 17:40:24 -08002/**
3 * Copyright (C) 2013 Regents of the University of California.
Alexander Afanasyeveaf105c2014-01-30 17:40:24 -08004 * See COPYING for copyright and distribution information.
5 */
6
Alexander Afanasyeve289b532014-02-09 22:14:44 -08007#include "management/nfd-control-response.hpp"
8#include "management/nfd-fib-management-options.hpp"
Yingdi Yud3370492014-02-12 17:17:11 -08009#include "management/nfd-face-management-options.hpp"
Alexander Afanasyev44b438a2014-03-19 12:51:49 -070010#include "management/nfd-face-event-notification.hpp"
Alexander Afanasyeveaf105c2014-01-30 17:40:24 -080011
Wentao Shang4d5e1de2014-01-28 21:00:03 -080012#include <boost/test/unit_test.hpp>
Alexander Afanasyeveaf105c2014-01-30 17:40:24 -080013#include <boost/test/output_test_stream.hpp>
14
15using namespace std;
16
17namespace ndn {
Alexander Afanasyeve289b532014-02-09 22:14:44 -080018namespace nfd {
Alexander Afanasyeveaf105c2014-01-30 17:40:24 -080019
20BOOST_AUTO_TEST_SUITE(TestNfdControl)
21
Alexander Afanasyev4b456282014-02-13 00:34:34 -080022const uint8_t TestControlResponse[] = {0x65, 0x17,
23 0x66, 0x02, 0x01, 0x94, 0x67, 0x11, 0x4e, 0x6f, 0x74,
24 0x68, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x6f, 0x74, 0x20,
25 0x66, 0x6f, 0x75, 0x6e, 0x64};
Alexander Afanasyeveaf105c2014-01-30 17:40:24 -080026
Wentao Shang4d5e1de2014-01-28 21:00:03 -080027const uint8_t TestFibManagementOptions[] = {
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -080028 0x68, 0x49, 0x07, 0x16, 0x08, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68,
Alexander Afanasyev4b456282014-02-13 00:34:34 -080029 0x6f, 0x73, 0x74, 0x08, 0x03, 0x72, 0x65, 0x67, 0x08, 0x04, 0x74, 0x65,
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -080030 0x73, 0x74, 0x69, 0x01, 0x00, 0x6a, 0x01, 0x01, 0x6b, 0x29, 0x07, 0x27,
31 0x08, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x08,
32 0x03, 0x6e, 0x66, 0x64, 0x08, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65,
33 0x67, 0x79, 0x08, 0x0b, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x2d, 0x77, 0x6f,
34 0x72, 0x6c, 0x64
Wentao Shang4d5e1de2014-01-28 21:00:03 -080035};
36
Yingdi Yud3370492014-02-12 17:17:11 -080037const uint8_t TestFaceManagementOptions[] = {
38 0x6c, 0x1e, 0x69, 0x01, 0x0a, 0x72, 0x19, 0x74, 0x63, 0x70, 0x3a, 0x2f,
39 0x2f, 0x31, 0x2e, 0x31, 0x2e, 0x31, 0x2e, 0x31, 0x2f, 0x68, 0x65, 0x6c,
40 0x6c, 0x6f, 0x2f, 0x77, 0x6f, 0x72, 0x6c, 0x64
41};
42
Alexander Afanasyev44b438a2014-03-19 12:51:49 -070043const uint8_t TestFaceEventNotification[] = {
44 0xc0, 0x1d, 0xc1, 0x01, 0x01, 0x69, 0x01, 0x64, 0x72, 0x15, 0x74, 0x63,
45 0x70, 0x34, 0x3a, 0x2f, 0x2f, 0x31, 0x32, 0x37, 0x2e, 0x30, 0x2e, 0x30,
46 0x2e, 0x31, 0x3a, 0x36, 0x33, 0x36, 0x33
47};
48
Wentao Shang4d5e1de2014-01-28 21:00:03 -080049// ControlResponse
50
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -080051BOOST_AUTO_TEST_CASE(ControlResponseEncode)
Alexander Afanasyeveaf105c2014-01-30 17:40:24 -080052{
Alexander Afanasyeve289b532014-02-09 22:14:44 -080053 ControlResponse controlResponse(404, "Nothing not found");
Alexander Afanasyeveaf105c2014-01-30 17:40:24 -080054 const Block &wire = controlResponse.wireEncode();
55
56 BOOST_REQUIRE_EQUAL_COLLECTIONS(TestControlResponse, TestControlResponse+sizeof(TestControlResponse),
57 wire.begin(), wire.end());
58}
59
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -080060BOOST_AUTO_TEST_CASE(ControlResponseDecode)
Alexander Afanasyeveaf105c2014-01-30 17:40:24 -080061{
Alexander Afanasyeve289b532014-02-09 22:14:44 -080062 ControlResponse controlResponse;
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -080063
Alexander Afanasyeveaf105c2014-01-30 17:40:24 -080064 BOOST_REQUIRE_NO_THROW(controlResponse.wireDecode(Block(TestControlResponse, sizeof(TestControlResponse))));
65
66 BOOST_REQUIRE_EQUAL(controlResponse.getCode(), 404);
67 BOOST_REQUIRE_EQUAL(controlResponse.getText(), "Nothing not found");
68}
69
Wentao Shang4d5e1de2014-01-28 21:00:03 -080070// FibManagementOptions
71
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -080072BOOST_AUTO_TEST_CASE(FibManagementOptionsEncoding)
Wentao Shang4d5e1de2014-01-28 21:00:03 -080073{
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -080074 Name n("/localhost/reg/test");
Wentao Shang4d5e1de2014-01-28 21:00:03 -080075 FibManagementOptions opt;
76
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -080077 opt.setName(n);
78 opt.setFaceId(0);
79 opt.setCost(1);
80 opt.setStrategy("/localhost/nfd/strategy/hello-world");
Wentao Shang4d5e1de2014-01-28 21:00:03 -080081
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -080082 const Block& blk = opt.wireEncode();
Wentao Shang4d5e1de2014-01-28 21:00:03 -080083
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -080084 BOOST_REQUIRE_EQUAL_COLLECTIONS(TestFibManagementOptions,
85 TestFibManagementOptions + sizeof(TestFibManagementOptions),
86 blk.begin(), blk.end());
Wentao Shang4d5e1de2014-01-28 21:00:03 -080087}
88
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -080089BOOST_AUTO_TEST_CASE(FibManagementOptionsFastEncoding)
Wentao Shang77949212014-02-01 23:42:24 -080090{
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -080091 Name n("/localhost/reg/test");
Wentao Shang77949212014-02-01 23:42:24 -080092 FibManagementOptions opt;
93
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -080094 opt.setName(n);
95 opt.setFaceId(0);
96 opt.setCost(1);
97 opt.setStrategy("/localhost/nfd/strategy/hello-world");
Wentao Shang77949212014-02-01 23:42:24 -080098
99 EncodingBuffer blk;
100
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -0800101 BOOST_REQUIRE_NO_THROW(opt.wireEncode(blk));
Wentao Shang77949212014-02-01 23:42:24 -0800102
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -0800103 BOOST_REQUIRE_EQUAL_COLLECTIONS(TestFibManagementOptions,
104 TestFibManagementOptions + sizeof(TestFibManagementOptions),
105 blk.begin(), blk.end());
Wentao Shang77949212014-02-01 23:42:24 -0800106
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -0800107 EncodingBuffer blk2(4);
Wentao Shang77949212014-02-01 23:42:24 -0800108
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -0800109 BOOST_REQUIRE_NO_THROW(opt.wireEncode(blk2));
Wentao Shang77949212014-02-01 23:42:24 -0800110
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -0800111 BOOST_REQUIRE_EQUAL_COLLECTIONS(TestFibManagementOptions,
112 TestFibManagementOptions + sizeof(TestFibManagementOptions),
113 blk2.begin(), blk2.end());
Wentao Shang77949212014-02-01 23:42:24 -0800114}
115
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -0800116BOOST_AUTO_TEST_CASE(FibManagementOptionsDecoding)
Wentao Shang4d5e1de2014-01-28 21:00:03 -0800117{
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -0800118 Block blk(TestFibManagementOptions, sizeof(TestFibManagementOptions));
119 Name n("/localhost/reg/test");
Wentao Shang4d5e1de2014-01-28 21:00:03 -0800120 FibManagementOptions opt;
121
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -0800122 BOOST_REQUIRE_NO_THROW(opt.wireDecode(blk));
123
124 BOOST_CHECK_EQUAL(opt.getName(), n);
125 BOOST_CHECK_EQUAL(opt.getFaceId(), 0);
126 BOOST_CHECK_EQUAL(opt.getCost(), 1);
127 BOOST_CHECK_EQUAL(opt.getStrategy().toUri(), "/localhost/nfd/strategy/hello-world");
Wentao Shang4d5e1de2014-01-28 21:00:03 -0800128}
129
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -0800130BOOST_AUTO_TEST_CASE(FaceManagementOptionsFastEncoding)
Yingdi Yud3370492014-02-12 17:17:11 -0800131{
132 FaceManagementOptions opt;
133
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -0800134 opt.setFaceId(10);
135 opt.setUri("tcp://1.1.1.1/hello/world");
Yingdi Yud3370492014-02-12 17:17:11 -0800136
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -0800137 BOOST_REQUIRE_NO_THROW(opt.wireEncode ());
Yingdi Yud3370492014-02-12 17:17:11 -0800138
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -0800139 BOOST_REQUIRE_EQUAL_COLLECTIONS(TestFaceManagementOptions,
140 TestFaceManagementOptions + sizeof(TestFaceManagementOptions),
141 opt.wireEncode().begin(), opt.wireEncode().end());
Yingdi Yud3370492014-02-12 17:17:11 -0800142}
143
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -0800144BOOST_AUTO_TEST_CASE(FaceManagementOptionsDecoding)
Yingdi Yud3370492014-02-12 17:17:11 -0800145{
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -0800146 Block blk(TestFaceManagementOptions, sizeof(TestFaceManagementOptions));
Yingdi Yud3370492014-02-12 17:17:11 -0800147 FaceManagementOptions opt;
148
Alexander Afanasyev44b438a2014-03-19 12:51:49 -0700149 BOOST_REQUIRE_NO_THROW(opt.wireDecode(blk));
Alexander Afanasyevc5ad1192014-02-25 14:17:47 -0800150
151 BOOST_CHECK_EQUAL(opt.getFaceId(), 10);
152 BOOST_CHECK_EQUAL(opt.getUri(), "tcp://1.1.1.1/hello/world");
Yingdi Yud3370492014-02-12 17:17:11 -0800153}
Wentao Shang4d5e1de2014-01-28 21:00:03 -0800154
Alexander Afanasyev44b438a2014-03-19 12:51:49 -0700155
156BOOST_AUTO_TEST_CASE(FaceEventNotificationEncodingDecoding)
157{
158 FaceEventKind expectedKind = FACE_EVENT_CREATED;
159 std::string expectedUri("tcp4://127.0.0.1:6363");
160 uint64_t expectedFaceId = 100;
161
162 {
163 FaceEventNotification faceEvent(expectedKind, expectedFaceId, expectedUri);
164 BOOST_REQUIRE_NO_THROW(faceEvent.wireEncode());
165
166 BOOST_REQUIRE_EQUAL_COLLECTIONS(TestFaceEventNotification,
167 TestFaceEventNotification + sizeof(TestFaceEventNotification),
168 faceEvent.wireEncode().begin(), faceEvent.wireEncode().end());
169
170 std::ostringstream os;
171 os << faceEvent;
172 BOOST_CHECK_EQUAL(os.str(), "FaceEventNotification(Kind: created, FaceID: 100, Uri: tcp4://127.0.0.1:6363)");
173 }
174
175 {
176 Block blk(TestFaceEventNotification, sizeof(TestFaceEventNotification));
177 FaceEventNotification faceEvent(blk);
178
179 BOOST_CHECK_EQUAL(faceEvent.getEventKind(), expectedKind);
180 BOOST_CHECK_EQUAL(faceEvent.getFaceId(), expectedFaceId);
181 BOOST_CHECK_EQUAL(faceEvent.getUri(), expectedUri);
182 }
183}
184
Alexander Afanasyeveaf105c2014-01-30 17:40:24 -0800185BOOST_AUTO_TEST_SUITE_END()
186
Alexander Afanasyeve289b532014-02-09 22:14:44 -0800187} // namespace nfd
Alexander Afanasyeveaf105c2014-01-30 17:40:24 -0800188} // namespace ndn