X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FSocketHandle.test.cc;h=0b354aec70139e083fdad0a356aad74a7ec5faaa;hb=532240d72e09e19e57fac9bb55c2560b9c9e5b97;hp=e377f0bc4dce28eced4c149cc7b01e735741dfcc;hpb=a1a6c76a214ad1935032826713cabaf9ac57bf07;p=senf.git diff --git a/Socket/SocketHandle.test.cc b/Socket/SocketHandle.test.cc index e377f0b..0b354ae 100644 --- a/Socket/SocketHandle.test.cc +++ b/Socket/SocketHandle.test.cc @@ -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" @@ -39,13 +40,13 @@ namespace { class MySocketHandle - : public senf::SocketHandle + : public senf::SocketHandle { public: MySocketHandle() - : senf::SocketHandle( + : senf::SocketHandle( std::auto_ptr( - new senf::ProtocolSocketBody(false))) + new senf::ProtocolSocketBody(false, 0))) {} }; @@ -66,33 +67,47 @@ BOOST_AUTO_UNIT_TEST(socketHandle) >::policy OtherSocketPolicy; typedef senf::SocketHandle OtherSocketHandle; - MySocketHandle myh; - OtherSocketHandle osh (myh); - osh = myh; - - typedef senf::SocketHandle SomeSocketHandle; - SomeSocketHandle ssh = senf::static_socket_cast(osh); - - BOOST_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: -1\n" - "file.refcount: 3\n" - "handle: senf::SocketHandle >\n" - "socket.protocol: senf::test::SomeProtocol\n" - "socket.protocol.policy: senf::SocketPolicy\n" - "socket.server: false\n" ); + 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////////////////////////////////////////