X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FSocketHandle.test.cc;h=0b354aec70139e083fdad0a356aad74a7ec5faaa;hb=532240d72e09e19e57fac9bb55c2560b9c9e5b97;hp=f8494a3e55787bdd4df2dbed5c6a31c8d36e4c95;hpb=f73fa16ed5abdce272ac77f8b8b9ef2b9922c266;p=senf.git diff --git a/Socket/SocketHandle.test.cc b/Socket/SocketHandle.test.cc index f8494a3..0b354ae 100644 --- a/Socket/SocketHandle.test.cc +++ b/Socket/SocketHandle.test.cc @@ -1,8 +1,8 @@ // $Id$ // // Copyright (C) 2006 -// Fraunhofer Institute for Open Communication Systems (FOKUS) -// Competence Center NETwork research (NET), St. Augustin, GERMANY +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund // // This program is free software; you can redistribute it and/or modify @@ -20,7 +20,8 @@ // Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// Unit tests +/** \file + \brief SocketHandle unit tests */ //#include "SocketHandle.test.hh" //#include "SocketHandle.test.ih" @@ -37,15 +38,15 @@ ///////////////////////////////cc.p//////////////////////////////////////// namespace { - namespace sl = senf; class MySocketHandle - : public sl::SocketHandle + : public senf::SocketHandle { public: MySocketHandle() - : sl::SocketHandle( - std::auto_ptr(new sl::test::SomeProtocol()),false) + : senf::SocketHandle( + std::auto_ptr( + new senf::ProtocolSocketBody(false, 0))) {} }; @@ -53,47 +54,60 @@ namespace { : public senf::FileHandle { public: - FDHandle() - : senf::FileHandle(std::auto_ptr( - new senf::FileBody())) {} + FDHandle() : senf::FileHandle(std::auto_ptr(new senf::FileBody())) {} }; + } BOOST_AUTO_UNIT_TEST(socketHandle) { - typedef sl::MakeSocketPolicy< - sl::test::SomeCommunicationPolicy, - sl::test::SomeReadPolicy + typedef senf::MakeSocketPolicy< + senf::test::SomeCommunicationPolicy, + senf::test::SomeReadPolicy >::policy OtherSocketPolicy; - typedef sl::SocketHandle OtherSocketHandle; - - MySocketHandle myh; - OtherSocketHandle osh (myh); - osh = myh; - - typedef sl::SocketHandle SomeSocketHandle; - SomeSocketHandle ssh = senf::static_socket_cast(osh); - - BOOST_CHECK_NO_THROW( senf::dynamic_socket_cast(osh) ); - - typedef sl::SocketHandle< sl::MakeSocketPolicy< - OtherSocketPolicy, - senf::NoAddressingPolicy - >::policy> SomeOtherSocketHandle; - - BOOST_CHECK_THROW( senf::dynamic_socket_cast(osh), - std::bad_cast ); - BOOST_CHECK_THROW( senf::dynamic_socket_cast( - senf::FileHandle(FDHandle())), - std::bad_cast ); - - BOOST_CHECK_EQUAL( myh.dumpState(), - "file.handle: -1\n" - "file.refcount: 3\n" - "handle: senf::SocketHandle >\n" - "socket.policy: senf::SocketPolicy\n" - "socket.protocol: senf::test::SomeProtocol\n" - "socket.server: false\n" ); + typedef senf::SocketHandle OtherSocketHandle; + + typedef senf::MakeSocketPolicy< + senf::test::SomeCommunicationPolicy, + senf::test::SomeAddressingPolicy + >::policy AnotherSocketPolicy; + typedef senf::SocketHandle AnotherSocketHandle; + + { + MySocketHandle myh; + OtherSocketHandle osh (myh); + osh = myh; + + typedef senf::SocketHandle SomeSocketHandle; + SomeSocketHandle ssh = senf::static_socket_cast(osh); + + SENF_CHECK_NO_THROW( senf::dynamic_socket_cast(osh) ); + SENF_CHECK_NO_THROW( senf::dynamic_socket_cast(osh) ); + + typedef senf::SocketHandle< senf::MakeSocketPolicy< + OtherSocketPolicy, + senf::NoAddressingPolicy + >::policy> SomeOtherSocketHandle; + + BOOST_CHECK_THROW( senf::dynamic_socket_cast(osh), + std::bad_cast ); + BOOST_CHECK_THROW( senf::dynamic_socket_cast( + senf::FileHandle(FDHandle())), + std::bad_cast ); + + BOOST_CHECK_EQUAL( myh.dumpState(), + "file.handle: 0\n" + "file.refcount: 3\n" + "handle: senf::SocketHandle >\n" + "socket.protocol: senf::test::SomeSocketProtocol\n" + "socket.protocol.policy: senf::SocketPolicy\n" + "socket.server: false\n" ); + + SENF_CHECK_NO_THROW( myh.facet() ); + } + + // Ensure, the destructor is called and calls the correct close() implementation + BOOST_CHECK_EQUAL( senf::test::SomeSocketProtocol::closeCount(), 1u ); } ///////////////////////////////cc.e////////////////////////////////////////