OSDN Git Service

replication UT完了
authorfujita <fujita@1ed66053-1c2d-0410-8867-f7571e6e31d3>
Fri, 13 Feb 2009 07:32:41 +0000 (07:32 +0000)
committerfujita <fujita@1ed66053-1c2d-0410-8867-f7571e6e31d3>
Fri, 13 Feb 2009 07:32:41 +0000 (07:32 +0000)
git-svn-id: http://10.144.169.20/repos/um/branches/l7vsd-3.x-shamshel@6838 1ed66053-1c2d-0410-8867-f7571e6e31d3

include/replication.h
src/replication.cpp
unit_tests/replication_test/logger_stub.cpp
unit_tests/replication_test/replication_test.cpp

index 297b301..74a3a1b 100644 (file)
@@ -137,7 +137,7 @@ protected:
        };
 
        std::map<std::string, mutex_ptr>        replication_mutex;
-       boost::asio::io_service&                        receive_io;
+       boost::asio::io_service                         service_io;
        boost::asio::ip::udp::endpoint          replication_endpoint;
        boost::asio::ip::udp::socket            replication_receive_socket;
        boost::asio::ip::udp::socket            replication_send_socket;
@@ -147,6 +147,7 @@ protected:
        enum REPLICATION_THREAD_TAG{
                WAIT = 0,
                RUNNING,
+               WAIT_REQ,
                EXIT
        };
 
@@ -157,11 +158,16 @@ protected:
 
        struct replication_data_struct          replication_data;
 
+       REPLICATION_THREAD_TAG                          service_flag;
+       thread_ptr                                                      service_thread_ptr;
+       boost::mutex                                            service_thread_mutex;
+       boost::condition                                        service_thread_condition;
+
 public:
-       replication( boost::asio::io_service& inreceive_io ) :  receive_io( inreceive_io ),
-                                                                                                                       replication_receive_socket( inreceive_io ),
-                                                                                                                       replication_send_socket( inreceive_io ),
-                                                                                                                       replication_flag(WAIT) {
+       replication() : replication_receive_socket( service_io ),
+                                       replication_send_socket( service_io ),
+                                       replication_flag(EXIT),
+                                       service_flag(EXIT) {
        } ;
        ~replication(){}
 
@@ -196,6 +202,7 @@ protected:
        void                                            releasesrf();
 
        void                                            send_thread();
+       void                                            service_thread();
 };
 
 }      //namespace l7vs
