tests: test IP transports under various combos of address family/scope
In particular, link-local addresses are now tested as well.
Additionally, WebSocketTransport send/receive tests are extended
to check transport counters.
Change-Id: I5b35f498a5d8d70cb1f7a2bea3ce99d22370e050
Refs: #1428
diff --git a/tests/daemon/face/multicast-udp-transport.t.cpp b/tests/daemon/face/multicast-udp-transport.t.cpp
index 2b9407d..6e4a8cf 100644
--- a/tests/daemon/face/multicast-udp-transport.t.cpp
+++ b/tests/daemon/face/multicast-udp-transport.t.cpp
@@ -1,5 +1,5 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
* Copyright (c) 2014-2017, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
@@ -27,47 +27,58 @@
#include "multicast-udp-transport-fixture.hpp"
+#include <boost/mpl/vector.hpp>
+
namespace nfd {
namespace face {
namespace tests {
BOOST_AUTO_TEST_SUITE(Face)
-BOOST_FIXTURE_TEST_SUITE(TestMulticastUdpTransport, MulticastUdpTransportFixture)
-BOOST_AUTO_TEST_CASE(StaticPropertiesNonLocalIpv4)
+using MulticastUdpTransportFixtureWithAddress =
+ // TODO: change to AddressFamily::Any after IPv6 support is implemented
+ IpTransportFixture<MulticastUdpTransportFixture, AddressFamily::V4,
+ AddressScope::Global, MulticastInterface::Yes>;
+
+BOOST_FIXTURE_TEST_SUITE(TestMulticastUdpTransport, MulticastUdpTransportFixtureWithAddress)
+
+using MulticastUdpTransportFixtures = boost::mpl::vector<
+ IpTransportFixture<MulticastUdpTransportFixture, AddressFamily::V4, AddressScope::Global, MulticastInterface::Yes>
+ // TODO: IPv6 not supported yet
+ //IpTransportFixture<MulticastUdpTransportFixture, AddressFamily::V6, AddressScope::LinkLocal, MulticastInterface::Yes>,
+ //IpTransportFixture<MulticastUdpTransportFixture, AddressFamily::V6, AddressScope::Global, MulticastInterface::Yes>
+>;
+
+BOOST_FIXTURE_TEST_CASE_TEMPLATE(StaticProperties, T, MulticastUdpTransportFixtures, T)
{
- SKIP_IF_IP_UNAVAILABLE(defaultAddr);
- initialize(defaultAddr);
+ TRANSPORT_TEST_INIT();
- checkStaticPropertiesInitialized(*transport);
+ checkStaticPropertiesInitialized(*this->transport);
- BOOST_CHECK_EQUAL(transport->getLocalUri(),
- FaceUri("udp4://" + defaultAddr.to_string() + ":" + to_string(localEp.port())));
- BOOST_CHECK_EQUAL(transport->getRemoteUri(),
- FaceUri("udp4://" + multicastEp.address().to_string() + ":" + to_string(multicastEp.port())));
- BOOST_CHECK_EQUAL(transport->getScope(), ndn::nfd::FACE_SCOPE_NON_LOCAL);
- BOOST_CHECK_EQUAL(transport->getPersistency(), ndn::nfd::FACE_PERSISTENCY_PERMANENT);
- BOOST_CHECK_EQUAL(transport->getLinkType(), ndn::nfd::LINK_TYPE_MULTI_ACCESS);
- BOOST_CHECK_EQUAL(transport->getMtu(), 65535 - 60 - 8);
+ BOOST_CHECK_EQUAL(this->transport->getLocalUri(), FaceUri(udp::endpoint(this->address, this->localEp.port())));
+ BOOST_CHECK_EQUAL(this->transport->getRemoteUri(), FaceUri(this->multicastEp));
+ BOOST_CHECK_EQUAL(this->transport->getScope(), ndn::nfd::FACE_SCOPE_NON_LOCAL);
+ BOOST_CHECK_EQUAL(this->transport->getPersistency(), ndn::nfd::FACE_PERSISTENCY_PERMANENT);
+ BOOST_CHECK_EQUAL(this->transport->getLinkType(), ndn::nfd::LINK_TYPE_MULTI_ACCESS);
+ BOOST_CHECK_EQUAL(this->transport->getMtu(),
+ this->addressFamily == AddressFamily::V4 ? (65535 - 60 - 8) : (65535 - 8));
}
BOOST_AUTO_TEST_CASE(PersistencyChange)
{
- SKIP_IF_IP_UNAVAILABLE(defaultAddr);
- initialize(defaultAddr);
+ TRANSPORT_TEST_INIT();
BOOST_CHECK_EQUAL(transport->canChangePersistencyTo(ndn::nfd::FACE_PERSISTENCY_ON_DEMAND), false);
BOOST_CHECK_EQUAL(transport->canChangePersistencyTo(ndn::nfd::FACE_PERSISTENCY_PERSISTENT), false);
BOOST_CHECK_EQUAL(transport->canChangePersistencyTo(ndn::nfd::FACE_PERSISTENCY_PERMANENT), true);
}
-BOOST_AUTO_TEST_CASE(ReceiveMultipleRemoteEndpoints)
+BOOST_FIXTURE_TEST_CASE_TEMPLATE(ReceiveMultipleRemoteEndpoints, T, MulticastUdpTransportFixtures, T)
{
- SKIP_IF_IP_UNAVAILABLE(defaultAddr);
- initialize(defaultAddr);
+ TRANSPORT_TEST_INIT();
// remoteSockRx2 unnecessary for this test case - only remoteSockTx2 is needed
- udp::socket remoteSockTx2(g_io);
+ udp::socket remoteSockTx2(this->g_io);
remoteSockTx2.open(udp::v4());
remoteSockTx2.set_option(udp::socket::reuse_address(true));
remoteSockTx2.set_option(ip::multicast::enable_loopback(true));
@@ -75,21 +86,21 @@
Block pkt1 = ndn::encoding::makeStringBlock(300, "hello");
ndn::Buffer buf1(pkt1.begin(), pkt1.end());
- remoteWrite(buf1);
+ this->remoteWrite(buf1);
Block pkt2 = ndn::encoding::makeStringBlock(301, "world");
ndn::Buffer buf2(pkt2.begin(), pkt2.end());
- remoteWrite(buf2);
+ this->remoteWrite(buf2);
- BOOST_CHECK_EQUAL(transport->getCounters().nInPackets, 2);
- BOOST_CHECK_EQUAL(transport->getCounters().nInBytes, buf1.size() + buf2.size());
- BOOST_CHECK_EQUAL(transport->getState(), TransportState::UP);
+ BOOST_CHECK_EQUAL(this->transport->getCounters().nInPackets, 2);
+ BOOST_CHECK_EQUAL(this->transport->getCounters().nInBytes, buf1.size() + buf2.size());
+ BOOST_CHECK_EQUAL(this->transport->getState(), TransportState::UP);
- BOOST_REQUIRE_EQUAL(receivedPackets->size(), 2);
- BOOST_CHECK_EQUAL(receivedPackets->at(0).remoteEndpoint,
- receivedPackets->at(1).remoteEndpoint);
+ BOOST_REQUIRE_EQUAL(this->receivedPackets->size(), 2);
+ BOOST_CHECK_EQUAL(this->receivedPackets->at(0).remoteEndpoint,
+ this->receivedPackets->at(1).remoteEndpoint);
- udp::endpoint destEp(multicastEp.address(), localEp.port());
+ udp::endpoint destEp(this->multicastEp.address(), this->localEp.port());
remoteSockTx2.async_send_to(boost::asio::buffer(buf1), destEp,
[] (const boost::system::error_code& error, size_t) {
BOOST_REQUIRE_EQUAL(error, boost::system::errc::success);
@@ -98,17 +109,17 @@
[] (const boost::system::error_code& error, size_t) {
BOOST_REQUIRE_EQUAL(error, boost::system::errc::success);
});
- limitedIo.defer(time::seconds(1));
+ this->limitedIo.defer(time::seconds(1));
- BOOST_CHECK_EQUAL(transport->getCounters().nInPackets, 4);
- BOOST_CHECK_EQUAL(transport->getCounters().nInBytes, 2 * buf1.size() + 2 * buf2.size());
- BOOST_CHECK_EQUAL(transport->getState(), TransportState::UP);
+ BOOST_CHECK_EQUAL(this->transport->getCounters().nInPackets, 4);
+ BOOST_CHECK_EQUAL(this->transport->getCounters().nInBytes, 2 * buf1.size() + 2 * buf2.size());
+ BOOST_CHECK_EQUAL(this->transport->getState(), TransportState::UP);
- BOOST_REQUIRE_EQUAL(receivedPackets->size(), 4);
- BOOST_CHECK_EQUAL(receivedPackets->at(2).remoteEndpoint,
- receivedPackets->at(3).remoteEndpoint);
- BOOST_CHECK_NE(receivedPackets->at(0).remoteEndpoint,
- receivedPackets->at(2).remoteEndpoint);
+ BOOST_REQUIRE_EQUAL(this->receivedPackets->size(), 4);
+ BOOST_CHECK_EQUAL(this->receivedPackets->at(2).remoteEndpoint,
+ this->receivedPackets->at(3).remoteEndpoint);
+ BOOST_CHECK_NE(this->receivedPackets->at(0).remoteEndpoint,
+ this->receivedPackets->at(2).remoteEndpoint);
}
BOOST_AUTO_TEST_SUITE_END() // TestMulticastUdpTransport