blob: c17e620c09f18ad80ee10833166a53ce55280452 [file] [log] [blame]
Junxiao Shicde37ad2015-12-24 01:02:05 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Junxiao Shi0ba6d642017-07-17 00:53:22 +00002/*
Junxiao Shi3409cd32017-01-18 15:31:27 +00003 * Copyright (c) 2014-2017, Regents of the University of California,
Junxiao Shicde37ad2015-12-24 01:02:05 -07004 * 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.
10 *
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/>.
24 */
25
26#include "face/websocket-factory.hpp"
27
Eric Newberry42602412016-08-27 09:33:18 -070028#include "factory-test-common.hpp"
Junxiao Shi3409cd32017-01-18 15:31:27 +000029#include "face-system-fixture.hpp"
Junxiao Shicde37ad2015-12-24 01:02:05 -070030#include "tests/limited-io.hpp"
31
32namespace nfd {
Junxiao Shi3409cd32017-01-18 15:31:27 +000033namespace face {
Junxiao Shicde37ad2015-12-24 01:02:05 -070034namespace tests {
35
Junxiao Shi3409cd32017-01-18 15:31:27 +000036namespace ip = boost::asio::ip;
37
Junxiao Shi0ba6d642017-07-17 00:53:22 +000038using WebSocketFactoryFixture = FaceSystemFactoryFixture<WebSocketFactory>;
Junxiao Shicde37ad2015-12-24 01:02:05 -070039
Junxiao Shi0ba6d642017-07-17 00:53:22 +000040BOOST_AUTO_TEST_SUITE(Face)
41BOOST_FIXTURE_TEST_SUITE(TestWebSocketFactory, WebSocketFactoryFixture)
42
43BOOST_AUTO_TEST_SUITE(ProcessConfig)
Junxiao Shi3409cd32017-01-18 15:31:27 +000044
45BOOST_AUTO_TEST_CASE(Normal)
46{
47 const std::string CONFIG = R"CONFIG(
48 face_system
49 {
50 websocket
51 {
52 listen yes
53 port 9696
54 enable_v4 yes
55 enable_v6 yes
56 }
57 }
58 )CONFIG";
59
Junxiao Shi1b65ca12017-01-21 23:04:41 +000060 parseConfig(CONFIG, true);
61 parseConfig(CONFIG, false);
Junxiao Shi3409cd32017-01-18 15:31:27 +000062
Junxiao Shi3409cd32017-01-18 15:31:27 +000063 checkChannelListEqual(factory, {"ws://[::]:9696"});
64}
65
66BOOST_AUTO_TEST_CASE(EnableIpv4Only)
67{
68 const std::string CONFIG = R"CONFIG(
69 face_system
70 {
71 websocket
72 {
73 listen yes
74 port 9696
75 enable_v4 yes
76 enable_v6 no
77 }
78 }
79 )CONFIG";
80
Junxiao Shi1b65ca12017-01-21 23:04:41 +000081 parseConfig(CONFIG, true);
82 parseConfig(CONFIG, false);
Junxiao Shi3409cd32017-01-18 15:31:27 +000083
Junxiao Shi3409cd32017-01-18 15:31:27 +000084 checkChannelListEqual(factory, {"ws://0.0.0.0:9696"});
85}
86
87BOOST_AUTO_TEST_CASE(UnsupportedIpv6Only)
88{
89 const std::string CONFIG = R"CONFIG(
90 face_system
91 {
92 websocket
93 {
94 listen yes
95 port 9696
96 enable_v4 no
97 enable_v6 yes
98 }
99 }
100 )CONFIG";
101
102 BOOST_CHECK_THROW(parseConfig(CONFIG, true), ConfigFile::Error);
103 BOOST_CHECK_THROW(parseConfig(CONFIG, false), ConfigFile::Error);
104}
105
106BOOST_AUTO_TEST_CASE(ChannelsDisabled)
107{
108 const std::string CONFIG = R"CONFIG(
109 face_system
110 {
111 websocket
112 {
113 listen yes
114 port 9696
115 enable_v4 no
116 enable_v6 no
117 }
118 }
119 )CONFIG";
120
121 BOOST_CHECK_THROW(parseConfig(CONFIG, true), ConfigFile::Error);
122 BOOST_CHECK_THROW(parseConfig(CONFIG, false), ConfigFile::Error);
123}
124
125BOOST_AUTO_TEST_CASE(NoListen)
126{
127 const std::string CONFIG = R"CONFIG(
128 face_system
129 {
130 websocket
131 {
132 listen no
133 port 9696
134 enable_v4 yes
135 enable_v6 yes
136 }
137 }
138 )CONFIG";
139
Junxiao Shi3409cd32017-01-18 15:31:27 +0000140 BOOST_CHECK_EQUAL(factory.getChannels().size(), 0);
141}
142
143BOOST_AUTO_TEST_CASE(ChangeEndpoint)
144{
145 const std::string CONFIG1 = R"CONFIG(
146 face_system
147 {
148 websocket
149 {
150 port 9001
151 }
152 }
153 )CONFIG";
154
Junxiao Shi1b65ca12017-01-21 23:04:41 +0000155 parseConfig(CONFIG1, false);
Junxiao Shi3409cd32017-01-18 15:31:27 +0000156 checkChannelListEqual(factory, {"ws://[::]:9001"});
157
158 const std::string CONFIG2 = R"CONFIG(
159 face_system
160 {
161 websocket
162 {
163 port 9002
164 }
165 }
166 )CONFIG";
167
Junxiao Shi1b65ca12017-01-21 23:04:41 +0000168 parseConfig(CONFIG2, false);
Junxiao Shi3409cd32017-01-18 15:31:27 +0000169 checkChannelListEqual(factory, {"ws://[::]:9001", "ws://[::]:9002"});
170}
171
172BOOST_AUTO_TEST_SUITE_END() // ProcessConfig
Junxiao Shicde37ad2015-12-24 01:02:05 -0700173
174BOOST_AUTO_TEST_CASE(GetChannels)
175{
Junxiao Shicde37ad2015-12-24 01:02:05 -0700176 BOOST_REQUIRE_EQUAL(factory.getChannels().empty(), true);
177
178 std::vector<shared_ptr<const Channel>> expectedChannels;
179 expectedChannels.push_back(factory.createChannel("127.0.0.1", "20070"));
180 expectedChannels.push_back(factory.createChannel("127.0.0.1", "20071"));
181 expectedChannels.push_back(factory.createChannel("::1", "20071"));
182
183 for (const auto& i : factory.getChannels()) {
184 auto pos = std::find(expectedChannels.begin(), expectedChannels.end(), i);
185 BOOST_REQUIRE(pos != expectedChannels.end());
186 expectedChannels.erase(pos);
187 }
188
189 BOOST_CHECK_EQUAL(expectedChannels.size(), 0);
190}
191
192BOOST_AUTO_TEST_CASE(UnsupportedFaceCreate)
193{
Eric Newberry42602412016-08-27 09:33:18 -0700194 createFace(factory,
195 FaceUri("ws://127.0.0.1:20070"),
Eric Newberry78e32b02017-04-01 14:34:44 +0000196 {},
Eric Newberry42602412016-08-27 09:33:18 -0700197 ndn::nfd::FACE_PERSISTENCY_PERMANENT,
Eric Newberryf40551a2016-09-05 15:41:16 -0700198 false,
Eric Newberry42602412016-08-27 09:33:18 -0700199 {CreateFaceExpectedResult::FAILURE, 406, "Unsupported protocol"});
Junxiao Shicde37ad2015-12-24 01:02:05 -0700200
Eric Newberry42602412016-08-27 09:33:18 -0700201 createFace(factory,
202 FaceUri("ws://127.0.0.1:20070"),
Eric Newberry78e32b02017-04-01 14:34:44 +0000203 {},
Eric Newberry42602412016-08-27 09:33:18 -0700204 ndn::nfd::FACE_PERSISTENCY_ON_DEMAND,
Eric Newberryf40551a2016-09-05 15:41:16 -0700205 false,
Eric Newberry42602412016-08-27 09:33:18 -0700206 {CreateFaceExpectedResult::FAILURE, 406, "Unsupported protocol"});
Junxiao Shicde37ad2015-12-24 01:02:05 -0700207
Eric Newberry42602412016-08-27 09:33:18 -0700208 createFace(factory,
209 FaceUri("ws://127.0.0.1:20070"),
Eric Newberry78e32b02017-04-01 14:34:44 +0000210 {},
Eric Newberry42602412016-08-27 09:33:18 -0700211 ndn::nfd::FACE_PERSISTENCY_PERSISTENT,
Eric Newberryf40551a2016-09-05 15:41:16 -0700212 false,
Eric Newberry42602412016-08-27 09:33:18 -0700213 {CreateFaceExpectedResult::FAILURE, 406, "Unsupported protocol"});
Junxiao Shicde37ad2015-12-24 01:02:05 -0700214}
215
216BOOST_AUTO_TEST_SUITE_END() // TestWebSocketFactory
217BOOST_AUTO_TEST_SUITE_END() // Face
218
219} // namespace tests
Junxiao Shi3409cd32017-01-18 15:31:27 +0000220} // namespace face
Junxiao Shicde37ad2015-12-24 01:02:05 -0700221} // namespace nfd