2 #include <boost/test/included/unit_test.hpp>
3 #include <boost/test/parameterized_test.hpp>
4 #include "replication.h"
8 #include <boost/algorithm/string.hpp>
10 #define TARGET_IP_V4 "127.0.0.1"
11 #define TARGET_IP_V6 "[::1]"
12 #define TARGET_HOSTNAME "um08"
13 #define REPLICATION_PORT "40000"
14 #define RECV_IP_V4 "127.0.01"
15 #define RECV_IP_V6 "[::1]"
17 int get_string_stubmode = 0;
18 int get_int_stubmode = 0;
20 char target_ip_table[][256] = {
25 char recv_ip_table[][256] = {
30 char get_string_table[][ 256 ] = {
31 TARGET_IP_V4, // "ip_addr"
32 REPLICATION_PORT, // "service_name"
33 RECV_IP_V4, // "recv_ip_addr"
34 "virtualservice", // "cmponent_id_00"
35 "chash", // "cmponent_id_01"
36 "sslid", // "cmponent_id_02"
39 int get_int_table[] = {
41 64, // "cmponent_size_00"
42 1, // "cmponent_size_01"
43 200, // "cmponent_size_02"
44 10 // "compulsorily_interval"
48 #include "logger_stub.cpp"
49 #include "parameter_stub.cpp"
51 //class l7vs::replication;
53 using namespace boost::unit_test;
55 //! endpoint string parse function
56 //! @param[in] endpoint string
59 typename T::endpoint make_endpoint( const char* in_host, const char* in_port ){
60 std::string hostname(in_host);
61 std::string portname(in_port);
64 boost::algorithm::erase_first( hostname, "[" );
65 boost::algorithm::erase_last( hostname, "]" );
67 boost::asio::io_service io_service;
68 typename T::resolver resolver(io_service);
69 typename T::resolver::query query( hostname, portname );
70 typename T::resolver::iterator end;
71 boost::system::error_code ec;
72 typename T::resolver::iterator itr = resolver.resolve( query, ec );
74 return typename T::endpoint();
76 if( itr == end ) return typename T::endpoint();
82 class replication_fake : public replication
86 replication_fake() : replication() {}
90 bool locked( const std::string& inid ){
91 std::map<std::string, mutex_ptr>::iterator itr;
94 itr = replication_mutex.find( inid );
95 if( itr == replication_mutex.end() ){
99 res = itr->second->try_lock();
101 itr->second->unlock();
106 int set_master_wrapper(){
110 int set_slave_wrapper(){
113 boost::mutex::scoped_lock lock( replication_thread_mutex );
114 if ( replication_flag != EXIT ){
115 replication_flag = WAIT;
122 int check_parameter_wrapper(){
123 return check_parameter();
126 void* getrpl_wrapper(){
127 replication_state.replication_memory = getrpl();
128 return replication_state.replication_memory;
131 void* getcmp_wrapper(){
132 replication_state.component_memory = getcmp();
133 return replication_state.component_memory;
136 uint64_t* getsrf_wrapper(){
137 replication_state.surface_block_array_ptr = getsrf();
138 return replication_state.surface_block_array_ptr;
141 unsigned long long make_serial_wrapper(){
142 return make_serial();
146 void* releaserpl_wrapper(){
148 return replication_state.replication_memory;
151 void* releasecmp_wrapper(){
153 return replication_state.component_memory;
156 uint64_t* releasesrf_wrapper(){
158 return replication_state.surface_block_array_ptr;
161 void disable_send_thread(){
163 boost::mutex::scoped_lock lock( replication_thread_mutex );
165 replication_flag = EXIT;
166 replication_thread_condition.notify_all();
168 if ( replication_thread_ptr ){
169 replication_thread_ptr->join();
182 //--------------------------- mallocスタブ関数 --------------------------------------
183 static void* malloc_dbg(size_t, const void *);
184 static void malloc_dbg_install();
185 static void malloc_dbg_uninstall();
186 static void* (*old_malloc_hook)(size_t, const void *);
188 static void malloc_dbg_install ()
190 old_malloc_hook = __malloc_hook;
191 __malloc_hook = malloc_dbg;
194 static void malloc_dbg_uninstall ()
196 __malloc_hook = old_malloc_hook;
200 int malloc_count = 0;
202 static void * malloc_dbg(size_t size, const void *caller){
205 if((&_start < caller) && (caller < &_etext)){
206 if (0 < malloc_count){
208 malloc_dbg_uninstall();
210 malloc_dbg_install();
216 malloc_dbg_uninstall();
218 malloc_dbg_install();
224 //! emun States Type string
225 static const char* replication_mode[] = {
227 "REPLICATION_SINGLE",
228 "REPLICATION_MASTER",
230 "REPLICATION_MASTER_STOP",
231 "REPLICATION_SLAVE_STOP"
234 volatile bool locked_end = false;
236 volatile bool receiver_end = false;
237 boost::asio::io_service global_receive_io;
238 boost::asio::io_service global_send_io;
240 void receiver_thread( const char* recv_ip ){
241 //boost::asio::ip::udp::endpoint udp_endpoint( boost::asio::ip::address::from_string( recv_ip ), 40000 );
242 boost::asio::ip::udp::endpoint udp_endpoint( make_endpoint<boost::asio::ip::udp>( recv_ip, REPLICATION_PORT ) );
243 boost::asio::ip::udp::socket receiver_socket( global_receive_io, udp_endpoint );
248 //! Transfer data between active server and standby server.
249 struct replication_data_struct{
250 unsigned short id; //!< ID of Replication Function
252 unsigned long long serial; //!< Serial Number
253 unsigned int block_num; //!< Block Number in Replication memory
255 uint64_t size; //!< Data size for checking packet loss
256 char data[DATA_SIZE]; //!< Raw data
259 //! State Infomation struct to execute Replication.
260 struct replication_state_struct{
261 enum l7vs::replication::REPLICATION_MODE_TAG service_status; //!< States Type of Replication Function
262 unsigned long long send_time; //!< Completion last time to send data(no use)
263 unsigned int last_send_block; //!< Completion last Block Number to send data
264 unsigned int last_recv_block; //!< Completion last Block Number to receive data
265 unsigned int total_block; //!< The maximum Block Number of Components memory
266 void* replication_memory; //!< Top address in Replication memory
267 void* component_memory; //!< Top address in Component memory
268 uint64_t surface_block_no; //!< Serial number for respect switch
269 uint64_t* surface_block_array_ptr; //!< Serial number in received respect at every block
271 replication_state_struct() : service_status(l7vs::replication::REPLICATION_OUT),
276 replication_memory(NULL),
277 component_memory(NULL),
279 surface_block_array_ptr(NULL) {}
283 l7vs::Parameter param;
285 std::string key_size;
286 l7vs::error_code size_ret;
289 // Get Component infomation
290 for ( int i=0; i<CMP_MAX; i++) {
291 key_size = boost::io::str( boost::format( "cmponent_size_%02d" ) % i );
292 replication_state.total_block += param.get_int( l7vs::PARAM_COMP_REPLICATION, key_size, size_ret );
295 // Replication memory is NULL
296 if ( NULL == ( replication_state.replication_memory = malloc( replication_state.total_block*DATA_SIZE ) )) {
297 l7vs::Logger::putLogError( l7vs::LOG_CAT_L7VSD_SYSTEM_MEMORY, 1, "Replication memory is NULL.", __FILE__, __LINE__ );
300 // memset(replication_state.replication_memory,0,replication_state.total_block*DATA_SIZE);
301 memset(replication_state.replication_memory,'9',replication_state.total_block*DATA_SIZE);
304 // Component memory is NULL
305 // if ( NULL == ( replication_state.component_memory = malloc( replication_state.total_block*DATA_SIZE ) ) ){
306 // l7vs::Logger::putLogError( l7vs::LOG_CAT_L7VSD_SYSTEM_MEMORY, 1, "Component memory is NULL.", __FILE__, __LINE__ );
309 // memset(replication_state.component_memory,0,replication_state.total_block*DATA_SIZE);
311 // Surface block array memory is NULL
312 if ( NULL == ( replication_state.surface_block_array_ptr = ( uint64_t* )malloc( replication_state.total_block*sizeof(uint64_t) ) )) {
313 l7vs::Logger::putLogError( l7vs::LOG_CAT_L7VSD_REPLICATION, 1, "Surface block array pointer is NULL.", __FILE__, __LINE__ );
316 memset(replication_state.surface_block_array_ptr,0,replication_state.total_block*sizeof(uint64_t));
319 // size = receiver_socket.receive_from ( boost::asio::buffer( &replication_data, sizeof( struct replication_data_struct ) ), udp_endpoint );
320 size = receiver_socket.receive ( boost::asio::buffer( &replication_data, sizeof( struct replication_data_struct ) ) );
321 if ( size != sizeof ( struct replication_data_struct ) ){
322 l7vs::Logger::putLogError( l7vs::LOG_CAT_L7VSD_SYSTEM, 1, "Failed in the reception processing of data because of illegal receive size.", __FILE__, __LINE__ );
326 //std::cout << "receiver_thread\n";
327 //std::cout << replication_data.id << "\n";
328 //std::cout << replication_data.serial << "\n";
329 //std::cout << replication_data.block_num << "\n";
330 //std::cout << replication_data.size << "\n";
331 //std::cout << replication_data.data[0] << "\n";
333 // Check replication ID
334 if ( replication_data.id != REPLICATION_ID ){
335 l7vs::Logger::putLogError( l7vs::LOG_CAT_L7VSD_REPLICATION, 1, "Get invalid data.", __FILE__, __LINE__ );
337 } else if ( replication_data.block_num > replication_state.total_block ){
338 // block number is over
339 l7vs::Logger::putLogError( l7vs::LOG_CAT_L7VSD_REPLICATION, 1, "Recv block number is too large.", __FILE__, __LINE__ );
341 } else if ( replication_data.serial < replication_state.surface_block_array_ptr[replication_data.block_num] ){
342 // Comparison of serial numbers
343 l7vs::Logger::putLogError( l7vs::LOG_CAT_L7VSD_REPLICATION, 1, "Recv replication data is too old.", __FILE__, __LINE__ );
346 // Substitution of version
347 replication_state.surface_block_array_ptr[replication_data.block_num] = replication_data.serial;
351 recv_memory = ( char * )replication_state.replication_memory + DATA_SIZE * replication_data.block_num;
354 memcpy( recv_memory, &replication_data.data, DATA_SIZE );
357 replication_state.surface_block_array_ptr[replication_data.block_num] = replication_data.serial;
359 // Surface numbers are compared.
360 for ( unsigned int i = 0; i < replication_state.total_block-1; i++ ){
361 if ( replication_state.surface_block_array_ptr[i] != replication_state.surface_block_array_ptr[i+1] ){
364 if ( i == replication_state.total_block-2 ){
365 // Synchronization is executed.
366 // memcpy(replication_state.component_memory, replication_state.replication_memory, replication_state.total_block*DATA_SIZE );
367 l7vs::Logger::putLogInfo( l7vs::LOG_CAT_L7VSD_REPLICATION, 1, "Replication stub receiving is success.", __FILE__, __LINE__ );
377 size = DATA_SIZE * replication_state.total_block;
380 p = ( unsigned char * )replication_state.replication_memory;
383 l7vs::Logger::putLogInfo( l7vs::LOG_CAT_L7VSD_REPLICATION, 1, "Replication check Start ----------------------------", __FILE__, __LINE__ );
384 buf = boost::io::str( boost::format( "Mode is [ %s ]." ) % replication_mode[(int)replication_state.service_status] );
385 l7vs::Logger::putLogInfo( l7vs::LOG_CAT_L7VSD_REPLICATION, 1, buf, __FILE__, __LINE__ );
386 buf = boost::io::str( boost::format( "Total Block is [ %u ]" ) % replication_state.total_block );
387 l7vs::Logger::putLogInfo( l7vs::LOG_CAT_L7VSD_REPLICATION, 1, buf, __FILE__, __LINE__ );
389 // Converts into the binary, and writes it to the file.
390 for ( h = 0; h < size / DATA_SIZE; h++ ){
391 buf = boost::io::str( boost::format( "Block Number [ %d ]" ) % h );
392 l7vs::Logger::putLogInfo( l7vs::LOG_CAT_L7VSD_REPLICATION, 1, buf, __FILE__, __LINE__ );
394 for ( i = 0; i < DATA_SIZE / LOG_DATA_WIDTH; i++ ){
395 head = p + h * DATA_SIZE + i * LOG_DATA_WIDTH;
397 // have to cast char to int. because boost::format ignore char with appointed width.
398 buf = boost::io::str( boost::format( "%02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX "
399 "%02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX" )
400 % ( int )*head % ( int )*(head+1) % ( int )*(head+2) % ( int )*(head+3)
401 % ( int )*(head+4) % ( int )*(head+5) % ( int )*(head+6)% ( int )*(head+7)
402 % ( int )*(head+8) % ( int )*(head+9) % ( int )*(head+10) % ( int )*(head+11)
403 % ( int )*(head+12) % ( int )*(head+13) % ( int )*(head+14) % ( int )*(head+15) );
404 l7vs::Logger::putLogInfo( l7vs::LOG_CAT_L7VSD_REPLICATION, 1, buf, __FILE__, __LINE__ );
407 l7vs::Logger::putLogInfo( l7vs::LOG_CAT_L7VSD_REPLICATION, 1, "Replication check End ------------------------------", __FILE__, __LINE__ );
414 replication_state.surface_block_array_ptr[replication_data.block_num] = replication_data.serial;
416 // set last recv block number
417 if ( replication_state.last_recv_block < replication_state.total_block-1 ){
418 replication_state.last_recv_block += 1;
419 }else if(replication_state.last_recv_block == replication_state.total_block-1){
420 replication_state.last_recv_block = 0;
422 l7vs::Logger::putLogError( l7vs::LOG_CAT_L7VSD_REPLICATION, 1, "Last send block number is illegal.", __FILE__, __LINE__ );
428 if ( NULL != replication_state.replication_memory){
429 free(replication_state.replication_memory);
431 replication_state.replication_memory = NULL;
432 if ( NULL != replication_state.component_memory){
433 free(replication_state.component_memory);
435 replication_state.component_memory = NULL;
436 if ( NULL != replication_state.surface_block_array_ptr ){
437 free(replication_state.surface_block_array_ptr);
439 replication_state.surface_block_array_ptr=NULL;
441 receiver_socket.close();
446 void sender_thread(){
447 l7vs::replication repli2;
449 BOOST_CHECK_EQUAL( repli2.get_status(), l7vs::replication::REPLICATION_OUT );
450 BOOST_CHECK_EQUAL( repli2.initialize(), 0 );
451 BOOST_CHECK_EQUAL( repli2.get_status(), l7vs::replication::REPLICATION_SLAVE );
456 ptr = repli2.pay_memory( "virtualservice", size );
457 BOOST_CHECK( NULL != ptr );
458 BOOST_CHECK_EQUAL( repli2.lock( "virtualservice" ), 0 );
459 memset( ptr, 'A', size * DATA_SIZE );
460 repli2.unlock( "virtualservice" );
462 ptr = repli2.pay_memory( "chash", size );
463 BOOST_CHECK( NULL != ptr );
464 BOOST_CHECK_EQUAL( repli2.lock( "chash" ), 0 );
465 memset( ptr, 'B', size * DATA_SIZE );
466 repli2.unlock( "chash" );
468 ptr = repli2.pay_memory( "sslid", size );
469 BOOST_CHECK( NULL != ptr );
470 BOOST_CHECK_EQUAL( repli2.lock( "sslid" ), 0 );
471 memset( ptr, 'C', size * DATA_SIZE );
472 repli2.unlock( "sslid" );
474 repli2.switch_to_master();
475 BOOST_CHECK_EQUAL( repli2.get_status(), l7vs::replication::REPLICATION_MASTER );
482 void sender2_thread( const char* target_ip ){
483 // boost::asio::ip::udp::endpoint udp_endpoint( boost::asio::ip::address::from_string( target_ip, 40000 );
484 boost::asio::ip::udp::endpoint udp_endpoint( make_endpoint<boost::asio::ip::udp>( target_ip, REPLICATION_PORT ) );
485 // boost::asio::ip::udp::socket sender_socket( global_send_io, udp_endpoint );
486 boost::asio::ip::udp::socket sender_socket( global_send_io );
488 //! Transfer data between active server and standby server.
489 struct replication_data_struct{
490 unsigned short id; //!< ID of Replication Function
492 unsigned long long serial; //!< Serial Number
493 unsigned int block_num; //!< Block Number in Replication memory
495 uint64_t size; //!< Data size for checking packet loss
496 char data[DATA_SIZE]; //!< Raw data
500 boost::system::error_code err;
502 std::cout << "sender2 " << udp_endpoint.address() << ":" << udp_endpoint.port() << "\n";
503 memset( &replication_data, 0, sizeof( struct replication_data_struct ) );
504 // Set replication id
505 replication_data.id = REPLICATION_ID;
506 replication_data.block_num = 0;
508 replication_data.serial = 0;
510 // set data size (sizeof(replication_data))
511 replication_data.size = sizeof( struct replication_data_struct );
513 // set replication data (1 block)
514 memset( replication_data.data, '7', DATA_SIZE );
517 std::cout << "send 1st block\n";
518 sender_socket.open( udp_endpoint.protocol() );
519 // send_byte = sender_socket.send_to( boost::asio::buffer( &replication_data, sizeof( struct replication_data_struct ) ), udp_endpoint );
520 send_byte = sender_socket.send_to( boost::asio::buffer( &replication_data, sizeof( struct replication_data_struct ) ), udp_endpoint, 0, err );
522 std::cout << err.message() << "\n";
523 sender_socket.close();
526 if ( sizeof( struct replication_data_struct ) != send_byte ){
527 sender_socket.close();
530 global_send_io.run();
533 replication_data.block_num = 1;
535 // set replication data (1 block)
536 memset( replication_data.data, '8', DATA_SIZE );
539 std::cout << "send 2nd block\n";
540 // send_byte = sender_socket.send_to( boost::asio::buffer( &replication_data, sizeof( struct replication_data_struct ) ), udp_endpoint );
541 send_byte = sender_socket.send_to( boost::asio::buffer( &replication_data, sizeof( struct replication_data_struct ) ), udp_endpoint, 0, err );
543 std::cout << err.message() << "\n";
544 sender_socket.close();
547 if ( sizeof( struct replication_data_struct ) != send_byte ){
548 sender_socket.close();
551 global_send_io.run();
554 replication_data.block_num = 2;
556 // set replication data (1 block)
557 memset( replication_data.data, '9', DATA_SIZE );
560 std::cout << "send 3rd block\n";
561 // send_byte = sender_socket.send_to( boost::asio::buffer( &replication_data, sizeof( struct replication_data_struct ) ), udp_endpoint );
562 send_byte = sender_socket.send_to( boost::asio::buffer( &replication_data, sizeof( struct replication_data_struct ) ), udp_endpoint, 0, err );
564 std::cout << err.message() << "\n";
565 sender_socket.close();
568 if ( sizeof( struct replication_data_struct ) != send_byte ){
569 sender_socket.close();
572 global_send_io.run();
575 sender_socket.close();
578 void lock_thread( l7vs::replication_fake* p_repliX, const char* name ){
579 std::string id( name );
580 p_repliX->lock( id );
590 void replication_initialize_test( int proto ){
592 get_string_stubmode = 0;
593 get_int_stubmode = 0;
594 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
595 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
596 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
597 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
598 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
599 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
600 get_int_table[0] = 10000; // "interval"
601 get_int_table[1] = 64; // "cmponent_size_00"
602 get_int_table[2] = 1; // "cmponent_size_01"
603 get_int_table[3] = 200; // "cmponent_size_02"
604 get_int_table[4] = 10; // "compulsorily_interval"
606 // unit_test[1] コンストラクタのテスト
607 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
608 l7vs::replication repli1;
610 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
612 // unit_test[2] initializeのテスト(正常系)
613 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
614 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
616 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
618 // unit_test[3] finnalizeのテスト(正常系)
619 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
622 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
624 // unit_test[4] initializeのテスト(ip_addrが存在しない)
625 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
626 get_string_stubmode = 1;
627 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
628 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
630 // unit_test[5] initializeのテスト(service_nameが存在しない)
631 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
632 get_string_stubmode = 2;
634 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
635 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
637 // unit_test[6] initializeのテスト(recv_ip_addrが存在しない)
638 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
639 get_string_stubmode = 3;
641 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
642 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
644 // unit_test[7] initializeのテスト(intervalが存在しない)
645 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
646 get_string_stubmode = 0;
647 get_int_stubmode = 1;
649 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
650 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
652 // unit_test[8] initializeのテスト(全部存在しない initialize自体はOK)
653 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
654 get_string_stubmode = 1000;
655 get_int_stubmode = 1000;
657 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
658 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
660 get_int_stubmode = 0;
661 // unit_test[9] initializeのテスト(ip_addrが不正)
662 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
663 get_string_stubmode = 101;
665 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
666 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
668 // unit_test[10] initializeのテスト(service_nameが不正)
669 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
670 get_string_stubmode = 102;
672 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
673 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
675 // unit_test[11] initializeのテスト(recv_ip_addrが不正)
676 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
677 get_string_stubmode = 103;
679 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
680 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
682 // unit_test[12] initializeのテスト(intervalが不正)
683 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
684 get_string_stubmode = 0;
685 get_int_stubmode = 101;
687 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
688 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
690 get_int_stubmode = 0;
691 // unit_test[13] check_parameterのテスト(cmponent_id_00が存在しない)
692 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
693 get_string_stubmode = 4;
695 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
696 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
698 // unit_test[14] initializeのテスト(cmponent_id_00が不正)
699 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
700 get_string_stubmode = 104;
702 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
703 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
705 get_string_stubmode = 0;
706 // unit_test[15] initializeのテスト(cmponent_size_00が存在しない)
707 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
708 get_int_stubmode = 2;
710 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
711 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
713 // unit_test[16] initializeのテスト(cmponent_size_00が不正)
714 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
715 get_int_stubmode = 102;
717 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
718 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
720 get_int_stubmode = 0;
721 // unit_test[17] initializeのテスト(cmponent_id_01が存在しない OK)
722 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
723 get_string_stubmode = 5;
725 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
726 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
728 // unit_test[18] initializeのテスト(cmponent_id_01が不正)
729 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
730 get_string_stubmode = 105;
732 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
733 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
735 get_string_stubmode = 0;
736 // unit_test[19] initializeのテスト(cmponent_size_01が存在しない OK)
737 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
738 get_int_stubmode = 3;
740 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
741 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
743 // unit_test[20] initializeのテスト(cmponent_size_01が不正)
744 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
745 get_int_stubmode = 103;
747 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
748 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
750 get_int_stubmode = 0;
751 // unit_test[21] initializeのテスト(cmponent_id_02が存在しない OK)
752 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
753 get_string_stubmode = 6;
755 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
756 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
758 // unit_test[22] initializeのテスト(cmponent_id_02が不正)
759 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
760 get_string_stubmode = 106;
762 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
763 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
765 get_string_stubmode = 0;
766 // unit_test[23] initializeのテスト(cmponent_size_02が存在しない OK)
767 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
768 get_int_stubmode = 4;
770 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
771 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
773 // unit_test[24] initializeのテスト(cmponent_size_02が不正)
774 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
775 get_int_stubmode = 104;
777 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
778 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
780 // unit_test[25] initializeのテスト(total_blockが0)
781 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
782 get_int_stubmode = 102;
783 get_string_stubmode = 5;
785 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
786 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
788 get_int_stubmode = 0;
789 get_string_stubmode = 0;
790 // unit_test[26] check_parameterのテスト(intervalが上限以上)
791 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
792 get_int_table[0] = 10001; // "interval"
794 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
795 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
797 // unit_test[27] check_parameterのテスト(intervalが下限未満)
798 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
799 get_int_table[0] = 9; // "interval"
801 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
802 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
804 get_int_table[0] = 10000; // "interval"
805 // unit_test[28] check_parameterのテスト(component_idが重複)
806 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
807 strcpy( get_string_table[4], "virtualservice" ); // "cmponent_id_01"
808 strcpy( get_string_table[5], "virtualservice" ); // "cmponent_id_02"
810 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
811 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
813 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
814 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
816 // unit_test[29] check_parameterのテスト(total_blockが上限以上)
817 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
818 get_int_table[1] = 33334; // "cmponent_size_00"
819 get_int_table[2] = 33334; // "cmponent_size_01"
820 get_int_table[3] = 33334; // "cmponent_size_02"
822 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
823 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
825 get_int_table[1] = 64; // "cmponent_size_00"
826 get_int_table[2] = 1; // "cmponent_size_01"
827 get_int_table[3] = 200; // "cmponent_size_02"
829 // unit_test[30] getrplのテスト(Replication memoryのmalloc失敗)
830 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
833 malloc_dbg_install();
834 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
835 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
836 malloc_dbg_uninstall();
838 // unit_test[31] getcmpのテスト(Components memoryのmalloc失敗)
839 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
842 malloc_dbg_install();
843 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
844 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
845 malloc_dbg_uninstall();
847 // unit_test[32] getsrfのテスト(surface_blockのmalloc失敗)
848 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
851 malloc_dbg_install();
852 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
853 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
854 malloc_dbg_uninstall();
856 // unit_test[33] initializeのテスト(initialize済み)
857 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
859 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
860 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
861 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
863 // unit_test[34] finalizeのテスト(finalize済み)
864 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
867 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
871 void replication_switch_to_master_test( int proto ){
872 get_string_stubmode = 0;
873 get_int_stubmode = 0;
874 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
875 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
876 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
877 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
878 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
879 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
880 get_int_table[0] = 10000; // "interval"
881 get_int_table[1] = 64; // "cmponent_size_00"
882 get_int_table[2] = 1; // "cmponent_size_01"
883 get_int_table[3] = 200; // "cmponent_size_02"
884 get_int_table[4] = 10; // "compulsorily_interval"
886 l7vs::replication repli1;
888 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
889 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
890 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
892 // unit_test[35] switch_to_master&set_masterのテスト(SLAVE時)
893 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
894 repli1.switch_to_master();
895 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
897 // unit_test[36] switch_to_masterのテスト(MASTER時)
898 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
899 repli1.switch_to_master();
900 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
902 // unit_test[37] switch_to_masterのテスト(MASTER_STOP時)
903 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
905 repli1.switch_to_master();
906 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER_STOP );
908 // unit_test[38] switch_to_masterのテスト(未初期化)
909 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
911 repli1.switch_to_master();
912 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
914 // unit_test[39] switch_to_master&set_masterのテスト(SLAVE_STOP)
915 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
917 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
919 repli1.switch_to_master();
920 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER_STOP );
922 // unit_test[40] switch_to_masterのテスト(SINGLE時)
923 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
924 get_string_stubmode = 1;
925 get_int_stubmode = 1;
927 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
928 repli1.switch_to_master();
929 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
932 get_string_stubmode = 0;
933 get_int_stubmode = 0;
937 void replication_switch_to_slave_test( int proto ){
938 get_string_stubmode = 0;
939 get_int_stubmode = 0;
940 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
941 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
942 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
943 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
944 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
945 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
946 get_int_table[0] = 10000; // "interval"
947 get_int_table[1] = 64; // "cmponent_size_00"
948 get_int_table[2] = 1; // "cmponent_size_01"
949 get_int_table[3] = 200; // "cmponent_size_02"
950 get_int_table[4] = 10; // "compulsorily_interval"
952 l7vs::replication repli1;
954 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
955 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
956 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
958 // unit_test[41] switch_to_slaveのテスト(SLAVE時)
959 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
960 repli1.switch_to_slave();
961 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
963 // unit_test[42] switch_to_slave&set_slaveのテスト(MASTER時)
964 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
965 repli1.switch_to_master();
966 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
967 repli1.switch_to_slave();
968 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
970 // unit_test[43] switch_to_slave&set_slaveのテスト(MASTER_STOP時)
971 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
972 repli1.switch_to_master();
973 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
975 repli1.switch_to_slave();
976 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE_STOP );
978 // unit_test[44] switch_to_slaveのテスト(未初期化)
979 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
981 repli1.switch_to_slave();
982 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
984 // unit_test[45] switch_to_slaveのテスト(SLAVE_STOP)
985 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
987 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
989 repli1.switch_to_slave();
990 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE_STOP );
992 // unit_test[46] switch_to_slaveのテスト(SINGLE時)
993 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
994 get_string_stubmode = 1;
995 get_int_stubmode = 1;
997 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
998 repli1.switch_to_slave();
999 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
1002 get_string_stubmode = 0;
1003 get_int_stubmode = 0;
1007 void replication_pay_memory_test( int proto ){
1011 get_string_stubmode = 0;
1012 get_int_stubmode = 0;
1013 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
1014 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
1015 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
1016 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
1017 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
1018 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
1019 get_int_table[0] = 10000; // "interval"
1020 get_int_table[1] = 64; // "cmponent_size_00"
1021 get_int_table[2] = 1; // "cmponent_size_01"
1022 get_int_table[3] = 200; // "cmponent_size_02"
1023 get_int_table[4] = 10; // "compulsorily_interval"
1025 l7vs::replication repli1;
1027 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
1028 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
1029 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
1031 // unit_test[47] pay_memoryのテスト(SLAVE virtualservice時)
1032 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1033 ptr = repli1.pay_memory( "virtualservice", size );
1034 BOOST_CHECK( NULL != ptr );
1035 BOOST_CHECK_EQUAL( size, ( unsigned int )get_int_table[1] );
1037 // unit_test[48] pay_memoryのテスト(SLAVE chash時)
1038 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1039 ptr = repli1.pay_memory( "chash", size );
1040 BOOST_CHECK( NULL != ptr );
1041 BOOST_CHECK_EQUAL( size, ( unsigned int )get_int_table[2] );
1043 // unit_test[49] pay_memoryのテスト(SLAVE sslid時)
1044 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1045 ptr = repli1.pay_memory( "sslid", size );
1046 BOOST_CHECK( NULL != ptr );
1047 BOOST_CHECK_EQUAL( size, ( unsigned int )get_int_table[3] );
1049 // unit_test[50] pay_memoryのテスト(virtualservice時 サイズ0)
1050 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1051 get_int_table[1] = 0; // "cmponent_size_00"
1053 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
1054 ptr = repli1.pay_memory( "virtualservice", size );
1055 BOOST_CHECK( NULL == ptr );
1056 BOOST_CHECK_EQUAL( size, ( unsigned int )get_int_table[1] );
1058 get_int_table[1] = 64; // "cmponent_size_00"
1060 // unit_test[51] pay_memoryのテスト(chash時 サイズ0)
1061 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1062 get_int_table[2] = 0; // "cmponent_size_01"
1064 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
1065 ptr = repli1.pay_memory( "chash", size );
1066 BOOST_CHECK( NULL == ptr );
1067 BOOST_CHECK_EQUAL( size, ( unsigned int )get_int_table[2] );
1069 get_int_table[2] = 1; // "cmponent_size_01"
1071 // unit_test[52] pay_memoryのテスト(sslid時 サイズ0)
1072 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1073 get_int_table[3] = 0; // "cmponent_size_02"
1075 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
1076 ptr = repli1.pay_memory( "sslid", size );
1077 BOOST_CHECK( NULL == ptr );
1078 BOOST_CHECK_EQUAL( size, ( unsigned int )get_int_table[3] );
1080 get_int_table[3] = 200; // "cmponent_size_02"
1082 // unit_test[53] pay_memoryのテスト(id無効)
1083 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1085 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
1086 ptr = repli1.pay_memory( "unknown", size );
1087 BOOST_CHECK( NULL == ptr );
1088 BOOST_CHECK_EQUAL( size, 0U );
1090 // unit_test[54] pay_memoryのテスト(SLAVE_STOP virtualservice時)
1091 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1093 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE_STOP );
1094 ptr = repli1.pay_memory( "virtualservice", size );
1095 BOOST_CHECK( NULL != ptr );
1096 BOOST_CHECK_EQUAL( size, ( unsigned int )get_int_table[1] );
1098 // unit_test[55] pay_memoryのテスト(SLAVE_STOP chash時)
1099 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1100 ptr = repli1.pay_memory( "chash", size );
1101 BOOST_CHECK( NULL != ptr );
1102 BOOST_CHECK_EQUAL( size, ( unsigned int )get_int_table[2] );
1104 // unit_test[56] pay_memoryのテスト(SLAVE_STOP sslid時)
1105 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1106 ptr = repli1.pay_memory( "sslid", size );
1107 BOOST_CHECK( NULL != ptr );
1108 BOOST_CHECK_EQUAL( size, ( unsigned int )get_int_table[3] );
1110 // unit_test[57] pay_memoryのテスト(MASTER_STOP virtualservice時)
1111 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1112 repli1.switch_to_master();
1113 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER_STOP );
1114 ptr = repli1.pay_memory( "virtualservice", size );
1115 BOOST_CHECK( NULL != ptr );
1116 BOOST_CHECK_EQUAL( size, ( unsigned int )get_int_table[1] );
1118 // unit_test[58] pay_memoryのテスト(MASTER_STOP chash時)
1119 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1120 ptr = repli1.pay_memory( "chash", size );
1121 BOOST_CHECK( NULL != ptr );
1122 BOOST_CHECK_EQUAL( size, ( unsigned int )get_int_table[2] );
1124 // unit_test[59] pay_memoryのテスト(MASTER_STOP sslid時)
1125 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1126 ptr = repli1.pay_memory( "sslid", size );
1127 BOOST_CHECK( NULL != ptr );
1128 BOOST_CHECK_EQUAL( size, ( unsigned int )get_int_table[3] );
1130 // unit_test[60] pay_memoryのテスト(MASTER virtualservice時)
1131 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1133 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
1134 ptr = repli1.pay_memory( "virtualservice", size );
1135 BOOST_CHECK( NULL != ptr );
1136 BOOST_CHECK_EQUAL( size, ( unsigned int )get_int_table[1] );
1138 // unit_test[61] pay_memoryのテスト(MASTER chash時)
1139 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1140 ptr = repli1.pay_memory( "chash", size );
1141 BOOST_CHECK( NULL != ptr );
1142 BOOST_CHECK_EQUAL( size, ( unsigned int )get_int_table[2] );
1144 // unit_test[62] pay_memoryのテスト(MASTER sslid時)
1145 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1146 ptr = repli1.pay_memory( "sslid", size );
1147 BOOST_CHECK( NULL != ptr );
1148 BOOST_CHECK_EQUAL( size, ( unsigned int )get_int_table[3] );
1150 // unit_test[63] pay_memoryのテスト(未初期化 virtualservice時)
1151 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1153 ptr = repli1.pay_memory( "virtualservice", size );
1154 BOOST_CHECK( NULL == ptr );
1155 BOOST_CHECK_EQUAL( size, 0U );
1157 // unit_test[64] pay_memoryのテスト(未初期化 chash時)
1158 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1159 ptr = repli1.pay_memory( "chash", size );
1160 BOOST_CHECK( NULL == ptr );
1161 BOOST_CHECK_EQUAL( size, 0U );
1163 // unit_test[65] pay_memoryのテスト(未初期化 sslid時)
1164 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1165 ptr = repli1.pay_memory( "sslid", size );
1166 BOOST_CHECK( NULL == ptr );
1167 BOOST_CHECK_EQUAL( size, 0U );
1169 // unit_test[66] pay_memoryのテスト(SINGLE virtualservice時)
1170 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1171 get_string_stubmode = 1;
1172 get_int_stubmode = 1;
1174 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
1175 ptr = repli1.pay_memory( "virtualservice", size );
1176 BOOST_CHECK( NULL == ptr );
1177 BOOST_CHECK_EQUAL( size, 0U );
1179 // unit_test[67] pay_memoryのテスト(SINGLE chash時)
1180 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1181 ptr = repli1.pay_memory( "chash", size );
1182 BOOST_CHECK( NULL == ptr );
1183 BOOST_CHECK_EQUAL( size, 0U );
1185 // unit_test[68] pay_memoryのテスト(SINGLE sslid時)
1186 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1187 ptr = repli1.pay_memory( "sslid", size );
1188 BOOST_CHECK( NULL == ptr );
1189 BOOST_CHECK_EQUAL( size, 0U );
1192 get_string_stubmode = 0;
1193 get_int_stubmode = 0;
1197 void replication_dump_memory_test( int proto ){
1198 get_string_stubmode = 0;
1199 get_int_stubmode = 0;
1200 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
1201 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
1202 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
1203 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
1204 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
1205 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
1206 get_int_table[0] = 10000; // "interval"
1207 get_int_table[1] = 64; // "cmponent_size_00"
1208 get_int_table[2] = 1; // "cmponent_size_01"
1209 get_int_table[3] = 200; // "cmponent_size_02"
1210 get_int_table[4] = 10; // "compulsorily_interval"
1212 l7vs::replication repli1;
1214 get_int_table[1] = 1; // "cmponent_size_00"
1215 get_int_table[2] = 1; // "cmponent_size_01"
1216 get_int_table[3] = 1; // "cmponent_size_02"
1218 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
1219 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
1220 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
1222 // unit_test[69] dump_memoryのテスト(SLAVE時)
1223 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1224 repli1.dump_memory();
1227 // unit_test[70] dump_memoryのテスト(SLAVE_STOP時)
1228 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1230 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE_STOP );
1231 repli1.dump_memory();
1234 // unit_test[71] dump_memoryのテスト(MASTER_STOP時)
1235 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1236 repli1.switch_to_master();
1237 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER_STOP );
1238 repli1.dump_memory();
1241 // unit_test[72] dump_memoryのテスト(MASTER時)
1242 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1244 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
1245 repli1.dump_memory();
1248 // unit_test[73] dump_memoryのテスト(未初期化)
1249 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1251 repli1.dump_memory();
1254 // unit_test[74] dump_memoryのテスト(SINGLE時)
1255 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1256 get_string_stubmode = 1;
1257 get_int_stubmode = 1;
1259 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
1260 repli1.dump_memory();
1264 get_string_stubmode = 0;
1265 get_int_stubmode = 0;
1269 void replication_start_test( int proto ){
1270 get_string_stubmode = 0;
1271 get_int_stubmode = 0;
1272 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
1273 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
1274 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
1275 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
1276 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
1277 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
1278 get_int_table[0] = 10000; // "interval"
1279 get_int_table[1] = 64; // "cmponent_size_00"
1280 get_int_table[2] = 1; // "cmponent_size_01"
1281 get_int_table[3] = 200; // "cmponent_size_02"
1282 get_int_table[4] = 10; // "compulsorily_interval"
1284 l7vs::replication repli1;
1286 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
1287 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
1288 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
1290 // unit_test[75] startのテスト(SLAVE時)
1291 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1293 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
1295 // unit_test[76] startのテスト(SLAVE_STOP時)
1296 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1298 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE_STOP );
1300 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
1302 // unit_test[77] startのテスト(MASTER時)
1303 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1304 repli1.switch_to_master();
1305 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
1307 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
1309 // unit_test[78] startのテスト(MASTER_STOP時)
1310 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1312 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER_STOP );
1314 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
1316 // unit_test[79] startのテスト(未初期化)
1317 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1320 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
1322 // unit_test[80] startのテスト(SINGLE時)
1323 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1324 get_string_stubmode = 1;
1325 get_int_stubmode = 1;
1327 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
1329 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
1332 get_string_stubmode = 0;
1333 get_int_stubmode = 0;
1337 void replication_stop_test( int proto ){
1338 get_string_stubmode = 0;
1339 get_int_stubmode = 0;
1340 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
1341 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
1342 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
1343 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
1344 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
1345 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
1346 get_int_table[0] = 10000; // "interval"
1347 get_int_table[1] = 64; // "cmponent_size_00"
1348 get_int_table[2] = 1; // "cmponent_size_01"
1349 get_int_table[3] = 200; // "cmponent_size_02"
1350 get_int_table[4] = 10; // "compulsorily_interval"
1352 l7vs::replication repli1;
1354 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
1355 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
1356 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
1358 // unit_test[81] stopのテスト(SLAVE時)
1359 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1361 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE_STOP );
1363 // unit_test[82] stopのテスト(SLAVE_STOP時)
1364 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1366 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE_STOP );
1368 // unit_test[83] stopのテスト(MASTER_STOP時)
1369 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1370 repli1.switch_to_master();
1371 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER_STOP );
1373 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER_STOP );
1375 // unit_test[84] stopのテスト(MASTER時)
1376 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1378 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
1380 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER_STOP );
1382 // unit_test[85] stopのテスト(未初期化)
1383 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1386 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
1388 // unit_test[86] stopのテスト(SINGLE時)
1389 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1390 get_string_stubmode = 1;
1391 get_int_stubmode = 1;
1393 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
1395 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
1398 get_string_stubmode = 0;
1399 get_int_stubmode = 0;
1403 void replication_force_replicate_test( int proto ){
1404 get_string_stubmode = 0;
1405 get_int_stubmode = 0;
1406 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
1407 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
1408 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
1409 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
1410 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
1411 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
1412 get_int_table[0] = 10000; // "interval"
1413 get_int_table[1] = 64; // "cmponent_size_00"
1414 get_int_table[2] = 1; // "cmponent_size_01"
1415 get_int_table[3] = 200; // "cmponent_size_02"
1416 get_int_table[4] = 10; // "compulsorily_interval"
1418 l7vs::replication_fake repli1;
1420 get_int_table[1] = 1; // "cmponent_size_00"
1421 get_int_table[2] = 1; // "cmponent_size_01"
1422 get_int_table[3] = 1; // "cmponent_size_02"
1424 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
1425 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
1426 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
1428 // unit_test[87] force_replicateのテスト(SLAVE時)
1429 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1430 repli1.force_replicate();
1433 // unit_test[88] force_replicateのテスト(SLAVE_STOP時)
1434 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1436 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE_STOP );
1437 repli1.force_replicate();
1440 // unit_test[89] force_replicateのテスト(MASTER_STOP時)
1441 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1442 repli1.switch_to_master();
1443 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER_STOP );
1444 repli1.force_replicate();
1447 // unit_test[90] force_replicateのテスト(MASTER時 "compulsorily_interval"が存在しない)
1448 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1449 get_int_stubmode = 5;
1451 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
1452 repli1.force_replicate();
1455 // unit_test[91] force_replicateのテスト(MASTER時 "compulsorily_interval"が上限以上)
1456 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1457 get_int_table[4] = 401;
1458 repli1.force_replicate();
1461 // unit_test[92] force_replicateのテスト(MASTER時 "compulsorily_interval"が下限未満)
1462 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1463 get_int_table[4] = 3;
1464 repli1.force_replicate();
1467 get_int_table[4] = 10;
1469 // unit_test[93] force_replicateのテスト(未初期化)
1470 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1472 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
1473 repli1.force_replicate();
1476 // unit_test[94] force_replicateのテスト(SINGLE時)
1477 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1478 get_string_stubmode = 1;
1479 get_int_stubmode = 1;
1481 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
1482 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
1483 repli1.force_replicate();
1487 get_string_stubmode = 0;
1488 get_int_stubmode = 0;
1490 // unit_test[95] force_replicate&handle_sendのテスト(MASTER時)
1491 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1493 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
1494 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
1495 repli1.disable_send_thread();
1500 ptr = repli1.pay_memory( "virtualservice", size );
1501 BOOST_CHECK( NULL != ptr );
1502 BOOST_CHECK_EQUAL( repli1.lock( "virtualservice" ), 0 );
1503 memset( ptr, '1', size * DATA_SIZE );
1504 repli1.unlock( "virtualservice" );
1506 ptr = repli1.pay_memory( "chash", size );
1507 BOOST_CHECK( NULL != ptr );
1508 BOOST_CHECK_EQUAL( repli1.lock( "chash" ), 0 );
1509 memset( ptr, '2', size * DATA_SIZE );
1510 repli1.unlock( "chash" );
1512 ptr = repli1.pay_memory( "sslid", size );
1513 BOOST_CHECK( NULL != ptr );
1514 BOOST_CHECK_EQUAL( repli1.lock( "sslid" ), 0 );
1515 memset( ptr, '3', size * DATA_SIZE );
1516 repli1.unlock( "sslid" );
1518 repli1.switch_to_master();
1519 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
1521 receiver_end = false;
1522 boost::thread thread_item1( boost::bind ( &receiver_thread, recv_ip_table[proto] ) );
1524 repli1.force_replicate();
1528 while( !receiver_end ){
1529 global_receive_io.poll();
1532 thread_item1.join();
1538 void replication_reset_test( int proto ){
1539 get_string_stubmode = 0;
1540 get_int_stubmode = 0;
1541 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
1542 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
1543 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
1544 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
1545 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
1546 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
1547 get_int_table[0] = 10000; // "interval"
1548 get_int_table[1] = 64; // "cmponent_size_00"
1549 get_int_table[2] = 1; // "cmponent_size_01"
1550 get_int_table[3] = 200; // "cmponent_size_02"
1551 get_int_table[4] = 10; // "compulsorily_interval"
1553 l7vs::replication repli1;
1555 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
1556 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
1557 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
1559 // unit_test[96] resetのテスト(SLAVE時)
1560 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1564 // unit_test[97] resetのテスト(SLAVE_STOP時)
1565 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1567 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE_STOP );
1571 // unit_test[98] resetのテスト(MASTER_STOP時)
1572 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1573 repli1.switch_to_master();
1574 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER_STOP );
1578 // unit_test[99] resetのテスト(MASTER時)
1579 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1581 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
1585 // unit_test[100] resetのテスト(未初期化)
1586 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1588 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
1592 // unit_test[101] resetのテスト(SINGLE時)
1593 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1594 get_string_stubmode = 1;
1595 get_int_stubmode = 1;
1597 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
1598 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
1602 get_string_stubmode = 0;
1603 get_int_stubmode = 0;
1606 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
1607 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
1609 // unit_test[102] resetのテスト(intervalが存在しない)
1610 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1611 get_int_stubmode = 1;
1615 // unit_test[103] resetのテスト(intervalが不正)
1616 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1617 get_int_stubmode = 101;
1621 get_int_stubmode = 0;
1622 // unit_test[104] resetのテスト(intervalが上限以上)
1623 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1624 get_int_table[0] = 10001; // "interval"
1628 // unit_test[105] resetのテスト(intervalが下限未満)
1629 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1630 get_int_table[0] = 9; // "interval"
1634 get_int_table[0] = 10000; // "interval"
1639 void replication_get_status_test( int proto ){
1640 get_string_stubmode = 0;
1641 get_int_stubmode = 0;
1642 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
1643 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
1644 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
1645 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
1646 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
1647 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
1648 get_int_table[0] = 10000; // "interval"
1649 get_int_table[1] = 64; // "cmponent_size_00"
1650 get_int_table[2] = 1; // "cmponent_size_01"
1651 get_int_table[3] = 200; // "cmponent_size_02"
1652 get_int_table[4] = 10; // "compulsorily_interval"
1654 l7vs::replication repli1;
1656 // unit_test[106] get_statusのテスト(未初期化)
1657 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1658 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
1660 // unit_test[107] get_statusのテスト(SLAVE時)
1661 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1662 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
1663 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
1665 // unit_test[108] get_statusのテスト(MASTER時)
1666 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1667 repli1.switch_to_master();
1668 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
1670 // unit_test[109] get_statusのテスト(MASTER_STOP時)
1671 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1673 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER_STOP );
1675 // unit_test[110] get_statusのテスト(SLAVE_STOP)
1676 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1677 repli1.switch_to_slave();
1678 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE_STOP );
1680 // unit_test[111] get_statusのテスト(SINGLE時)
1681 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1682 get_string_stubmode = 1;
1683 get_int_stubmode = 1;
1685 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
1686 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
1689 get_string_stubmode = 0;
1690 get_int_stubmode = 0;
1694 void replication_lock_test( int proto ){
1695 get_string_stubmode = 0;
1696 get_int_stubmode = 0;
1697 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
1698 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
1699 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
1700 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
1701 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
1702 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
1703 get_int_table[0] = 10000; // "interval"
1704 get_int_table[1] = 64; // "cmponent_size_00"
1705 get_int_table[2] = 1; // "cmponent_size_01"
1706 get_int_table[3] = 200; // "cmponent_size_02"
1707 get_int_table[4] = 10; // "compulsorily_interval"
1709 l7vs::replication_fake repli1;
1711 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
1712 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
1713 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
1715 // unit_test[112] lockのテスト(初期状態)
1716 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1717 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), false );
1718 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), false );
1719 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), false );
1721 // unit_test[113] lockのテスト("virtualservice")
1722 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1723 BOOST_CHECK_EQUAL( repli1.lock( "virtualservice" ), 0 );
1724 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), true );
1725 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), false );
1726 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), false );
1728 // unit_test[114] lockのテスト(再度"virtualservice")
1729 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1730 // BOOST_CHECK_EQUAL( repli1.lock( "virtualservice" ), 0 ); // 一度帰ってこなくなるのを確認したらオミット
1731 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), true );
1732 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), false );
1733 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), false );
1735 // unit_test[115] lockのテスト("chash")
1736 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1737 BOOST_CHECK_EQUAL( repli1.lock( "chash" ), 0 );
1738 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), true );
1739 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), true );
1740 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), false );
1742 // unit_test[116] lockのテスト(再度"chash")
1743 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1744 // BOOST_CHECK_EQUAL( repli1.lock( "chash" ), 0 ); // 一度帰ってこなくなるのを確認したらオミット
1745 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), true );
1746 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), true );
1747 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), false );
1749 // unit_test[117] lockのテスト("sslid")
1750 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1751 BOOST_CHECK_EQUAL( repli1.lock( "sslid" ), 0 );
1752 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), true );
1753 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), true );
1754 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), true );
1756 // unit_test[118] lockのテスト(再度"sslid")
1757 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1758 // BOOST_CHECK_EQUAL( repli1.lock( "sslid" ), 0 ); // 一度帰ってこなくなるのを確認したらオミット
1759 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), true );
1760 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), true );
1761 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), true );
1763 // unit_test[119] lockのテスト(不正なid)
1764 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1765 BOOST_CHECK_EQUAL( repli1.lock( "unknown" ), -1 );
1767 // unit_test[120] lockのテスト(他スレッド "virtualservice")
1768 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1770 boost::thread thread_item1( boost::bind ( &lock_thread, &repli1, "virtualservice" ) );
1771 BOOST_CHECK_EQUAL( locked_end, false );
1772 repli1.unlock( "virtualservice" );
1774 thread_item1.join();
1776 BOOST_CHECK_EQUAL( locked_end, true );
1777 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), true );
1779 // unit_test[121] lockのテスト(他スレッド "sslid")
1780 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1782 boost::thread thread_item2( boost::bind ( &lock_thread, &repli1, "chash" ) );
1783 BOOST_CHECK_EQUAL( locked_end, false );
1784 repli1.unlock( "chash" );
1786 thread_item2.join();
1788 BOOST_CHECK_EQUAL( locked_end, true );
1789 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), true );
1791 // unit_test[122] lockのテスト(他スレッド "sslid")
1792 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1794 boost::thread thread_item3( boost::bind ( &lock_thread, &repli1, "sslid" ) );
1795 BOOST_CHECK_EQUAL( locked_end, false );
1796 repli1.unlock( "sslid" );
1798 thread_item3.join();
1800 BOOST_CHECK_EQUAL( locked_end, true );
1801 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), true );
1804 repli1.unlock( "virtualservice" );
1805 repli1.unlock( "chash" );
1806 repli1.unlock( "sslid" );
1808 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), false );
1809 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), false );
1810 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), false );
1816 void replication_unlock_test( int proto ){
1817 get_string_stubmode = 0;
1818 get_int_stubmode = 0;
1819 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
1820 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
1821 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
1822 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
1823 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
1824 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
1825 get_int_table[0] = 10000; // "interval"
1826 get_int_table[1] = 64; // "cmponent_size_00"
1827 get_int_table[2] = 1; // "cmponent_size_01"
1828 get_int_table[3] = 200; // "cmponent_size_02"
1829 get_int_table[4] = 10; // "compulsorily_interval"
1831 l7vs::replication_fake repli1;
1833 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
1834 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
1835 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
1837 // unit_test[123] unlockのテスト(lock済み状態)
1838 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1839 BOOST_CHECK_EQUAL( repli1.lock( "virtualservice" ), 0 );
1840 BOOST_CHECK_EQUAL( repli1.lock( "chash" ), 0 );
1841 BOOST_CHECK_EQUAL( repli1.lock( "sslid" ), 0 );
1842 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), true );
1843 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), true );
1844 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), true );
1846 // unit_test[124] unlockのテスト("virtualservice")
1847 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1848 BOOST_CHECK_EQUAL( repli1.unlock( "virtualservice" ), 0 );
1849 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), false );
1850 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), true );
1851 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), true );
1853 // unit_test[125] unlockのテスト(再度"virtualservice")
1854 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1855 BOOST_CHECK_EQUAL( repli1.unlock( "virtualservice" ), 0 );
1856 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), false );
1857 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), true );
1858 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), true );
1860 // unit_test[126] unlockのテスト("chash")
1861 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1862 BOOST_CHECK_EQUAL( repli1.unlock( "chash" ), 0 );
1863 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), false );
1864 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), false );
1865 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), true );
1867 // unit_test[127] unlockのテスト(再度"chash")
1868 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1869 BOOST_CHECK_EQUAL( repli1.unlock( "chash" ), 0 );
1870 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), false );
1871 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), false );
1872 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), true );
1874 // unit_test[128] unlockのテスト("sslid")
1875 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1876 BOOST_CHECK_EQUAL( repli1.unlock( "sslid" ), 0 );
1877 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), false );
1878 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), false );
1879 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), false );
1881 // unit_test[129] unlockのテスト(再度"sslid")
1882 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1883 BOOST_CHECK_EQUAL( repli1.unlock( "sslid" ), 0 );
1884 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), false );
1885 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), false );
1886 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), false );
1888 // unit_test[130] unlockのテスト(不正なid)
1889 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1890 BOOST_CHECK_EQUAL( repli1.unlock( "unknown" ), -1 );
1896 void replication_refer_lock_mutex_test( int proto ){
1897 get_string_stubmode = 0;
1898 get_int_stubmode = 0;
1899 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
1900 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
1901 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
1902 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
1903 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
1904 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
1905 get_int_table[0] = 10000; // "interval"
1906 get_int_table[1] = 64; // "cmponent_size_00"
1907 get_int_table[2] = 1; // "cmponent_size_01"
1908 get_int_table[3] = 200; // "cmponent_size_02"
1909 get_int_table[4] = 10; // "compulsorily_interval"
1911 l7vs::replication_fake repli1;
1913 l7vs::replication::mutex_ptr mutex1, mutex2, mutex3, mutex4;
1915 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
1916 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
1917 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
1920 // unit_test[131] refer_lock_mutexのテスト("virtualservice")
1921 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1922 BOOST_CHECK_EQUAL( repli1.refer_lock_mutex( "virtualservice", mutex1 ), 0 );
1924 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), true );
1925 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), false );
1926 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), false );
1928 // unit_test[132] refer_lock_mutexのテスト(再度"virtualservice")
1929 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1930 BOOST_CHECK_EQUAL( repli1.refer_lock_mutex( "virtualservice", mutex1 ), 0 );
1931 // mutex1->lock(); // 一度帰ってこなくなるのを確認したらオミット
1932 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), true );
1933 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), false );
1934 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), false );
1936 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), false );
1938 // unit_test[133] refer_lock_mutexのテスト("chash")
1939 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1940 BOOST_CHECK_EQUAL( repli1.refer_lock_mutex( "chash", mutex2 ), 0 );
1942 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), false );
1943 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), true );
1944 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), false );
1946 // unit_test[134] refer_lock_mutexのテスト(再度"chash")
1947 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1948 BOOST_CHECK_EQUAL( repli1.refer_lock_mutex( "chash", mutex2 ), 0 );
1949 // mutex2->lock(); // 一度帰ってこなくなるのを確認したらオミット
1950 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), false );
1951 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), true );
1952 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), false );
1954 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), false );
1956 // unit_test[135] refer_lock_mutexのテスト("sslid")
1957 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1958 BOOST_CHECK_EQUAL( repli1.refer_lock_mutex( "sslid", mutex3 ), 0 );
1960 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), false );
1961 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), false );
1962 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), true );
1964 // unit_test[136] refer_lock_mutexのテスト(再度"sslid")
1965 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1966 BOOST_CHECK_EQUAL( repli1.refer_lock_mutex( "sslid", mutex3 ), 0 );
1967 // mutex3->lock(); // 一度帰ってこなくなるのを確認したらオミット
1968 BOOST_CHECK_EQUAL( repli1.locked( "virtualservice" ), false );
1969 BOOST_CHECK_EQUAL( repli1.locked( "chash" ), false );
1970 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), true );
1972 BOOST_CHECK_EQUAL( repli1.locked( "sslid" ), false );
1974 // unit_test[137] refer_lock_mutexのテスト(不正なid)
1975 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
1976 BOOST_CHECK_EQUAL( repli1.refer_lock_mutex( "unknown", mutex4 ), -1 );
1982 void replication_handle_send_test( int proto ){
1983 get_string_stubmode = 0;
1984 get_int_stubmode = 0;
1985 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
1986 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
1987 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
1988 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
1989 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
1990 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
1991 get_int_table[0] = 10000; // "interval"
1992 get_int_table[1] = 64; // "cmponent_size_00"
1993 get_int_table[2] = 1; // "cmponent_size_01"
1994 get_int_table[3] = 200; // "cmponent_size_02"
1995 get_int_table[4] = 10; // "compulsorily_interval"
1997 l7vs::replication repli1;
1999 get_int_table[1] = 1; // "cmponent_size_00"
2000 get_int_table[2] = 1; // "cmponent_size_01"
2001 get_int_table[3] = 1; // "cmponent_size_02"
2003 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
2005 // unit_test[138] send_thread&handle_sendのテスト(SLAVE時)
2006 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2007 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
2008 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
2013 ptr = repli1.pay_memory( "virtualservice", size );
2014 BOOST_CHECK( NULL != ptr );
2015 BOOST_CHECK_EQUAL( repli1.lock( "virtualservice" ), 0 );
2016 memset( ptr, '4', size * DATA_SIZE );
2017 repli1.unlock( "virtualservice" );
2019 ptr = repli1.pay_memory( "chash", size );
2020 BOOST_CHECK( NULL != ptr );
2021 BOOST_CHECK_EQUAL( repli1.lock( "chash" ), 0 );
2022 memset( ptr, '5', size * DATA_SIZE );
2023 repli1.unlock( "chash" );
2025 ptr = repli1.pay_memory( "sslid", size );
2026 BOOST_CHECK( NULL != ptr );
2027 BOOST_CHECK_EQUAL( repli1.lock( "sslid" ), 0 );
2028 memset( ptr, '6', size * DATA_SIZE );
2029 repli1.unlock( "sslid" );
2031 // unit_test[139] send_thread&handle_sendのテスト(SLAVE_STOP時)
2032 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2034 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE_STOP );
2036 // unit_test[140] send_thread&handle_sendのテスト(MASTER_STOP時)
2037 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2038 repli1.switch_to_master();
2040 receiver_end = false;
2041 boost::thread thread_item1( boost::bind ( &receiver_thread, recv_ip_table[proto] ) );
2043 // unit_test[141] send_thread&handle_sendのテスト(MASTER時)
2044 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2046 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
2047 while( !receiver_end );
2050 thread_item1.join();
2057 void replication_set_master_test( int proto ){
2058 get_string_stubmode = 0;
2059 get_int_stubmode = 0;
2060 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
2061 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
2062 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
2063 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
2064 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
2065 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
2066 get_int_table[0] = 10000; // "interval"
2067 get_int_table[1] = 64; // "cmponent_size_00"
2068 get_int_table[2] = 1; // "cmponent_size_01"
2069 get_int_table[3] = 200; // "cmponent_size_02"
2070 get_int_table[4] = 10; // "compulsorily_interval"
2072 l7vs::replication_fake repli1;
2074 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
2075 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
2076 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
2077 repli1.disable_send_thread();
2079 // unit_test[142] set_masterのテスト(SLAVE時)
2080 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2082 BOOST_CHECK_EQUAL( repli1.set_master_wrapper(), 0 );
2083 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE ); // switch_toではないのでSLAVEのまま
2084 BOOST_CHECK_EQUAL( repli1.set_slave_wrapper(), 0 ); // socket.cancel2重回避
2086 // unit_test[143] set_masterのテスト(ip_adrが不正)
2087 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2089 strcpy( get_string_table[0], "192:168:0:20" ); // "ip_addr"
2092 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
2093 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
2094 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
2096 BOOST_CHECK_EQUAL( repli1.set_master_wrapper(), 0 ); // set_masterの時点ではendpointを使用していない
2098 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
2104 void replication_set_slave_test( int proto ){
2105 get_string_stubmode = 0;
2106 get_int_stubmode = 0;
2107 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
2108 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
2109 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
2110 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
2111 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
2112 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
2113 get_int_table[0] = 10000; // "interval"
2114 get_int_table[1] = 64; // "cmponent_size_00"
2115 get_int_table[2] = 1; // "cmponent_size_01"
2116 get_int_table[3] = 200; // "cmponent_size_02"
2117 get_int_table[4] = 10; // "compulsorily_interval"
2119 l7vs::replication_fake repli1;
2121 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
2122 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
2123 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
2124 repli1.disable_send_thread();
2125 repli1.switch_to_master();
2126 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
2128 // unit_test[144] set_slaveのテスト(MASTER時)
2129 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2131 BOOST_CHECK_EQUAL( repli1.set_slave_wrapper(), 0 );
2132 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER ); // switch_toではないのでMASTERのまま
2133 repli1.switch_to_slave(); // 保険
2135 // unit_test[145] set_slaveのテスト(ip_adrが不正)
2136 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2138 strcpy( get_string_table[0], "192:168:0:20" ); // "ip_addr"
2139 // get_string_table[0] = "10.144.169.87"; // "ip_addr" 作成失敗だと0.0.0.0:0でbind成功してしまうので使えないIPで
2142 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
2143 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
2144 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
2146 // BOOST_CHECK_EQUAL( repli1.set_slave_wrapper(), -1 ); // 無理?
2148 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
2154 void replication_check_parameter_test( int proto ){
2155 get_string_stubmode = 0;
2156 get_int_stubmode = 0;
2157 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
2158 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
2159 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
2160 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
2161 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
2162 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
2163 get_int_table[0] = 10000; // "interval"
2164 get_int_table[1] = 64; // "cmponent_size_00"
2165 get_int_table[2] = 1; // "cmponent_size_01"
2166 get_int_table[3] = 200; // "cmponent_size_02"
2167 get_int_table[4] = 10; // "compulsorily_interval"
2169 l7vs::replication_fake repli1;
2171 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
2172 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
2173 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
2175 // unit_test[146] check_parameterのテスト(正常系)
2176 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2178 BOOST_CHECK_EQUAL( repli1.check_parameter_wrapper(), 0 ); // 異常系はinitializeにて評価済み
2184 void replication_getrpl_test( int proto ){
2185 get_string_stubmode = 0;
2186 get_int_stubmode = 0;
2187 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
2188 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
2189 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
2190 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
2191 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
2192 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
2193 get_int_table[0] = 10000; // "interval"
2194 get_int_table[1] = 64; // "cmponent_size_00"
2195 get_int_table[2] = 1; // "cmponent_size_01"
2196 get_int_table[3] = 200; // "cmponent_size_02"
2197 get_int_table[4] = 10; // "compulsorily_interval"
2199 l7vs::replication_fake repli1;
2201 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
2202 BOOST_CHECK_EQUAL( repli1.initialize(), 0 ); // param読み込みのため1回実行
2203 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
2207 // unit_test[147] getrplのテスト(正常系)
2208 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2210 BOOST_CHECK( NULL != repli1.getrpl_wrapper() ); // 異常系はinitializeにて評価済み
2211 repli1.releaserpl_wrapper();
2217 void replication_getcmp_test( int proto ){
2218 get_string_stubmode = 0;
2219 get_int_stubmode = 0;
2220 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
2221 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
2222 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
2223 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
2224 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
2225 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
2226 get_int_table[0] = 10000; // "interval"
2227 get_int_table[1] = 64; // "cmponent_size_00"
2228 get_int_table[2] = 1; // "cmponent_size_01"
2229 get_int_table[3] = 200; // "cmponent_size_02"
2230 get_int_table[4] = 10; // "compulsorily_interval"
2232 l7vs::replication_fake repli1;
2234 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
2235 BOOST_CHECK_EQUAL( repli1.initialize(), 0 ); // param読み込みのため1回実行
2236 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
2240 // unit_test[148] getcmpのテスト(正常系)
2241 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2243 BOOST_CHECK( NULL != repli1.getcmp_wrapper() ); // 異常系はinitializeにて評価済み
2244 repli1.releasecmp_wrapper();
2250 void replication_getsrf_test( int proto ){
2251 get_string_stubmode = 0;
2252 get_int_stubmode = 0;
2253 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
2254 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
2255 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
2256 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
2257 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
2258 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
2259 get_int_table[0] = 10000; // "interval"
2260 get_int_table[1] = 64; // "cmponent_size_00"
2261 get_int_table[2] = 1; // "cmponent_size_01"
2262 get_int_table[3] = 200; // "cmponent_size_02"
2263 get_int_table[4] = 10; // "compulsorily_interval"
2265 l7vs::replication_fake repli1;
2267 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
2268 BOOST_CHECK_EQUAL( repli1.initialize(), 0 ); // param読み込みのため1回実行
2269 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
2273 // unit_test[149] getsrfのテスト(正常系)
2274 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2276 BOOST_CHECK( NULL != repli1.getsrf_wrapper() ); // 異常系はinitializeにて評価済み
2277 repli1.releasesrf_wrapper();
2283 void replication_make_serial_test( int proto ){
2284 get_string_stubmode = 0;
2285 get_int_stubmode = 0;
2286 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
2287 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
2288 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
2289 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
2290 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
2291 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
2292 get_int_table[0] = 10000; // "interval"
2293 get_int_table[1] = 64; // "cmponent_size_00"
2294 get_int_table[2] = 1; // "cmponent_size_01"
2295 get_int_table[3] = 200; // "cmponent_size_02"
2296 get_int_table[4] = 10; // "compulsorily_interval"
2298 l7vs::replication_fake repli1;
2299 unsigned long long value1, value2;
2301 // unit_test[150] make_serialのテスト(正常系)
2302 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2304 value1 = repli1.make_serial_wrapper();
2305 BOOST_CHECK( 0 != value1 );
2307 // unit_test[151] make_serialのテスト(再実行)
2308 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2310 value2 = repli1.make_serial_wrapper();
2311 BOOST_CHECK( 0 != value1 );
2312 BOOST_CHECK( value1 != value2 );
2318 void replication_releaserpl_test( int proto ){
2319 get_string_stubmode = 0;
2320 get_int_stubmode = 0;
2321 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
2322 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
2323 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
2324 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
2325 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
2326 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
2327 get_int_table[0] = 10000; // "interval"
2328 get_int_table[1] = 64; // "cmponent_size_00"
2329 get_int_table[2] = 1; // "cmponent_size_01"
2330 get_int_table[3] = 200; // "cmponent_size_02"
2331 get_int_table[4] = 10; // "compulsorily_interval"
2333 l7vs::replication_fake repli1;
2335 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
2336 BOOST_CHECK_EQUAL( repli1.initialize(), 0 ); // param読み込みのため1回実行
2337 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
2341 // unit_test[152] releaserplのテスト(正常系)
2342 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2344 BOOST_CHECK( NULL != repli1.getrpl_wrapper() );
2345 BOOST_CHECK( NULL == repli1.releaserpl_wrapper() );
2351 void replication_releasecmp_test( int proto ){
2352 get_string_stubmode = 0;
2353 get_int_stubmode = 0;
2354 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
2355 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
2356 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
2357 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
2358 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
2359 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
2360 get_int_table[0] = 10000; // "interval"
2361 get_int_table[1] = 64; // "cmponent_size_00"
2362 get_int_table[2] = 1; // "cmponent_size_01"
2363 get_int_table[3] = 200; // "cmponent_size_02"
2364 get_int_table[4] = 10; // "compulsorily_interval"
2366 l7vs::replication_fake repli1;
2368 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
2369 BOOST_CHECK_EQUAL( repli1.initialize(), 0 ); // param読み込みのため1回実行
2370 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
2374 // unit_test[153] releasecmpのテスト(正常系)
2375 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2377 BOOST_CHECK( NULL != repli1.getcmp_wrapper() );
2378 BOOST_CHECK( NULL == repli1.releasecmp_wrapper() );
2384 void replication_releasesrf_test( int proto ){
2385 get_string_stubmode = 0;
2386 get_int_stubmode = 0;
2387 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
2388 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
2389 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
2390 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
2391 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
2392 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
2393 get_int_table[0] = 10000; // "interval"
2394 get_int_table[1] = 64; // "cmponent_size_00"
2395 get_int_table[2] = 1; // "cmponent_size_01"
2396 get_int_table[3] = 200; // "cmponent_size_02"
2397 get_int_table[4] = 10; // "compulsorily_interval"
2399 l7vs::replication_fake repli1;
2401 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
2402 BOOST_CHECK_EQUAL( repli1.initialize(), 0 ); // param読み込みのため1回実行
2403 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
2407 // unit_test[154] releasesrfのテスト(正常系)
2408 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2410 BOOST_CHECK( NULL != repli1.getsrf_wrapper() );
2411 BOOST_CHECK( NULL == repli1.releasesrf_wrapper() );
2417 void replication_finalize_test( int proto ){
2418 get_string_stubmode = 0;
2419 get_int_stubmode = 0;
2420 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
2421 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
2422 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
2423 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
2424 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
2425 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
2426 get_int_table[0] = 10000; // "interval"
2427 get_int_table[1] = 64; // "cmponent_size_00"
2428 get_int_table[2] = 1; // "cmponent_size_01"
2429 get_int_table[3] = 200; // "cmponent_size_02"
2430 get_int_table[4] = 10; // "compulsorily_interval"
2432 l7vs::replication repli1;
2434 // unit_test[155] finalizeのテスト(未初期化)
2435 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2436 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
2438 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
2440 // unit_test[156] finalizeのテスト(SLAVE時)
2441 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2442 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
2443 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
2445 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
2447 // unit_test[157] finalizeのテスト(MASTER時)
2448 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2449 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
2450 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
2451 repli1.switch_to_master();
2452 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
2454 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
2456 // unit_test[158] finalizeのテスト(MASTER_STOP時)
2457 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2458 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
2459 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
2460 repli1.switch_to_master();
2461 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
2463 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER_STOP );
2465 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
2467 // unit_test[159] finalizeのテスト(SLAVE_STOP)
2468 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2469 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
2470 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
2472 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE_STOP );
2474 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
2476 // unit_test[160] finalizeのテスト(SINGLE時)
2477 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2478 get_string_stubmode = 1;
2479 get_int_stubmode = 1;
2480 BOOST_CHECK_EQUAL( repli1.initialize(), -1 );
2481 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SINGLE );
2483 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
2485 get_string_stubmode = 0;
2486 get_int_stubmode = 0;
2491 void replication_handle_receive_test( int proto ){
2492 get_string_stubmode = 0;
2493 get_int_stubmode = 0;
2494 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
2495 strcpy( get_string_table[1], REPLICATION_PORT ); // "service_name"
2496 strcpy( get_string_table[2], recv_ip_table[proto] ); // "recv_ip_addr"
2497 strcpy( get_string_table[3], "virtualservice" ); // "cmponent_id_00"
2498 strcpy( get_string_table[4], "chash" ); // "cmponent_id_01"
2499 strcpy( get_string_table[5], "sslid" ); // "cmponent_id_02"
2500 get_int_table[0] = 10000; // "interval"
2501 get_int_table[1] = 64; // "cmponent_size_00"
2502 get_int_table[2] = 1; // "cmponent_size_01"
2503 get_int_table[3] = 200; // "cmponent_size_02"
2504 get_int_table[4] = 10; // "compulsorily_interval"
2506 l7vs::replication repli1;
2508 //get_string_table[0] = TARGET_HOSTNAME; // "ip_addr"
2509 strcpy( get_string_table[0], target_ip_table[proto] ); // "ip_addr"
2510 get_int_table[1] = 1; // "cmponent_size_00"
2511 get_int_table[2] = 1; // "cmponent_size_01"
2512 get_int_table[3] = 1; // "cmponent_size_02"
2514 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_OUT );
2516 BOOST_CHECK_EQUAL( repli1.initialize(), 0 );
2517 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
2519 // unit_test[161] handle_receiveのテスト(正常系)
2520 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2523 boost::thread thread_item( boost::bind ( &sender2_thread, target_ip_table[proto] ) );
2528 repli1.dump_memory();
2531 // unit_test[162] handle_receiveのテスト(MASTER → SLAVE時)
2532 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2537 ptr = repli1.pay_memory( "virtualservice", size );
2538 BOOST_CHECK( NULL != ptr );
2539 BOOST_CHECK_EQUAL( repli1.lock( "virtualservice" ), 0 );
2540 memset( ptr, 0xFF, size * DATA_SIZE );
2541 repli1.unlock( "virtualservice" );
2543 ptr = repli1.pay_memory( "chash", size );
2544 BOOST_CHECK( NULL != ptr );
2545 BOOST_CHECK_EQUAL( repli1.lock( "chash" ), 0 );
2546 memset( ptr, 0xFF, size * DATA_SIZE );
2547 repli1.unlock( "chash" );
2549 ptr = repli1.pay_memory( "sslid", size );
2550 BOOST_CHECK( NULL != ptr );
2551 BOOST_CHECK_EQUAL( repli1.lock( "sslid" ), 0 );
2552 memset( ptr, 0xFF, size * DATA_SIZE );
2553 repli1.unlock( "sslid" );
2555 repli1.switch_to_master();
2556 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_MASTER );
2559 receiver_end = false;
2560 boost::thread thread_item( boost::bind ( &receiver_thread, recv_ip_table[proto] ) );
2562 while( !receiver_end ){
2563 global_receive_io.poll();
2569 repli1.switch_to_slave();
2570 BOOST_CHECK_EQUAL( repli1.get_status(), l7vs::replication::REPLICATION_SLAVE );
2573 boost::thread thread_item( boost::bind ( &sender2_thread, target_ip_table[proto] ) );
2578 repli1.dump_memory();
2582 // unit_test[163] handle_receiveのテスト(replication対replication)
2583 BOOST_MESSAGE( boost::format( "unit_test[%d]" ) % ++count );
2585 boost::thread thread_item2( boost::bind ( &sender_thread ) );
2589 thread_item2.join();
2591 repli1.dump_memory();
2594 get_int_table[1] = 64; // "cmponent_size_00"
2595 get_int_table[2] = 1; // "cmponent_size_01"
2596 get_int_table[3] = 200; // "cmponent_size_02"
2601 test_suite* init_unit_test_suite( int argc, char* argv[] ){
2602 l7vs::Logger logger;
2603 l7vs::Parameter parameter;
2607 // create unit test suite
2608 test_suite* ts = BOOST_TEST_SUITE( "replication_test" );
2610 int protos[] = { 0, 1 };
2612 // add test case to test suite
2613 ts->add( BOOST_PARAM_TEST_CASE( &replication_initialize_test, protos, protos+2 ) );
2614 ts->add( BOOST_PARAM_TEST_CASE( &replication_switch_to_master_test, protos, protos+2 ) );
2615 ts->add( BOOST_PARAM_TEST_CASE( &replication_switch_to_slave_test, protos, protos+2 ) );
2616 ts->add( BOOST_PARAM_TEST_CASE( &replication_pay_memory_test, protos, protos+2 ) );
2617 ts->add( BOOST_PARAM_TEST_CASE( &replication_dump_memory_test, protos, protos+2 ) );
2618 ts->add( BOOST_PARAM_TEST_CASE( &replication_start_test, protos, protos+2 ) );
2619 ts->add( BOOST_PARAM_TEST_CASE( &replication_stop_test, protos, protos+2 ) );
2621 ts->add( BOOST_PARAM_TEST_CASE( &replication_force_replicate_test, protos, protos+2 ) );
2623 ts->add( BOOST_PARAM_TEST_CASE( &replication_reset_test, protos, protos+2 ) );
2624 ts->add( BOOST_PARAM_TEST_CASE( &replication_get_status_test, protos, protos+2 ) );
2625 ts->add( BOOST_PARAM_TEST_CASE( &replication_lock_test, protos, protos+2 ) );
2626 ts->add( BOOST_PARAM_TEST_CASE( &replication_unlock_test, protos, protos+2 ) );
2627 ts->add( BOOST_PARAM_TEST_CASE( &replication_refer_lock_mutex_test, protos, protos+2 ) );
2629 ts->add( BOOST_PARAM_TEST_CASE( &replication_handle_send_test, protos, protos+2 ) );
2630 ts->add( BOOST_PARAM_TEST_CASE( &replication_set_master_test, protos, protos+2 ) );
2631 ts->add( BOOST_PARAM_TEST_CASE( &replication_set_slave_test, protos, protos+2 ) );
2632 ts->add( BOOST_PARAM_TEST_CASE( &replication_check_parameter_test, protos, protos+2 ) );
2633 ts->add( BOOST_PARAM_TEST_CASE( &replication_getrpl_test, protos, protos+2 ) );
2634 ts->add( BOOST_PARAM_TEST_CASE( &replication_getcmp_test, protos, protos+2 ) );
2635 ts->add( BOOST_PARAM_TEST_CASE( &replication_getsrf_test, protos, protos+2 ) );
2636 ts->add( BOOST_PARAM_TEST_CASE( &replication_make_serial_test, protos, protos+2 ) );
2637 ts->add( BOOST_PARAM_TEST_CASE( &replication_releaserpl_test, protos, protos+2 ) );
2638 ts->add( BOOST_PARAM_TEST_CASE( &replication_releasecmp_test, protos, protos+2 ) );
2639 ts->add( BOOST_PARAM_TEST_CASE( &replication_releasesrf_test, protos, protos+2 ) );
2640 ts->add( BOOST_PARAM_TEST_CASE( &replication_finalize_test, protos, protos+2 ) );
2642 ts->add( BOOST_PARAM_TEST_CASE( &replication_handle_receive_test, protos, protos+2 ) );
2644 framework::master_test_suite().add( ts );