blob: 2f872f1b63e715b0accee28ff18d71469c34bde8 [file] [log] [blame]
Davide Pesavento44deacc2014-02-19 10:48:07 +01001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
Steve DiBenedettoef04f272014-06-04 14:28:31 -06003 * Copyright (c) 2014, Regents of the University of California,
4 * 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/>.
Steve DiBenedettoef04f272014-06-04 14:28:31 -060024 */
Davide Pesavento44deacc2014-02-19 10:48:07 +010025
Alexander Afanasyev0eb70652014-02-27 18:35:07 -080026#include "face/ethernet-factory.hpp"
Davide Pesaventob60cc122014-03-19 19:26:02 +010027#include "core/network-interface.hpp"
Davide Pesavento44deacc2014-02-19 10:48:07 +010028
Davide Pesavento4c1a0782014-08-14 16:13:20 +020029#include "tests/test-common.hpp"
Davide Pesaventob60cc122014-03-19 19:26:02 +010030
Davide Pesavento44deacc2014-02-19 10:48:07 +010031namespace nfd {
Junxiao Shid9ee45c2014-02-27 15:38:11 -070032namespace tests {
Davide Pesavento44deacc2014-02-19 10:48:07 +010033
Junxiao Shid9ee45c2014-02-27 15:38:11 -070034BOOST_FIXTURE_TEST_SUITE(FaceEthernet, BaseFixture)
Davide Pesavento44deacc2014-02-19 10:48:07 +010035
Steve DiBenedettoef04f272014-06-04 14:28:31 -060036BOOST_AUTO_TEST_CASE(GetChannels)
37{
38 EthernetFactory factory;
39
Davide Pesaventob499a602014-11-18 22:36:56 +010040 auto channels = factory.getChannels();
Steve DiBenedettoef04f272014-06-04 14:28:31 -060041 BOOST_CHECK_EQUAL(channels.empty(), true);
42}
43
Davide Pesaventob60cc122014-03-19 19:26:02 +010044class InterfacesFixture : protected BaseFixture
45{
46protected:
47 InterfacesFixture()
48 {
Alexander Afanasyevb56c5b92014-06-05 08:05:24 +030049 EthernetFactory factory;
50
Davide Pesaventob499a602014-11-18 22:36:56 +010051 for (const auto& netif : listNetworkInterfaces()) {
52 if (!netif.isLoopback() && netif.isUp()) {
53 try {
54 factory.createMulticastFace(netif, ethernet::getBroadcastAddress());
55 }
56 catch (Face::Error&) {
57 continue;
58 }
Davide Pesaventob60cc122014-03-19 19:26:02 +010059
Davide Pesaventob499a602014-11-18 22:36:56 +010060 m_interfaces.push_back(netif);
Davide Pesaventob60cc122014-03-19 19:26:02 +010061 }
Davide Pesaventob499a602014-11-18 22:36:56 +010062 }
Davide Pesaventob60cc122014-03-19 19:26:02 +010063 }
64
65protected:
Davide Pesaventob499a602014-11-18 22:36:56 +010066 std::vector<NetworkInterfaceInfo> m_interfaces;
Davide Pesaventob60cc122014-03-19 19:26:02 +010067};
68
69
70BOOST_FIXTURE_TEST_CASE(MulticastFacesMap, InterfacesFixture)
Davide Pesavento44deacc2014-02-19 10:48:07 +010071{
Alexander Afanasyev0eb70652014-02-27 18:35:07 -080072 EthernetFactory factory;
Davide Pesavento44deacc2014-02-19 10:48:07 +010073
Davide Pesaventob60cc122014-03-19 19:26:02 +010074 if (m_interfaces.empty())
Davide Pesavento44deacc2014-02-19 10:48:07 +010075 {
Davide Pesaventob60cc122014-03-19 19:26:02 +010076 BOOST_WARN_MESSAGE(false, "No interfaces available, cannot perform MulticastFacesMap test");
Davide Pesavento44deacc2014-02-19 10:48:07 +010077 return;
78 }
79
Alexander Afanasyevb56c5b92014-06-05 08:05:24 +030080 shared_ptr<EthernetFace> face1 = factory.createMulticastFace(m_interfaces.front(),
81 ethernet::getBroadcastAddress());
82 shared_ptr<EthernetFace> face1bis = factory.createMulticastFace(m_interfaces.front(),
83 ethernet::getBroadcastAddress());
Davide Pesaventob60cc122014-03-19 19:26:02 +010084 BOOST_CHECK_EQUAL(face1, face1bis);
85
Davide Pesaventob499a602014-11-18 22:36:56 +010086 if (m_interfaces.size() > 1) {
87 shared_ptr<EthernetFace> face2 = factory.createMulticastFace(m_interfaces.back(),
88 ethernet::getBroadcastAddress());
89 BOOST_CHECK_NE(face1, face2);
90 }
91 else {
92 BOOST_WARN_MESSAGE(false, "Cannot test second EthernetFace creation, "
93 "only one interface available");
94 }
Davide Pesaventob60cc122014-03-19 19:26:02 +010095
Alexander Afanasyevb56c5b92014-06-05 08:05:24 +030096 shared_ptr<EthernetFace> face3 = factory.createMulticastFace(m_interfaces.front(),
97 ethernet::getDefaultMulticastAddress());
Davide Pesaventob60cc122014-03-19 19:26:02 +010098 BOOST_CHECK_NE(face1, face3);
99}
100
101BOOST_FIXTURE_TEST_CASE(SendPacket, InterfacesFixture)
102{
103 EthernetFactory factory;
104
105 if (m_interfaces.empty())
106 {
107 BOOST_WARN_MESSAGE(false, "No interfaces available for pcap, cannot perform SendPacket test");
108 return;
109 }
110
111 shared_ptr<EthernetFace> face = factory.createMulticastFace(m_interfaces.front(),
Alexander Afanasyevb56c5b92014-06-05 08:05:24 +0300112 ethernet::getDefaultMulticastAddress());
Davide Pesavento44deacc2014-02-19 10:48:07 +0100113 BOOST_REQUIRE(static_cast<bool>(face));
Alexander Afanasyev355c0662014-03-20 18:08:17 -0700114
115 BOOST_CHECK(!face->isOnDemand());
Davide Pesavento44deacc2014-02-19 10:48:07 +0100116 BOOST_CHECK_EQUAL(face->isLocal(), false);
Junxiao Shi79494162014-04-02 18:25:11 -0700117 BOOST_CHECK_EQUAL(face->getRemoteUri().toString(),
Davide Pesaventob499a602014-11-18 22:36:56 +0100118 "ether://[" + ethernet::getDefaultMulticastAddress().toString() + "]");
Junxiao Shi79494162014-04-02 18:25:11 -0700119 BOOST_CHECK_EQUAL(face->getLocalUri().toString(),
Davide Pesaventob499a602014-11-18 22:36:56 +0100120 "dev://" + m_interfaces.front().name);
Davide Pesavento44deacc2014-02-19 10:48:07 +0100121
Alexander Afanasyevb56c5b92014-06-05 08:05:24 +0300122 shared_ptr<Interest> interest1 = makeInterest("ndn:/TpnzGvW9R");
123 shared_ptr<Data> data1 = makeData("ndn:/KfczhUqVix");
124 shared_ptr<Interest> interest2 = makeInterest("ndn:/QWiIMfj5sL");
125 shared_ptr<Data> data2 = makeData("ndn:/XNBV796f");
Davide Pesavento44deacc2014-02-19 10:48:07 +0100126
Alexander Afanasyevb56c5b92014-06-05 08:05:24 +0300127 BOOST_CHECK_NO_THROW(face->sendInterest(*interest1));
128 BOOST_CHECK_NO_THROW(face->sendData (*data1 ));
129 BOOST_CHECK_NO_THROW(face->sendInterest(*interest2));
130 BOOST_CHECK_NO_THROW(face->sendData (*data2 ));
Davide Pesavento44deacc2014-02-19 10:48:07 +0100131
132// m_ioRemaining = 4;
133// m_ioService.run();
134// m_ioService.reset();
135
136// BOOST_REQUIRE_EQUAL(m_face1_receivedInterests.size(), 1);
137// BOOST_REQUIRE_EQUAL(m_face1_receivedDatas .size(), 1);
138// BOOST_REQUIRE_EQUAL(m_face2_receivedInterests.size(), 1);
139// BOOST_REQUIRE_EQUAL(m_face2_receivedDatas .size(), 1);
140
141// BOOST_CHECK_EQUAL(m_face1_receivedInterests[0].getName(), interest2.getName());
142// BOOST_CHECK_EQUAL(m_face1_receivedDatas [0].getName(), data2.getName());
143// BOOST_CHECK_EQUAL(m_face2_receivedInterests[0].getName(), interest1.getName());
144// BOOST_CHECK_EQUAL(m_face2_receivedDatas [0].getName(), data1.getName());
145}
146
147BOOST_AUTO_TEST_SUITE_END()
148
Junxiao Shid9ee45c2014-02-27 15:38:11 -0700149} // namespace tests
Davide Pesavento44deacc2014-02-19 10:48:07 +0100150} // namespace nfd