blob: b5c0cc460361d86111d292c5676222f208e06ea0 [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
40 std::list<shared_ptr<const Channel> > channels = factory.getChannels();
41 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 Pesaventob60cc122014-03-19 19:26:02 +010051 std::list< shared_ptr<NetworkInterfaceInfo> > ifs = listNetworkInterfaces();
52 for (std::list< shared_ptr<NetworkInterfaceInfo> >::const_iterator i = ifs.begin();
53 i != ifs.end();
54 ++i)
55 {
56 if (!(*i)->isLoopback() && (*i)->isUp())
57 {
Alexander Afanasyevb56c5b92014-06-05 08:05:24 +030058 try {
59 factory.createMulticastFace(*i, ethernet::getBroadcastAddress());
60 }
61 catch (Face::Error&) {
Davide Pesaventob60cc122014-03-19 19:26:02 +010062 continue;
Alexander Afanasyevb56c5b92014-06-05 08:05:24 +030063 }
Davide Pesaventob60cc122014-03-19 19:26:02 +010064
Alexander Afanasyevb56c5b92014-06-05 08:05:24 +030065 m_interfaces.push_back(*i);
Davide Pesaventob60cc122014-03-19 19:26:02 +010066 }
67 }
68 }
69
70protected:
71 std::list< shared_ptr<NetworkInterfaceInfo> > m_interfaces;
72};
73
74
75BOOST_FIXTURE_TEST_CASE(MulticastFacesMap, InterfacesFixture)
Davide Pesavento44deacc2014-02-19 10:48:07 +010076{
Alexander Afanasyev0eb70652014-02-27 18:35:07 -080077 EthernetFactory factory;
Davide Pesavento44deacc2014-02-19 10:48:07 +010078
Davide Pesaventob60cc122014-03-19 19:26:02 +010079 if (m_interfaces.empty())
Davide Pesavento44deacc2014-02-19 10:48:07 +010080 {
Davide Pesaventob60cc122014-03-19 19:26:02 +010081 BOOST_WARN_MESSAGE(false, "No interfaces available, cannot perform MulticastFacesMap test");
Davide Pesavento44deacc2014-02-19 10:48:07 +010082 return;
83 }
84
Alexander Afanasyevb56c5b92014-06-05 08:05:24 +030085 shared_ptr<EthernetFace> face1 = factory.createMulticastFace(m_interfaces.front(),
86 ethernet::getBroadcastAddress());
87 shared_ptr<EthernetFace> face1bis = factory.createMulticastFace(m_interfaces.front(),
88 ethernet::getBroadcastAddress());
Davide Pesaventob60cc122014-03-19 19:26:02 +010089 BOOST_CHECK_EQUAL(face1, face1bis);
90
91 if (m_interfaces.size() > 1)
92 {
Alexander Afanasyevb56c5b92014-06-05 08:05:24 +030093 shared_ptr<EthernetFace> face2 = factory.createMulticastFace(m_interfaces.back(),
94 ethernet::getBroadcastAddress());
Davide Pesaventob60cc122014-03-19 19:26:02 +010095 BOOST_CHECK_NE(face1, face2);
96 }
97 else
98 {
99 BOOST_WARN_MESSAGE(false, "Cannot test second EthernetFace creation, "
100 "only one interface available");
101 }
102
Alexander Afanasyevb56c5b92014-06-05 08:05:24 +0300103 shared_ptr<EthernetFace> face3 = factory.createMulticastFace(m_interfaces.front(),
104 ethernet::getDefaultMulticastAddress());
Davide Pesaventob60cc122014-03-19 19:26:02 +0100105 BOOST_CHECK_NE(face1, face3);
106}
107
108BOOST_FIXTURE_TEST_CASE(SendPacket, InterfacesFixture)
109{
110 EthernetFactory factory;
111
112 if (m_interfaces.empty())
113 {
114 BOOST_WARN_MESSAGE(false, "No interfaces available for pcap, cannot perform SendPacket test");
115 return;
116 }
117
118 shared_ptr<EthernetFace> face = factory.createMulticastFace(m_interfaces.front(),
Alexander Afanasyevb56c5b92014-06-05 08:05:24 +0300119 ethernet::getDefaultMulticastAddress());
Davide Pesavento44deacc2014-02-19 10:48:07 +0100120
121 BOOST_REQUIRE(static_cast<bool>(face));
Alexander Afanasyev355c0662014-03-20 18:08:17 -0700122
123 BOOST_CHECK(!face->isOnDemand());
Davide Pesavento44deacc2014-02-19 10:48:07 +0100124 BOOST_CHECK_EQUAL(face->isLocal(), false);
Junxiao Shi79494162014-04-02 18:25:11 -0700125 BOOST_CHECK_EQUAL(face->getRemoteUri().toString(),
Chengyu Fan514ed5e2014-04-17 13:07:30 -0600126 "ether://[" + ethernet::getDefaultMulticastAddress().toString()+"]");
Junxiao Shi79494162014-04-02 18:25:11 -0700127 BOOST_CHECK_EQUAL(face->getLocalUri().toString(),
128 "dev://" + m_interfaces.front()->name);
Davide Pesavento44deacc2014-02-19 10:48:07 +0100129
Alexander Afanasyevb56c5b92014-06-05 08:05:24 +0300130 shared_ptr<Interest> interest1 = makeInterest("ndn:/TpnzGvW9R");
131 shared_ptr<Data> data1 = makeData("ndn:/KfczhUqVix");
132 shared_ptr<Interest> interest2 = makeInterest("ndn:/QWiIMfj5sL");
133 shared_ptr<Data> data2 = makeData("ndn:/XNBV796f");
Davide Pesavento44deacc2014-02-19 10:48:07 +0100134
Alexander Afanasyevb56c5b92014-06-05 08:05:24 +0300135 BOOST_CHECK_NO_THROW(face->sendInterest(*interest1));
136 BOOST_CHECK_NO_THROW(face->sendData (*data1 ));
137 BOOST_CHECK_NO_THROW(face->sendInterest(*interest2));
138 BOOST_CHECK_NO_THROW(face->sendData (*data2 ));
Davide Pesavento44deacc2014-02-19 10:48:07 +0100139
140// m_ioRemaining = 4;
141// m_ioService.run();
142// m_ioService.reset();
143
144// BOOST_REQUIRE_EQUAL(m_face1_receivedInterests.size(), 1);
145// BOOST_REQUIRE_EQUAL(m_face1_receivedDatas .size(), 1);
146// BOOST_REQUIRE_EQUAL(m_face2_receivedInterests.size(), 1);
147// BOOST_REQUIRE_EQUAL(m_face2_receivedDatas .size(), 1);
148
149// BOOST_CHECK_EQUAL(m_face1_receivedInterests[0].getName(), interest2.getName());
150// BOOST_CHECK_EQUAL(m_face1_receivedDatas [0].getName(), data2.getName());
151// BOOST_CHECK_EQUAL(m_face2_receivedInterests[0].getName(), interest1.getName());
152// BOOST_CHECK_EQUAL(m_face2_receivedDatas [0].getName(), data1.getName());
153}
154
155BOOST_AUTO_TEST_SUITE_END()
156
Junxiao Shid9ee45c2014-02-27 15:38:11 -0700157} // namespace tests
Davide Pesavento44deacc2014-02-19 10:48:07 +0100158} // namespace nfd