Thread: [complement-svn] SF.net SVN: complement: [1312] trunk/explore/test/libstem/unit
Status: Pre-Alpha
Brought to you by:
complement
From: <com...@us...> - 2006-10-11 07:11:13
|
Revision: 1312 http://svn.sourceforge.net/complement/?rev=1312&view=rev Author: complement Date: 2006-10-11 00:11:05 -0700 (Wed, 11 Oct 2006) Log Message: ----------- echo test with peer-to-peer connection Modified Paths: -------------- trunk/explore/test/libstem/unit/Echo.cc trunk/explore/test/libstem/unit/Echo.h trunk/explore/test/libstem/unit/unit_test.cc Modified: trunk/explore/test/libstem/unit/Echo.cc =================================================================== --- trunk/explore/test/libstem/unit/Echo.cc 2006-10-11 07:10:13 UTC (rev 1311) +++ trunk/explore/test/libstem/unit/Echo.cc 2006-10-11 07:11:05 UTC (rev 1312) @@ -1,4 +1,4 @@ -// -*- C++ -*- Time-stamp: <06/10/10 22:07:21 ptr> +// -*- C++ -*- Time-stamp: <06/10/11 01:25:24 ptr> /* * Copyright (c) 2006 @@ -45,7 +45,9 @@ void StEMecho::regme( const stem::Event& ev ) { + cnd.set( true ); stem::NetTransport_base *b = manager()->transport( ev.src() ); + BOOST_CHECK( b != 0 ); if ( b != 0 ) { b->make_map( ev.src(), (ev.value() /* + who_is( ev.src() ) */ ).c_str() ); } @@ -53,7 +55,7 @@ DEFINE_RESPONSE_TABLE( StEMecho ) EV_EDS( 0, NODE_EV_ECHO, echo ) - EV_EDS( 0, 0x5001, regme ) + EV_EDS( 0, NODE_EV_REGME, regme ) END_RESPONSE_TABLE EchoClient::EchoClient() : @@ -96,3 +98,53 @@ DEFINE_RESPONSE_TABLE( EchoClient ) EV_EDS(0,NODE_EV_ECHO,handler1) END_RESPONSE_TABLE + +PeerClient::PeerClient() : + EventHandler(), + mess( "peer client" ) +{ + cnd.set( false ); +} + +PeerClient::PeerClient( stem::addr_type id ) : + EventHandler( id ), + mess( "peer client" ) +{ + cnd.set( false ); +} + +PeerClient::PeerClient( const char *info ) : + EventHandler( info ), + mess( info ) +{ + cnd.set( false ); +} + +PeerClient::PeerClient( stem::addr_type id, const char *info ) : + EventHandler( id, info ), + mess( info ) +{ + cnd.set( false ); +} + +PeerClient::~PeerClient() +{ + // cnd.wait(); +} + +void PeerClient::handler1( const stem::Event& ev ) +{ + BOOST_CHECK( ev.value() == mess ); + + // cerr << mess << endl; + cnd.set(true); +} + +void PeerClient::wait() +{ + cnd.try_wait(); +} + +DEFINE_RESPONSE_TABLE( PeerClient ) + EV_EDS(0,NODE_EV_ECHO,handler1) +END_RESPONSE_TABLE Modified: trunk/explore/test/libstem/unit/Echo.h =================================================================== --- trunk/explore/test/libstem/unit/Echo.h 2006-10-11 07:10:13 UTC (rev 1311) +++ trunk/explore/test/libstem/unit/Echo.h 2006-10-11 07:11:05 UTC (rev 1312) @@ -1,4 +1,4 @@ -// -*- C++ -*- Time-stamp: <06/10/10 15:42:36 ptr> +// -*- C++ -*- Time-stamp: <06/10/11 00:56:13 ptr> /* * Copyright (c) 2006 @@ -28,6 +28,8 @@ void echo( const stem::Event& ); void regme( const stem::Event& ); + xmt::Condition cnd; + private: DECLARE_RESPONSE_TABLE( StEMecho, stem::EventHandler ); }; @@ -53,6 +55,29 @@ DECLARE_RESPONSE_TABLE( EchoClient, stem::EventHandler ); }; -#define NODE_EV_ECHO 0x903 +class PeerClient : + public stem::EventHandler +{ + public: + PeerClient(); + PeerClient( stem::addr_type id ); + PeerClient( const char *info ); + PeerClient( stem::addr_type id, const char *info ); + ~PeerClient(); + void handler1( const stem::Event& ); + + void wait(); + + const std::string mess; + + private: + xmt::Condition cnd; + + DECLARE_RESPONSE_TABLE( PeerClient, stem::EventHandler ); +}; + +#define NODE_EV_ECHO 0x903 +#define NODE_EV_REGME 0x904 + #endif // __Echo_h Modified: trunk/explore/test/libstem/unit/unit_test.cc =================================================================== --- trunk/explore/test/libstem/unit/unit_test.cc 2006-10-11 07:10:13 UTC (rev 1311) +++ trunk/explore/test/libstem/unit/unit_test.cc 2006-10-11 07:11:05 UTC (rev 1312) @@ -1,4 +1,4 @@ -// -*- C++ -*- Time-stamp: <06/10/10 16:49:12 ptr> +// -*- C++ -*- Time-stamp: <06/10/11 01:24:22 ptr> /* * Copyright (c) 2002, 2003, 2006 @@ -42,6 +42,7 @@ void ns1(); void echo(); + void peer(); static xmt::Thread::ret_code thr1( void * ); static xmt::Thread::ret_code thr1new( void * ); @@ -323,7 +324,7 @@ EchoClient node; - EDS::Event ev( NODE_EV_ECHO ); + stem::Event ev( NODE_EV_ECHO ); ev.dest( zero ); ev.value() = node.mess; @@ -343,6 +344,71 @@ // cerr << "Fine\n"; } +void stem_test::peer() +{ + sockmgr_stream_MP<stem::NetTransport> srv( 6995 ); + + stem::NetTransportMgr mgr; + StEMecho echo( 0, "echo service"); // <= zero! + + echo.cnd.set( false ); + + stem::addr_type zero = mgr.open( "localhost", 6995 ); + + BOOST_CHECK( zero != stem::badaddr ); + BOOST_CHECK( zero != 0 ); + + PeerClient c1( "c1 local" ); + + stem::Event ev( NODE_EV_REGME ); + ev.dest( zero ); + + ev.value() = "c1"; + c1.Send( ev ); + + echo.cnd.try_wait(); + echo.cnd.set( false ); + + PeerClient c2( "c2 local" ); + + ev.value() = "c2"; + c2.Send( ev ); + + echo.cnd.try_wait(); + + Naming nm; + + // stem::Event ev_nm( EV_STEM_RQ_ADDR_LIST1 ); + stem::Event ev_nm( EV_STEM_RQ_EXT_ADDR_LIST1 ); + ev_nm.dest( /* stem::ns_addr */ mgr.ns() ); + nm.Send( ev_nm ); + + nm.wait(); + + stem::addr_type peer_addr = stem::badaddr; + for ( Naming::nsrecords_type::const_iterator i = nm.lst1.begin(); i != nm.lst1.end(); ++i ) { + if ( i->second.find( "c2@" ) == 0 ) { + peer_addr = i->first; + } + // cerr << hex << i->first << dec << " => " << i->second << endl; + } + + stem::Event echo_ev( NODE_EV_ECHO ); + + echo_ev.dest( 0x8000000b ); + echo_ev.value() = "c2 local"; + + c1.Send( echo_ev ); + + c2.wait(); + + cerr << "qq\n"; + + srv.close(); + cerr << "xx\n"; + srv.wait(); +} + struct stem_test_suite : public test_suite { @@ -363,6 +429,7 @@ test_case *ns_tc = BOOST_CLASS_TEST_CASE( &stem_test::ns, instance ); test_case *ns1_tc = BOOST_CLASS_TEST_CASE( &stem_test::ns1, instance ); test_case *echo_tc = BOOST_CLASS_TEST_CASE( &stem_test::echo, instance ); + test_case *peer_tc = BOOST_CLASS_TEST_CASE( &stem_test::peer, instance ); basic2_tc->depends_on( basic1_tc ); basic1n_tc->depends_on( basic1_tc ); @@ -373,6 +440,7 @@ ns1_tc->depends_on( basic1_tc ); echo_tc->depends_on( basic2_tc ); + peer_tc->depends_on( echo_tc ); add( basic1_tc ); add( basic2_tc ); @@ -383,6 +451,7 @@ add( ns1_tc ); add( echo_tc ); + add( peer_tc ); } test_suite *init_unit_test_suite( int argc, char **argv ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |