// $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 <g0dil@berlios.de>
//
// This program is free software; you can redistribute it and/or modify
///////////////////////////////cc.p////////////////////////////////////////
namespace {
- namespace sl = senf;
class MySocketHandle
- : public sl::SocketHandle<sl::test::SomeProtocol::Policy>
+ : public senf::SocketHandle<senf::test::SomeSocketProtocol::Policy>
{
public:
MySocketHandle()
- : sl::SocketHandle<sl::test::SomeProtocol::Policy>(
- std::auto_ptr<sl::SocketProtocol>(new sl::test::SomeProtocol()),false)
+ : senf::SocketHandle<senf::test::SomeSocketProtocol::Policy>(
+ std::auto_ptr<senf::SocketBody>(
+ new senf::ProtocolSocketBody<senf::test::SomeSocketProtocol>(false, 0)))
{}
};
: public senf::FileHandle
{
public:
- FDHandle()
- : senf::FileHandle(std::auto_ptr<senf::FileBody>(
- new senf::FileBody())) {}
+ FDHandle() : senf::FileHandle(std::auto_ptr<senf::FileBody>(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<OtherSocketPolicy> OtherSocketHandle;
-
- MySocketHandle myh;
- OtherSocketHandle osh (myh);
- osh = myh;
-
- typedef sl::SocketHandle<sl::test::SomeProtocol::Policy> SomeSocketHandle;
- SomeSocketHandle ssh = senf::static_socket_cast<SomeSocketHandle>(osh);
-
- BOOST_CHECK_NO_THROW( senf::dynamic_socket_cast<SomeSocketHandle>(osh) );
-
- typedef sl::SocketHandle< sl::MakeSocketPolicy<
- OtherSocketPolicy,
- senf::NoAddressingPolicy
- >::policy> SomeOtherSocketHandle;
-
- BOOST_CHECK_THROW( senf::dynamic_socket_cast<SomeOtherSocketHandle>(osh),
- std::bad_cast );
- BOOST_CHECK_THROW( senf::dynamic_socket_cast<SomeSocketHandle>(
- senf::FileHandle(FDHandle())),
- std::bad_cast );
-
- BOOST_CHECK_EQUAL( myh.dumpState(),
- "file.handle: -1\n"
- "file.refcount: 3\n"
- "handle: senf::SocketHandle<senf::SocketPolicy<senf::test::SomeAddressingPolicy, senf::test::SomeFramingPolicy, senf::test::SomeCommunicationPolicy, senf::test::SomeReadPolicy, senf::test::SomeWritePolicy> >\n"
- "socket.policy: senf::SocketPolicy<senf::test::SomeAddressingPolicy, senf::test::SomeFramingPolicy, senf::test::SomeCommunicationPolicy, senf::test::SomeReadPolicy, senf::test::SomeWritePolicy>\n"
- "socket.protocol: senf::test::SomeProtocol\n"
- "socket.server: false\n" );
+ typedef senf::SocketHandle<OtherSocketPolicy> OtherSocketHandle;
+
+ {
+ MySocketHandle myh;
+ OtherSocketHandle osh (myh);
+ osh = myh;
+
+ typedef senf::SocketHandle<senf::test::SomeSocketProtocol::Policy> SomeSocketHandle;
+ SomeSocketHandle ssh = senf::static_socket_cast<SomeSocketHandle>(osh);
+
+ BOOST_CHECK_NO_THROW( senf::dynamic_socket_cast<SomeSocketHandle>(osh) );
+
+ typedef senf::SocketHandle< senf::MakeSocketPolicy<
+ OtherSocketPolicy,
+ senf::NoAddressingPolicy
+ >::policy> SomeOtherSocketHandle;
+
+ BOOST_CHECK_THROW( senf::dynamic_socket_cast<SomeOtherSocketHandle>(osh),
+ std::bad_cast );
+ BOOST_CHECK_THROW( senf::dynamic_socket_cast<SomeSocketHandle>(
+ senf::FileHandle(FDHandle())),
+ std::bad_cast );
+
+ BOOST_CHECK_EQUAL( myh.dumpState(),
+ "file.handle: 0\n"
+ "file.refcount: 3\n"
+ "handle: senf::SocketHandle<senf::SocketPolicy<senf::test::SomeAddressingPolicy, senf::test::SomeFramingPolicy, senf::test::SomeCommunicationPolicy, senf::test::SomeReadPolicy, senf::test::SomeWritePolicy> >\n"
+ "socket.protocol: senf::test::SomeSocketProtocol\n"
+ "socket.protocol.policy: senf::SocketPolicy<senf::test::SomeAddressingPolicy, senf::test::SomeFramingPolicy, senf::test::SomeCommunicationPolicy, senf::test::SomeReadPolicy, senf::test::SomeWritePolicy>\n"
+ "socket.server: false\n" );
+ }
+
+ // Ensure, the destructor is called and calls the correct close() implementation
+ BOOST_CHECK_EQUAL( senf::test::SomeSocketProtocol::closeCount(), 1u );
}
///////////////////////////////cc.e////////////////////////////////////////