// $Id$
//
// Copyright (C) 2006
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
-// Stefan Bund <stefan.bund@fokus.fraunhofer.de>
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
+// Stefan Bund <g0dil@berlios.de>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// Free Software Foundation, Inc.,
// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-// Unit tests
+/** \file
+ \brief TCPSocketHandle unit tests */
//#include "TCPSocketHandle.test.hh"
//#include "TCPSocketHandle.test.ih"
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
-#include "TCPSocketHandle.hh"
#include <iostream>
+#include "TCPSocketHandle.hh"
-#include <boost/test/auto_unit_test.hpp>
+#include "../../../Utils/auto_unit_test.hh"
#include <boost/test/test_tools.hpp>
#define prefix_
server_pid = ::fork();
if (server_pid < 0) BOOST_FAIL("fork()");
if (server_pid == 0) {
+ signal(SIGCHLD, SIG_IGN);
(*fn)();
_exit(0);
}
+ signal(SIGCHLD, SIG_DFL);
+ ::sleep(1);
}
void wait()
BOOST_CHECK_THROW( sock.connect(senf::INet4SocketAddress("127.0.0.1:12345")),
senf::SystemException );
- BOOST_CHECK_THROW( sock.protocol().connect(senf::INet4SocketAddress("127.0.0.1:12345")),
- senf::SystemException );
}
try {
alarm(10);
start(server_v4);
senf::TCPv4ClientSocketHandle sock;
- BOOST_CHECK_NO_THROW( sock.bind(senf::INet4SocketAddress("127.0.0.1:23456")) );
- BOOST_CHECK_NO_THROW( sock.connect(senf::INet4SocketAddress("127.0.0.1:12345")) );
+ SENF_CHECK_NO_THROW( sock.bind(senf::INet4SocketAddress("127.0.0.1:23456")) );
+ SENF_CHECK_NO_THROW( sock.connect(senf::INet4SocketAddress("127.0.0.1:12345")) );
BOOST_CHECK( sock.peer() == senf::INet4SocketAddress("127.0.0.1:12345") );
BOOST_CHECK( sock.local() == senf::INet4SocketAddress("127.0.0.1:23456") );
BOOST_CHECK( sock.blocking() );
- BOOST_CHECK_NO_THROW( sock.rcvbuf(2048) );
- BOOST_CHECK_EQUAL( sock.rcvbuf(), 2048u );
- BOOST_CHECK_NO_THROW( sock.sndbuf(2048) );
- BOOST_CHECK_EQUAL( sock.sndbuf(), 2048u );
- BOOST_CHECK_NO_THROW( sock.write("TEST-WRITE") );
- BOOST_CHECK_EQUAL( sock.read(), "TEST-WRITE" );
+ SENF_CHECK_NO_THROW( sock.protocol().rcvbuf(2048) );
+ BOOST_CHECK_EQUAL( sock.protocol().rcvbuf(), 2048u );
+ SENF_CHECK_NO_THROW( sock.protocol().sndbuf(2048) );
+ BOOST_CHECK_EQUAL( sock.protocol().sndbuf(), 2048u );
+ SENF_CHECK_NO_THROW( sock.write(std::string("TEST-WRITE")) );
+ BOOST_CHECK_EQUAL( sock.read(), std::string("TEST-WRITE") );
BOOST_CHECK( !sock.eof() );
- sock.write("QUIT");
+ sock.write(std::string("QUIT"));
sleep(1);
stop();
sleep(1);
// are at least not sensible ...
// I'll have to move those to a UDPSocket test ... they should
// realy only be in the UDP Protocol implementation
-// BOOST_CHECK_NO_THROW( sock.protocol().mcTTL() );
+// SENF_CHECK_NO_THROW( sock.protocol().mcTTL() );
// BOOST_CHECK_THROW( sock.protocol().mcTTL(1), senf::SystemException );
-// BOOST_CHECK_NO_THROW( sock.protocol().mcLoop() );
-// BOOST_CHECK_NO_THROW( sock.protocol().mcLoop(false) );
-// BOOST_CHECK_NO_THROW( sock.protocol().mcAddMembership("224.0.0.1:0") );
-// BOOST_CHECK_NO_THROW( sock.protocol().mcAddMembership("224.0.0.1:0","127.0.0.1:0") );
-// BOOST_CHECK_NO_THROW( sock.protocol().mcDropMembership("224.0.0.1:0","127.0.0.1:0") );
-// BOOST_CHECK_NO_THROW( sock.protocol().mcDropMembership("224.0.0.1:0") );
+// SENF_CHECK_NO_THROW( sock.protocol().mcLoop() );
+// SENF_CHECK_NO_THROW( sock.protocol().mcLoop(false) );
+// SENF_CHECK_NO_THROW( sock.protocol().mcAddMembership("224.0.0.1:0") );
+// SENF_CHECK_NO_THROW( sock.protocol().mcAddMembership("224.0.0.1:0","127.0.0.1:0") );
+// SENF_CHECK_NO_THROW( sock.protocol().mcDropMembership("224.0.0.1:0","127.0.0.1:0") );
+// SENF_CHECK_NO_THROW( sock.protocol().mcDropMembership("224.0.0.1:0") );
// BOOST_CHECK_THROW( sock.protocol().mcIface("lo"), senf::SystemException );
// The following setsockopts are hard to REALLY test ...
- BOOST_CHECK_NO_THROW( sock.protocol().nodelay(true) );
+ SENF_CHECK_NO_THROW( sock.protocol().nodelay(true) );
BOOST_CHECK( sock.protocol().nodelay() );
BOOST_CHECK_EQUAL( sock.protocol().siocinq(), 0u );
BOOST_CHECK_EQUAL( sock.protocol().siocoutq(), 0u );
- BOOST_CHECK_NO_THROW( sock.protocol().reuseaddr(true) );
+ SENF_CHECK_NO_THROW( sock.protocol().reuseaddr(true) );
BOOST_CHECK( sock.protocol().reuseaddr() );
- BOOST_CHECK_NO_THROW( sock.protocol().linger(true,0) );
+ SENF_CHECK_NO_THROW( sock.protocol().linger(true,0) );
BOOST_CHECK( sock.protocol().linger() == std::make_pair(true, 0u) );
}
}
alarm(10);
start(server_v6);
senf::TCPv6ClientSocketHandle sock;
- BOOST_CHECK_NO_THROW( sock.bind(senf::INet6SocketAddress("[::1]:23456")) );
- BOOST_CHECK_NO_THROW( sock.connect(senf::INet6SocketAddress("[::1]:12345")) );
+ SENF_CHECK_NO_THROW( sock.bind(senf::INet6SocketAddress("[::1]:23456")) );
+ SENF_CHECK_NO_THROW( sock.connect(senf::INet6SocketAddress("[::1]:12345")) );
BOOST_CHECK( sock.peer() == senf::INet6SocketAddress("[::1]:12345") );
BOOST_CHECK( sock.local() == senf::INet6SocketAddress("[::1]:23456") );
BOOST_CHECK( sock.blocking() );
- BOOST_CHECK_NO_THROW( sock.rcvbuf(2048) );
- BOOST_CHECK_EQUAL( sock.rcvbuf(), 2048u );
- BOOST_CHECK_NO_THROW( sock.sndbuf(2048) );
- BOOST_CHECK_EQUAL( sock.sndbuf(), 2048u );
- BOOST_CHECK_NO_THROW( sock.write("TEST-WRITE") );
- BOOST_CHECK_EQUAL( sock.read(), "TEST-WRITE" );
+ SENF_CHECK_NO_THROW( sock.protocol().rcvbuf(2048) );
+ BOOST_CHECK_EQUAL( sock.protocol().rcvbuf(), 2048u );
+ SENF_CHECK_NO_THROW( sock.protocol().sndbuf(2048) );
+ BOOST_CHECK_EQUAL( sock.protocol().sndbuf(), 2048u );
+ SENF_CHECK_NO_THROW( sock.write(std::string("TEST-WRITE")) );
+ BOOST_CHECK_EQUAL( sock.read(), std::string("TEST-WRITE") );
// this fails with ENOFILE ... why ????
- // BOOST_CHECK_NO_THROW( sock.protocol().timestamp() );
+ // SENF_CHECK_NO_THROW( sock.protocol().timestamp() );
BOOST_CHECK( !sock.eof() );
- sock.write("QUIT");
+ sock.write(std::string("QUIT"));
sleep(1);
stop();
sleep(1);
senf::TCPv6ClientSocketHandle sock;
// The following setsockopts are hard to REALLY test ...
- BOOST_CHECK_NO_THROW( sock.protocol().nodelay(true) );
+ SENF_CHECK_NO_THROW( sock.protocol().nodelay(true) );
BOOST_CHECK( sock.protocol().nodelay() );
BOOST_CHECK_EQUAL( sock.protocol().siocinq(), 0u );
BOOST_CHECK_EQUAL( sock.protocol().siocoutq(), 0u );
- BOOST_CHECK_NO_THROW( sock.protocol().reuseaddr(true) );
+ SENF_CHECK_NO_THROW( sock.protocol().reuseaddr(true) );
BOOST_CHECK( sock.protocol().reuseaddr() );
- BOOST_CHECK_NO_THROW( sock.protocol().linger(true,0) );
+ SENF_CHECK_NO_THROW( sock.protocol().linger(true,0) );
BOOST_CHECK( sock.protocol().linger() == std::make_pair(true, 0u) );
}
}
BOOST_CHECKPOINT("Accepting connection");
senf::TCPv4ClientSocketHandle client = server.accept();
- BOOST_CHECK_NO_THROW(client.write("QUIT"));
+ SENF_CHECK_NO_THROW(client.write(std::string("QUIT")));
BOOST_CHECKPOINT("Stopping client");
sleep(1);
BOOST_CHECKPOINT("Accepting connection");
senf::TCPv6ClientSocketHandle client = server.accept();
- BOOST_CHECK_NO_THROW(client.write("QUIT"));
+ SENF_CHECK_NO_THROW(client.write(std::string("QUIT")));
BOOST_CHECKPOINT("Stopping client");
sleep(1);