From 11acd2bf7716b6a4fcb8f5de177b031dc196d27a Mon Sep 17 00:00:00 2001 From: dw6 <dw6@wiback.org> Date: Wed, 19 Sep 2007 16:00:00 +0000 Subject: [PATCH] removed some errors, added basic unit tests --- Socket/Protocols/UN/UNAddress.cc | 11 +++- Socket/Protocols/UN/UNAddress.hh | 7 +- Socket/Protocols/UN/UNAddress.test.cc | 59 +++++++++++++++++ Socket/Protocols/UN/UNAddressing.cc | 2 +- Socket/Protocols/UN/UNAddressing.hh | 13 ++-- Socket/Protocols/UN/UNAddressing.o | Bin 0 -> 129324 bytes Socket/Protocols/UN/UNAddressing.test.cc | 61 ++++++++++++++++++ Socket/Protocols/UN/UNAddressing.test.cc~ | 61 ++++++++++++++++++ Socket/Protocols/UN/UNDatagramSocketHandle.hh | 2 +- .../UN/UNDatagramSocketHandle.test.cc | 56 ++++++++++++++++ Socket/Protocols/UN/UNProtocol.cc | 4 +- Socket/Protocols/UN/UNProtocol.test.cc | 54 ++++++++++++++++ Socket/Protocols/UN/main.test.cc | 49 ++++++++++++++ 13 files changed, 362 insertions(+), 17 deletions(-) create mode 100644 Socket/Protocols/UN/UNAddress.test.cc create mode 100644 Socket/Protocols/UN/UNAddressing.o create mode 100644 Socket/Protocols/UN/UNAddressing.test.cc create mode 100644 Socket/Protocols/UN/UNAddressing.test.cc~ create mode 100644 Socket/Protocols/UN/UNDatagramSocketHandle.test.cc create mode 100644 Socket/Protocols/UN/UNProtocol.test.cc create mode 100644 Socket/Protocols/UN/main.test.cc diff --git a/Socket/Protocols/UN/UNAddress.cc b/Socket/Protocols/UN/UNAddress.cc index 870f2b984..70aab9a96 100644 --- a/Socket/Protocols/UN/UNAddress.cc +++ b/Socket/Protocols/UN/UNAddress.cc @@ -36,9 +36,8 @@ prefix_ senf::UNAddress::UNAddress() } prefix_ senf::UNAddress::UNAddress(boost::filesystem::path p) - //:path(p) { - + path = p; } @@ -52,12 +51,18 @@ prefix_ senf::UNAddress::UNAddress senf::UNAddress::fromPath(boost::filesystem:: } prefix_ std::string senf::UNAddress::pathString() + const { return path.string(); } +prefix_ senf::UNAddress::UNAddress senf::UNAddress::clone() +{ + senf::UNAddress::UNAddress local_addr = senf::UNAddress::UNAddress(pathString()); + return local_addr; +} -prefix_ const std::ostream & senf::operator<<(std::ostream & os, UNAddress const & addr) +prefix_ std::ostream & senf::operator<<(std::ostream & os, UNAddress const & addr) { os << addr.pathString(); return os; diff --git a/Socket/Protocols/UN/UNAddress.hh b/Socket/Protocols/UN/UNAddress.hh index 67a7061ac..e5cb5f2a6 100644 --- a/Socket/Protocols/UN/UNAddress.hh +++ b/Socket/Protocols/UN/UNAddress.hh @@ -48,16 +48,17 @@ namespace senf { explicit UNAddress(boost::filesystem::path);///< Construct an address constant from given path static UNAddress fromString(std::string & s); ///< Convert string to address by interpreting the string as path static UNAddress fromPath(boost::filesystem::path & p);///< Convert path to address - static std::string pathString(); ///< Return the path of the address as string + UNAddress clone(); ///< Clone object + std::string pathString() const; ///< Return the path of the address as string /** \brief Base-class for UNAddress exceptions */ struct AddressException : public std::exception {}; private: - static boost::filesystem::path path; + boost::filesystem::path path; }; -const std::ostream & operator<<(std::ostream & os, UNAddress const & addr); +std::ostream & operator<<(std::ostream & os, UNAddress const & addr); } ///////////////////////////////hh.e//////////////////////////////////////// diff --git a/Socket/Protocols/UN/UNAddress.test.cc b/Socket/Protocols/UN/UNAddress.test.cc new file mode 100644 index 000000000..d6ade16bd --- /dev/null +++ b/Socket/Protocols/UN/UNAddress.test.cc @@ -0,0 +1,59 @@ +// $Id$ +// +// Copyright (C) 2007 +// +// 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 +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +/** \file + \brief UNAddress.test unit tests */ + +//#include "UNAddress.test.hh" +//#include "UNAddress.test.ih" + +// Custom includes +#include "UNAddress.hh" +#include <boost/filesystem/path.hpp> +#include <boost/test/auto_unit_test.hpp> +#include <boost/test/test_tools.hpp> + +#include <iostream> +#define prefix_ +///////////////////////////////cc.p//////////////////////////////////////// + +BOOST_AUTO_UNIT_TEST(unAddress) +{ + // das koennt sicher mehr sein... + std::string testS = "/tmp/senfTestSocket"; + boost::filesystem::path testp = boost::filesystem::path(testS); + senf::UNAddress addr1 = senf::UNAddress::fromString(testS); + senf::UNAddress addr2 = senf::UNAddress::fromPath(testp); + BOOST_CHECK( testS == addr1.pathString()); + BOOST_CHECK( testS == addr2.pathString()); +} + +///////////////////////////////cc.e//////////////////////////////////////// +#undef prefix_ + + +// Local Variables: +// mode: c++ +// fill-column: 100 +// comment-column: 40 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// End: diff --git a/Socket/Protocols/UN/UNAddressing.cc b/Socket/Protocols/UN/UNAddressing.cc index abc278f37..ce957e4b1 100644 --- a/Socket/Protocols/UN/UNAddressing.cc +++ b/Socket/Protocols/UN/UNAddressing.cc @@ -55,6 +55,7 @@ prefix_ senf::UNSocketAddress::UNSocketAddress(boost::filesystem::path p) return senf::UNSocketAddress::UNSocketAddress(p); } prefix_ std::string senf::UNSocketAddress::path() + const { return std::string(sockAddr.sun_path); } @@ -80,7 +81,6 @@ prefix_ sockaddr const * senf::UNSocketAddress::sockaddr_p() } prefix_ unsigned senf::UNSocketAddress::sockaddr_len() - const { return sizeof(sockAddr); } diff --git a/Socket/Protocols/UN/UNAddressing.hh b/Socket/Protocols/UN/UNAddressing.hh index 25b02d96b..f30cfdd82 100644 --- a/Socket/Protocols/UN/UNAddressing.hh +++ b/Socket/Protocols/UN/UNAddressing.hh @@ -42,7 +42,7 @@ namespace senf { /** \brief Unix domain socket address - UNSocketAddress wraps the standard sockaddr_in datatype. It provides simple accessor methods + UNSocketAddress wraps the standard sockaddr_un datatype. It provides simple accessor methods to access the path. \implementation This implementation is based on sockaddr_un. @@ -59,14 +59,13 @@ namespace senf { ///< Construct an address constant from given path static UNSocketAddress from_string(std::string const s); ///< Create UNSocketAddress from string static UNSocketAddress from_path(boost::filesystem::path const p); ///< Create UNSocketAddress from path - static std::string path(); ///< Return path as string - static sockaddr_un sockaddr(); - - struct sockaddr * sockaddr_p(); + std::string path() const ; ///< Return path as string + struct sockaddr_un sockaddr(); + struct sockaddr * sockaddr_p() ; struct sockaddr const * sockaddr_p() const; - unsigned sockaddr_len() const; + unsigned sockaddr_len(); private: - static struct sockaddr_un sockAddr; + struct sockaddr_un sockAddr; }; /** \brief Write path os diff --git a/Socket/Protocols/UN/UNAddressing.o b/Socket/Protocols/UN/UNAddressing.o new file mode 100644 index 0000000000000000000000000000000000000000..417b79b4e549314c9bb9bcebcfc7acff861e6872 GIT binary patch literal 129324 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 P{$nF$^aq>B(Z>8A@V2Tc literal 0 HcmV?d00001 diff --git a/Socket/Protocols/UN/UNAddressing.test.cc b/Socket/Protocols/UN/UNAddressing.test.cc new file mode 100644 index 000000000..b3b76e80f --- /dev/null +++ b/Socket/Protocols/UN/UNAddressing.test.cc @@ -0,0 +1,61 @@ +// $Id$ +// +// Copyright (C) 2007 +// +// 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 +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +/** \file + \brief UNAddressing.test unit tests */ + +//#include "UNAddressing.test.hh" +//#include "UNAddressing.test.ih" + +// Custom includes +#include "UNAddressing.hh" + +#include <boost/test/auto_unit_test.hpp> +#include <boost/test/test_tools.hpp> + +#include <sys/socket.h> +#include <sys/un.h> + +#define prefix_ +///////////////////////////////cc.p//////////////////////////////////////// + +BOOST_AUTO_UNIT_TEST(unSocketAddress) +{ + std::string testS = "/tmp/senfTestSocket"; + senf::UNSocketAddress addr (testS) ; + int mySock = socket(AF_UNIX, SOCK_DGRAM, 0); + if (bind(mySock, addr.sockaddr_p(), addr.sockaddr_len())) { + std::cout << "Error while binding name to unix socket" << std::endl; + } + +} + +///////////////////////////////cc.e//////////////////////////////////////// +#undef prefix_ + + +// Local Variables: +// mode: c++ +// fill-column: 100 +// comment-column: 40 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// End: diff --git a/Socket/Protocols/UN/UNAddressing.test.cc~ b/Socket/Protocols/UN/UNAddressing.test.cc~ new file mode 100644 index 000000000..7f224cfec --- /dev/null +++ b/Socket/Protocols/UN/UNAddressing.test.cc~ @@ -0,0 +1,61 @@ +// $Id$ +// +// Copyright (C) 2007 +// +// 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 +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +/** \file + \brief UNAddressing.test unit tests */ + +//#include "UNAddressing.test.hh" +//#include "UNAddressing.test.ih" + +// Custom includes +#include "UNAddressing.hh" + +#include <boost/test/auto_unit_test.hpp> +#include <boost/test/test_tools.hpp> + +#include <sys/socket.h> +#include <sys/un.h> + +#define prefix_ +///////////////////////////////cc.p//////////////////////////////////////// + +BOOST_AUTO_UNIT_TEST(unSocketAddress) +{ + std::string testS = "/tmp/senfTestSocket"; + senf::UNSocketAddress addr (testS) ; + mySock = socket(AF_UNIX, SOCK_DGRAM, 0); + if (bind(mySock, addr.sockaddr_p(), addr.sockaddr_len())) { + std::cout << "Error while binding name to unix socket" std::endl; + } + +} + +///////////////////////////////cc.e//////////////////////////////////////// +#undef prefix_ + + +// Local Variables: +// mode: c++ +// fill-column: 100 +// comment-column: 40 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// End: diff --git a/Socket/Protocols/UN/UNDatagramSocketHandle.hh b/Socket/Protocols/UN/UNDatagramSocketHandle.hh index 458a9589e..0956525a2 100644 --- a/Socket/Protocols/UN/UNDatagramSocketHandle.hh +++ b/Socket/Protocols/UN/UNDatagramSocketHandle.hh @@ -110,7 +110,7 @@ namespace senf { typedef MakeSocketPolicy< UNDatagramSocket_Policy, UNAddressingPolicy - >::policy UDPv6Socket_Policy; + >::policy UNDatagramSocket_Policy; } ///////////////////////////////hh.e//////////////////////////////////////// //#include "UNDatagramSocketHandle.cci" diff --git a/Socket/Protocols/UN/UNDatagramSocketHandle.test.cc b/Socket/Protocols/UN/UNDatagramSocketHandle.test.cc new file mode 100644 index 000000000..d6485740b --- /dev/null +++ b/Socket/Protocols/UN/UNDatagramSocketHandle.test.cc @@ -0,0 +1,56 @@ +// $Id$ +// +// Copyright (C) 2007 +// +// 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 +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +/** \file + \brief UNDatagramSocketHandle.test unit tests */ + +//#include "UNDatagramSocketHandle.test.hh" +//#include "UNDatagramSocketHandle.test.ih" + +// Custom includes +#include "UNDatagramSocketHandle.hh" + +#include <boost/test/auto_unit_test.hpp> +#include <boost/test/test_tools.hpp> + +#define prefix_ +///////////////////////////////cc.p//////////////////////////////////////// + +BOOST_AUTO_UNIT_TEST(unDatagramSocketHandle) +{ + std::string testS = "/tmp/senfTestSocket"; + senf::UNSocketAddress addr (testS) ; + //senf::UNDatagramSocketHandle init_client(addr); + senf::UNDatagramClientSocketHandle inputSocket(senf::UNSocketAddress(tests)); +} + + +///////////////////////////////cc.e//////////////////////////////////////// +#undef prefix_ + + +// Local Variables: +// mode: c++ +// fill-column: 100 +// comment-column: 40 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// End: diff --git a/Socket/Protocols/UN/UNProtocol.cc b/Socket/Protocols/UN/UNProtocol.cc index d3afe3f38..d04192d91 100644 --- a/Socket/Protocols/UN/UNProtocol.cc +++ b/Socket/Protocols/UN/UNProtocol.cc @@ -33,14 +33,14 @@ prefix_ void senf::UNProtocol::connect(UNSocketAddress const & address) const { - if(::connect(body().fd(), address.sockaddr_p(), sizeof(address.sockaddr())) < 0) + if(::connect(body().fd(), address.sockaddr_p(), sizeof(sockaddr_un)) < 0) throw SystemException(errno); } prefix_ void senf::UNProtocol::bind(UNSocketAddress const & address) const { - if(::bind(body().fd(), address.sockaddr_p(), sizeof(address.sockaddr())) < 0) + if(::bind(body().fd(), address.sockaddr_p(), sizeof(sockaddr_un)) < 0) throw SystemException(errno); } diff --git a/Socket/Protocols/UN/UNProtocol.test.cc b/Socket/Protocols/UN/UNProtocol.test.cc new file mode 100644 index 000000000..5ab47b6fc --- /dev/null +++ b/Socket/Protocols/UN/UNProtocol.test.cc @@ -0,0 +1,54 @@ +// $Id$ +// +// Copyright (C) 2007 +// +// 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 +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +/** \file + \brief UNProtocol.test unit tests */ + +//#include "UNProtocol.test.hh" +//#include "UNProtocol.test.ih" + +// Custom includes +#include "UNProtocol.hh" + +#include <boost/test/auto_unit_test.hpp> +#include <boost/test/test_tools.hpp> + +#define prefix_ +///////////////////////////////cc.p//////////////////////////////////////// + +BOOST_AUTO_UNIT_TEST(unProtocol) +{ + std::string testS = "/tmp/senfTestSocket"; + //zZ leer +} + + +///////////////////////////////cc.e//////////////////////////////////////// +#undef prefix_ + + +// Local Variables: +// mode: c++ +// fill-column: 100 +// comment-column: 40 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// End: diff --git a/Socket/Protocols/UN/main.test.cc b/Socket/Protocols/UN/main.test.cc new file mode 100644 index 000000000..91e601da2 --- /dev/null +++ b/Socket/Protocols/UN/main.test.cc @@ -0,0 +1,49 @@ +// $Id: main.test.cc 296 2007-07-10 20:39:34Z g0dil $ +// +// Copyright (C) 2006 +// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) +// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +// Stefan Bund <stefan.bund@fokus.fraunhofer.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 +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +// Definition of non-inline non-template functions + +//#include "test.hh" +//#include "test.ih" + +// Custom includes +#define BOOST_AUTO_TEST_MAIN +#include <boost/test/auto_unit_test.hpp> +#include <boost/test/test_tools.hpp> + +#define prefix_ +///////////////////////////////cc.p//////////////////////////////////////// + + +///////////////////////////////cc.e//////////////////////////////////////// +#undef prefix_ + + +// Local Variables: +// mode: c++ +// fill-column: 100 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 +// End: -- GitLab