index 65a98c4..c216354 100644 (file)
@@ -205,8 +205,6 @@ int                 replication::initialize(){
 
        // Status Set to Slave
        if ( 0 != set_slave() ){
-//             replication_receive_socket.close();
-
                // free memory
                releasesrf();
                releaserpl();
@@ -225,6 +223,13 @@ int                        replication::initialize(){
        }
        replication_thread_ptr = thread_ptr( new boost::thread( boost::bind ( &replication::send_thread, this ) ) );
 
+       {
+               boost::mutex::scoped_lock       lock( service_thread_mutex );
+
+               service_flag = RUNNING;
+       }
+       service_thread_ptr = thread_ptr( new boost::thread( boost::bind ( &replication::service_thread, this ) ) );
+
        buf = boost::io::str( boost::format( "Initialized in %s mode." ) % replication_mode[(int)replication_state.service_status] );
        Logger::putLogInfo( LOG_CAT_L7VSD_REPLICATION, 1, buf, __FILE__, __LINE__ );
 
@@ -241,19 +246,28 @@ void              replication::finalize(){
                replication_flag = EXIT;
                replication_thread_condition.notify_all();
        }
-       if ( replication_thread_ptr )
-       {
+       if ( replication_thread_ptr ){
                replication_thread_ptr->join();
-               replication_thread_ptr->detach();
        }
 
        // Socket finalaize
-//     if ( REPLICATION_SLAVE == replication_state.service_status || REPLICATION_SLAVE_STOP == replication_state.service_status ){
-//std::cout << "cancel1\n";
-//             replication_receive_socket.cancel();
-//     }
-       replication_receive_socket.close();
-       replication_send_socket.close();
+       if ( replication_send_socket.is_open() ){
+               replication_send_socket.close();
+       }
+       if ( replication_receive_socket.is_open() ){
+               replication_receive_socket.close();
+       }
+
+       {
+               boost::mutex::scoped_lock       lock( service_thread_mutex );
+
+               service_flag = EXIT;
+               service_thread_condition.notify_all();
+       }
+       if ( service_thread_ptr ){
+               service_thread_ptr->join();
+       }
+
        // Release replication memory
        releaserpl();
        // Release component memory
@@ -291,7 +305,6 @@ void                replication::switch_to_master(){
 
        std::string buf;
        int ret;
-       std::map<std::string, mutex_ptr>::iterator      itr;
 
        switch (replication_state.service_status){
                case REPLICATION_SLAVE:
@@ -308,19 +321,9 @@ void               replication::switch_to_master(){
                                buf = boost::io::str( boost::format( "Switch to master NG. mode : %s" ) % replication_mode[(int)replication_state.service_status] );
                                Logger::putLogError( LOG_CAT_L7VSD_REPLICATION, 1, buf, __FILE__, __LINE__ );
                        }else{
-                               // Lock all compornent area
-                               for ( itr = replication_mutex.begin(); itr != replication_mutex.end(); itr++ ){
-                                       itr->second->lock();
-                               }
-
-                               // Copy from component area to replication area.
+                               // Copy from compornent area to replication area.
                                memcpy(replication_state.replication_memory, replication_state.component_memory, replication_state.total_block*DATA_SIZE);
 
-                               // Unlock all compornent area
-                               for ( itr = replication_mutex.begin(); itr != replication_mutex.end(); itr++ ){
-                                       itr->second->unlock();
-                               }
-
                                if ( REPLICATION_SLAVE == replication_state.service_status ){
                                        // Set mode.
                                        replication_state.service_status = REPLICATION_MASTER;
@@ -359,8 +362,37 @@ int                replication::set_master()
        boost::system::error_code err;
 
        // close socket
-//     replication_receive_socket.cancel();
-       replication_receive_socket.close();
+       if ( replication_send_socket.is_open() ){
+               replication_send_socket.close();
+       }
+       if ( replication_receive_socket.is_open() ){
+               replication_receive_socket.cancel();
+               replication_receive_socket.close();
+       }
+
+       {
+               boost::mutex::scoped_lock       lock( service_thread_mutex );
+
+               if      ( service_flag == RUNNING ){
+                       service_flag = WAIT_REQ;
+                       service_io.stop();
+               }
+       }
+
+       while ( service_flag == WAIT_REQ ){
+               usleep( 1 );
+       }
+
+       {
+               boost::mutex::scoped_lock       lock( service_thread_mutex );
+
+               if      ( service_flag != EXIT ){
+                       service_io.reset();
+                       service_flag = RUNNING;
+
+                       service_thread_condition.notify_all();
+               }
+       }
 
        // make send socket
 //     replication_send_socket.connect( replication_endpoint, err );
@@ -438,29 +470,56 @@ int               replication::set_slave()
        boost::system::error_code err;
 
        // close socket
-       replication_send_socket.close();
-       replication_receive_socket.close();
+       if ( replication_send_socket.is_open() ){
+               replication_send_socket.close();
+       }
+       if ( replication_receive_socket.is_open() ){
+               replication_receive_socket.cancel();
+               replication_receive_socket.close();
+       }
+
+       {
+               boost::mutex::scoped_lock       lock( service_thread_mutex );
+
+               if      ( service_flag != EXIT ){
+                       service_flag = WAIT_REQ;
+                       service_io.stop();
+               }
+       }
+       while ( service_flag == WAIT_REQ ){
+               usleep( 1 );
+       }
 
        // make receive socket
-std::cout << "slave " << replication_endpoint.address() << ":" << replication_endpoint.port() << "\n";
+//std::cout << "slave " << replication_endpoint.address() << ":" << replication_endpoint.port() << "\n";
+
        replication_receive_socket.open( replication_endpoint.protocol(), err );
        if ( err ){
                Logger::putLogError( LOG_CAT_L7VSD_SYSTEM, 1, err.message(), __FILE__, __LINE__ );
 //             return -1;
-       }
-       replication_receive_socket.bind( replication_endpoint, err );
-       if ( err ){
-               Logger::putLogError( LOG_CAT_L7VSD_SYSTEM, 1, err.message(), __FILE__, __LINE__ );
-//             return -1;
+       } else {
+               replication_receive_socket.bind( replication_endpoint, err );
+               if ( err ){
+                       Logger::putLogError( LOG_CAT_L7VSD_SYSTEM, 1, err.message(), __FILE__, __LINE__ );
+//                     return -1;
+               }
        }
 
-std::cout << "slave " << replication_endpoint.address() << ":" << replication_endpoint.port() << "\n";
-//     replication_receive_socket.async_receive( boost::asio::buffer( &replication_data, sizeof( struct replication_data_struct ) ),
-//                                                                                     boost::bind( &replication::handle_receive, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred ) );
+//std::cout << "slave " << replication_endpoint.address() << ":" << replication_endpoint.port() << "\n";
        replication_receive_socket.async_receive_from( boost::asio::buffer( &replication_data, sizeof( struct replication_data_struct ) ),
                                                                                        replication_endpoint,
                                                                                        boost::bind( &replication::handle_receive, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred ) );
 
+       {
+               boost::mutex::scoped_lock       lock( service_thread_mutex );
+
+               if      ( service_flag != EXIT ){
+                       service_io.reset();
+                       service_flag = RUNNING;
+
+                       service_thread_condition.notify_all();
+               }
+       }
        Logger::putLogInfo( LOG_CAT_L7VSD_REPLICATION, 1, "Initialization of receive socket is success.", __FILE__, __LINE__ );
 
        return 0;
@@ -682,7 +741,6 @@ void                replication::force_replicate(){
        Parameter                       param;
 
        std::string     buf;
-       std::map<std::string, mutex_ptr>::iterator      itr;
 
        // Check by continuous initialize.
        if ( REPLICATION_MASTER != replication_state.service_status && REPLICATION_MASTER_STOP != replication_state.service_status ){
@@ -761,19 +819,9 @@ void               replication::force_replicate(){
 
                // surface block number is change
                if(replication_state.total_block == replication_state.last_send_block + 1 ){
-                       // Lock all compornent area
-                       for ( itr = replication_mutex.begin(); itr != replication_mutex.end(); itr++ ){
-                               itr->second->lock();
-                       }
-
                        // Synchronization is executed. 
                        memcpy( replication_state.replication_memory, replication_state.component_memory, replication_state.total_block*DATA_SIZE );
 
-                       // Unlock all compornent area
-                       for ( itr = replication_mutex.begin(); itr != replication_mutex.end(); itr++ ){
-                               itr->second->unlock();
-                       }
-
                        // make new serial
                        replication_state.surface_block_no = (uint64_t)make_serial();
                        if ( 0 == replication_state.surface_block_no ){
@@ -879,19 +927,9 @@ int                        replication::handle_send(){
 
        // surface block number is change
        if(replication_state.total_block == replication_state.last_send_block + 1 ){
-               // Lock all compornent area
-               for ( itr = replication_mutex.begin(); itr != replication_mutex.end(); itr++ ){
-                       itr->second->lock();
-               }
-
                // Synchronization is executed. 
                memcpy( replication_state.replication_memory, replication_state.component_memory, replication_state.total_block*DATA_SIZE );
 
-               // Unlock all compornent area
-               for ( itr = replication_mutex.begin(); itr != replication_mutex.end(); itr++ ){
-                       itr->second->unlock();
-               }
-
                // make new serial
                replication_state.surface_block_no = (uint64_t)make_serial();
                if ( 0 == replication_state.surface_block_no ){
@@ -905,12 +943,11 @@ int                       replication::handle_send(){
 
 //! Callback function
 void           replication::handle_receive( const boost::system::error_code& err, size_t size ){
-       Logger  logger( LOG_CAT_L7VSD_REPLICATION, 1, "replication::handle_receive", __FILE__, __LINE__ );
+//     Logger  logger( LOG_CAT_L7VSD_REPLICATION, 1, "replication::handle_receive", __FILE__, __LINE__ );
 
        int recv_ret;
        std::string buf;
 
-std::cout << "receive1\n";
        if ( err ){
                if ( boost::system::errc::operation_canceled != err.value() ){
                        Logger::putLogInfo( LOG_CAT_L7VSD_SYSTEM, 1, err.message(), __FILE__, __LINE__ );
@@ -971,7 +1008,7 @@ std::cout << "receive1\n";
                return;
        }
 
-std::cout << "slave " << replication_endpoint.address() << ":" << replication_endpoint.port() << "\n";
+//std::cout << "slave " << replication_endpoint.address() << ":" << replication_endpoint.port() << "\n";
 //     replication_receive_socket.async_receive( boost::asio::buffer( &replication_data, sizeof( struct replication_data_struct ) ),
 //                                                                                     boost::bind( &replication::handle_receive, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred ) );
        replication_receive_socket.async_receive_from( boost::asio::buffer( &replication_data, sizeof( struct replication_data_struct ) ),
@@ -1056,7 +1093,7 @@ int                       replication::check_parameter(){
        size_t sum=0;
        std::string buf;
 
-       // set address hints
+       // set address
        replication_endpoint = boost::asio::ip::udp::endpoint( boost::asio::ip::address::from_string( replication_info.ip_addr ), boost::lexical_cast<unsigned short>( replication_info.service_name ) );
 
        // Interval check
@@ -1218,13 +1255,15 @@ int                     replication::send_data(){
        send_memory = (char *)replication_state.replication_memory + DATA_SIZE*replication_data.block_num;
        memcpy( replication_data.data, send_memory, DATA_SIZE );
 
-       // make send socket
 #if    0
        // send to data
        send_byte = replication_send_socket.send_to( boost::asio::buffer( &replication_data, sizeof( struct replication_data_struct ) ), replication_endpoint );
 #else
        boost::system::error_code err;
 
+       // make send socket
+//std::cout << "master " << replication_endpoint.address() << ":" << replication_endpoint.port() << "\n";
+       replication_endpoint = boost::asio::ip::udp::endpoint( boost::asio::ip::address::from_string( replication_info.ip_addr ), boost::lexical_cast<unsigned short>( replication_info.service_name ) );
        replication_send_socket.connect( replication_endpoint, err );
        if ( err ){
                Logger::putLogError( LOG_CAT_L7VSD_SYSTEM, 1, err.message(), __FILE__, __LINE__ );
@@ -1249,6 +1288,7 @@ int                       replication::send_data(){
 //! @retval -1 Error
 int                    replication::recv_data(){
        char    *recv_memory;
+       std::map<std::string, mutex_ptr>::iterator      itr;
 
        // Check replication ID
        if ( replication_data.id != REPLICATION_ID ){
@@ -1286,8 +1326,18 @@ int                      replication::recv_data(){
                        break;
                }
                if ( i == replication_state.total_block-2 ){
+                       // Lock all compornent area
+                       for ( itr = replication_mutex.begin(); itr != replication_mutex.end(); itr++ ){
+                               itr->second->lock();
+                       }
+
                        // Synchronization is executed.
                        memcpy(replication_state.component_memory, replication_state.replication_memory, replication_state.total_block*DATA_SIZE );
+
+                       // Unlock all compornent area
+                       for ( itr = replication_mutex.begin(); itr != replication_mutex.end(); itr++ ){
+                               itr->second->unlock();
+                       }
                }
        }
 
@@ -1348,4 +1398,28 @@ void             replication::send_thread(){
        }
 }
 
+//! io_service thread
+void           replication::service_thread(){
+       REPLICATION_THREAD_TAG  flag;
+       {
+               boost::mutex::scoped_lock lock( service_thread_mutex );
+               flag = service_flag;
+       }
+       for ( ; ; ){
+               if ( flag == WAIT || flag == WAIT_REQ ){
+                       boost::mutex::scoped_lock       lock( service_thread_mutex );
+                       service_flag = WAIT;
+                       service_thread_condition.wait( lock );
+               } else if ( flag == EXIT ){
+                       break;
+               } else {
+                       service_io.poll();
+               }
+               {
+                       boost::mutex::scoped_lock       lock( service_thread_mutex );
+                       flag = service_flag;
+               }
+       }
+}
+
 }      //namespace l7vs
index dcb4a1a..ca159e4 100644 (file)
@@ -52,6 +52,10 @@ l7vs::Logger::Logger( LOG_CATEGORY_TAG cat, const unsigned int id, const std::st
        scopedLogMessage(msg),\r
        scopedLogFile(file),\r
        scopedLogLine(line){\r
+
+//     std::stringstream buf;
+//     buf << msg << "  " << file << "  " << line;
+//     BOOST_MESSAGE ( buf.str() ) ;
 }\r
 \r
 /*!\r
index eb14849..489e5d6 100644 (file)
@@ -39,7 +39,7 @@ class replication_fake : public replication
 {
 public:
        //!     constractor
-       replication_fake( boost::asio::io_service& inreceive_io ) : replication( inreceive_io ) {}
+       replication_fake() : replication() {}
        //! destractor
        ~replication_fake(){}
 
@@ -64,6 +64,14 @@ public:
        }
 
        int             set_slave_wrapper(){
+
+               {
+                       boost::mutex::scoped_lock       lock( replication_thread_mutex );
+                       if      ( replication_flag != EXIT ){
+                                replication_flag = WAIT;
+                       }
+               }
+
                return set_slave();
        }
 
@@ -105,6 +113,18 @@ public:
                releasesrf();
                return replication_state.surface_block_array_ptr;
        }
+
+       void            disable_send_thread(){
+               {
+                       boost::mutex::scoped_lock       lock( replication_thread_mutex );
+
+                       replication_flag = EXIT;
+                       replication_thread_condition.notify_all();
+               }
+               if ( replication_thread_ptr ){
+                       replication_thread_ptr->join();
+               }
+       }
 };
 
 }      //namespace l7vs
@@ -167,22 +187,12 @@ static const char* replication_mode[] = {
        "REPLICATION_SLAVE_STOP"
 };
 
-bool locked_end = false;
+volatile bool locked_end = false;
 
-bool receiver_end = false;
-bool io_end = false;
+volatile bool receiver_end = false;
 boost::asio::io_service global_receive_io;
 boost::asio::io_service global_send_io;
 
-void io_thread(){
-       while( false == io_end ){
-               global_receive_io.run();
-               global_send_io.run();
-       }
-}
-
-boost::thread  global_thread_item( boost::bind ( &io_thread ) );
-
 void receiver_thread(){
        boost::asio::ip::udp::endpoint  udp_endpoint( boost::asio::ip::address::from_string( "10.144.169.86" ), 40000 );
        boost::asio::ip::udp::socket    receiver_socket( global_receive_io, udp_endpoint );
@@ -268,7 +278,7 @@ void receiver_thread(){
                        goto END;
                }
 
-//std::cout << "receiver_thread 5-1\n";
+//std::cout << "receiver_thread\n";
 //std::cout << replication_data.id << "\n";
 //std::cout << replication_data.serial << "\n";
 //std::cout << replication_data.block_num << "\n";
@@ -386,10 +396,10 @@ END:
        receiver_socket.close();
 
        receiver_end = true;
-};
+}
 
 void   sender_thread(){
-       l7vs::replication       repli2(global_send_io);
+       l7vs::replication       repli2;
 
        BOOST_CHECK_EQUAL( repli2.get_status(), l7vs::replication::REPLICATION_OUT );
        BOOST_CHECK_EQUAL( repli2.initialize(), 0 );
@@ -425,7 +435,6 @@ void        sender_thread(){
 }
 
 void   sender2_thread(){
-std::cout << "sender2 in\n";
        boost::asio::ip::udp::endpoint  udp_endpoint( boost::asio::ip::address::from_string( "10.144.169.86" ), 40000 );
 //     boost::asio::ip::udp::socket    sender_socket( global_send_io, udp_endpoint );
        boost::asio::ip::udp::socket    sender_socket( global_send_io );
@@ -472,6 +481,7 @@ std::cout << "send 1st block\n";
                sender_socket.close();
                return;
        }
+       global_send_io.run();
        usleep( 10000 );
        
        replication_data.block_num = 1;
@@ -492,6 +502,7 @@ std::cout << "send 2nd block\n";
                sender_socket.close();
                return;
        }
+       global_send_io.run();
        usleep( 10000 );
 
        replication_data.block_num = 2;
@@ -512,6 +523,7 @@ std::cout << "send 3rd block\n";
                sender_socket.close();
                return;
        }
+       global_send_io.run();
        sleep(1);
 
        sender_socket.close();
@@ -531,8 +543,6 @@ void lock_thread( l7vs::replication_fake* p_repliX, const char* name ){
 //test case1.
 void   replication_initialize_test(){
 //     int     loop;
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -549,7 +559,7 @@ void        replication_initialize_test(){
 
        // unit_test[1]  コンストラクタのテスト
        BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
-       l7vs::replication       repli1(io);
+       l7vs::replication       repli1;
 
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
 
@@ -813,8 +823,6 @@ void        replication_initialize_test(){
 
 //test case2.
 void   replication_switch_to_master_test(){
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -829,7 +837,7 @@ void        replication_switch_to_master_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication       repli1(io);
+       l7vs::replication       repli1;
 
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
        BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
@@ -881,8 +889,6 @@ void        replication_switch_to_master_test(){
 
 //test case3.
 void   replication_switch_to_slave_test(){
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -897,7 +903,7 @@ void        replication_switch_to_slave_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication       repli1(io);
+       l7vs::replication       repli1;
 
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
        BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
@@ -953,7 +959,6 @@ void        replication_switch_to_slave_test(){
 
 //test case4.
 void   replication_pay_memory_test(){
-       boost::asio::io_service io;
        unsigned int    size;
        void*                   ptr;
 
@@ -971,7 +976,7 @@ void        replication_pay_memory_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication       repli1(io);
+       l7vs::replication       repli1;
 
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
        BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
@@ -1144,8 +1149,6 @@ void      replication_pay_memory_test(){
 
 //test case5.
 void   replication_dump_memory_test(){
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -1160,7 +1163,7 @@ void      replication_dump_memory_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication       repli1(io);
+       l7vs::replication       repli1;
 
        get_int_table[1] = 1;                                                   //      "cmponent_size_00"
        get_int_table[2] = 1;                                                   //      "cmponent_size_01"
@@ -1218,8 +1221,6 @@ void      replication_dump_memory_test(){
 
 //test case6.
 void   replication_start_test(){
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -1234,7 +1235,7 @@ void      replication_start_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication       repli1(io);
+       l7vs::replication       repli1;
 
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
        BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
@@ -1288,8 +1289,6 @@ void      replication_start_test(){
 
 //test case7.
 void   replication_stop_test(){
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -1304,7 +1303,7 @@ void      replication_stop_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication       repli1(io);
+       l7vs::replication       repli1;
 
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
        BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
@@ -1356,8 +1355,6 @@ void      replication_stop_test(){
 
 //test case8.
 void   replication_force_replicate_test(){
-//     boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -1372,7 +1369,7 @@ void      replication_force_replicate_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication       repli1(global_send_io);
+       l7vs::replication_fake  repli1;
 
        get_int_table[1] = 1;                                                   //      "cmponent_size_00"
        get_int_table[2] = 1;                                                   //      "cmponent_size_01"
@@ -1449,6 +1446,7 @@ void      replication_force_replicate_test(){
 
        BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
+       repli1.disable_send_thread();
 
        unsigned int    size;
        void*                   ptr;
@@ -1481,7 +1479,9 @@ void      replication_force_replicate_test(){
 
        repli1.finalize();
 
-       while( !receiver_end );
+       while( !receiver_end ){
+               global_receive_io.poll();
+       }
 
        thread_item1.join();
 
@@ -1490,8 +1490,6 @@ void      replication_force_replicate_test(){
 
 //test case9.
 void   replication_reset_test(){
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -1506,7 +1504,7 @@ void      replication_reset_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication       repli1(io);
+       l7vs::replication       repli1;
 
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
        BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
@@ -1593,8 +1591,6 @@ void      replication_reset_test(){
 
 //test case10.
 void   replication_get_status_test(){
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -1609,7 +1605,7 @@ void      replication_get_status_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication       repli1(io);
+       l7vs::replication       repli1;
 
        // unit_test[106]  get_statusのテスト(未初期化)
        BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
@@ -1650,8 +1646,6 @@ void      replication_get_status_test(){
 
 //test case11.
 void   replication_lock_test(){
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -1666,7 +1660,7 @@ void      replication_lock_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication_fake  repli1(io);
+       l7vs::replication_fake  repli1;
 
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
        BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
@@ -1732,7 +1726,6 @@ void      replication_lock_test(){
        repli1.unlock( "virtualservice" );
 
        thread_item1.join();
-       thread_item1.detach();
 
        BOOST_CHECK_EQUAL( locked_end, true );
        BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), true );
@@ -1745,7 +1738,6 @@ void      replication_lock_test(){
        repli1.unlock( "chash" );
 
        thread_item2.join();
-       thread_item2.detach();
 
        BOOST_CHECK_EQUAL( locked_end, true );
        BOOST_CHECK_EQUAL( repli1.locked( "chash" ), true );
@@ -1758,7 +1750,6 @@ void      replication_lock_test(){
        repli1.unlock( "sslid" );
 
        thread_item3.join();
-       thread_item3.detach();
 
        BOOST_CHECK_EQUAL( locked_end, true );
        BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), true );
@@ -1777,8 +1768,6 @@ void      replication_lock_test(){
 
 //test case12.
 void   replication_unlock_test(){
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -1793,7 +1782,7 @@ void      replication_unlock_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication_fake  repli1(io);
+       l7vs::replication_fake  repli1;
 
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
        BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
@@ -1859,8 +1848,6 @@ void      replication_unlock_test(){
 
 //test case13.
 void   replication_refer_lock_mutex_test(){
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -1875,7 +1862,7 @@ void      replication_refer_lock_mutex_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication_fake  repli1(io);
+       l7vs::replication_fake  repli1;
 
        l7vs::replication::mutex_ptr mutex1, mutex2, mutex3, mutex4;
 
@@ -1947,8 +1934,6 @@ void      replication_refer_lock_mutex_test(){
 
 //test case14.
 void   replication_handle_send_test(){
-//     boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -1963,7 +1948,7 @@ void      replication_handle_send_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication       repli1(global_send_io);
+       l7vs::replication       repli1;
 
        get_int_table[1] = 1;                                                   //      "cmponent_size_00"
        get_int_table[2] = 1;                                                   //      "cmponent_size_01"
@@ -1976,9 +1961,6 @@ void      replication_handle_send_test(){
        BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
 
-       receiver_end = false;
-       boost::thread   thread_item1( boost::bind ( &receiver_thread ) );
-
        unsigned int    size;
        void*                   ptr;
 
@@ -2009,11 +1991,15 @@ void    replication_handle_send_test(){
        BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
        repli1.switch_to_master();
 
+       receiver_end = false;
+       boost::thread   thread_item1( boost::bind ( &receiver_thread ) );
+
        // unit_test[141]  send_thread&handle_sendのテスト(MASTER時)
        BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
        repli1.start();
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
        while( !receiver_end );
+       repli1.stop();
 
        thread_item1.join();
        BOOST_CHECK( 1 );
@@ -2023,8 +2009,6 @@ void      replication_handle_send_test(){
 
 //test case15.
 void   replication_set_master_test(){
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -2039,11 +2023,12 @@ void    replication_set_master_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication_fake  repli1(io);
+       l7vs::replication_fake  repli1;
 
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
        BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
+       repli1.disable_send_thread();
 
        // unit_test[142]  set_masterのテスト(SLAVE時)
        BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
@@ -2071,8 +2056,6 @@ void      replication_set_master_test(){
 
 //test case16.
 void   replication_set_slave_test(){
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -2087,11 +2070,12 @@ void    replication_set_slave_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication_fake  repli1(io);
+       l7vs::replication_fake  repli1;
 
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
        BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
+       repli1.disable_send_thread();
        repli1.switch_to_master();
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
 
@@ -2119,8 +2103,6 @@ void      replication_set_slave_test(){
 
 //test case17.
 void   replication_check_parameter_test(){
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -2135,7 +2117,7 @@ void      replication_check_parameter_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication_fake  repli1(io);
+       l7vs::replication_fake  repli1;
 
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
        BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
@@ -2151,8 +2133,6 @@ void      replication_check_parameter_test(){
 
 //test case18.
 void   replication_getrpl_test(){
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -2167,7 +2147,7 @@ void      replication_getrpl_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication_fake  repli1(io);
+       l7vs::replication_fake  repli1;
 
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
        BOOST_CHECK_EQUAL( repli1.initialize(), 0 );    // param読み込みのため1回実行
@@ -2179,14 +2159,13 @@ void    replication_getrpl_test(){
        BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
 
        BOOST_CHECK( NULL != repli1.getrpl_wrapper() ); // 異常系はinitializeにて評価済み
+       repli1.releaserpl_wrapper();
 
        repli1.finalize();
 }
 
 //test case19.
 void   replication_getcmp_test(){
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -2201,7 +2180,7 @@ void      replication_getcmp_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication_fake  repli1(io);
+       l7vs::replication_fake  repli1;
 
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
        BOOST_CHECK_EQUAL( repli1.initialize(), 0 );    // param読み込みのため1回実行
@@ -2213,14 +2192,13 @@ void    replication_getcmp_test(){
        BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
 
        BOOST_CHECK( NULL != repli1.getcmp_wrapper() ); // 異常系はinitializeにて評価済み
+       repli1.releasecmp_wrapper();
 
        repli1.finalize();
 }
 
 //test case20.
 void   replication_getsrf_test(){
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -2235,7 +2213,7 @@ void      replication_getsrf_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication_fake  repli1(io);
+       l7vs::replication_fake  repli1;
 
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
        BOOST_CHECK_EQUAL( repli1.initialize(), 0 );    // param読み込みのため1回実行
@@ -2247,14 +2225,13 @@ void    replication_getsrf_test(){
        BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
 
        BOOST_CHECK( NULL != repli1.getsrf_wrapper() ); // 異常系はinitializeにて評価済み
+       repli1.releasesrf_wrapper();
 
        repli1.finalize();
 }
 
 //test case21.
 void   replication_make_serial_test(){
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -2269,7 +2246,7 @@ void      replication_make_serial_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication_fake  repli1(io);
+       l7vs::replication_fake  repli1;
        unsigned long long              value1, value2;
 
        // unit_test[150]  make_serialのテスト(正常系)
@@ -2290,8 +2267,6 @@ void      replication_make_serial_test(){
 
 //test case22.
 void   replication_releaserpl_test(){
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -2306,7 +2281,7 @@ void      replication_releaserpl_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication_fake  repli1(io);
+       l7vs::replication_fake  repli1;
 
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
        BOOST_CHECK_EQUAL( repli1.initialize(), 0 );    // param読み込みのため1回実行
@@ -2325,8 +2300,6 @@ void      replication_releaserpl_test(){
 
 //test case23.
 void   replication_releasecmp_test(){
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -2341,7 +2314,7 @@ void      replication_releasecmp_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication_fake  repli1(io);
+       l7vs::replication_fake  repli1;
 
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
        BOOST_CHECK_EQUAL( repli1.initialize(), 0 );    // param読み込みのため1回実行
@@ -2354,13 +2327,12 @@ void    replication_releasecmp_test(){
 
        BOOST_CHECK( NULL != repli1.getcmp_wrapper() );
        BOOST_CHECK( NULL == repli1.releasecmp_wrapper() );
+
        repli1.finalize();
 }
 
 //test case24.
 void   replication_releasesrf_test(){
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -2375,7 +2347,7 @@ void      replication_releasesrf_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication_fake  repli1(io);
+       l7vs::replication_fake  repli1;
 
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
        BOOST_CHECK_EQUAL( repli1.initialize(), 0 );    // param読み込みのため1回実行
@@ -2394,8 +2366,6 @@ void      replication_releasesrf_test(){
 
 //test case25.
 void   replication_finalize_test(){
-       boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -2410,7 +2380,7 @@ void      replication_finalize_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication       repli1(io);
+       l7vs::replication       repli1;
 
        // unit_test[155]  finalizeのテスト(未初期化)
        BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
@@ -2470,8 +2440,6 @@ void      replication_finalize_test(){
 
 //test case26.
 void   replication_handle_receive_test(){
-//     boost::asio::io_service io;
-
        get_string_stubmode = 0;
        get_int_stubmode = 0;
        get_string_table[0] = "10.144.169.86";                  //      "ip_addr"
@@ -2486,34 +2454,81 @@ void    replication_handle_receive_test(){
        get_int_table[3] = 200;                                                 //      "cmponent_size_02"
        get_int_table[4] = 10;                                                  //      "compulsorily_interval"
 
-       l7vs::replication       repli1(global_receive_io);
+       l7vs::replication       repli1;
 
        get_int_table[1] = 1;                                                   //      "cmponent_size_00"
        get_int_table[2] = 1;                                                   //      "cmponent_size_01"
        get_int_table[3] = 1;                                                   //      "cmponent_size_02"
 
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
+
        BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
        BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
 
        // unit_test[161]  handle_receiveのテスト(正常系)
        BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
 
-//     repli1.dump_memory();
-//     BOOST_CHECK( 1 );
+       {
+               boost::thread   thread_item( boost::bind ( &sender2_thread ) );
+
+               thread_item.join();
+       }
+
+       repli1.dump_memory();
+       BOOST_CHECK( 1 );
+
+       // unit_test[162]  handle_receiveのテスト(MASTER → SLAVE時)
+       BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
+
+       unsigned int    size;
+       void*                   ptr;
+
+       ptr = repli1.pay_memory( "virtualservice", size );
+       BOOST_CHECK( NULL != ptr );
+       BOOST_CHECK_EQUAL( repli1.lock( "virtualservice" ), 0 );
+       memset( ptr, '1', size * DATA_SIZE );
+       repli1.unlock( "virtualservice" );
+
+       ptr = repli1.pay_memory( "chash", size );
+       BOOST_CHECK( NULL != ptr );
+       BOOST_CHECK_EQUAL( repli1.lock( "chash" ), 0 );
+       memset( ptr, '2', size * DATA_SIZE );
+       repli1.unlock( "chash" );
+
+       ptr = repli1.pay_memory( "sslid", size );
+       BOOST_CHECK( NULL != ptr );
+       BOOST_CHECK_EQUAL( repli1.lock( "sslid" ), 0 );
+       memset( ptr, '3', size * DATA_SIZE );
+       repli1.unlock( "sslid" );
 
-       boost::thread   thread_item( boost::bind ( &sender2_thread ) );
-//receiver_end = false;
-//boost::thread        thread_item3( boost::bind ( &receiver_thread ) );
+       repli1.switch_to_master();
+       BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
 
-       thread_item.join();
-//thread_item3.join();
+       {
+               receiver_end = false;
+               boost::thread   thread_item( boost::bind ( &receiver_thread ) );
+
+               while( !receiver_end ){
+                       global_receive_io.poll();
+               }
+
+               thread_item.join();
+       }
+
+       repli1.switch_to_slave();
+       BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
+
+       {
+               boost::thread   thread_item( boost::bind ( &sender2_thread ) );
+
+               thread_item.join();
+       }
 
        repli1.dump_memory();
        BOOST_CHECK( 1 );
 
 /*
-       // unit_test[162]  handle_receiveのテスト(replication対replication)
+       // unit_test[163]  handle_receiveのテスト(replication対replication)
        BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
 
        boost::thread   thread_item2( boost::bind ( &sender_thread ) );
@@ -2521,7 +2536,6 @@ void      replication_handle_receive_test(){
        sleep(1);
 
        thread_item2.join();
-std::cout << "sender2 end\n";
 
        repli1.dump_memory();
        BOOST_CHECK( 1 );
@@ -2533,11 +2547,6 @@ std::cout << "sender2 end\n";
        repli1.finalize();
 }
 
-void   replication_finish(){
-       io_end = true;
-       global_thread_item.join();
-}
-
 test_suite*    init_unit_test_suite( int argc, char* argv[] ){
        l7vs::Logger    logger;
        l7vs::Parameter parameter;
@@ -2547,7 +2556,6 @@ test_suite*       init_unit_test_suite( int argc, char* argv[] ){
        test_suite* ts = BOOST_TEST_SUITE( "replication_test" );
 
        // add test case to test suite
-///*
        ts->add( BOOST_TEST_CASE( &replication_initialize_test ) );
        ts->add( BOOST_TEST_CASE( &replication_switch_to_master_test ) );
        ts->add( BOOST_TEST_CASE( &replication_switch_to_slave_test ) );
@@ -2555,6 +2563,7 @@ test_suite*       init_unit_test_suite( int argc, char* argv[] ){
        ts->add( BOOST_TEST_CASE( &replication_dump_memory_test ) );
        ts->add( BOOST_TEST_CASE( &replication_start_test ) );
        ts->add( BOOST_TEST_CASE( &replication_stop_test ) );
+
        ts->add( BOOST_TEST_CASE( &replication_force_replicate_test ) );
 
        ts->add( BOOST_TEST_CASE( &replication_reset_test ) );
@@ -2575,14 +2584,9 @@ test_suite*      init_unit_test_suite( int argc, char* argv[] ){
        ts->add( BOOST_TEST_CASE( &replication_releasecmp_test ) );
        ts->add( BOOST_TEST_CASE( &replication_releasesrf_test ) );
        ts->add( BOOST_TEST_CASE( &replication_finalize_test ) );
-//*/
 
        ts->add( BOOST_TEST_CASE( &replication_handle_receive_test ) );
 
-
-
-       ts->add( BOOST_TEST_CASE( &replication_finish ) );
-
        framework::master_test_suite().add( ts );
 
        return 0;