[Cppunit-cvs] cppunit2/test/shmem_test main.cpp,1.1,1.2
Brought to you by:
blep
From: Baptiste L. <bl...@us...> - 2006-03-08 08:18:48
|
Update of /cvsroot/cppunit/cppunit2/test/shmem_test In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9479/test/shmem_test Modified Files: main.cpp Log Message: * master and slave can now run in the same process, allowing for easier debugging. Index: main.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/test/shmem_test/main.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** main.cpp 7 Mar 2006 23:02:58 -0000 1.1 --- main.cpp 8 Mar 2006 08:18:42 -0000 1.2 *************** *** 10,22 **** # include <windows.h> ! static const char *logPrefix = ""; ! static void log( const char *format, ... ) { va_list args; va_start( args, format ); ! printf( "%s", logPrefix ); ! vprintf( format, args ); ! printf( "\n" ); va_end( args ); } --- 10,33 ---- # include <windows.h> ! static void log( const char *prefix, const char *format, va_list args ) ! { ! printf( "%s", prefix ); ! vprintf( format, args ); ! printf( "\n" ); ! } ! static void logSlave( const char *format, ... ) { va_list args; va_start( args, format ); ! log( "{slave} ", format, args ); ! va_end( args ); ! } ! ! static void logMaster( const char *format, ... ) ! { ! va_list args; ! va_start( args, format ); ! log( "{master} ", format, args ); va_end( args ); } *************** *** 29,49 **** , sent_( 0 ) , id_( id) { ! const int maxCount = 3; ! while ( sent_ < maxCount || received_ < maxCount ) ! { ! if ( sent_ < maxCount ) ! { ! ++sent_; ! log("sent"); ! OpenTest::RemoteMessagePtr message( new OpenTest::RemoteMessage( OpenTest::runnerMessageStopTest ) ); ! transport.sendMessage( message ); ! } ! if ( received_ < maxCount ) ! { ! transport.dispatchReceivedMessages( *this ); ! } } } --- 40,72 ---- , sent_( 0 ) , id_( id) + , maxCount_( 3 ) + , transport_( transport ) { ! } ! void loopUntilDone() ! { ! while ( !done() ) ! handleLoop(); ! } + bool done() const + { + return sent_ >= maxCount_ && received_ >= maxCount_; + } + + void handleLoop() + { + if ( sent_ < maxCount_ ) + { + ++sent_; + log("sent"); + OpenTest::RemoteMessagePtr message( new OpenTest::RemoteMessage( OpenTest::runnerMessageStopTest ) ); + transport_.sendMessage( message ); + } + + if ( received_ < maxCount_ ) + { + transport_.dispatchReceivedMessages( *this ); } } *************** *** 65,68 **** --- 88,119 ---- int sent_; const char *id_; + const int maxCount_; + OpenTest::MessageTransport &transport_; + }; + + + + class DualTransportMessageTransmitionTester + { + public: + DualTransportMessageTransmitionTester( OpenTest::MessageTransport &masterTransport, + OpenTest::MessageTransport &slaveTransport ) + : master_( masterTransport, "master" ) + , slave_( slaveTransport, "slave" ) + { + } + + void loopUntilDone() + { + while ( !master_.done() && !slave_.done() ) + { + master_.handleLoop(); + slave_.handleLoop(); + } + } + + private: + MessageTransmitionTester master_; + MessageTransmitionTester slave_; }; *************** *** 71,84 **** { DebugBreak(); - logPrefix = "{slave} "; OpenTest::SharedMemoryConfig config; ! config.log_ = log; OpenTest::SharedMemoryTransport transport( argv[2], config ); ! MessageTransmitionTester dummy( transport, "slave" ); return 0; } ! int main( int argc, const char *argv[] ) { printf( "Command argv[0]: %s\n", argv[0] ); --- 122,137 ---- { DebugBreak(); OpenTest::SharedMemoryConfig config; ! config.log_ = logSlave; OpenTest::SharedMemoryTransport transport( argv[2], config ); ! MessageTransmitionTester tester( transport, "slave" ); ! tester.loopUntilDone(); return 0; } ! // Spawn a child process and establish a shared memory connection by specifying the ! // shared memory region name on the command-line ! int runAsMasterOrSlave( int argc, const char *argv[] ) { printf( "Command argv[0]: %s\n", argv[0] ); *************** *** 91,97 **** return runAsSlave( argc, argv ); - logPrefix = "{master} "; OpenTest::SharedMemoryConfig config; ! config.log_ = log; OpenTest::SharedMemoryTransport transport( config ); --- 144,149 ---- return runAsSlave( argc, argv ); OpenTest::SharedMemoryConfig config; ! config.log_ = logMaster; OpenTest::SharedMemoryTransport transport( config ); *************** *** 132,136 **** } ! MessageTransmitionTester dummy( transport, "master" ); // Wait until child process exits. --- 184,189 ---- } ! MessageTransmitionTester tester( transport, "master" ); ! tester.loopUntilDone(); // Wait until child process exits. *************** *** 144,147 **** --- 197,219 ---- } + + int main( int argc, const char *argv[] ) + { + //runAsMasterOrSlave( argc, argv ); + + // Run both master and slave in the same process for easier debugging. + OpenTest::SharedMemoryConfig configMaster; + configMaster.log_ = logMaster; + OpenTest::SharedMemoryTransport masterTransport( configMaster ); + + OpenTest::SharedMemoryConfig configSlave; + configSlave.log_ = logSlave; + OpenTest::SharedMemoryTransport slaveTransport( masterTransport.transportName(), configSlave ); + + DualTransportMessageTransmitionTester tester( masterTransport, slaveTransport ); + tester.loopUntilDone(); + return 0; + } + #else int main( int argc, const char *argv[] ) |