3 #include <boost/asio.hpp>
4 #include <boost/thread/thread.hpp>
5 #include <boost/function_equal.hpp>
6 #include <boost/test/included/unit_test.hpp>
8 #include "../logger_stb/logger_implement_access.h"
9 #include "../logger_stb/logger.h"
10 #include "dummyclass.h"
11 #include "tcp_socket_option.h"
12 #include "tcp_session.h"
13 #include "tcp_session.cpp"
14 #include "lockfree_queue.h"
15 #include "../../../src/data_buff_base.cpp"
16 #include "../../../src/tcp_data.cpp"
17 #include "../../../src/tcp_realserver_connect_socket_list.cpp"
20 using namespace boost::unit_test_framework;
22 #define UP_THREAD_ALIVE std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0001)
23 #define DOWN_THREAD_ALIVE std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0002)
24 #define UP_THREAD_ACTIVE std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0004)
25 #define DOWN_THREAD_ACTIVE std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0008)
26 #define UP_THREAD_LOCK std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0010)
27 #define DOWN_THREAD_LOCK std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0020)
30 #define DUMMY_SERVER_IP "127.0.0.1"
31 #define DUMMY_SERVER_IPV6 "::1"
32 #define DUMMY_SERVER_PORT 7000
34 #define CLIENT_CTX_LOAD_VERIFY_FILE "ca.pem"
35 #define SERVER_CTX_CERTIFICATE_CHAIN_FILE "server.pem"
36 #define SERVER_CTX_PRIVATE_KEY_FILE "server.pem"
37 #define SERVER_CTX_TMP_DH_FILE "dh512.pem"
40 // mutex lock test class
41 class mutex_lock_test : public l7vs::tcp_session{
43 boost::thread::id befor_thread_id;
44 boost::thread::id after_thread_id;
45 l7vs::wr_mutex* pTest_mutex;
46 boost::function< void(void) > test_func;
49 l7vs::virtualservice_tcp& vs,
50 boost::asio::io_service& session_io,
51 l7vs::tcp_socket_option_info& set_socket_option,
52 boost::asio::ip::tcp::endpoint listen_endpoint,
54 boost::asio::ssl::context& set_ssl_context,
55 bool set_ssl_cache_flag,
56 int set_ssl_handshake_time_out,
57 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
64 set_ssl_handshake_time_out,
78 if(pTest_mutex == NULL){
79 std::cout << "Test code Error!! pTest_mutex = NULL" << std::endl;
81 pTest_mutex->wrlock();
86 if(pTest_mutex == NULL){
87 std::cout << "Test code Error!! pTest_mutex = NULL" << std::endl;
89 pTest_mutex->unlock();
93 void set_protocol_module(l7vs::protocol_module_base* test_protocol_module){
94 protocol_module = test_protocol_module;
98 /* bool mutex_trylock(){
99 return pTest_mutex->try_lock();
102 boost::mutex test_thread_wait;
105 boost::mutex::scoped_lock scope_lock(test_thread_wait);
110 //-------------is_thread_wait test---------------------------------
111 void set_is_thread_wait_test(){
112 //pTest_mutex = &thread_state_update_mutex;
113 pTest_mutex2 = &downthread_status_mutex;
114 test_func = boost::bind(&mutex_lock_test::is_thread_wait,this);
117 void is_thread_wait(){
118 befor_thread_id = boost::this_thread::get_id();
119 l7vs::tcp_session::is_thread_wait();
120 after_thread_id = boost::this_thread::get_id();
124 //-------------down_thread_exit test---------------------------------
125 void set_down_thread_exit_test(){
126 pTest_mutex = &exit_flag_update_mutex;
127 test_func = boost::bind(&mutex_lock_test::down_thread_exit,this);
130 void down_thread_exit(){
131 befor_thread_id = boost::this_thread::get_id();
132 l7vs::tcp_session::down_thread_exit(l7vs::tcp_session::LOCAL_PROC);
133 after_thread_id = boost::this_thread::get_id();
136 //-------------up_thread_exit test---------------------------------
137 void set_up_thread_exit_test(){
138 pTest_mutex = &exit_flag_update_mutex;
139 test_func = boost::bind(&mutex_lock_test::up_thread_exit,this);
142 void up_thread_exit(){
143 befor_thread_id = boost::this_thread::get_id();
144 l7vs::tcp_session::up_thread_exit(l7vs::tcp_session::LOCAL_PROC);
145 after_thread_id = boost::this_thread::get_id();
148 //-------------up_thread_client_disconnetc_event test---------------------------------
149 void set_up_thread_client_disconnect_event_test(){
150 pTest_mutex = &module_function_client_disconnect_mutex;
151 test_func = boost::bind(&mutex_lock_test::up_thread_client_disconnect_event,this);
154 void up_thread_client_disconnect_event(){
155 befor_thread_id = boost::this_thread::get_id();
156 l7vs::tcp_session::up_thread_client_disconnect_event(l7vs::tcp_session::LOCAL_PROC);
157 after_thread_id = boost::this_thread::get_id();
160 //-------------down_thread_client_disconnetc_event test---------------------------------
161 void set_down_thread_client_disconnect_event_test(){
162 pTest_mutex = &module_function_client_disconnect_mutex;
163 test_func = boost::bind(&mutex_lock_test::down_thread_client_disconnect_event,this);
166 void down_thread_client_disconnect_event(){
167 befor_thread_id = boost::this_thread::get_id();
168 l7vs::tcp_session::down_thread_client_disconnect_event(l7vs::tcp_session::LOCAL_PROC);
169 after_thread_id = boost::this_thread::get_id();
172 //-------------up_thread_realserver_disconnetc_event test---------------------------------
173 void set_up_thread_realserver_disconnect_event_test(){
174 pTest_mutex = &module_function_realserver_disconnect_mutex;
175 test_func = boost::bind(&mutex_lock_test::up_thread_realserver_disconnect_event,this);
178 void up_thread_realserver_disconnect_event(){
179 befor_thread_id = boost::this_thread::get_id();
180 l7vs::tcp_session::up_thread_realserver_disconnect_event(l7vs::tcp_session::LOCAL_PROC);
181 after_thread_id = boost::this_thread::get_id();
184 //-------------down_thread_realserver_disconnetc_event test---------------------------------
185 void set_down_thread_realserver_disconnect_event_test(){
186 pTest_mutex = &module_function_realserver_disconnect_mutex;
187 test_func = boost::bind(&mutex_lock_test::down_thread_realserver_disconnect_event,this);
190 void down_thread_realserver_disconnect_event(){
191 befor_thread_id = boost::this_thread::get_id();
192 l7vs::tcp_session::down_thread_realserver_disconnect_event(l7vs::tcp_session::LOCAL_PROC);
193 after_thread_id = boost::this_thread::get_id();
196 //-------------up_thread_sorryserver_disconnetc_event test---------------------------------
197 void set_up_thread_sorryserver_disconnect_event_test(){
198 pTest_mutex = &module_function_sorryserver_disconnect_mutex;
199 test_func = boost::bind(&mutex_lock_test::up_thread_sorryserver_disconnect_event,this);
202 void up_thread_sorryserver_disconnect_event(){
203 befor_thread_id = boost::this_thread::get_id();
204 l7vs::tcp_session::up_thread_sorryserver_disconnect_event(l7vs::tcp_session::LOCAL_PROC);
205 after_thread_id = boost::this_thread::get_id();
208 //-------------down_thread_sorryserver_disconnetc_event test---------------------------------
209 void set_down_thread_sorryserver_disconnect_event_test(){
210 pTest_mutex = &module_function_sorryserver_disconnect_mutex;
211 test_func = boost::bind(&mutex_lock_test::down_thread_sorryserver_disconnect_event,this);
214 void down_thread_sorryserver_disconnect_event(){
215 befor_thread_id = boost::this_thread::get_id();
216 l7vs::tcp_session::down_thread_sorryserver_disconnect_event(l7vs::tcp_session::LOCAL_PROC);
217 after_thread_id = boost::this_thread::get_id();
220 //-------------up_thread_sorry_enable_event test---------------------------------
221 void set_up_thread_sorry_enable_event_test(){
222 pTest_mutex = &module_function_sorry_enable_mutex;
223 test_func = boost::bind(&mutex_lock_test::up_thread_sorry_enable_event,this);
226 void up_thread_sorry_enable_event(){
227 befor_thread_id = boost::this_thread::get_id();
228 l7vs::tcp_session::up_thread_sorry_enable_event(l7vs::tcp_session::LOCAL_PROC);
229 after_thread_id = boost::this_thread::get_id();
232 //-------------up_thread_sorry_disable_event test---------------------------------
233 void set_up_thread_sorry_disable_event_test(){
234 pTest_mutex = &module_function_sorry_disable_mutex;
235 test_func = boost::bind(&mutex_lock_test::up_thread_sorry_disable_event,this);
238 void up_thread_sorry_disable_event(){
239 befor_thread_id = boost::this_thread::get_id();
240 l7vs::tcp_session::up_thread_sorry_disable_event(l7vs::tcp_session::LOCAL_PROC);
241 after_thread_id = boost::this_thread::get_id();
243 //-------------down_thread_sorry_enable_event test---------------------------------
244 void set_down_thread_sorry_enable_event_test(){
245 pTest_mutex = &module_function_sorry_enable_mutex;
246 test_func = boost::bind(&mutex_lock_test::down_thread_sorry_enable_event,this);
249 void down_thread_sorry_enable_event(){
250 befor_thread_id = boost::this_thread::get_id();
251 l7vs::tcp_session::down_thread_sorry_enable_event(l7vs::tcp_session::LOCAL_PROC);
252 after_thread_id = boost::this_thread::get_id();
255 //-------------down_thread_sorry_disable_event test---------------------------------
256 void set_down_thread_sorry_disable_event_test(){
257 pTest_mutex = &module_function_sorry_disable_mutex;
258 test_func = boost::bind(&mutex_lock_test::down_thread_sorry_disable_event,this);
261 void down_thread_sorry_disable_event(){
262 befor_thread_id = boost::this_thread::get_id();
263 l7vs::tcp_session::down_thread_sorry_disable_event(l7vs::tcp_session::LOCAL_PROC);
264 after_thread_id = boost::this_thread::get_id();
267 //-------------up_thread_client_respond_event test---------------------------------
268 void set_up_thread_client_respond_event_test(){
269 pTest_mutex = &module_function_response_send_inform_mutex;
270 test_func = boost::bind(&mutex_lock_test::up_thread_client_respond_event,this);
273 void up_thread_client_respond_event(){
274 befor_thread_id = boost::this_thread::get_id();
275 l7vs::tcp_session::up_thread_client_respond_event(l7vs::tcp_session::LOCAL_PROC);
276 after_thread_id = boost::this_thread::get_id();
279 //-------------down_thread_client_respond_event test---------------------------------
280 void set_down_thread_client_respond_event_test(){
281 pTest_mutex = &module_function_response_send_inform_mutex;
282 test_func = boost::bind(&mutex_lock_test::down_thread_client_respond_event,this);
285 void down_thread_client_respond_event(){
286 befor_thread_id = boost::this_thread::get_id();
287 l7vs::tcp_session::down_thread_client_respond_event(l7vs::tcp_session::LOCAL_PROC);
288 after_thread_id = boost::this_thread::get_id();
292 //-------------thread_state_update test---------------------------------
293 void set_thread_state_update_test(){
294 pTest_mutex = &thread_state_update_mutex;
295 test_func = boost::bind(&mutex_lock_test::thread_state_update,this);
298 void thread_state_update(){
299 befor_thread_id = boost::this_thread::get_id();
300 l7vs::tcp_session::thread_state_update(UP_THREAD_ALIVE,true);
301 after_thread_id = boost::this_thread::get_id();
305 //-------------handle_ssl_handshake_timer test---------------------------------
306 void set_handle_ssl_handshake_timer_test(){
307 pTest_mutex = &ssl_handshake_time_out_flag_mutex;
308 test_func = boost::bind(&mutex_lock_test::handle_ssl_handshake_timer,this);
311 void handle_ssl_handshake_timer(){
312 befor_thread_id = boost::this_thread::get_id();
313 boost::system::error_code ec;
314 l7vs::tcp_session::handle_ssl_handshake_timer(ec);
315 after_thread_id = boost::this_thread::get_id();
319 // dummy mirror server
320 #define DUMMY_SERVER_IP "127.0.0.1"
321 #define DUMMY_SERVER_PORT 7000
322 class test_mirror_server{
328 bool breq_close_wait_flag;
330 bool bdisconnect_flag;
331 boost::asio::ip::tcp::endpoint accept_end;
332 boost::asio::ip::tcp::endpoint connect_end;
337 test_mirror_server() :
340 breq_acc_flag(false),
341 breq_close_wait_flag(false),
342 bconnect_flag(false),
343 bdisconnect_flag(false),
344 accept_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT),
345 connect_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT),
351 ~test_mirror_server(){
361 std::cout << "dummy mirror server run start!" << std::endl;
364 bconnect_flag = false;
365 bdisconnect_flag = false;
366 boost::asio::io_service io;
367 boost::asio::ip::tcp::acceptor acc(io,accept_end);
368 boost::system::error_code ec;
370 boost::array<char,MAX_BUFFER_SIZE> buf;
378 boost::asio::ip::tcp::socket con(io);
383 std::cout << "dummy mirror server accept NG!" << std::endl;
386 connect_end = con.remote_endpoint();
387 std::cout << "dummy mirror server accept OK! from " << connect_end << std::endl;
389 breq_acc_flag = false;
392 bconnect_flag = true;
394 for(int i = 0; i < req_recv_cnt ;i++){
395 while(!brecv_triger){
399 brecv_triger = false;
404 receive_size = con.read_some(boost::asio::buffer(buf,MAX_BUFFER_SIZE),ec);
407 if(ec == boost::asio::error::eof || ec == boost::asio::error::connection_reset){
408 std::cout << "dummy mirror server detect client disconnect!" << std::endl;
409 bdisconnect_flag = true;
411 std::cout << "dummy mirror server receive NG!" << std::endl;
414 if(receive_size > 0){
416 con.write_some(boost::asio::buffer(buf,receive_size),ec);
418 std::cout << "dummy mirror server send NG!" << std::endl;
424 std::cout << "dummy mirror server connection close wait start" << std::endl;
425 while(breq_close_wait_flag){
428 std::cout << "dummy mirror server connection close wait end" << std::endl;
438 std::cout << "dummy mirror server run end!" << std::endl;
446 test_client(boost::asio::io_service& io_service, boost::asio::ssl::context& context) :
447 my_socket(io_service,context){
454 //! socket connect mutex
455 connect_mutex.wrlock();
456 //! socket handshake mutex
457 handshake_mutex.wrlock();
458 //! socket read mutex
460 //! socket write mutex
461 write_mutex.wrlock();
462 //! socket close mutex
463 close_mutex.wrlock();
467 void connect_close_only_test_run(){
468 // dummy client start
472 l7vs::rw_scoped_lock scope_lock(connect_mutex);
481 l7vs::rw_scoped_lock scope_lock(close_mutex);
486 void handshake_test_run(){
487 // dummy client start
491 l7vs::rw_scoped_lock scope_lock(connect_mutex);
500 l7vs::rw_scoped_lock scope_lock(handshake_mutex);
502 if(!handshake_test()){
509 l7vs::rw_scoped_lock scope_lock(close_mutex);
517 boost::system::error_code ec;
518 std::cout << "dummy client connect try" << std::endl;
519 boost::asio::ip::tcp::endpoint connect_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
520 my_socket.lowest_layer().connect(connect_end,ec);
523 std::cout << "dummy client connect Error!" << std::endl;
524 std::cout << ec << std::endl;
527 std::cout << "dummy client connect OK" << std::endl;
531 bool handshake_test(){
532 boost::system::error_code ec;
533 std::cout << "dummy client handshake try" << std::endl;
534 my_socket.handshake(boost::asio::ssl::stream_base::client, ec);
537 std::cout << "dummy client handshake Error!" << std::endl;
538 std::cout << ec << std::endl;
541 std::cout << "dummy client handshake OK" << std::endl;
547 boost::system::error_code ec;
548 std::cout << "dummy client write try" << std::endl;
549 std::size_t write_size = my_socket.write_some(boost::asio::buffer(data_buff.data() + send_data_size,receive_data_size - send_data_size), ec);
552 std::cout << "dummy client send Error!" << std::endl;
553 std::cout << ec << std::endl;
556 send_data_size += write_size;
557 std::cout << "dummy client send OK [" << send_data_size << "]" << std::endl;
562 boost::system::error_code ec;
563 std::cout << "dummy client read try" << std::endl;
564 std::size_t read_size = my_socket.read_some(boost::asio::buffer(data_buff.data() + receive_data_size,MAX_BUFFER_SIZE), ec);
567 std::cout << "dummy client receive Error!" << std::endl;
568 std::cout << ec << std::endl;
571 receive_data_size += read_size;
572 std::cout << "dummy client receive OK [" << receive_data_size << "]" << std::endl;
577 boost::system::error_code ec;
578 std::cout << "dummy client close try" << std::endl;
579 my_socket.lowest_layer().close(ec);
582 std::cout << "dummy client close Error!" << std::endl;
583 std::cout << ec << std::endl;
586 std::cout << "dummy client close OK" << std::endl;
589 boost::asio::ssl::stream<boost::asio::ip::tcp::socket> my_socket;
590 boost::array<char,MAX_BUFFER_SIZE> data_buff;
591 std::size_t receive_data_size;
592 std::size_t send_data_size;
594 //! socket connect mutex
595 l7vs::wr_mutex connect_mutex;
596 //! socket handshake mutex
597 l7vs::wr_mutex handshake_mutex;
598 //! socket read mutex
599 l7vs::wr_mutex read_mutex;
600 //! socket write mutex
601 l7vs::wr_mutex write_mutex;
602 //! socket close mutex
603 l7vs::wr_mutex close_mutex;
612 std::string get_password() const{
613 std::cout << "call get_password" << std::endl;
619 // module event map test base class
620 class module_event_map_test_base_class : public l7vs::tcp_session{
623 std::pair<l7vs::protocol_module_base::EVENT_TAG, UP_THREAD_FUNC_TYPE_TAG> up_module_map_test_data[13];
624 std::pair<UP_THREAD_FUNC_TYPE_TAG , boost::function< void(const l7vs::tcp_session::TCP_PROCESS_TYPE_TAG) > > up_fuc_map_test_data[13];
625 std::pair<l7vs::protocol_module_base::EVENT_TAG, DOWN_THREAD_FUNC_TYPE_TAG> down_module_map_test_data[7];
626 std::pair<DOWN_THREAD_FUNC_TYPE_TAG , boost::function< void(const l7vs::tcp_session::TCP_PROCESS_TYPE_TAG) > > down_fuc_map_test_data[7];
628 // module_event_map_test_base_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){
629 module_event_map_test_base_class(
630 l7vs::virtualservice_tcp& vs,
631 boost::asio::io_service& session_io,
632 l7vs::tcp_socket_option_info& set_socket_option,
633 boost::asio::ip::tcp::endpoint listen_endpoint,
635 boost::asio::ssl::context& set_ssl_context,
636 bool set_ssl_cache_flag,
637 int set_ssl_handshake_time_out,
638 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
645 set_ssl_handshake_time_out,
649 boost::function< void(const l7vs::tcp_session::TCP_PROCESS_TYPE_TAG) > func;
652 up_thread_module_event_map.clear();
653 // up_thread_function_map.clear();
656 up_module_map_test_data[index].first = l7vs::protocol_module_base::ACCEPT;
657 up_module_map_test_data[index].second = l7vs::tcp_session::UP_FUNC_CLIENT_ACCEPT;
658 up_fuc_map_test_data[index].first = up_module_map_test_data[index].second;
659 up_fuc_map_test_data[index].second = boost::bind(&module_event_map_test_base_class::test_UP_FUNC_CLIENT_ACCEPT,this,_1);
660 up_thread_function_array[up_fuc_map_test_data[index].first] = up_fuc_map_test_data[index];
663 up_module_map_test_data[index].first = l7vs::protocol_module_base::CLIENT_DISCONNECT;
664 up_module_map_test_data[index].second = l7vs::tcp_session::UP_FUNC_CLIENT_DISCONNECT;
665 up_fuc_map_test_data[index].first = up_module_map_test_data[index].second;
666 up_fuc_map_test_data[index].second = boost::bind(&module_event_map_test_base_class::test_UP_FUNC_CLIENT_DISCONNECT,this,_1);
667 up_thread_function_array[up_fuc_map_test_data[index].first] = up_fuc_map_test_data[index];
670 up_module_map_test_data[index].first = l7vs::protocol_module_base::CLIENT_RECV;
671 up_module_map_test_data[index].second = l7vs::tcp_session::UP_FUNC_CLIENT_RECEIVE;
672 up_fuc_map_test_data[index].first = up_module_map_test_data[index].second;
673 up_fuc_map_test_data[index].second = boost::bind(&module_event_map_test_base_class::test_UP_FUNC_CLIENT_RECEIVE,this,_1);
674 up_thread_function_array[up_fuc_map_test_data[index].first] = up_fuc_map_test_data[index];
677 up_module_map_test_data[index].first = l7vs::protocol_module_base::CLIENT_RESPONSE_SEND;
678 up_module_map_test_data[index].second = l7vs::tcp_session::UP_FUNC_CLIENT_RESPOND_SEND;
679 up_fuc_map_test_data[index].first = up_module_map_test_data[index].second;
680 up_fuc_map_test_data[index].second = boost::bind(&module_event_map_test_base_class::test_UP_FUNC_CLIENT_RESPOND_SEND,this,_1);
681 up_thread_function_array[up_fuc_map_test_data[index].first] = up_fuc_map_test_data[index];
684 up_module_map_test_data[index].first = l7vs::protocol_module_base::REALSERVER_SELECT;
685 up_module_map_test_data[index].second = l7vs::tcp_session::UP_FUNC_REALSERVER_GET_DEST_EVENT;
686 up_fuc_map_test_data[index].first = up_module_map_test_data[index].second;
687 up_fuc_map_test_data[index].second = boost::bind(&module_event_map_test_base_class::test_UP_FUNC_REALSERVER_GET_DEST_EVENT,this,_1);
688 up_thread_function_array[up_fuc_map_test_data[index].first] = up_fuc_map_test_data[index];
691 up_module_map_test_data[index].first = l7vs::protocol_module_base::REALSERVER_CONNECT;
692 up_module_map_test_data[index].second = l7vs::tcp_session::UP_FUNC_REALSERVER_CONNECT;
693 up_fuc_map_test_data[index].first = up_module_map_test_data[index].second;
694 up_fuc_map_test_data[index].second = boost::bind(&module_event_map_test_base_class::test_UP_FUNC_REALSERVER_CONNECT,this,_1);
695 up_thread_function_array[up_fuc_map_test_data[index].first] = up_fuc_map_test_data[index];
698 up_module_map_test_data[index].first = l7vs::protocol_module_base::REALSERVER_SEND;
699 up_module_map_test_data[index].second = l7vs::tcp_session::UP_FUNC_REALSERVER_SEND;
700 up_fuc_map_test_data[index].first = up_module_map_test_data[index].second;
701 up_fuc_map_test_data[index].second = boost::bind(&module_event_map_test_base_class::test_UP_FUNC_REALSERVER_SEND,this,_1);
702 up_thread_function_array[up_fuc_map_test_data[index].first] = up_fuc_map_test_data[index];
705 up_module_map_test_data[index].first = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
706 up_module_map_test_data[index].second = l7vs::tcp_session::UP_FUNC_REALSERVER_ALL_DISCONNECT;
707 up_fuc_map_test_data[index].first = up_module_map_test_data[index].second;
708 up_fuc_map_test_data[index].second = boost::bind(&module_event_map_test_base_class::test_UP_FUNC_REALSERVER_ALL_DISCONNECT,this,_1);
709 up_thread_function_array[up_fuc_map_test_data[index].first] = up_fuc_map_test_data[index];
712 up_module_map_test_data[index].first = l7vs::protocol_module_base::SORRYSERVER_SELECT;
713 up_module_map_test_data[index].second = l7vs::tcp_session::UP_FUNC_SORRYSERVER_GET_DEST;
714 up_fuc_map_test_data[index].first = up_module_map_test_data[index].second;
715 up_fuc_map_test_data[index].second = boost::bind(&module_event_map_test_base_class::test_UP_FUNC_SORRYSERVER_GET_DEST,this,_1);
716 up_thread_function_array[up_fuc_map_test_data[index].first] = up_fuc_map_test_data[index];
719 up_module_map_test_data[index].first = l7vs::protocol_module_base::SORRYSERVER_CONNECT;
720 up_module_map_test_data[index].second = l7vs::tcp_session::UP_FUNC_SORRYSERVER_CONNECT;
721 up_fuc_map_test_data[index].first = up_module_map_test_data[index].second;
722 up_fuc_map_test_data[index].second = boost::bind(&module_event_map_test_base_class::test_UP_FUNC_SORRYSERVER_CONNECT,this,_1);
723 up_thread_function_array[up_fuc_map_test_data[index].first] = up_fuc_map_test_data[index];
726 up_module_map_test_data[index].first = l7vs::protocol_module_base::SORRYSERVER_SEND;
727 up_module_map_test_data[index].second = l7vs::tcp_session::UP_FUNC_SORRYSERVER_SEND;
728 up_fuc_map_test_data[index].first = up_module_map_test_data[index].second;
729 up_fuc_map_test_data[index].second = boost::bind(&module_event_map_test_base_class::test_UP_FUNC_SORRYSERVER_SEND,this,_1);
730 up_thread_function_array[up_fuc_map_test_data[index].first] = up_fuc_map_test_data[index];
733 up_module_map_test_data[index].first = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
734 up_module_map_test_data[index].second = l7vs::tcp_session::UP_FUNC_SORRYSERVER_DISCONNECT;
735 up_fuc_map_test_data[index].first = up_module_map_test_data[index].second;
736 up_fuc_map_test_data[index].second = boost::bind(&module_event_map_test_base_class::test_UP_FUNC_SORRYSERVER_DISCONNECT,this,_1);
737 up_thread_function_array[up_fuc_map_test_data[index].first] = up_fuc_map_test_data[index];
740 up_module_map_test_data[index].first = l7vs::protocol_module_base::FINALIZE;
741 up_module_map_test_data[index].second = l7vs::tcp_session::UP_FUNC_EXIT;
742 up_fuc_map_test_data[index].first = up_module_map_test_data[index].second;
743 up_fuc_map_test_data[index].second = boost::bind(&module_event_map_test_base_class::test_UP_FUNC_EXIT,this,_1);
744 up_thread_function_array[up_fuc_map_test_data[index].first] = up_fuc_map_test_data[index];
746 for(int i = 0 ; i < 13;i++){
747 up_thread_module_event_map.insert(up_module_map_test_data[i]);
750 down_thread_module_event_map.clear();
751 // down_thread_function_map.clear();
754 down_module_map_test_data[index].first = l7vs::protocol_module_base::CLIENT_DISCONNECT;
755 down_module_map_test_data[index].second = l7vs::tcp_session::DOWN_FUNC_CLIENT_DISCONNECT;
756 down_fuc_map_test_data[index].first = down_module_map_test_data[index].second;
757 down_fuc_map_test_data[index].second = boost::bind(&module_event_map_test_base_class::test_DOWN_FUNC_CLIENT_DISCONNECT,this,_1);
758 down_thread_function_array[down_fuc_map_test_data[index].first] = down_fuc_map_test_data[index];
761 down_module_map_test_data[index].first = l7vs::protocol_module_base::CLIENT_CONNECTION_CHECK;
762 down_module_map_test_data[index].second = l7vs::tcp_session::DOWN_FUNC_CLIENT_CONNECTION_CHK;
763 down_fuc_map_test_data[index].first = down_module_map_test_data[index].second;
764 down_fuc_map_test_data[index].second = boost::bind(&module_event_map_test_base_class::test_DOWN_FUNC_CLIENT_CONNECTION_CHK,this,_1);
765 down_thread_function_array[down_fuc_map_test_data[index].first] = down_fuc_map_test_data[index];
768 down_module_map_test_data[index].first = l7vs::protocol_module_base::REALSERVER_RECV;
769 down_module_map_test_data[index].second = l7vs::tcp_session::DOWN_FUNC_REALSERVER_RECEIVE;
770 down_fuc_map_test_data[index].first = down_module_map_test_data[index].second;
771 down_fuc_map_test_data[index].second = boost::bind(&module_event_map_test_base_class::test_DOWN_FUNC_REALSERVER_RECEIVE,this,_1);
772 down_thread_function_array[down_fuc_map_test_data[index].first] = down_fuc_map_test_data[index];
775 down_module_map_test_data[index].first = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
776 down_module_map_test_data[index].second = l7vs::tcp_session::DOWN_FUNC_REALSERVER_ALL_DISCONNECT;
777 down_fuc_map_test_data[index].first = down_module_map_test_data[index].second;
778 down_fuc_map_test_data[index].second = boost::bind(&module_event_map_test_base_class::test_DOWN_FUNC_REALSERVER_ALL_DISCONNECT,this,_1);
779 down_thread_function_array[down_fuc_map_test_data[index].first] = down_fuc_map_test_data[index];
782 down_module_map_test_data[index].first = l7vs::protocol_module_base::SORRYSERVER_RECV;
783 down_module_map_test_data[index].second = l7vs::tcp_session::DOWN_FUNC_SORRYSERVER_RECEIVE;
784 down_fuc_map_test_data[index].first = down_module_map_test_data[index].second;
785 down_fuc_map_test_data[index].second = boost::bind(&module_event_map_test_base_class::test_DOWN_FUNC_SORRYSERVER_RECEIVE,this,_1);
786 down_thread_function_array[down_fuc_map_test_data[index].first] = down_fuc_map_test_data[index];
789 down_module_map_test_data[index].first = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
790 down_module_map_test_data[index].second = l7vs::tcp_session::DOWN_FUNC_SORRYSERVER_DISCONNECT;
791 down_fuc_map_test_data[index].first = down_module_map_test_data[index].second;
792 down_fuc_map_test_data[index].second = boost::bind(&module_event_map_test_base_class::test_DOWN_FUNC_SORRYSERVER_DISCONNECT,this,_1);
793 down_thread_function_array[down_fuc_map_test_data[index].first] = down_fuc_map_test_data[index];
796 down_module_map_test_data[index].first = l7vs::protocol_module_base::FINALIZE;
797 down_module_map_test_data[index].second = l7vs::tcp_session::DOWN_FUNC_EXIT;
798 down_fuc_map_test_data[index].first = down_module_map_test_data[index].second;
799 down_fuc_map_test_data[index].second = boost::bind(&module_event_map_test_base_class::test_DOWN_FUNC_EXIT,this,_1);
800 down_thread_function_array[down_fuc_map_test_data[index].first] = down_fuc_map_test_data[index];
802 for(int i = 0 ; i < 7;i++){
803 down_thread_module_event_map.insert(down_module_map_test_data[i]);
809 ~module_event_map_test_base_class(){
810 up_thread_module_event_map_clear();
811 up_thread_function_array_clear();
812 down_thread_module_event_map_clear();
813 down_thread_function_array_clear();
816 void set_protocol_module(l7vs::protocol_module_base* test_protocol_module){
817 protocol_module = test_protocol_module;
820 bool chk_up_thread_next_call_function(l7vs::protocol_module_base::EVENT_TAG chk_event){
821 l7vs::tcp_session::UP_THREAD_FUNC_TYPE_TAG fnc_tag = l7vs::tcp_session::UP_FUNC_EXIT;
822 up_call_func_type = fnc_tag;
823 for(int i = 0; i < 13;i++){
824 if( up_module_map_test_data[i].first == chk_event){
825 fnc_tag = up_module_map_test_data[i].second;
827 up_call_func_type = up_module_map_test_data[i+1].second;
829 up_call_func_type = up_module_map_test_data[0].second;
834 if(fnc_tag == up_call_func_type){
838 up_thread_next_call_function.second(LOCAL_PROC);
840 return fnc_tag == up_call_func_type;
843 bool chk_down_thread_next_call_function(l7vs::protocol_module_base::EVENT_TAG chk_event){
844 l7vs::tcp_session::DOWN_THREAD_FUNC_TYPE_TAG fnc_tag = l7vs::tcp_session::DOWN_FUNC_EXIT;
845 down_call_func_type = fnc_tag;
846 for(int i = 0; i < 7;i++){
847 if( down_module_map_test_data[i].first == chk_event){
848 fnc_tag = down_module_map_test_data[i].second;
850 down_call_func_type = down_module_map_test_data[i+1].second;
852 down_call_func_type = down_module_map_test_data[0].second;
857 if(fnc_tag == down_call_func_type){
861 down_thread_next_call_function.second(LOCAL_PROC);
863 return fnc_tag == down_call_func_type;
867 void up_thread_module_event_map_clear(){
868 up_thread_module_event_map.clear();
871 void up_thread_function_array_clear(){
872 for(int i = 0; i <= l7vs::tcp_session::UP_FUNC_EXIT;i++){
873 up_thread_function_array[i].second = (tcp_session_func)NULL;
877 void down_thread_module_event_map_clear(){
878 down_thread_module_event_map.clear();
881 void down_thread_function_array_clear(){
882 for(int i = 0; i <= l7vs::tcp_session::DOWN_FUNC_EXIT;i++){
883 down_thread_function_array[i].second = (tcp_session_func)NULL;
887 void set_up_thread_id(boost::thread::id set_thread_id){
888 up_thread_id = set_thread_id;
890 void set_down_thread_id(boost::thread::id set_thread_id){
891 down_thread_id = set_thread_id;
894 void set_up_thread_data_client_side(l7vs::tcp_data& set_data){
895 up_thread_data_client_side.set_size(set_data.get_size());
896 up_thread_data_client_side.set_send_size(set_data.get_send_size());
897 up_thread_data_client_side.set_data(set_data.get_data());
898 up_thread_data_client_side.set_endpoint(set_data.get_endpoint());
900 l7vs::tcp_data& get_up_thread_data_client_side(){
901 return up_thread_data_client_side;
903 void set_up_thread_data_dest_side(l7vs::tcp_data& set_data){
904 up_thread_data_dest_side.set_size(set_data.get_size());
905 up_thread_data_dest_side.set_send_size(set_data.get_send_size());
906 up_thread_data_dest_side.set_data(set_data.get_data());
907 up_thread_data_dest_side.set_endpoint(set_data.get_endpoint());
909 l7vs::tcp_data& get_up_thread_data_dest_side(){
910 return up_thread_data_dest_side;
912 void set_up_thread_message_data(l7vs::tcp_data& set_data){
913 up_thread_message_data.set_size(set_data.get_size());
914 up_thread_message_data.set_send_size(set_data.get_send_size());
915 up_thread_message_data.set_data(set_data.get_data());
916 up_thread_message_data.set_endpoint(set_data.get_endpoint());
918 l7vs::tcp_data& get_up_thread_message_data(){
919 return up_thread_message_data;
921 void set_down_thread_data_client_side(l7vs::tcp_data& set_data){
922 down_thread_data_client_side.set_size(set_data.get_size());
923 down_thread_data_client_side.set_send_size(set_data.get_send_size());
924 down_thread_data_client_side.set_data(set_data.get_data());
925 down_thread_data_client_side.set_endpoint(set_data.get_endpoint());
927 l7vs::tcp_data& get_down_thread_data_client_side(){
928 return down_thread_data_client_side;
930 void set_down_thread_data_dest_side(l7vs::tcp_data& set_data){
931 down_thread_data_dest_side.set_size(set_data.get_size());
932 down_thread_data_dest_side.set_send_size(set_data.get_send_size());
933 down_thread_data_dest_side.set_data(set_data.get_data());
934 down_thread_data_client_side.set_endpoint(set_data.get_endpoint());
936 l7vs::tcp_data& get_down_thread_data_dest_side(){
937 return down_thread_data_dest_side;
939 void set_down_thread_message_data(l7vs::tcp_data& set_data){
940 down_thread_message_data.set_size(set_data.get_size());
941 down_thread_message_data.set_send_size(set_data.get_send_size());
942 down_thread_message_data.set_data(set_data.get_data());
943 down_thread_message_data.set_endpoint(set_data.get_endpoint());
945 l7vs::tcp_data& get_down_thread_message_data(){
946 return down_thread_message_data;
948 void test_UP_FUNC_CLIENT_ACCEPT(const l7vs::tcp_session::TCP_PROCESS_TYPE_TAG process_type){
949 up_call_func_type = l7vs::tcp_session::UP_FUNC_CLIENT_ACCEPT;
952 void test_UP_FUNC_CLIENT_DISCONNECT(const l7vs::tcp_session::TCP_PROCESS_TYPE_TAG process_type){
953 up_call_func_type = l7vs::tcp_session::UP_FUNC_CLIENT_DISCONNECT;
956 void test_DOWN_FUNC_CLIENT_DISCONNECT(const l7vs::tcp_session::TCP_PROCESS_TYPE_TAG process_type){
957 down_call_func_type = l7vs::tcp_session::DOWN_FUNC_CLIENT_DISCONNECT;
960 void test_DOWN_FUNC_CLIENT_CONNECTION_CHK(const l7vs::tcp_session::TCP_PROCESS_TYPE_TAG process_type){
961 down_call_func_type = l7vs::tcp_session::DOWN_FUNC_CLIENT_CONNECTION_CHK;
965 // void test_UP_FUNC_CLIENT_DISCONNECT_EVENT(const l7vs::tcp_session::TCP_PROCESS_TYPE_TAG process_type){
966 // up_call_func_type = l7vs::tcp_session::UP_FUNC_CLIENT_DISCONNECT_EVENT;
969 void test_UP_FUNC_CLIENT_RECEIVE(const l7vs::tcp_session::TCP_PROCESS_TYPE_TAG process_type){
970 up_call_func_type = l7vs::tcp_session::UP_FUNC_CLIENT_RECEIVE;
973 void test_UP_FUNC_CLIENT_RESPOND_SEND(const l7vs::tcp_session::TCP_PROCESS_TYPE_TAG process_type){
974 up_call_func_type = l7vs::tcp_session::UP_FUNC_CLIENT_RESPOND_SEND;
977 // void test_UP_FUNC_CLIENT_RESPOND_SEND_EVENT(const TCP_PROCESS_TYPE_TAG process_type){
978 // up_call_func_type = l7vs::tcp_session::UP_FUNC_CLIENT_RESPOND_SEND_EVENT;
981 void test_DOWN_FUNC_REALSERVER_RECEIVE(const l7vs::tcp_session::TCP_PROCESS_TYPE_TAG process_type){
982 down_call_func_type = l7vs::tcp_session::DOWN_FUNC_REALSERVER_RECEIVE;
986 void test_UP_FUNC_REALSERVER_GET_DEST_EVENT(const TCP_PROCESS_TYPE_TAG process_type){
987 up_call_func_type = l7vs::tcp_session::UP_FUNC_REALSERVER_GET_DEST_EVENT;
990 void test_UP_FUNC_REALSERVER_CONNECT(const TCP_PROCESS_TYPE_TAG process_type){
991 up_call_func_type = l7vs::tcp_session::UP_FUNC_REALSERVER_CONNECT;
994 // void test_UP_FUNC_REALSERVER_CONNECT_EVENT(const TCP_PROCESS_TYPE_TAG process_type){
995 // up_call_func_type = l7vs::tcp_session::UP_FUNC_REALSERVER_CONNECT_EVENT;
998 // void test_UP_FUNC_REALSERVER_CONNECT_FAIL_EVENT(const TCP_PROCESS_TYPE_TAG process_type){
999 // up_call_func_type = l7vs::tcp_session::UP_FUNC_REALSERVER_CONNECT_FAIL_EVENT;
1002 void test_UP_FUNC_REALSERVER_SEND(const TCP_PROCESS_TYPE_TAG process_type){
1003 up_call_func_type = l7vs::tcp_session::UP_FUNC_REALSERVER_SEND;
1006 // void test_UP_FUNC_REALSERVER_DISCONNECT(const TCP_PROCESS_TYPE_TAG process_type){
1007 // up_call_func_type = l7vs::tcp_session::UP_FUNC_REALSERVER_DISCONNECT;
1010 // void test_UP_FUNC_REALSERVER_DISCONNECT_EVENT(const TCP_PROCESS_TYPE_TAG process_type){
1011 // up_call_func_type = l7vs::tcp_session::UP_FUNC_REALSERVER_DISCONNECT_EVENT;
1014 void test_UP_FUNC_REALSERVER_ALL_DISCONNECT(const TCP_PROCESS_TYPE_TAG process_type){
1015 up_call_func_type = l7vs::tcp_session::UP_FUNC_REALSERVER_ALL_DISCONNECT;
1018 void test_DOWN_FUNC_REALSERVER_ALL_DISCONNECT(const TCP_PROCESS_TYPE_TAG process_type){
1019 down_call_func_type = l7vs::tcp_session::DOWN_FUNC_REALSERVER_ALL_DISCONNECT;
1022 void test_DOWN_FUNC_SORRYSERVER_RECEIVE(const l7vs::tcp_session::TCP_PROCESS_TYPE_TAG process_type){
1023 down_call_func_type = l7vs::tcp_session::DOWN_FUNC_SORRYSERVER_RECEIVE;
1026 void test_UP_FUNC_SORRYSERVER_GET_DEST(const TCP_PROCESS_TYPE_TAG process_type){
1027 up_call_func_type = l7vs::tcp_session::UP_FUNC_SORRYSERVER_GET_DEST;
1030 void test_UP_FUNC_SORRYSERVER_CONNECT(const TCP_PROCESS_TYPE_TAG process_type){
1031 up_call_func_type = l7vs::tcp_session::UP_FUNC_SORRYSERVER_CONNECT;
1034 // void test_UP_FUNC_SORRYSERVER_CONNECT_EVENT(const TCP_PROCESS_TYPE_TAG process_type){
1035 // up_call_func_type = l7vs::tcp_session::UP_FUNC_SORRYSERVER_CONNECT_EVENT;
1038 // void test_UP_FUNC_SORRYSERVER_CONNECT_FAIL_EVENT(const TCP_PROCESS_TYPE_TAG process_type){
1039 // up_call_func_type = l7vs::tcp_session::UP_FUNC_SORRYSERVER_CONNECT_FAIL_EVENT;
1042 void test_UP_FUNC_SORRYSERVER_SEND(const TCP_PROCESS_TYPE_TAG process_type){
1043 up_call_func_type = l7vs::tcp_session::UP_FUNC_SORRYSERVER_SEND;
1046 void test_UP_FUNC_SORRYSERVER_DISCONNECT(const TCP_PROCESS_TYPE_TAG process_type){
1047 up_call_func_type = l7vs::tcp_session::UP_FUNC_SORRYSERVER_DISCONNECT;
1050 void test_DOWN_FUNC_SORRYSERVER_DISCONNECT(const TCP_PROCESS_TYPE_TAG process_type){
1051 down_call_func_type = l7vs::tcp_session::DOWN_FUNC_SORRYSERVER_DISCONNECT;
1054 // void test_UP_FUNC_SORRYSERVER_DISCONNECT_EVENT(const TCP_PROCESS_TYPE_TAG process_type){
1055 // up_call_func_type = l7vs::tcp_session::UP_FUNC_SORRYSERVER_DISCONNECT_EVENT;
1058 // void test_UP_FUNC_SORRY_ENABLE_EVENT(const TCP_PROCESS_TYPE_TAG process_type){
1059 // up_call_func_type = l7vs::tcp_session::UP_FUNC_SORRY_ENABLE_EVENT;
1062 // void test_UP_FUNC_SORRY_DISABLE_EVENT(const TCP_PROCESS_TYPE_TAG process_type){
1063 // up_call_func_type = l7vs::tcp_session::UP_FUNC_SORRY_DISABLE_EVENT;
1066 void test_UP_FUNC_EXIT(const TCP_PROCESS_TYPE_TAG process_type){
1067 up_call_func_type = l7vs::tcp_session::UP_FUNC_EXIT;
1070 void test_DOWN_FUNC_EXIT(const TCP_PROCESS_TYPE_TAG process_type){
1071 down_call_func_type = l7vs::tcp_session::DOWN_FUNC_EXIT;
1074 l7vs::tcp_session::UP_THREAD_FUNC_TYPE_TAG up_call_func_type;
1075 l7vs::tcp_session::DOWN_THREAD_FUNC_TYPE_TAG down_call_func_type;
1082 // constructer test class
1083 class constructer_test_class : public l7vs::tcp_session{
1085 constructer_test_class(
1086 l7vs::virtualservice_tcp& vs,
1087 boost::asio::io_service& session_io,
1088 l7vs::tcp_socket_option_info& set_socket_option,
1089 boost::asio::ip::tcp::endpoint listen_endpoint,
1091 boost::asio::ssl::context& set_ssl_context,
1092 bool set_ssl_cache_flag,
1093 int set_ssl_handshake_time_out,
1094 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
1101 set_ssl_handshake_time_out,
1102 set_access_logger){};
1103 ~constructer_test_class(){};
1104 boost::asio::io_service& get_io(){
1107 l7vs::virtualservice_tcp& get_parent_service(){
1108 return parent_service;
1110 bool get_exit_flag(){
1111 return (bool)exit_flag;
1114 std::bitset<TCP_SESSION_THREAD_STATE_BIT> get_thread_state(){
1115 return thread_state;
1118 l7vs::tcp_session::UPTHREAD_STATUS_TAG& get_up_status(){
1119 return upthread_status;
1122 l7vs::tcp_session::DOWNTHREAD_STATUS_TAG& get_down_status(){
1123 return downthread_status;
1126 l7vs::protocol_module_base* get_protocol_module(){
1127 return protocol_module;
1130 bool get_session_pause_flag(){
1131 return session_pause_flag;
1134 l7vs::tcp_socket& get_client_socket(){
1135 return client_socket;
1137 boost::shared_ptr< l7vs::tcp_socket > get_sorry_socket(){
1138 return sorryserver_socket.second;
1141 l7vs::tcp_ssl_socket& get_client_ssl_socket(){
1142 return client_ssl_socket;
1145 l7vs::tcp_socket_option_info* get_socket_opt_info(){
1146 return &socket_opt_info;
1148 //! virtualservice accept endpoint
1149 boost::asio::ip::tcp::endpoint& get_virtualservice_endpoint(){
1150 return virtualservice_endpoint;
1152 //! access log out put flag
1153 bool get_accesslog_flag(){
1154 return access_log_flag;
1157 l7vs::logger_implement_access* get_access_logger(){
1158 return access_logger;
1161 bool get_ssl_flag(){
1165 boost::asio::ssl::context& get_ssl_context(){
1168 //! ssl session cache flag
1169 bool get_ssl_cache_flag(){
1170 return ssl_cache_flag;
1172 //! handshake timer flag
1173 bool get_ssl_handshake_timer_flag(){
1174 return ssl_handshake_timer_flag;
1176 //! handshake timeout
1177 int get_ssl_handshake_time_out(){
1178 return ssl_handshake_time_out;
1180 //! handshake timeout flag
1181 bool get_ssl_handshake_timeout_flag(){
1182 return ssl_handshake_time_out_flag;
1185 //! up thread raise module event of handle_accept
1186 //! @param[in] process_type is prosecess type
1187 void up_thread_client_accept(const TCP_PROCESS_TYPE_TAG process_type){
1188 up_thread_client_accept_call_check = true;
1190 bool up_thread_client_accept_call_check;
1192 //! up thread raise module event of handle_accept
1193 //! @param[in] process_type is prosecess type
1194 void up_thread_client_accept_event(const TCP_PROCESS_TYPE_TAG process_type){
1195 up_thread_client_accept_event_call_check = true;
1197 bool up_thread_client_accept_event_call_check;
1198 //! up thread receive client side and raise module event of handle_client_recv
1199 //! @param[in] process_type is prosecess type
1200 void up_thread_client_receive(const TCP_PROCESS_TYPE_TAG process_type){
1201 up_thread_client_receive_call_check = true;
1203 bool up_thread_client_receive_call_check;
1204 //! up thread raise client respond send event message for up and down thread
1205 //! @param[in] process_type is prosecess type
1206 void up_thread_client_respond(const TCP_PROCESS_TYPE_TAG process_type){
1207 up_thread_client_respond_call_check = true;
1209 bool up_thread_client_respond_call_check;
1210 //! up thread raise module event of handle_response_send_inform
1211 //! @param[in] process_type is prosecess type
1212 void up_thread_client_respond_event(const TCP_PROCESS_TYPE_TAG process_type){
1213 up_thread_client_respond_event_call_check = true;
1215 bool up_thread_client_respond_event_call_check;
1216 //! up thread close client socket and raise client disconnect event message for up and down thread
1217 //! @param[in] process_type is prosecess type
1218 void up_thread_client_disconnect(const TCP_PROCESS_TYPE_TAG process_type){
1219 up_thread_client_disconnect_call_check = true;
1221 bool up_thread_client_disconnect_call_check;
1222 //! up thread raise module event of handle_client_disconnect
1223 //! @param[in] process_type is prosecess type
1224 void up_thread_client_disconnect_event(const TCP_PROCESS_TYPE_TAG process_type){
1225 up_thread_client_disconnect_event_call_check = true;
1227 bool up_thread_client_disconnect_event_call_check;
1228 //! up thread send realserver and raise module event of handle_client_recv
1229 //! @param[in] process_type is prosecess type
1230 void up_thread_realserver_send(const TCP_PROCESS_TYPE_TAG process_type){
1231 up_thread_realserver_send_call_check = true;
1233 bool up_thread_realserver_send_call_check;
1234 //! up thread raise module event of handle_realserver_select
1235 //! @param[in] process_type is prosecess type
1236 void up_thread_realserver_get_destination_event(const TCP_PROCESS_TYPE_TAG process_type){
1237 up_thread_realserver_get_destination_event_call_check = true;
1239 bool up_thread_realserver_get_destination_event_call_check;
1240 //! up thread connect realserver
1241 //! @param[in] process_type is prosecess type
1242 void up_thread_realserver_connect(const TCP_PROCESS_TYPE_TAG process_type){
1243 up_thread_realserver_connect_call_check = true;
1245 bool up_thread_realserver_connect_call_check;
1246 //! up thread raise module event of handle_realserver_connect
1247 //! @param[in] process_type is prosecess type
1248 void up_thread_realserver_connect_event(const TCP_PROCESS_TYPE_TAG process_type){
1249 up_thread_realserver_connect_event_call_check = true;
1251 bool up_thread_realserver_connect_event_call_check;
1252 //! up thread raise module event of handle_realserver_connection_fail
1253 //! @param[in] process_type is prosecess type
1254 void up_thread_realserver_connection_fail_event(const TCP_PROCESS_TYPE_TAG process_type){
1255 up_thread_realserver_connection_fail_event_call_check = true;
1257 bool up_thread_realserver_connection_fail_event_call_check;
1258 //! up thread close realserver socket and raise realserver disconnect event message for up and down thread
1259 //! @param[in] process_type is prosecess type
1260 void up_thread_realserver_disconnect(const TCP_PROCESS_TYPE_TAG process_type){
1261 up_thread_realserver_disconnect_call_check = true;
1263 bool up_thread_realserver_disconnect_call_check;
1264 //! up thread raise module event of handle_realserver_disconnect
1265 //! @param[in] process_type is prosecess type
1266 void up_thread_realserver_disconnect_event(const TCP_PROCESS_TYPE_TAG process_type){
1267 up_thread_realserver_disconnect_event_call_check = true;
1269 bool up_thread_realserver_disconnect_event_call_check;
1270 //! up thread close all realserver socket and raise module event of handle_realserver_disconnect
1271 //! @param[in] process_type is prosecess type
1272 void up_thread_all_realserver_disconnect(const TCP_PROCESS_TYPE_TAG process_type){
1273 up_thread_all_realserver_disconnect_call_check = true;
1275 bool up_thread_all_realserver_disconnect_call_check;
1276 //! up thread send sorryserver and raise module event of handle_sorryserver_send
1277 //! @param[in] process_type is prosecess type
1278 void up_thread_sorryserver_send(const TCP_PROCESS_TYPE_TAG process_type){
1279 up_thread_sorryserver_send_call_check = true;
1281 bool up_thread_sorryserver_send_call_check;
1282 //! up thread raise module event of handle_sorryserver_select
1283 //! @param[in] process_type is prosecess type
1284 void up_thread_sorryserver_get_destination_event(const TCP_PROCESS_TYPE_TAG process_type){
1285 up_thread_sorryserver_get_destination_event_call_check = true;
1287 bool up_thread_sorryserver_get_destination_event_call_check;
1288 //! up thread connect sorryserver
1289 //! @param[in] process_type is prosecess type
1290 void up_thread_sorryserver_connect(const TCP_PROCESS_TYPE_TAG process_type){
1291 up_thread_sorryserver_connect_call_check = true;
1293 bool up_thread_sorryserver_connect_call_check;
1294 //! up thread raise module event of handle_sorryserver_connect
1295 //! @param[in] process_type is prosecess type
1296 void up_thread_sorryserver_connect_event(const TCP_PROCESS_TYPE_TAG process_type){
1297 up_thread_sorryserver_connect_event_call_check = true;
1299 bool up_thread_sorryserver_connect_event_call_check;
1300 //! up thread raise module event of handle_sorryserver_connection_fail
1301 //! @param[in] process_type is prosecess type
1302 void up_thread_sorryserver_connection_fail_event(const TCP_PROCESS_TYPE_TAG process_type){
1303 up_thread_sorryserver_connection_fail_event_call_check = true;
1305 bool up_thread_sorryserver_connection_fail_event_call_check;
1306 //! up thread close sorryserver socket and raise sorryserver disconnect event message for up and down thread
1307 //! @param[in] process_type is prosecess type
1308 void up_thread_sorryserver_disconnect(const TCP_PROCESS_TYPE_TAG process_type){
1309 up_thread_sorryserver_disconnect_call_check = true;
1311 bool up_thread_sorryserver_disconnect_call_check;
1313 void up_thread_sorryserver_mod_disconnect(const TCP_PROCESS_TYPE_TAG process_type){
1314 up_thread_sorryserver_mod_disconnect_call_check = true;
1316 bool up_thread_sorryserver_mod_disconnect_call_check;
1318 //! up thread raise module event of handle_sorryserver_disconnect
1319 //! @param[in] process_type is prosecess type
1320 void up_thread_sorryserver_disconnect_event(const TCP_PROCESS_TYPE_TAG process_type){
1321 up_thread_sorryserver_disconnect_event_call_check = true;
1323 bool up_thread_sorryserver_disconnect_event_call_check;
1324 //! up thread raise module event of handle_sorry_enable
1325 //! @param[in] process_type is prosecess type
1326 void up_thread_sorry_enable_event(const TCP_PROCESS_TYPE_TAG process_type){
1327 up_thread_sorry_enable_event_call_check = true;
1329 bool up_thread_sorry_enable_event_call_check;
1330 //! up thread raise module event of handle_sorry_disable
1331 //! @param[in] process_type is prosecess type
1332 void up_thread_sorry_disable_event(const TCP_PROCESS_TYPE_TAG process_type){
1333 up_thread_sorry_disable_event_call_check = true;
1335 bool up_thread_sorry_disable_event_call_check;
1336 //! up thread exit main loop
1337 //! @param[in] process_type is prosecess type
1338 void up_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
1339 up_thread_exit_call_check = true;
1341 bool up_thread_exit_call_check;
1342 //! down thread receive from realserver and raise module event of handle_realserver_recv
1343 //! @param[in] process_type is prosecess type
1344 void down_thread_realserver_receive(const TCP_PROCESS_TYPE_TAG process_type){
1345 down_thread_realserver_receive_call_check = true;
1347 bool down_thread_realserver_receive_call_check;
1348 //! down thread close realserver socket and raise realserver disconnect event message for up and down thread
1349 //! @param[in] process_type is prosecess type
1350 void down_thread_realserver_disconnect(const TCP_PROCESS_TYPE_TAG process_type){
1351 down_thread_realserver_disconnect_call_check = true;
1353 bool down_thread_realserver_disconnect_call_check;
1354 //! down thread raise module event of handle_realserver_disconnect
1355 //! @param[in] process_type is prosecess type
1356 void down_thread_realserver_disconnect_event(const TCP_PROCESS_TYPE_TAG process_type){
1357 down_thread_realserver_disconnect_event_call_check = true;
1359 bool down_thread_realserver_disconnect_event_call_check;
1360 //! down thread close all realserver socket and raise module event of handle_realserver_disconnect
1361 //! @param[in] process_type is prosecess type
1362 void down_thread_all_realserver_disconnect(const TCP_PROCESS_TYPE_TAG process_type){
1363 down_thread_all_realserver_disconnect_call_check = true;
1365 bool down_thread_all_realserver_disconnect_call_check;
1366 //! down thread raise module event of handle_client_connection_check
1367 //! @param[in] process_type is prosecess type
1368 void down_thread_client_connection_chk_event(const TCP_PROCESS_TYPE_TAG process_type){
1369 down_thread_client_connection_chk_event_call_check = true;
1371 bool down_thread_client_connection_chk_event_call_check;
1372 //! down thread raise module event of handle_response_send_inform
1373 //! @param[in] process_type is prosecess type
1374 void down_thread_client_respond_event(const TCP_PROCESS_TYPE_TAG process_type){
1375 down_thread_client_respond_event_call_check = true;
1377 bool down_thread_client_respond_event_call_check;
1378 //! down thread send for client and raise module event of handle_client_send
1379 //! @param[in] process_type is prosecess type
1380 void down_thread_client_send(const TCP_PROCESS_TYPE_TAG process_type){
1381 down_thread_client_send_call_check = true;
1383 bool down_thread_client_send_call_check;
1384 //! down thread close client socket and raise client disconnect event message for up and down thread
1385 //! @param[in] process_type is prosecess type
1386 void down_thread_client_disconnect(const TCP_PROCESS_TYPE_TAG process_type){
1387 down_thread_client_disconnect_call_check = true;
1389 bool down_thread_client_disconnect_call_check;
1390 //! down thread raise module event of handle_client_disconnect
1391 //! @param[in] process_type is prosecess type
1392 void down_thread_client_disconnect_event(const TCP_PROCESS_TYPE_TAG process_type){
1393 down_thread_client_disconnect_event_call_check = true;
1395 bool down_thread_client_disconnect_event_call_check;
1396 //! down thread receive from sorryserver and raise module event of handle_sorryserver_recv
1397 //! @param[in] process_type is prosecess type
1398 void down_thread_sorryserver_receive(const TCP_PROCESS_TYPE_TAG process_type){
1399 down_thread_sorryserver_receive_call_check = true;
1401 bool down_thread_sorryserver_receive_call_check;
1402 //! down thread close sorryserver socket and raise sorryserver disconnect event message for up and down thread
1403 //! @param[in] process_type is prosecess type
1404 void down_thread_sorryserver_disconnect(const TCP_PROCESS_TYPE_TAG process_type){
1405 down_thread_sorryserver_disconnect_call_check = true;
1407 bool down_thread_sorryserver_disconnect_call_check;
1409 void down_thread_sorryserver_mod_disconnect(const TCP_PROCESS_TYPE_TAG process_type){
1410 down_thread_sorryserver_mod_disconnect_call_check = true;
1412 bool down_thread_sorryserver_mod_disconnect_call_check;
1413 //! down thread raise module event of handle_sorryserver_disconnect
1414 //! @param[in] process_type is prosecess type
1415 void down_thread_sorryserver_disconnect_event(const TCP_PROCESS_TYPE_TAG process_type){
1416 down_thread_sorryserver_disconnect_event_call_check = true;
1418 bool down_thread_sorryserver_disconnect_event_call_check;
1419 //! down thread raise module event of handle_sorry_enable
1420 //! @param[in] process_type is prosecess type
1421 void down_thread_sorry_enable_event(const TCP_PROCESS_TYPE_TAG process_type){
1422 down_thread_sorry_enable_event_call_check = true;
1424 bool down_thread_sorry_enable_event_call_check;
1425 //! down thread raise module event of handle_sorry_disable
1426 //! @param[in] process_type is prosecess type
1427 void down_thread_sorry_disable_event(const TCP_PROCESS_TYPE_TAG process_type){
1428 down_thread_sorry_disable_event_call_check = true;
1430 bool down_thread_sorry_disable_event_call_check;
1431 //! down thread exit main loop
1432 //! @param[in] process_type is prosecess type
1433 void down_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
1434 down_thread_exit_call_check = true;
1436 bool down_thread_exit_call_check;
1440 void check_up_thread_module_event_map(){
1441 BOOST_CHECK(up_thread_module_event_map.find(l7vs::protocol_module_base::INITIALIZE) == up_thread_module_event_map.end());
1442 BOOST_CHECK(up_thread_module_event_map.find(l7vs::protocol_module_base::ACCEPT)->second == l7vs::tcp_session::UP_FUNC_CLIENT_ACCEPT);
1443 BOOST_CHECK(up_thread_module_event_map.find(l7vs::protocol_module_base::CLIENT_RECV)->second == l7vs::tcp_session::UP_FUNC_CLIENT_RECEIVE);
1444 BOOST_CHECK(up_thread_module_event_map.find(l7vs::protocol_module_base::REALSERVER_SELECT)->second == l7vs::tcp_session::UP_FUNC_REALSERVER_GET_DEST_EVENT);
1445 BOOST_CHECK(up_thread_module_event_map.find(l7vs::protocol_module_base::REALSERVER_CONNECT)->second == l7vs::tcp_session::UP_FUNC_REALSERVER_CONNECT);
1446 BOOST_CHECK(up_thread_module_event_map.find(l7vs::protocol_module_base::REALSERVER_SEND)->second == l7vs::tcp_session::UP_FUNC_REALSERVER_SEND);
1447 BOOST_CHECK(up_thread_module_event_map.find(l7vs::protocol_module_base::SORRYSERVER_SELECT)->second == l7vs::tcp_session::UP_FUNC_SORRYSERVER_GET_DEST);
1448 BOOST_CHECK(up_thread_module_event_map.find(l7vs::protocol_module_base::SORRYSERVER_CONNECT)->second == l7vs::tcp_session::UP_FUNC_SORRYSERVER_CONNECT);
1449 BOOST_CHECK(up_thread_module_event_map.find(l7vs::protocol_module_base::SORRYSERVER_SEND)->second == l7vs::tcp_session::UP_FUNC_SORRYSERVER_SEND);
1450 BOOST_CHECK(up_thread_module_event_map.find(l7vs::protocol_module_base::REALSERVER_RECV) == up_thread_module_event_map.end());
1451 BOOST_CHECK(up_thread_module_event_map.find(l7vs::protocol_module_base::SORRYSERVER_RECV) == up_thread_module_event_map.end());
1452 BOOST_CHECK(up_thread_module_event_map.find(l7vs::protocol_module_base::CLIENT_SELECT) == up_thread_module_event_map.end());
1453 BOOST_CHECK(up_thread_module_event_map.find(l7vs::protocol_module_base::CLIENT_CONNECTION_CHECK) == up_thread_module_event_map.end());
1454 BOOST_CHECK(up_thread_module_event_map.find(l7vs::protocol_module_base::CLIENT_SEND) == up_thread_module_event_map.end());
1455 BOOST_CHECK(up_thread_module_event_map.find(l7vs::protocol_module_base::CLIENT_RESPONSE_SEND)->second == l7vs::tcp_session::UP_FUNC_CLIENT_RESPOND_SEND);
1456 BOOST_CHECK(up_thread_module_event_map.find(l7vs::protocol_module_base::REALSERVER_DISCONNECT)->second == l7vs::tcp_session::UP_FUNC_REALSERVER_ALL_DISCONNECT);
1457 BOOST_CHECK(up_thread_module_event_map.find(l7vs::protocol_module_base::SORRYSERVER_DISCONNECT)->second == l7vs::tcp_session::UP_FUNC_SORRYSERVER_MOD_DISCONNECT);
1458 BOOST_CHECK(up_thread_module_event_map.find(l7vs::protocol_module_base::CLIENT_DISCONNECT)->second == l7vs::tcp_session::UP_FUNC_CLIENT_DISCONNECT);
1459 BOOST_CHECK(up_thread_module_event_map.find(l7vs::protocol_module_base::REALSERVER_CLOSE) == up_thread_module_event_map.end());
1460 BOOST_CHECK(up_thread_module_event_map.find(l7vs::protocol_module_base::FINALIZE)->second == l7vs::tcp_session::UP_FUNC_EXIT);
1461 BOOST_CHECK(up_thread_module_event_map.find(l7vs::protocol_module_base::STOP) == up_thread_module_event_map.end());
1463 void check_down_thread_module_event_map(){
1464 BOOST_CHECK(down_thread_module_event_map.find(l7vs::protocol_module_base::INITIALIZE) == down_thread_module_event_map.end());
1465 BOOST_CHECK(down_thread_module_event_map.find(l7vs::protocol_module_base::ACCEPT) == down_thread_module_event_map.end());
1466 BOOST_CHECK(down_thread_module_event_map.find(l7vs::protocol_module_base::CLIENT_RECV) == down_thread_module_event_map.end());
1467 BOOST_CHECK(down_thread_module_event_map.find(l7vs::protocol_module_base::REALSERVER_SELECT) == down_thread_module_event_map.end());
1468 BOOST_CHECK(down_thread_module_event_map.find(l7vs::protocol_module_base::REALSERVER_CONNECT) == down_thread_module_event_map.end());
1469 BOOST_CHECK(down_thread_module_event_map.find(l7vs::protocol_module_base::REALSERVER_SEND) == down_thread_module_event_map.end());
1470 BOOST_CHECK(down_thread_module_event_map.find(l7vs::protocol_module_base::SORRYSERVER_SELECT) == down_thread_module_event_map.end());
1471 BOOST_CHECK(down_thread_module_event_map.find(l7vs::protocol_module_base::SORRYSERVER_CONNECT) == down_thread_module_event_map.end());
1472 BOOST_CHECK(down_thread_module_event_map.find(l7vs::protocol_module_base::SORRYSERVER_SEND) == down_thread_module_event_map.end());
1473 BOOST_CHECK(down_thread_module_event_map.find(l7vs::protocol_module_base::REALSERVER_RECV)->second == l7vs::tcp_session::DOWN_FUNC_REALSERVER_RECEIVE);
1474 BOOST_CHECK(down_thread_module_event_map.find(l7vs::protocol_module_base::SORRYSERVER_RECV)->second == l7vs::tcp_session::DOWN_FUNC_SORRYSERVER_RECEIVE);
1475 BOOST_CHECK(down_thread_module_event_map.find(l7vs::protocol_module_base::CLIENT_SELECT) == down_thread_module_event_map.end());
1476 BOOST_CHECK(down_thread_module_event_map.find(l7vs::protocol_module_base::CLIENT_CONNECTION_CHECK)->second == l7vs::tcp_session::DOWN_FUNC_CLIENT_CONNECTION_CHK);
1477 BOOST_CHECK(down_thread_module_event_map.find(l7vs::protocol_module_base::CLIENT_SEND)->second == l7vs::tcp_session::DOWN_FUNC_CLIENT_SEND);
1478 BOOST_CHECK(down_thread_module_event_map.find(l7vs::protocol_module_base::CLIENT_RESPONSE_SEND) == down_thread_module_event_map.end());
1479 BOOST_CHECK(down_thread_module_event_map.find(l7vs::protocol_module_base::REALSERVER_DISCONNECT)->second == l7vs::tcp_session::DOWN_FUNC_REALSERVER_ALL_DISCONNECT);
1480 BOOST_CHECK(down_thread_module_event_map.find(l7vs::protocol_module_base::SORRYSERVER_DISCONNECT)->second == l7vs::tcp_session::DOWN_FUNC_SORRYSERVER_MOD_DISCONNECT);
1481 BOOST_CHECK(down_thread_module_event_map.find(l7vs::protocol_module_base::CLIENT_DISCONNECT)->second == l7vs::tcp_session::DOWN_FUNC_CLIENT_DISCONNECT);
1482 BOOST_CHECK(down_thread_module_event_map.find(l7vs::protocol_module_base::REALSERVER_CLOSE) == down_thread_module_event_map.end());
1483 BOOST_CHECK(down_thread_module_event_map.find(l7vs::protocol_module_base::FINALIZE)->second == l7vs::tcp_session::DOWN_FUNC_EXIT);
1484 BOOST_CHECK(down_thread_module_event_map.find(l7vs::protocol_module_base::STOP) == down_thread_module_event_map.end());
1487 void check_up_thread_function_map(){
1488 up_thread_function_pair check_it;
1490 // UP_FUNC_CLIENT_ACCEPT up_thread_client_accept function
1491 check_it = up_thread_function_array[UP_FUNC_CLIENT_ACCEPT];
1492 BOOST_CHECK(check_it.second != NULL);
1493 up_thread_client_accept_call_check = false;
1494 check_it.second(LOCAL_PROC);
1495 BOOST_CHECK(up_thread_client_accept_call_check);
1498 // UP_FUNC_CLIENT_ACCEPT_EVENT up_thread_client_accept_event function
1499 check_it = up_thread_function_array[UP_FUNC_CLIENT_ACCEPT_EVENT];
1500 BOOST_CHECK(check_it.second != NULL);
1501 up_thread_client_accept_event_call_check = false;
1502 check_it.second(LOCAL_PROC);
1503 BOOST_CHECK(up_thread_client_accept_event_call_check);
1505 // UP_FUNC_CLIENT_DISCONNECT up_thread_client_disconnect function
1506 check_it = up_thread_function_array[UP_FUNC_CLIENT_DISCONNECT];
1507 BOOST_CHECK(check_it.second != NULL);
1508 up_thread_client_disconnect_call_check = false;
1509 check_it.second(LOCAL_PROC);
1510 BOOST_CHECK(up_thread_client_disconnect_call_check);
1512 // UP_FUNC_CLIENT_DISCONNECT_EVENT up_thread_client_disconnect_event function
1513 check_it = up_thread_function_array[UP_FUNC_CLIENT_DISCONNECT_EVENT];
1514 BOOST_CHECK(check_it.second != NULL);
1515 up_thread_client_disconnect_event_call_check = false;
1516 check_it.second(LOCAL_PROC);
1517 BOOST_CHECK(up_thread_client_disconnect_event_call_check);
1519 // UP_FUNC_CLIENT_RECEIVE up_thread_client_receive function
1520 check_it = up_thread_function_array[UP_FUNC_CLIENT_RECEIVE];
1521 BOOST_CHECK(check_it.second != NULL);
1522 up_thread_client_receive_call_check = false;
1523 check_it.second(LOCAL_PROC);
1524 BOOST_CHECK(up_thread_client_receive_call_check);
1526 // UP_FUNC_CLIENT_RESPOND_SEND up_thread_client_respond function
1527 check_it = up_thread_function_array[UP_FUNC_CLIENT_RESPOND_SEND];
1528 BOOST_CHECK(check_it.second != NULL);
1529 up_thread_client_respond_call_check = false;
1530 check_it.second(LOCAL_PROC);
1531 BOOST_CHECK(up_thread_client_respond_call_check);
1533 // UP_FUNC_CLIENT_RESPOND_SEND_EVENT up_thread_client_respond_event function
1534 check_it = up_thread_function_array[UP_FUNC_CLIENT_RESPOND_SEND_EVENT];
1535 BOOST_CHECK(check_it.second != NULL);
1536 up_thread_client_respond_event_call_check = false;
1537 check_it.second(LOCAL_PROC);
1538 BOOST_CHECK(up_thread_client_respond_event_call_check);
1540 // UP_FUNC_REALSERVER_GET_DEST_EVENT up_thread_realserver_get_destination_event function
1541 check_it = up_thread_function_array[UP_FUNC_REALSERVER_GET_DEST_EVENT];
1542 BOOST_CHECK(check_it.second != NULL);
1543 up_thread_realserver_get_destination_event_call_check = false;
1544 check_it.second(LOCAL_PROC);
1545 BOOST_CHECK(up_thread_realserver_get_destination_event_call_check);
1547 // UP_FUNC_REALSERVER_CONNECT up_thread_realserver_connect function
1548 check_it = up_thread_function_array[UP_FUNC_REALSERVER_CONNECT];
1549 BOOST_CHECK(check_it.second != NULL);
1550 up_thread_realserver_connect_call_check = false;
1551 check_it.second(LOCAL_PROC);
1552 BOOST_CHECK(up_thread_realserver_connect_call_check);
1554 // UP_FUNC_REALSERVER_CONNECT_EVENT up_thread_realserver_connect_event function
1555 check_it = up_thread_function_array[UP_FUNC_REALSERVER_CONNECT_EVENT];
1556 BOOST_CHECK(check_it.second != NULL);
1557 up_thread_realserver_connect_event_call_check = false;
1558 check_it.second(LOCAL_PROC);
1559 BOOST_CHECK(up_thread_realserver_connect_event_call_check);
1561 // UP_FUNC_REALSERVER_CONNECT_FAIL_EVENT up_thread_realserver_connection_fail_event function
1562 check_it = up_thread_function_array[UP_FUNC_REALSERVER_CONNECT_FAIL_EVENT];
1563 BOOST_CHECK(check_it.second != NULL);
1564 up_thread_realserver_connection_fail_event_call_check = false;
1565 check_it.second(LOCAL_PROC);
1566 BOOST_CHECK(up_thread_realserver_connection_fail_event_call_check);
1568 // UP_FUNC_REALSERVER_SEND up_thread_realserver_send function
1569 check_it = up_thread_function_array[UP_FUNC_REALSERVER_SEND];
1570 BOOST_CHECK(check_it.second != NULL);
1571 up_thread_realserver_send_call_check = false;
1572 check_it.second(LOCAL_PROC);
1573 BOOST_CHECK(up_thread_realserver_send_call_check);
1575 // UP_FUNC_REALSERVER_DISCONNECT up_thread_realserver_disconnect function
1576 check_it = up_thread_function_array[UP_FUNC_REALSERVER_DISCONNECT];
1577 BOOST_CHECK(check_it.second != NULL);
1578 up_thread_realserver_disconnect_call_check = false;
1579 check_it.second(LOCAL_PROC);
1580 BOOST_CHECK(up_thread_realserver_disconnect_call_check);
1582 // UP_FUNC_REALSERVER_DISCONNECT_EVENT up_thread_realserver_disconnect_event function
1583 check_it = up_thread_function_array[UP_FUNC_REALSERVER_DISCONNECT_EVENT];
1584 BOOST_CHECK(check_it.second != NULL);
1585 up_thread_realserver_disconnect_event_call_check = false;
1586 check_it.second(LOCAL_PROC);
1587 BOOST_CHECK(up_thread_realserver_disconnect_event_call_check);
1589 // UP_FUNC_REALSERVER_ALL_DISCONNECT up_thread_all_realserver_disconnect function
1590 check_it = up_thread_function_array[UP_FUNC_REALSERVER_ALL_DISCONNECT];
1591 BOOST_CHECK(check_it.second != NULL);
1592 up_thread_all_realserver_disconnect_call_check = false;
1593 check_it.second(LOCAL_PROC);
1594 BOOST_CHECK(up_thread_all_realserver_disconnect_call_check);
1596 // UP_FUNC_SORRYSERVER_GET_DEST up_thread_sorryserver_get_destination_event function
1597 check_it = up_thread_function_array[UP_FUNC_SORRYSERVER_GET_DEST];
1598 BOOST_CHECK(check_it.second != NULL);
1599 up_thread_sorryserver_get_destination_event_call_check = false;
1600 check_it.second(LOCAL_PROC);
1601 BOOST_CHECK(up_thread_sorryserver_get_destination_event_call_check);
1603 // UP_FUNC_SORRYSERVER_CONNECT up_thread_sorryserver_connect function
1604 check_it = up_thread_function_array[UP_FUNC_SORRYSERVER_CONNECT];
1605 BOOST_CHECK(check_it.second != NULL);
1606 up_thread_sorryserver_connect_call_check = false;
1607 check_it.second(LOCAL_PROC);
1608 BOOST_CHECK(up_thread_sorryserver_connect_call_check);
1610 // UP_FUNC_SORRYSERVER_CONNECT_EVENT up_thread_sorryserver_connect_event function
1611 check_it = up_thread_function_array[UP_FUNC_SORRYSERVER_CONNECT_EVENT];
1612 BOOST_CHECK(check_it.second != NULL);
1613 up_thread_sorryserver_connect_event_call_check = false;
1614 check_it.second(LOCAL_PROC);
1615 BOOST_CHECK(up_thread_sorryserver_connect_event_call_check);
1617 // UP_FUNC_SORRYSERVER_CONNECT_FAIL_EVENT up_thread_sorryserver_connection_fail_event function
1618 check_it = up_thread_function_array[UP_FUNC_SORRYSERVER_CONNECT_FAIL_EVENT];
1619 BOOST_CHECK(check_it.second != NULL);
1620 up_thread_sorryserver_connection_fail_event_call_check = false;
1621 check_it.second(LOCAL_PROC);
1622 BOOST_CHECK(up_thread_sorryserver_connection_fail_event_call_check);
1624 // UP_FUNC_SORRYSERVER_SEND up_thread_sorryserver_send function
1625 check_it = up_thread_function_array[UP_FUNC_SORRYSERVER_SEND];
1626 BOOST_CHECK(check_it.second != NULL);
1627 up_thread_sorryserver_send_call_check = false;
1628 check_it.second(LOCAL_PROC);
1629 BOOST_CHECK(up_thread_sorryserver_send_call_check);
1631 // UP_FUNC_SORRYSERVER_DISCONNECT up_thread_sorryserver_disconnect function
1632 check_it = up_thread_function_array[UP_FUNC_SORRYSERVER_DISCONNECT];
1633 BOOST_CHECK(check_it.second != NULL);
1634 up_thread_sorryserver_disconnect_call_check = false;
1635 check_it.second(LOCAL_PROC);
1636 BOOST_CHECK(up_thread_sorryserver_disconnect_call_check);
1638 // UP_FUNC_SORRYSERVER_MOD_DISCONNECT up_thread_sorryserver_mod_disconnect function
1639 check_it = up_thread_function_array[UP_FUNC_SORRYSERVER_MOD_DISCONNECT];
1640 BOOST_CHECK(check_it.second != NULL);
1641 up_thread_sorryserver_mod_disconnect_call_check = false;
1642 check_it.second(LOCAL_PROC);
1643 BOOST_CHECK(up_thread_sorryserver_mod_disconnect_call_check);
1645 // UP_FUNC_SORRYSERVER_DISCONNECT_EVENT up_thread_sorryserver_disconnect_event function
1646 check_it = up_thread_function_array[UP_FUNC_SORRYSERVER_DISCONNECT_EVENT];
1647 BOOST_CHECK(check_it.second != NULL);
1648 up_thread_sorryserver_disconnect_event_call_check = false;
1649 check_it.second(LOCAL_PROC);
1650 BOOST_CHECK(up_thread_sorryserver_disconnect_event_call_check);
1652 // UP_FUNC_SORRY_ENABLE_EVENT up_thread_sorry_enable_event function
1653 check_it = up_thread_function_array[UP_FUNC_SORRY_ENABLE_EVENT];
1654 BOOST_CHECK(check_it.second == NULL);
1656 // UP_FUNC_SORRY_DISABLE_EVENT up_thread_sorry_disable_event function
1657 check_it = up_thread_function_array[UP_FUNC_SORRY_DISABLE_EVENT];
1658 BOOST_CHECK(check_it.second == NULL);
1660 // UP_FUNC_EXIT up_thread_exit function
1661 check_it = up_thread_function_array[UP_FUNC_EXIT];
1662 BOOST_CHECK(check_it.second != NULL);
1663 up_thread_exit_call_check = false;
1664 check_it.second(LOCAL_PROC);
1665 BOOST_CHECK(up_thread_exit_call_check);
1669 void check_down_thread_function_map(){
1670 down_thread_function_pair check_it;
1672 // DOWN_FUNC_CLIENT_DISCONNECT down_thread_client_disconnect function
1673 check_it = down_thread_function_array[DOWN_FUNC_CLIENT_DISCONNECT];
1674 BOOST_CHECK(check_it.second != NULL);
1675 down_thread_client_disconnect_call_check = false;
1676 check_it.second(LOCAL_PROC);
1677 BOOST_CHECK(down_thread_client_disconnect_call_check);
1679 // DOWN_FUNC_CLIENT_DISCONNECT_EVENT down_thread_client_disconnect_event function
1680 check_it = down_thread_function_array[DOWN_FUNC_CLIENT_DISCONNECT_EVENT];
1681 BOOST_CHECK(check_it.second != NULL);
1682 down_thread_client_disconnect_event_call_check = false;
1683 check_it.second(LOCAL_PROC);
1684 BOOST_CHECK(down_thread_client_disconnect_event_call_check);
1686 // DOWN_FUNC_CLIENT_CONNECTION_CHK down_thread_client_connection_chk_event function
1687 check_it = down_thread_function_array[DOWN_FUNC_CLIENT_CONNECTION_CHK];
1688 BOOST_CHECK(check_it.second != NULL);
1689 down_thread_client_connection_chk_event_call_check = false;
1690 check_it.second(LOCAL_PROC);
1691 BOOST_CHECK(down_thread_client_connection_chk_event_call_check);
1693 // DOWN_FUNC_CLIENT_SEND down_thread_client_send function
1694 check_it = down_thread_function_array[DOWN_FUNC_CLIENT_SEND];
1695 BOOST_CHECK(check_it.second != NULL);
1696 down_thread_client_send_call_check = false;
1697 check_it.second(LOCAL_PROC);
1698 BOOST_CHECK(down_thread_client_send_call_check);
1700 // DOWN_FUNC_CLIENT_RESPOND_SEND_EVENT down_thread_client_respond_event function
1701 check_it = down_thread_function_array[DOWN_FUNC_CLIENT_RESPOND_SEND_EVENT];
1702 BOOST_CHECK(check_it.second == NULL);
1704 // DOWN_FUNC_REALSERVER_RECEIVE down_thread_realserver_receive function
1705 check_it = down_thread_function_array[DOWN_FUNC_REALSERVER_RECEIVE];
1706 BOOST_CHECK(check_it.second != NULL);
1707 down_thread_realserver_receive_call_check = false;
1708 check_it.second(LOCAL_PROC);
1709 BOOST_CHECK(down_thread_realserver_receive_call_check);
1711 // DOWN_FUNC_REALSERVER_DISCONNECT down_thread_realserver_disconnect function
1712 check_it = down_thread_function_array[DOWN_FUNC_REALSERVER_DISCONNECT];
1713 BOOST_CHECK(check_it.second != NULL);
1714 down_thread_realserver_disconnect_call_check = false;
1715 check_it.second(LOCAL_PROC);
1716 BOOST_CHECK(down_thread_realserver_disconnect_call_check);
1718 // DOWN_FUNC_REALSERVER_DISCONNECT_EVENT down_thread_realserver_disconnect_event function
1719 check_it = down_thread_function_array[DOWN_FUNC_REALSERVER_DISCONNECT_EVENT];
1720 BOOST_CHECK(check_it.second != NULL);
1721 down_thread_realserver_disconnect_event_call_check = false;
1722 check_it.second(LOCAL_PROC);
1723 BOOST_CHECK(down_thread_realserver_disconnect_event_call_check);
1725 // DOWN_FUNC_REALSERVER_ALL_DISCONNECT down_thread_all_realserver_disconnect function
1726 check_it = down_thread_function_array[DOWN_FUNC_REALSERVER_ALL_DISCONNECT];
1727 BOOST_CHECK(check_it.second != NULL);
1728 down_thread_all_realserver_disconnect_call_check = false;
1729 check_it.second(LOCAL_PROC);
1730 BOOST_CHECK(down_thread_all_realserver_disconnect_call_check);
1732 // DOWN_FUNC_SORRYSERVER_RECEIVE down_thread_sorryserver_receive function
1733 check_it = down_thread_function_array[DOWN_FUNC_SORRYSERVER_RECEIVE];
1734 BOOST_CHECK(check_it.second != NULL);
1735 down_thread_sorryserver_receive_call_check = false;
1736 check_it.second(LOCAL_PROC);
1737 BOOST_CHECK(down_thread_sorryserver_receive_call_check);
1739 // DOWN_FUNC_SORRYSERVER_DISCONNECT down_thread_sorryserver_disconnect function
1740 check_it = down_thread_function_array[DOWN_FUNC_SORRYSERVER_DISCONNECT];
1741 BOOST_CHECK(check_it.second != NULL);
1742 down_thread_sorryserver_disconnect_call_check = false;
1743 check_it.second(LOCAL_PROC);
1744 BOOST_CHECK(down_thread_sorryserver_disconnect_call_check);
1746 // DOWN_FUNC_SORRYSERVER_MOD_DISCONNECT down_thread_sorryserver_mod_disconnect function
1747 check_it = down_thread_function_array[DOWN_FUNC_SORRYSERVER_MOD_DISCONNECT];
1748 BOOST_CHECK(check_it.second != NULL);
1749 down_thread_sorryserver_mod_disconnect_call_check = false;
1750 check_it.second(LOCAL_PROC);
1751 BOOST_CHECK(down_thread_sorryserver_mod_disconnect_call_check);
1753 // DOWN_FUNC_SORRYSERVER_DISCONNECT_EVENT down_thread_sorryserver_disconnect_event function
1754 check_it = down_thread_function_array[DOWN_FUNC_SORRYSERVER_DISCONNECT_EVENT];
1755 BOOST_CHECK(check_it.second != NULL);
1756 down_thread_sorryserver_disconnect_event_call_check = false;
1757 check_it.second(LOCAL_PROC);
1758 BOOST_CHECK(down_thread_sorryserver_disconnect_event_call_check);
1760 // DOWN_FUNC_SORRY_ENABLE_EVENT down_thread_sorry_enable_event function
1761 check_it = down_thread_function_array[DOWN_FUNC_SORRY_ENABLE_EVENT];
1762 BOOST_CHECK(check_it.second == NULL);
1764 // DOWN_FUNC_SORRY_DISABLE_EVENT down_thread_sorry_disable_event function
1765 check_it = down_thread_function_array[DOWN_FUNC_SORRY_DISABLE_EVENT];
1766 BOOST_CHECK(check_it.second == NULL);
1768 // DOWN_FUNC_EXIT down_thread_exit function
1769 check_it = down_thread_function_array[DOWN_FUNC_EXIT];
1770 BOOST_CHECK(check_it.second != NULL);
1771 down_thread_exit_call_check = false;
1772 check_it.second(LOCAL_PROC);
1773 BOOST_CHECK(down_thread_exit_call_check);
1777 void check_up_thread_message_down_thread_function_map(){
1778 std::map< DOWN_THREAD_FUNC_TYPE_TAG, tcp_session_func >::iterator check_it;
1780 // DOWN_FUNC_CLIENT_DISCONNECT down_thread_client_disconnect function
1781 check_it = up_thread_message_down_thread_function_map.find(DOWN_FUNC_CLIENT_DISCONNECT);
1782 BOOST_CHECK(check_it == up_thread_message_down_thread_function_map.end());
1784 // DOWN_FUNC_CLIENT_DISCONNECT_EVENT down_thread_client_disconnect_event function
1785 check_it = up_thread_message_down_thread_function_map.find(DOWN_FUNC_CLIENT_DISCONNECT_EVENT);
1786 BOOST_CHECK(check_it != up_thread_message_down_thread_function_map.end());
1787 down_thread_client_disconnect_event_call_check = false;
1788 check_it->second(LOCAL_PROC);
1789 BOOST_CHECK(down_thread_client_disconnect_event_call_check);
1791 // DOWN_FUNC_CLIENT_CONNECTION_CHK down_thread_client_connection_chk_event function
1792 check_it = up_thread_message_down_thread_function_map.find(DOWN_FUNC_CLIENT_CONNECTION_CHK);
1793 BOOST_CHECK(check_it == up_thread_message_down_thread_function_map.end());
1795 // DOWN_FUNC_CLIENT_SEND down_thread_client_send function
1796 check_it = up_thread_message_down_thread_function_map.find(DOWN_FUNC_CLIENT_SEND);
1797 BOOST_CHECK(check_it == up_thread_message_down_thread_function_map.end());
1799 // DOWN_FUNC_CLIENT_RESPOND_SEND_EVENT down_thread_client_respond_event function
1800 check_it = up_thread_message_down_thread_function_map.find(DOWN_FUNC_CLIENT_RESPOND_SEND_EVENT);
1801 BOOST_CHECK(check_it != up_thread_message_down_thread_function_map.end());
1802 down_thread_client_respond_event_call_check = false;
1803 check_it->second(LOCAL_PROC);
1804 BOOST_CHECK(down_thread_client_respond_event_call_check);
1806 // DOWN_FUNC_REALSERVER_RECEIVE down_thread_realserver_receive function
1807 check_it = up_thread_message_down_thread_function_map.find(DOWN_FUNC_REALSERVER_RECEIVE);
1808 BOOST_CHECK(check_it == up_thread_message_down_thread_function_map.end());
1810 // DOWN_FUNC_REALSERVER_DISCONNECT down_thread_realserver_disconnect function
1811 check_it = up_thread_message_down_thread_function_map.find(DOWN_FUNC_REALSERVER_DISCONNECT);
1812 BOOST_CHECK(check_it == up_thread_message_down_thread_function_map.end());
1814 // DOWN_FUNC_REALSERVER_DISCONNECT_EVENT down_thread_realserver_disconnect_event function
1815 check_it = up_thread_message_down_thread_function_map.find(DOWN_FUNC_REALSERVER_DISCONNECT_EVENT);
1816 BOOST_CHECK(check_it != up_thread_message_down_thread_function_map.end());
1817 down_thread_realserver_disconnect_event_call_check = false;
1818 check_it->second(LOCAL_PROC);
1819 BOOST_CHECK(down_thread_realserver_disconnect_event_call_check);
1821 // DOWN_FUNC_REALSERVER_ALL_DISCONNECT down_thread_all_realserver_disconnect function
1822 check_it = up_thread_message_down_thread_function_map.find(DOWN_FUNC_REALSERVER_ALL_DISCONNECT);
1823 BOOST_CHECK(check_it == up_thread_message_down_thread_function_map.end());
1825 // DOWN_FUNC_SORRYSERVER_RECEIVE down_thread_sorryserver_receive function
1826 check_it = up_thread_message_down_thread_function_map.find(DOWN_FUNC_SORRYSERVER_RECEIVE);
1827 BOOST_CHECK(check_it == up_thread_message_down_thread_function_map.end());
1829 // DOWN_FUNC_SORRYSERVER_DISCONNECT down_thread_sorryserver_disconnect function
1830 check_it = up_thread_message_down_thread_function_map.find(DOWN_FUNC_SORRYSERVER_DISCONNECT);
1831 BOOST_CHECK(check_it == up_thread_message_down_thread_function_map.end());
1833 // DOWN_FUNC_SORRYSERVER_DISCONNECT_EVENT down_thread_sorryserver_disconnect_event function
1834 check_it = up_thread_message_down_thread_function_map.find(DOWN_FUNC_SORRYSERVER_DISCONNECT_EVENT);
1835 BOOST_CHECK(check_it != up_thread_message_down_thread_function_map.end());
1836 down_thread_sorryserver_disconnect_event_call_check = false;
1837 check_it->second(LOCAL_PROC);
1838 BOOST_CHECK(down_thread_sorryserver_disconnect_event_call_check);
1840 // DOWN_FUNC_SORRY_ENABLE_EVENT down_thread_sorry_enable_event function
1841 check_it = up_thread_message_down_thread_function_map.find(DOWN_FUNC_SORRY_ENABLE_EVENT);
1842 BOOST_CHECK(check_it == up_thread_message_down_thread_function_map.end());
1844 // DOWN_FUNC_SORRY_DISABLE_EVENT down_thread_sorry_disable_event function
1845 check_it = up_thread_message_down_thread_function_map.find(DOWN_FUNC_SORRY_DISABLE_EVENT);
1846 BOOST_CHECK(check_it == up_thread_message_down_thread_function_map.end());
1848 // DOWN_FUNC_EXIT down_thread_exit function
1849 check_it = up_thread_message_down_thread_function_map.find(DOWN_FUNC_EXIT);
1850 BOOST_CHECK(check_it == up_thread_message_down_thread_function_map.end());
1853 void check_down_thread_message_up_thread_function_map(){
1854 std::map< UP_THREAD_FUNC_TYPE_TAG, tcp_session_func >::iterator check_it;
1856 // UP_FUNC_CLIENT_ACCEPT up_thread_client_accept_event function
1857 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_CLIENT_ACCEPT);
1858 BOOST_CHECK(check_it == down_thread_message_up_thread_function_map.end());
1860 // UP_FUNC_CLIENT_DISCONNECT up_thread_client_disconnect function
1861 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_CLIENT_DISCONNECT);
1862 BOOST_CHECK(check_it == down_thread_message_up_thread_function_map.end());
1864 // UP_FUNC_CLIENT_DISCONNECT_EVENT up_thread_client_disconnect_event function
1865 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_CLIENT_DISCONNECT_EVENT);
1866 BOOST_CHECK(check_it != down_thread_message_up_thread_function_map.end());
1867 up_thread_client_disconnect_event_call_check = false;
1868 check_it->second(LOCAL_PROC);
1869 BOOST_CHECK(up_thread_client_disconnect_event_call_check);
1871 // UP_FUNC_CLIENT_RECEIVE up_thread_client_receive function
1872 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_CLIENT_RECEIVE);
1873 BOOST_CHECK(check_it == down_thread_message_up_thread_function_map.end());
1875 // UP_FUNC_CLIENT_RESPOND_SEND up_thread_client_respond function
1876 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_CLIENT_RESPOND_SEND);
1877 BOOST_CHECK(check_it == down_thread_message_up_thread_function_map.end());
1879 // UP_FUNC_CLIENT_RESPOND_SEND_EVENT up_thread_client_respond_event function
1880 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_CLIENT_RESPOND_SEND_EVENT);
1881 BOOST_CHECK(check_it == down_thread_message_up_thread_function_map.end());
1883 // UP_FUNC_REALSERVER_GET_DEST_EVENT up_thread_realserver_get_distination_event function
1884 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_REALSERVER_GET_DEST_EVENT);
1885 BOOST_CHECK(check_it == down_thread_message_up_thread_function_map.end());
1887 // UP_FUNC_REALSERVER_CONNECT up_thread_realserver_connect function
1888 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_REALSERVER_CONNECT);
1889 BOOST_CHECK(check_it == down_thread_message_up_thread_function_map.end());
1891 // UP_FUNC_REALSERVER_CONNECT_EVENT _event function
1892 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_REALSERVER_CONNECT_EVENT);
1893 BOOST_CHECK(check_it == down_thread_message_up_thread_function_map.end());
1895 // UP_FUNC_REALSERVER_CONNECT_FAIL_EVENT up_thread_realserver_connection_fail_event function
1896 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_REALSERVER_CONNECT_FAIL_EVENT);
1897 BOOST_CHECK(check_it == down_thread_message_up_thread_function_map.end());
1899 // UP_FUNC_REALSERVER_SEND up_thread_realserver_send function
1900 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_REALSERVER_SEND);
1901 BOOST_CHECK(check_it == down_thread_message_up_thread_function_map.end());
1903 // UP_FUNC_REALSERVER_DISCONNECT up_thread_realserver_disconnect function
1904 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_REALSERVER_DISCONNECT);
1905 BOOST_CHECK(check_it == down_thread_message_up_thread_function_map.end());
1907 // UP_FUNC_REALSERVER_DISCONNECT_EVENT up_thread_realserver_disconnect_event function
1908 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_REALSERVER_DISCONNECT_EVENT);
1909 BOOST_CHECK(check_it != down_thread_message_up_thread_function_map.end());
1910 up_thread_realserver_disconnect_event_call_check = false;
1911 check_it->second(LOCAL_PROC);
1912 BOOST_CHECK(up_thread_realserver_disconnect_event_call_check);
1914 // UP_FUNC_REALSERVER_ALL_DISCONNECT up_thread_all_realserver_disconnect function
1915 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_REALSERVER_ALL_DISCONNECT);
1916 BOOST_CHECK(check_it == down_thread_message_up_thread_function_map.end());
1918 // UP_FUNC_SORRYSERVER_GET_DEST up_thread_sorryserver_get_destination_event function
1919 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_SORRYSERVER_GET_DEST);
1920 BOOST_CHECK(check_it == down_thread_message_up_thread_function_map.end());
1922 // UP_FUNC_SORRYSERVER_CONNECT up_thread_sorryserver_connect function
1923 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_SORRYSERVER_CONNECT);
1924 BOOST_CHECK(check_it == down_thread_message_up_thread_function_map.end());
1926 // UP_FUNC_SORRYSERVER_CONNECT_EVENT up_thread_sorryserver_connect_event function
1927 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_SORRYSERVER_CONNECT_EVENT);
1928 BOOST_CHECK(check_it == down_thread_message_up_thread_function_map.end());
1930 // UP_FUNC_SORRYSERVER_CONNECT_FAIL_EVENT up_thread_sorryserver_connection_fail_event function
1931 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_SORRYSERVER_CONNECT_FAIL_EVENT);
1932 BOOST_CHECK(check_it == down_thread_message_up_thread_function_map.end());
1934 // UP_FUNC_SORRYSERVER_SEND up_thread_sorryserver_send function
1935 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_SORRYSERVER_SEND);
1936 BOOST_CHECK(check_it == down_thread_message_up_thread_function_map.end());
1938 // UP_FUNC_SORRYSERVER_DISCONNECT up_thread_sorryserver_disconnect function
1939 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_SORRYSERVER_DISCONNECT);
1940 BOOST_CHECK(check_it == down_thread_message_up_thread_function_map.end());
1942 // UP_FUNC_SORRYSERVER_DISCONNECT_EVENT up_thread_sorryserver_disconnect_event function
1943 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_SORRYSERVER_DISCONNECT_EVENT);
1944 BOOST_CHECK(check_it != down_thread_message_up_thread_function_map.end());
1945 up_thread_sorryserver_disconnect_event_call_check = false;
1946 check_it->second(LOCAL_PROC);
1947 BOOST_CHECK(up_thread_sorryserver_disconnect_event_call_check);
1949 // UP_FUNC_SORRY_ENABLE_EVENT up_thread_sorry_enable_event function
1950 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_SORRY_ENABLE_EVENT);
1951 BOOST_CHECK(check_it == down_thread_message_up_thread_function_map.end());
1953 // UP_FUNC_SORRY_DISABLE_EVENT up_thread_sorry_disable_event function
1954 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_SORRY_DISABLE_EVENT);
1955 BOOST_CHECK(check_it == down_thread_message_up_thread_function_map.end());
1957 // UP_FUNC_EXIT up_thread_exit function
1958 check_it = down_thread_message_up_thread_function_map.find(UP_FUNC_EXIT);
1959 BOOST_CHECK(check_it == down_thread_message_up_thread_function_map.end());
1962 void check_virtual_service_message_up_thread_function_map(){
1963 std::map< TCP_VIRTUAL_SERVICE_MESSAGE_TAG, tcp_session_func >::iterator check_it;
1964 // SORRY_STATE_ENABLE up_thread_sorry_enable_event function
1965 check_it = virtual_service_message_up_thread_function_map.find(SORRY_STATE_ENABLE);
1966 BOOST_CHECK(check_it != virtual_service_message_up_thread_function_map.end());
1967 up_thread_sorry_enable_event_call_check = false;
1968 check_it->second(LOCAL_PROC);
1969 BOOST_CHECK(up_thread_sorry_enable_event_call_check);
1971 // SORRY_STATE_DISABLE up_thread_sorry_disable_event function
1972 check_it = virtual_service_message_up_thread_function_map.find(SORRY_STATE_DISABLE);
1973 BOOST_CHECK(check_it != virtual_service_message_up_thread_function_map.end());
1974 up_thread_sorry_disable_event_call_check = false;
1975 check_it->second(LOCAL_PROC);
1976 BOOST_CHECK(up_thread_sorry_disable_event_call_check);
1978 // SESSION_END up_thread_exit function
1979 check_it = virtual_service_message_up_thread_function_map.find(SESSION_END);
1980 BOOST_CHECK(check_it != virtual_service_message_up_thread_function_map.end());
1981 up_thread_exit_call_check = false;
1982 check_it->second(LOCAL_PROC);
1983 BOOST_CHECK(up_thread_exit_call_check);
1985 // SESSION_PAUSE_ON non function
1986 check_it = virtual_service_message_up_thread_function_map.find(SESSION_PAUSE_ON);
1987 BOOST_CHECK(check_it == virtual_service_message_up_thread_function_map.end());
1989 // SESSION_PAUSE_OFF non function
1990 check_it = virtual_service_message_up_thread_function_map.find(SESSION_PAUSE_OFF);
1991 BOOST_CHECK(check_it == virtual_service_message_up_thread_function_map.end());
1994 void check_virtual_service_message_down_thread_function_map(){
1995 std::map< TCP_VIRTUAL_SERVICE_MESSAGE_TAG, tcp_session_func >::iterator check_it;
1996 // SORRY_STATE_ENABLE down_thread_sorry_enable_event function
1997 check_it = virtual_service_message_down_thread_function_map.find(SORRY_STATE_ENABLE);
1998 BOOST_CHECK(check_it != virtual_service_message_down_thread_function_map.end());
1999 down_thread_sorry_enable_event_call_check = false;
2000 check_it->second(LOCAL_PROC);
2001 BOOST_CHECK(down_thread_sorry_enable_event_call_check);
2003 // SORRY_STATE_DISABLE down_thread_sorry_disable_event function
2004 check_it = virtual_service_message_down_thread_function_map.find(SORRY_STATE_DISABLE);
2005 BOOST_CHECK(check_it != virtual_service_message_down_thread_function_map.end());
2006 down_thread_sorry_disable_event_call_check = false;
2007 check_it->second(LOCAL_PROC);
2008 BOOST_CHECK(down_thread_sorry_disable_event_call_check);
2010 // SESSION_END down_thread_exit function
2011 check_it = virtual_service_message_down_thread_function_map.find(SESSION_END);
2012 BOOST_CHECK(check_it != virtual_service_message_down_thread_function_map.end());
2013 down_thread_exit_call_check = false;
2014 check_it->second(LOCAL_PROC);
2015 BOOST_CHECK(down_thread_exit_call_check);
2017 // SESSION_PAUSE_ON non function
2018 check_it = virtual_service_message_down_thread_function_map.find(SESSION_PAUSE_ON);
2019 BOOST_CHECK(check_it == virtual_service_message_down_thread_function_map.end());
2021 // SESSION_PAUSE_OFF non function
2022 check_it = virtual_service_message_down_thread_function_map.find(SESSION_PAUSE_OFF);
2023 BOOST_CHECK(check_it == virtual_service_message_down_thread_function_map.end());
2026 void constructer_test(){
2027 BOOST_MESSAGE( "----- constructer test start -----" );
2029 l7vs::virtualservice_tcp vs;
2030 boost::asio::io_service io;
2031 l7vs::tcp_socket_option_info set_option;
2032 //! TCP_NODELAY (false:not set,true:set option)
2033 set_option.nodelay_opt = true;
2034 //! TCP_NODELAY option value (false:off,true:on)
2035 set_option.nodelay_val = true;
2036 //! TCP_CORK (false:not set,true:set option)
2037 set_option.cork_opt = true;
2038 //! TCP_CORK option value (false:off,true:on)
2039 set_option.cork_val = true;
2040 //! TCP_QUICKACK (false:not set,true:set option)
2041 set_option.quickack_opt = true;
2042 //! TCP_QUICKACK option value (false:off,true:on)
2043 set_option.quickack_val = true;
2045 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
2046 bool set_mode(true);
2047 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
2048 bool set_ssl_cache_flag(true);
2049 int set_ssl_handshake_time_out = 111;
2050 std::string access_log_file_name = "test";
2051 l7vs::logger_implement_access* plogger = new l7vs::logger_implement_access(access_log_file_name);
2053 constructer_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
2055 // unit_test [1] constructer initialize member check
2056 std::cerr << "[1] constructer initialize member check" << std::endl;
2057 BOOST_CHECK_EQUAL(&io , &test_obj.get_io());
2058 BOOST_CHECK_EQUAL(&vs,&test_obj.get_parent_service());
2059 BOOST_CHECK(!test_obj.get_exit_flag());
2060 // std::bitset<TCP_SESSION_THREAD_STATE_BIT> ref;
2062 // BOOST_CHECK_EQUAL(ref,test_obj.get_thread_state());
2063 BOOST_CHECK_EQUAL(0, test_obj.get_up_status());
2064 BOOST_CHECK_EQUAL(0, test_obj.get_down_status());
2065 BOOST_CHECK_EQUAL((void*)NULL,test_obj.get_protocol_module());
2066 // BOOST_CHECK(!test_obj.get_session_pause_flag());
2067 BOOST_CHECK_EQUAL(&io , &(test_obj.get_client_socket().get_socket().get_io_service()));
2068 BOOST_CHECK_EQUAL(&io , &(test_obj.get_sorry_socket()->get_socket().get_io_service()));
2069 // unit_test [2] constructer set up_thread_module_event_map check
2070 std::cerr << "[2] constructer set up_thread_module_event_map check" << std::endl;
2071 test_obj.check_up_thread_module_event_map();
2072 // unit_test [3] constructer set down_thread_module_event_map check
2073 std::cerr << "[3] constructer set down_thread_module_event_map check" << std::endl;
2074 test_obj.check_down_thread_module_event_map();
2075 // unit_test [4] constructer set up_thread_function_map check
2076 std::cerr << "[4] constructer set up_thread_function_map check" << std::endl;
2077 test_obj.check_up_thread_function_map();
2078 // unit_test [5] constructer set down_thread_function_map check
2079 std::cerr << "[5] constructer set down_thread_function_map check" << std::endl;
2080 test_obj.check_down_thread_function_map();
2081 // unit_test [6] constructer set up_thread_message_down_thread_function_map check
2082 std::cerr << "[6] constructer set up_thread_message_down_thread_function_map check" << std::endl;
2083 test_obj.check_up_thread_message_down_thread_function_map();
2084 // unit_test [7] constructer set down_thread_message_up_thread_function_map check
2085 std::cerr << "[7] constructer set down_thread_message_up_thread_function_map check" << std::endl;
2086 test_obj.check_down_thread_message_up_thread_function_map();
2087 // unit_test [8] constructer set virtual_service_message_up_thread_function_map check
2088 std::cerr << "[8] constructer set virtual_service_message_up_thread_function_map check" << std::endl;
2089 test_obj.check_virtual_service_message_up_thread_function_map();
2090 // unit_test [9] constructer set virtual_service_message_down_thread_function_map check
2091 std::cerr << "[9] constructer set virtual_service_message_down_thread_function_map check" << std::endl;
2092 test_obj.check_virtual_service_message_down_thread_function_map();
2094 // unit_test [10] constructer set socket option check
2095 std::cerr << "[10] constructer set socket option check" << std::endl;
2097 BOOST_CHECK_EQUAL(test_obj.get_socket_opt_info()->nodelay_opt , set_option.nodelay_opt);
2098 BOOST_CHECK_EQUAL(test_obj.get_socket_opt_info()->nodelay_val , set_option.nodelay_val);
2099 // unit_test [11] constructer set socket option check
2100 std::cerr << "[11] constructer set socket option check" << std::endl;
2102 BOOST_CHECK_EQUAL(test_obj.get_socket_opt_info()->cork_opt , set_option.cork_opt);
2103 BOOST_CHECK_EQUAL(test_obj.get_socket_opt_info()->cork_val , set_option.cork_val);
2104 // unit_test [12] constructer set socket option check
2105 std::cerr << "[12] constructer set socket option check" << std::endl;
2107 BOOST_CHECK_EQUAL(test_obj.get_socket_opt_info()->quickack_opt , set_option.quickack_opt);
2108 BOOST_CHECK_EQUAL(test_obj.get_socket_opt_info()->quickack_val , set_option.quickack_val);
2110 // unit_test [13] constructer client socket set socket option check
2111 std::cerr << "[13] constructer client socket set socket option check" << std::endl;
2113 BOOST_CHECK_EQUAL(test_obj.get_client_socket().opt_info.nodelay_opt , set_option.nodelay_opt);
2114 BOOST_CHECK_EQUAL(test_obj.get_client_socket().opt_info.nodelay_val , set_option.nodelay_val);
2116 BOOST_CHECK_EQUAL(test_obj.get_client_socket().opt_info.cork_opt , set_option.cork_opt);
2117 BOOST_CHECK_EQUAL(test_obj.get_client_socket().opt_info.cork_val , set_option.cork_val);
2119 BOOST_CHECK_EQUAL(test_obj.get_client_socket().opt_info.quickack_opt , set_option.quickack_opt);
2120 BOOST_CHECK_EQUAL(test_obj.get_client_socket().opt_info.quickack_val , set_option.quickack_val);
2122 // unit_test [14] constructer sorry socket set socket option check
2123 std::cerr << "[14] constructer sorry socket set socket option check" << std::endl;
2125 BOOST_CHECK_EQUAL(test_obj.get_sorry_socket()->opt_info.nodelay_opt , set_option.nodelay_opt);
2126 BOOST_CHECK_EQUAL(test_obj.get_sorry_socket()->opt_info.nodelay_val , set_option.nodelay_val);
2128 BOOST_CHECK_EQUAL(test_obj.get_sorry_socket()->opt_info.cork_opt , set_option.cork_opt);
2129 BOOST_CHECK_EQUAL(test_obj.get_sorry_socket()->opt_info.cork_val , set_option.cork_val);
2131 BOOST_CHECK_EQUAL(test_obj.get_sorry_socket()->opt_info.quickack_opt , set_option.quickack_opt);
2132 BOOST_CHECK_EQUAL(test_obj.get_sorry_socket()->opt_info.quickack_val , set_option.quickack_val);
2134 // unit_test [15] constructer client ssl socket set socket option check
2135 std::cerr << "[15] constructer client ssl socket set socket option check" << std::endl;
2137 BOOST_CHECK_EQUAL(test_obj.get_client_ssl_socket().opt_info.nodelay_opt , set_option.nodelay_opt);
2138 BOOST_CHECK_EQUAL(test_obj.get_client_ssl_socket().opt_info.nodelay_val , set_option.nodelay_val);
2140 BOOST_CHECK_EQUAL(test_obj.get_client_ssl_socket().opt_info.cork_opt , set_option.cork_opt);
2141 BOOST_CHECK_EQUAL(test_obj.get_client_ssl_socket().opt_info.cork_val , set_option.cork_val);
2143 BOOST_CHECK_EQUAL(test_obj.get_client_ssl_socket().opt_info.quickack_opt , set_option.quickack_opt);
2144 BOOST_CHECK_EQUAL(test_obj.get_client_ssl_socket().opt_info.quickack_val , set_option.quickack_val);
2146 // unit_test [16] virtualservice_endpoint initialize check
2147 std::cerr << "[16] virtualservice_endpoint initialize check" << std::endl;
2148 BOOST_CHECK_EQUAL(test_obj.get_virtualservice_endpoint() , listen_endpoint);
2150 // unit_test [17] accesslog_flag initialize check
2151 std::cerr << "[17] accesslog_flag initialize check" << std::endl;
2152 BOOST_CHECK_EQUAL(test_obj.get_accesslog_flag() , false);
2154 // unit_test [18] access_loger initialize check
2155 std::cerr << "[18] access_loger initialize check" << std::endl;
2156 BOOST_CHECK_EQUAL(test_obj.get_access_logger() , plogger);
2158 // unit_test [19] ssl_flag initialize check
2159 std::cerr << "[18] ssl_flag initialize check" << std::endl;
2160 BOOST_CHECK_EQUAL(test_obj.get_ssl_flag() , set_mode);
2162 // unit_test [20] ssl_context initialize check
2163 std::cerr << "[20] ssl_context initialize check" << std::endl;
2164 BOOST_CHECK_EQUAL(&(test_obj.get_ssl_context()) , &set_context);
2166 // unit_test [21] ssl_cache_flag initialize check
2167 std::cerr << "[21] ssl_cache_flag initialize check" << std::endl;
2168 BOOST_CHECK_EQUAL(test_obj.get_ssl_cache_flag() , set_ssl_cache_flag);
2170 // unit_test [22] ssl_handshake_timer_flag initialize check
2171 std::cerr << "[21] ssl_handshake_timer_flag initialize check" << std::endl;
2172 BOOST_CHECK_EQUAL(test_obj.get_ssl_handshake_timer_flag() , false);
2174 // unit_test [23] ssl_handshake_time_out initialize check
2175 std::cerr << "[23] ssl_handshake_time_out initialize check" << std::endl;
2176 BOOST_CHECK_EQUAL(test_obj.get_ssl_handshake_time_out() , set_ssl_handshake_time_out);
2178 // unit_test [23] ssl_handshake_timeout_flag initialize check
2179 std::cerr << "[23] ssl_handshake_timeout_flag initialize check" << std::endl;
2180 BOOST_CHECK_EQUAL(test_obj.get_ssl_handshake_timeout_flag() , false);
2185 BOOST_MESSAGE( "----- constructer test end -----" );
2189 // initialize test class
2190 class initialize_test_class : public l7vs::tcp_session{
2192 initialize_test_class(
2193 l7vs::virtualservice_tcp& vs,
2194 boost::asio::io_service& session_io,
2195 l7vs::tcp_socket_option_info& set_socket_option,
2196 boost::asio::ip::tcp::endpoint listen_endpoint,
2198 boost::asio::ssl::context& set_ssl_context,
2199 bool set_ssl_cache_flag,
2200 int set_ssl_handshake_time_out,
2201 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
2208 set_ssl_handshake_time_out,
2209 set_access_logger){};
2212 ~initialize_test_class(){};
2213 bool& get_exit_flag(){
2214 return (bool&)exit_flag;
2216 boost::thread::id& get_up_thread_id(){
2217 return up_thread_id;
2219 boost::thread::id& get_down_thread_id(){
2220 return down_thread_id;
2223 std::bitset<TCP_SESSION_THREAD_STATE_BIT>& get_thread_state(){
2224 return thread_state;
2227 l7vs::tcp_session::UPTHREAD_STATUS_TAG get_up_status(){
2228 return upthread_status;
2230 l7vs::tcp_session::DOWNTHREAD_STATUS_TAG get_down_status(){
2231 return downthread_status;
2233 void set_up_status(int s){
2236 upthread_status = l7vs::tcp_session::UPTHREAD_SLEEP;
2239 upthread_status = l7vs::tcp_session::UPTHREAD_ALIVE;
2242 upthread_status = l7vs::tcp_session::UPTHREAD_ACTIVE;
2245 upthread_status = l7vs::tcp_session::UPTHREAD_LOCK;
2249 void set_down_status(int s){
2252 downthread_status = l7vs::tcp_session::DOWNTHREAD_SLEEP;
2255 downthread_status = l7vs::tcp_session::DOWNTHREAD_ALIVE;
2258 downthread_status = l7vs::tcp_session::DOWNTHREAD_ACTIVE;
2261 downthread_status = l7vs::tcp_session::DOWNTHREAD_LOCK;
2266 l7vs::protocol_module_base* get_protocol_module(){
2267 return protocol_module;
2270 bool& get_session_pause_flag(){
2271 return session_pause_flag;
2274 l7vs::lockfree_queue<l7vs::tcp_thread_message>& get_up_thread_message_que(){
2275 return up_thread_message_que;
2277 l7vs::lockfree_queue<l7vs::tcp_thread_message>& get_down_thread_message_que(){
2278 return down_thread_message_que;
2281 int get_upstream_buffer_size(){
2282 return upstream_buffer_size;
2285 int get_downstream_buffer_size(){
2286 return downstream_buffer_size;
2290 void initialize_test(){
2291 BOOST_MESSAGE( "----- initialize test start -----" );
2293 l7vs::virtualservice_tcp vs;
2294 boost::asio::io_service io;
2295 l7vs::tcp_socket_option_info set_option;
2296 //! TCP_NODELAY (false:not set,true:set option)
2297 set_option.nodelay_opt = false;
2298 //! TCP_NODELAY option value (false:off,true:on)
2299 set_option.nodelay_val = false;
2300 //! TCP_CORK (false:not set,true:set option)
2301 set_option.cork_opt = false;
2302 //! TCP_CORK option value (false:off,true:on)
2303 set_option.cork_val = false;
2304 //! TCP_QUICKACK (false:not set,true:set option)
2305 set_option.quickack_opt = false;
2306 //! TCP_QUICKACK option value (false:off,true:on)
2307 set_option.quickack_val = false;
2309 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
2310 bool set_mode(false);
2311 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
2312 bool set_ssl_cache_flag(false);
2313 int set_ssl_handshake_time_out = 0;
2314 //std::string access_log_file_name = "test";
2315 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
2317 initialize_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
2320 std::string test_protocol_name("test protocol");
2321 l7vs::test_protocol_module proto_test(test_protocol_name);
2322 vs.get_protocol_module_res = &proto_test;
2324 test_obj.get_exit_flag() = true;
2325 test_obj.get_up_thread_id() = boost::this_thread::get_id();
2326 test_obj.get_down_thread_id() = boost::this_thread::get_id();
2327 // test_obj.get_thread_state().set();
2328 test_obj.set_up_status(1);
2329 test_obj.set_down_status(1);
2330 BOOST_CHECK(test_obj.get_protocol_module() != &proto_test);
2331 // test_obj.get_session_pause_flag() = true;
2332 l7vs::tcp_thread_message* test_msg_up = new l7vs::tcp_thread_message;
2333 l7vs::tcp_thread_message* test_msg_dw = new l7vs::tcp_thread_message;
2334 test_obj.get_up_thread_message_que().push(test_msg_up);
2335 BOOST_CHECK(!test_obj.get_up_thread_message_que().empty());
2336 test_obj.get_down_thread_message_que().push(test_msg_dw);
2337 BOOST_CHECK(!test_obj.get_down_thread_message_que().empty());
2339 l7vs::session_result_message res_msg = test_obj.initialize();
2341 // unit_test [1] initialize exit flag check
2342 std::cerr << "[1] initialize exit flag check" << std::endl;
2343 BOOST_CHECK(!test_obj.get_exit_flag());
2345 // unit_test [2] initialize up thread id check
2346 std::cerr << "[2] initialize up thread id check" << std::endl;
2347 BOOST_CHECK(test_obj.get_up_thread_id() == boost::thread::id());
2349 // unit_test [3] initialize down thread id check
2350 std::cerr << "[3] initialize down thread id check" << std::endl;
2351 BOOST_CHECK(test_obj.get_down_thread_id() == boost::thread::id());
2353 // unit_test [4] initialize thread state check
2354 std::cerr << "[4] initialize thread state check" << std::endl;
2355 // BOOST_CHECK(test_obj.get_thread_state().none());
2356 BOOST_CHECK(test_obj.get_up_status() == 0);
2357 BOOST_CHECK(test_obj.get_down_status() == 0);
2359 // unit_test [5] initialize session pause flag check
2360 std::cerr << "[5] initialize session pause flag check" << std::endl;
2361 // BOOST_CHECK(!test_obj.get_session_pause_flag());
2363 // unit_test [6] initialize up thread message que check
2364 std::cerr << "[6] initialize up thread message que check" << std::endl;
2365 BOOST_CHECK(test_obj.get_up_thread_message_que().empty());
2368 // unit_test [7] initialize down thread message que check
2369 std::cerr << "[7] initialize down thread message que check" << std::endl;
2370 BOOST_CHECK(test_obj.get_down_thread_message_que().empty());
2373 // unit_test [8] initialize get protocol module pointer check
2374 std::cerr << "[8] initialize get protocol module pointer check" << std::endl;
2375 BOOST_CHECK(test_obj.get_protocol_module() == &proto_test);
2377 // unit_test [9] initialize session_result_message flag check
2378 std::cerr << "[9] initialize session_result_message flag check" << std::endl;
2379 BOOST_CHECK(!res_msg.flag);
2381 // unit_test [10] initialize upstream_buffer_size load cf check
2382 std::cerr << "[10] initialize upstream_buffer_size load cf check" << std::endl;
2383 BOOST_CHECK_EQUAL(test_obj.get_upstream_buffer_size() , 7777);
2385 // unit_test [11] initialize downstream_buffer_size load cf check
2386 std::cerr << "[11] initialize downstream_buffer_size load cf check" << std::endl;
2387 BOOST_CHECK_EQUAL(test_obj.get_downstream_buffer_size() , 8888);
2389 // unit_test [12] initialize protocol_module NULL error check
2390 std::cerr << "[12] initialize protocol_module NULL error check" << std::endl;
2391 vs.get_protocol_module_res = NULL;
2392 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
2393 l7vs::Logger::putLogError_id = 0;
2394 res_msg = test_obj.initialize();
2395 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
2396 BOOST_CHECK_EQUAL(5,l7vs::Logger::putLogError_id);
2397 std::cerr << l7vs::Logger::putLogError_message << std::endl;
2398 BOOST_CHECK(res_msg.flag);
2399 std::cerr << res_msg.message << std::endl;
2401 BOOST_MESSAGE( "----- initialize test end -----" );
2405 // get_client_socket test
2406 // get_client_socket test class
2407 class get_client_socket_test_class : public l7vs::tcp_session{
2409 // get_client_socket_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){};
2410 get_client_socket_test_class(
2411 l7vs::virtualservice_tcp& vs,
2412 boost::asio::io_service& session_io,
2413 l7vs::tcp_socket_option_info& set_socket_option,
2414 boost::asio::ip::tcp::endpoint listen_endpoint,
2416 boost::asio::ssl::context& set_ssl_context,
2417 bool set_ssl_cache_flag,
2418 int set_ssl_handshake_time_out,
2419 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
2426 set_ssl_handshake_time_out,
2427 set_access_logger){};
2431 ~get_client_socket_test_class(){};
2432 l7vs::tcp_socket& get_client_tcp_socket(){
2433 return client_socket;
2435 l7vs::tcp_ssl_socket& get_client_ssl_tcp_socket(){
2436 return client_ssl_socket;
2441 void get_client_socket_test(){
2442 BOOST_MESSAGE( "----- get_client_socket test start -----" );
2446 // boost::asio::io_service io;
2447 // l7vs::virtualservice_tcp vs;
2448 // get_client_socket_test_class test_obj(vs,io);
2449 l7vs::virtualservice_tcp vs;
2450 boost::asio::io_service io;
2451 l7vs::tcp_socket_option_info set_option;
2452 //! TCP_NODELAY (false:not set,true:set option)
2453 set_option.nodelay_opt = false;
2454 //! TCP_NODELAY option value (false:off,true:on)
2455 set_option.nodelay_val = false;
2456 //! TCP_CORK (false:not set,true:set option)
2457 set_option.cork_opt = false;
2458 //! TCP_CORK option value (false:off,true:on)
2459 set_option.cork_val = false;
2460 //! TCP_QUICKACK (false:not set,true:set option)
2461 set_option.quickack_opt = false;
2462 //! TCP_QUICKACK option value (false:off,true:on)
2463 set_option.quickack_val = false;
2465 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
2466 bool set_mode(false);
2467 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
2468 bool set_ssl_cache_flag(false);
2469 int set_ssl_handshake_time_out = 0;
2470 //std::string access_log_file_name = "test";
2471 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
2473 get_client_socket_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
2476 l7vs::tcp_socket& ref_tcp_socket = test_obj.get_client_tcp_socket();
2477 boost::asio::ip::tcp::socket& ref_socket = ref_tcp_socket.my_socket;
2478 boost::asio::ip::tcp::socket& chk_socket = test_obj.get_client_socket();
2480 // unit_test [1] get_client_socket check
2481 std::cerr << "[1] get_client_socket check" << std::endl;
2482 BOOST_CHECK_EQUAL(&ref_socket,&chk_socket);
2485 l7vs::tcp_ssl_socket& ref_tcp_ssl_socket = test_obj.get_client_ssl_tcp_socket();
2486 ssl_socket& ref_ssl_socket = ref_tcp_ssl_socket.get_socket();
2487 ssl_socket& chk_ssl_socket = test_obj.get_client_ssl_socket();
2489 // unit_test [2] get_client_ssl_socket check
2490 std::cerr << "[2] get_client_ssl_socket check" << std::endl;
2491 BOOST_CHECK_EQUAL(&ref_ssl_socket,&chk_ssl_socket);
2493 BOOST_MESSAGE( "----- get_client_socket test end -----" );
2497 // handle_ssl_handshake_timer test
2498 // handle_ssl_handshake_timer test class
2499 class handle_ssl_handshake_timer_test_class : public l7vs::tcp_session{
2501 // handle_ssl_handshake_timer_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){};
2502 handle_ssl_handshake_timer_test_class(
2503 l7vs::virtualservice_tcp& vs,
2504 boost::asio::io_service& session_io,
2505 l7vs::tcp_socket_option_info& set_socket_option,
2506 boost::asio::ip::tcp::endpoint listen_endpoint,
2508 boost::asio::ssl::context& set_ssl_context,
2509 bool set_ssl_cache_flag,
2510 int set_ssl_handshake_time_out,
2511 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
2518 set_ssl_handshake_time_out,
2519 set_access_logger){};
2521 ~handle_ssl_handshake_timer_test_class(){};
2522 bool& get_ssl_handshake_time_out_flag(){
2523 return ssl_handshake_time_out_flag;
2525 void test_call(const boost::system::error_code& error){
2526 l7vs::tcp_session::handle_ssl_handshake_timer(error);
2529 void handle_ssl_handshake_timer_test(){
2531 BOOST_MESSAGE( "----- handle_ssl_handshake_timer test start -----" );
2533 // boost::asio::io_service io;
2534 // l7vs::virtualservice_tcp vs;
2535 // up_thread_exit_test_class test_obj(vs,io);
2537 l7vs::virtualservice_tcp vs;
2538 boost::asio::io_service io;
2539 l7vs::tcp_socket_option_info set_option;
2540 //! TCP_NODELAY (false:not set,true:set option)
2541 set_option.nodelay_opt = false;
2542 //! TCP_NODELAY option value (false:off,true:on)
2543 set_option.nodelay_val = false;
2544 //! TCP_CORK (false:not set,true:set option)
2545 set_option.cork_opt = false;
2546 //! TCP_CORK option value (false:off,true:on)
2547 set_option.cork_val = false;
2548 //! TCP_QUICKACK (false:not set,true:set option)
2549 set_option.quickack_opt = false;
2550 //! TCP_QUICKACK option value (false:off,true:on)
2551 set_option.quickack_val = false;
2553 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
2554 bool set_mode(false);
2555 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
2556 bool set_ssl_cache_flag(false);
2557 int set_ssl_handshake_time_out = 0;
2558 //std::string access_log_file_name = "test";
2559 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
2561 handle_ssl_handshake_timer_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
2563 // unit_test [1] ssl_handshake_time_out_flag update check
2564 std::cerr << "[1] ssl_handshake_time_out_flag update check" << std::endl;
2566 bool& ref_flag = test_obj.get_ssl_handshake_time_out_flag();
2570 boost::system::error_code test_call_ec;
2571 test_obj.test_call(test_call_ec);
2573 BOOST_CHECK(ref_flag);
2575 mutex_lock_test test_lock_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
2577 test_lock_obj.set_handle_ssl_handshake_timer_test();
2579 test_lock_obj.test_thread_wait.lock();
2580 boost::thread::id proc_id = boost::this_thread::get_id();
2581 test_lock_obj.befor_thread_id = proc_id;
2582 test_lock_obj.after_thread_id = proc_id;
2583 test_lock_obj.mutex_lock();
2585 boost::thread test_thread(boost::bind(&mutex_lock_test::test_run,&test_lock_obj));
2587 BOOST_CHECK(test_lock_obj.befor_thread_id == proc_id);
2588 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
2590 boost::thread::id test_id = test_thread.get_id();
2592 BOOST_CHECK(test_id != proc_id);
2595 test_lock_obj.test_thread_wait.unlock();
2598 // unit_test [2] set_handle_ssl_handshake_timer_test thread block test (mutex lock)
2599 std::cerr << "[2] set_handle_ssl_handshake_timer_test thread block test (mutex lock)" << std::endl;
2600 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
2601 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
2603 test_lock_obj.mutex_unlock();
2606 // unit_test [3] set_handle_ssl_handshake_timer_test thread run test (mutex unlock)
2607 std::cerr << "[3] set_handle_ssl_handshake_timer_test thread run test (mutex unlock)" << std::endl;
2608 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
2609 BOOST_CHECK(test_lock_obj.after_thread_id == test_id);
2611 BOOST_MESSAGE( "----- handle_ssl_handshake_timer test end -----" );
2616 // is_thread_wait test
2617 // is_thread_wait test class
2618 class is_thread_wait_test_class : public l7vs::tcp_session{
2620 // is_thread_wait_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){};
2621 is_thread_wait_test_class(
2622 l7vs::virtualservice_tcp& vs,
2623 boost::asio::io_service& session_io,
2624 l7vs::tcp_socket_option_info& set_socket_option,
2625 boost::asio::ip::tcp::endpoint listen_endpoint,
2627 boost::asio::ssl::context& set_ssl_context,
2628 bool set_ssl_cache_flag,
2629 int set_ssl_handshake_time_out,
2630 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
2637 set_ssl_handshake_time_out,
2638 set_access_logger){};
2643 ~is_thread_wait_test_class(){};
2645 std::bitset<TCP_SESSION_THREAD_STATE_BIT>& get_thread_state(){
2646 return thread_state;
2648 l7vs::tcp_session::UPTHREAD_STATUS_TAG get_up_status(){
2649 return upthread_status;
2651 l7vs::tcp_session::DOWNTHREAD_STATUS_TAG get_down_status(){
2652 return downthread_status;
2655 void is_thread_wait_test(){
2656 BOOST_MESSAGE( "----- is_thread_wait test start -----" );
2658 // boost::asio::io_service io;
2659 // l7vs::virtualservice_tcp vs;
2660 // is_thread_wait_test_class test_obj(vs,io);
2661 l7vs::virtualservice_tcp vs;
2662 boost::asio::io_service io;
2663 l7vs::tcp_socket_option_info set_option;
2664 //! TCP_NODELAY (false:not set,true:set option)
2665 set_option.nodelay_opt = false;
2666 //! TCP_NODELAY option value (false:off,true:on)
2667 set_option.nodelay_val = false;
2668 //! TCP_CORK (false:not set,true:set option)
2669 set_option.cork_opt = false;
2670 //! TCP_CORK option value (false:off,true:on)
2671 set_option.cork_val = false;
2672 //! TCP_QUICKACK (false:not set,true:set option)
2673 set_option.quickack_opt = false;
2674 //! TCP_QUICKACK option value (false:off,true:on)
2675 set_option.quickack_val = false;
2677 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
2678 bool set_mode(false);
2679 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
2680 bool set_ssl_cache_flag(false);
2681 int set_ssl_handshake_time_out = 0;
2682 //std::string access_log_file_name = "test";
2683 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
2685 is_thread_wait_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
2687 std::bitset<TCP_SESSION_THREAD_STATE_BIT>& test_bitset = test_obj.get_thread_state();
2689 test_bitset.reset();
2690 BOOST_CHECK(test_bitset.none());
2691 BOOST_CHECK(!test_obj.is_thread_wait());
2693 // unit_test [1] is_thread_wait return check
2694 std::cerr << "[1] is_thread_wait return check" << std::endl;
2697 test_bitset.reset();
2698 BOOST_CHECK(test_bitset.none());
2699 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0001);
2700 BOOST_CHECK(!test_obj.is_thread_wait());
2702 // DOWN_THREAD_ALIVE
2703 test_bitset.reset();
2704 BOOST_CHECK(test_bitset.none());
2705 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0002);
2706 BOOST_CHECK(!test_obj.is_thread_wait());
2709 test_bitset.reset();
2710 BOOST_CHECK(test_bitset.none());
2711 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0004);
2712 BOOST_CHECK(!test_obj.is_thread_wait());
2714 // DOWN_THREAD_ACTIVE
2715 test_bitset.reset();
2716 BOOST_CHECK(test_bitset.none());
2717 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0008);
2718 BOOST_CHECK(!test_obj.is_thread_wait());
2721 test_bitset.reset();
2722 BOOST_CHECK(test_bitset.none());
2723 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0010);
2724 BOOST_CHECK(!test_obj.is_thread_wait());
2727 test_bitset.reset();
2728 BOOST_CHECK(test_bitset.none());
2729 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0020);
2730 BOOST_CHECK(!test_obj.is_thread_wait());
2732 // UP_THREAD_LOCK & DOWN_THREAD_LOCK
2733 test_bitset.reset();
2734 BOOST_CHECK(test_bitset.none());
2735 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0010);
2736 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0020);
2737 BOOST_CHECK(test_obj.is_thread_wait());
2739 // UP_THREAD_ALIVE DOWN_THREAD_ALIVE UP_THREAD_ACTIVE DOWN_THREAD_ACTIVE
2740 test_bitset.reset();
2741 BOOST_CHECK(test_bitset.none());
2742 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0001);
2743 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0002);
2744 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0004);
2745 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0008);
2746 BOOST_CHECK(!test_obj.is_thread_wait());
2748 // UP_THREAD_ALIVE DOWN_THREAD_ALIVE UP_THREAD_ACTIVE DOWN_THREAD_ACTIVE UP_THREAD_LOCK
2749 test_bitset.reset();
2750 BOOST_CHECK(test_bitset.none());
2751 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0001);
2752 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0002);
2753 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0004);
2754 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0008);
2755 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0010);
2756 BOOST_CHECK(!test_obj.is_thread_wait());
2758 // UP_THREAD_ALIVE DOWN_THREAD_ALIVE UP_THREAD_ACTIVE DOWN_THREAD_ACTIVE DOWN_THREAD_LOCK
2759 test_bitset.reset();
2760 BOOST_CHECK(test_bitset.none());
2761 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0001);
2762 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0002);
2763 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0004);
2764 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0008);
2765 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0020);
2766 BOOST_CHECK(!test_obj.is_thread_wait());
2768 // UP_THREAD_ALIVE DOWN_THREAD_ALIVE UP_THREAD_ACTIVE DOWN_THREAD_ACTIVE UP_THREAD_LOCK DOWN_THREAD_LOCK
2769 test_bitset.reset();
2770 BOOST_CHECK(test_bitset.none());
2771 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0001);
2772 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0002);
2773 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0004);
2774 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0008);
2775 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0010);
2776 test_bitset |= std::bitset<TCP_SESSION_THREAD_STATE_BIT>(0x0020);
2777 BOOST_CHECK(test_obj.is_thread_wait());
2779 //mutex_lock_test test_lock_obj(vs,io);
2780 mutex_lock_test test_lock_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
2783 test_lock_obj.set_up_thread_exit_test();
2785 test_lock_obj.test_thread_wait.lock();
2786 boost::thread::id proc_id = boost::this_thread::get_id();
2787 test_lock_obj.befor_thread_id = proc_id;
2788 test_lock_obj.after_thread_id = proc_id;
2789 test_lock_obj.mutex_lock();
2791 boost::thread test_thread(boost::bind(&mutex_lock_test::test_run,&test_lock_obj));
2793 BOOST_CHECK(test_lock_obj.befor_thread_id == proc_id);
2794 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
2796 boost::thread::id test_id = test_thread.get_id();
2798 BOOST_CHECK(test_id != proc_id);
2801 test_lock_obj.test_thread_wait.unlock();
2804 // unit_test [2] is_thread_wait thread block test (mutex lock)
2805 std::cerr << "[2] is_thread_wait thread block test (mutex lock)" << std::endl;
2806 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
2807 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
2809 test_lock_obj.mutex_unlock();
2812 // unit_test [3] is_thread_wait thread run test (mutex unlock)
2813 std::cerr << "[3] is_thread_wait thread run test (mutex unlock)" << std::endl;
2814 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
2815 BOOST_CHECK(test_lock_obj.after_thread_id == test_id);
2817 BOOST_MESSAGE( "----- is_thread_wait test end -----" );
2821 // set_virtual_service_message test
2822 // set_virtual_service_message test class
2823 class set_virtual_service_message_test_class : public l7vs::tcp_session{
2825 // set_virtual_service_message_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){};
2826 set_virtual_service_message_test_class(
2827 l7vs::virtualservice_tcp& vs,
2828 boost::asio::io_service& session_io,
2829 l7vs::tcp_socket_option_info& set_socket_option,
2830 boost::asio::ip::tcp::endpoint listen_endpoint,
2832 boost::asio::ssl::context& set_ssl_context,
2833 bool set_ssl_cache_flag,
2834 int set_ssl_handshake_time_out,
2835 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
2842 set_ssl_handshake_time_out,
2843 set_access_logger){};
2848 ~set_virtual_service_message_test_class(){};
2851 bool& get_session_pause_flag(){
2852 return session_pause_flag;
2856 bool& get_access_log_flag(){
2857 return access_log_flag;
2860 l7vs::lockfree_queue<l7vs::tcp_thread_message>& get_up_thread_message_que(){
2861 return up_thread_message_que;
2864 l7vs::lockfree_queue<l7vs::tcp_thread_message>& get_down_thread_message_que(){
2865 return down_thread_message_que;
2868 std::map< TCP_VIRTUAL_SERVICE_MESSAGE_TAG, tcp_session_func>& get_virtual_service_message_up_thread_function_map(){
2869 return virtual_service_message_up_thread_function_map;
2872 std::map< TCP_VIRTUAL_SERVICE_MESSAGE_TAG, tcp_session_func>& get_virtual_service_message_down_thread_function_map(){
2873 return virtual_service_message_down_thread_function_map;
2876 void up_thread_sorry_enable_event(const TCP_PROCESS_TYPE_TAG process_type){
2877 up_thread_sorry_enable_event_call_check = true;
2879 bool up_thread_sorry_enable_event_call_check;
2881 void up_thread_sorry_disable_event(const TCP_PROCESS_TYPE_TAG process_type){
2882 up_thread_sorry_disable_event_call_check = true;
2884 bool up_thread_sorry_disable_event_call_check;
2886 void up_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
2887 up_thread_exit_call_check = true;
2889 bool up_thread_exit_call_check;
2891 void down_thread_sorry_enable_event(const TCP_PROCESS_TYPE_TAG process_type){
2892 down_thread_sorry_enable_event_call_check = true;
2894 bool down_thread_sorry_enable_event_call_check;
2896 void down_thread_sorry_disable_event(const TCP_PROCESS_TYPE_TAG process_type){
2897 down_thread_sorry_disable_event_call_check = true;
2899 bool down_thread_sorry_disable_event_call_check;
2901 void down_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
2902 down_thread_exit_call_check = true;
2904 bool down_thread_exit_call_check;
2906 void set_virtual_service_message_test(){
2907 BOOST_MESSAGE( "----- set_virtual_service_message test start -----" );
2909 // boost::asio::io_service io;
2910 // l7vs::virtualservice_tcp vs;
2911 // set_virtual_service_message_test_class test_obj(vs,io);
2912 l7vs::virtualservice_tcp vs;
2913 boost::asio::io_service io;
2914 l7vs::tcp_socket_option_info set_option;
2915 //! TCP_NODELAY (false:not set,true:set option)
2916 set_option.nodelay_opt = false;
2917 //! TCP_NODELAY option value (false:off,true:on)
2918 set_option.nodelay_val = false;
2919 //! TCP_CORK (false:not set,true:set option)
2920 set_option.cork_opt = false;
2921 //! TCP_CORK option value (false:off,true:on)
2922 set_option.cork_val = false;
2923 //! TCP_QUICKACK (false:not set,true:set option)
2924 set_option.quickack_opt = false;
2925 //! TCP_QUICKACK option value (false:off,true:on)
2926 set_option.quickack_val = false;
2928 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
2929 bool set_mode(false);
2930 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
2931 bool set_ssl_cache_flag(false);
2932 int set_ssl_handshake_time_out = 0;
2933 //std::string access_log_file_name = "test";
2934 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
2936 set_virtual_service_message_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
2939 // bool& ref_pause_flag = test_obj.get_session_pause_flag();
2940 bool& ref_access_log_flag = test_obj.get_access_log_flag();
2941 l7vs::lockfree_queue<l7vs::tcp_thread_message>& ref_up_msg_que = test_obj.get_up_thread_message_que();
2942 l7vs::lockfree_queue<l7vs::tcp_thread_message>& ref_dw_msg_que = test_obj.get_down_thread_message_que();
2943 l7vs::tcp_thread_message* up_msg;
2944 l7vs::tcp_thread_message* dw_msg;
2945 // std::map< l7vs::tcp_session::TCP_VIRTUAL_SERVICE_MESSAGE_TAG, boost::function< void(l7vs::tcp_session::TCP_PROCESS_TYPE_TAG) > >& ref_vs_up_msg_map = test_obj.get_virtual_service_message_up_thread_function_map();
2946 // std::map< l7vs::tcp_session::TCP_VIRTUAL_SERVICE_MESSAGE_TAG, boost::function< void(l7vs::tcp_session::TCP_PROCESS_TYPE_TAG) > >& ref_vs_dw_msg_map = test_obj.get_virtual_service_message_down_thread_function_map();
2948 // unit_test [1] set_virtual_service_message SORRY_STATE_ENABLE
2949 std::cerr << "[1] set_virtual_service_message SORRY_STATE_ENABLE" << std::endl;
2951 while( !ref_up_msg_que.empty() ){
2952 up_msg = ref_up_msg_que.pop();
2955 BOOST_CHECK(ref_up_msg_que.empty());
2956 while( !ref_dw_msg_que.empty() ){
2957 dw_msg =ref_dw_msg_que.pop();
2960 BOOST_CHECK(ref_dw_msg_que.empty());
2962 test_obj.set_virtual_service_message(l7vs::tcp_session::SORRY_STATE_ENABLE);
2964 BOOST_CHECK(!ref_up_msg_que.empty());
2965 up_msg = ref_up_msg_que.pop();
2966 BOOST_CHECK(ref_up_msg_que.empty());
2967 test_obj.up_thread_sorry_enable_event_call_check = false;
2968 up_msg->message(l7vs::tcp_session::LOCAL_PROC);
2969 BOOST_CHECK(test_obj.up_thread_sorry_enable_event_call_check);
2972 BOOST_CHECK(!ref_dw_msg_que.empty());
2973 dw_msg = ref_dw_msg_que.pop();
2974 BOOST_CHECK(ref_dw_msg_que.empty());
2975 test_obj.down_thread_sorry_enable_event_call_check = false;
2976 dw_msg->message(l7vs::tcp_session::LOCAL_PROC);
2977 BOOST_CHECK(test_obj.down_thread_sorry_enable_event_call_check);
2980 // unit_test [2] set_virtual_service_message SORRY_STATE_DISABLE
2981 std::cerr << "[2] set_virtual_service_message SORRY_STATE_DISABLE" << std::endl;
2983 while( !ref_up_msg_que.empty() ){
2984 up_msg = ref_up_msg_que.pop();
2987 BOOST_CHECK(ref_up_msg_que.empty());
2988 while( !ref_dw_msg_que.empty() ){
2989 dw_msg =ref_dw_msg_que.pop();
2992 BOOST_CHECK(ref_dw_msg_que.empty());
2994 test_obj.set_virtual_service_message(l7vs::tcp_session::SORRY_STATE_DISABLE);
2996 BOOST_CHECK(!ref_up_msg_que.empty());
2997 up_msg = ref_up_msg_que.pop();
2998 BOOST_CHECK(ref_up_msg_que.empty());
2999 test_obj.up_thread_sorry_disable_event_call_check = false;
3000 up_msg->message(l7vs::tcp_session::LOCAL_PROC);
3001 BOOST_CHECK(test_obj.up_thread_sorry_disable_event_call_check);
3004 BOOST_CHECK(!ref_dw_msg_que.empty());
3005 dw_msg = ref_dw_msg_que.pop();
3006 BOOST_CHECK(ref_dw_msg_que.empty());
3007 test_obj.down_thread_sorry_disable_event_call_check = false;
3008 dw_msg->message(l7vs::tcp_session::LOCAL_PROC);
3009 BOOST_CHECK(test_obj.down_thread_sorry_disable_event_call_check);
3012 // unit_test [3] set_virtual_service_message SESSION_END
3013 std::cerr << "[3] set_virtual_service_message SESSION_END" << std::endl;
3015 while( !ref_up_msg_que.empty() ){
3016 up_msg = ref_up_msg_que.pop();
3019 BOOST_CHECK(ref_up_msg_que.empty());
3020 while( !ref_dw_msg_que.empty() ){
3021 dw_msg =ref_dw_msg_que.pop();
3024 BOOST_CHECK(ref_dw_msg_que.empty());
3026 test_obj.set_virtual_service_message(l7vs::tcp_session::SESSION_END);
3028 BOOST_CHECK(!ref_up_msg_que.empty());
3029 up_msg = ref_up_msg_que.pop();
3030 BOOST_CHECK(ref_up_msg_que.empty());
3031 test_obj.up_thread_exit_call_check = false;
3032 up_msg->message(l7vs::tcp_session::LOCAL_PROC);
3033 BOOST_CHECK(test_obj.up_thread_exit_call_check);
3036 BOOST_CHECK(!ref_dw_msg_que.empty());
3037 dw_msg = ref_dw_msg_que.pop();
3038 BOOST_CHECK(ref_dw_msg_que.empty());
3039 test_obj.down_thread_exit_call_check = false;
3040 dw_msg->message(l7vs::tcp_session::LOCAL_PROC);
3041 BOOST_CHECK(test_obj.down_thread_exit_call_check);
3044 // unit_test [4] set_virtual_service_message SESSION_PAUSE_ON
3045 std::cerr << "[4] set_virtual_service_message SESSION_PAUSE_ON" << std::endl;
3046 // ref_pause_flag = false;
3047 test_obj.set_virtual_service_message(l7vs::tcp_session::SESSION_PAUSE_ON);
3048 // BOOST_CHECK(ref_pause_flag);
3050 // unit_test [5] set_virtual_service_message SESSION_PAUSE_OFF
3051 std::cerr << "[5] set_virtual_service_message SESSION_PAUSE_OFF" << std::endl;
3052 // ref_pause_flag = true;
3053 test_obj.set_virtual_service_message(l7vs::tcp_session::SESSION_PAUSE_OFF);
3054 // BOOST_CHECK(!ref_pause_flag);
3056 // unit_test [6] set_virtual_service_message ACCESS_LOG_ON
3057 std::cerr << "[6] set_virtual_service_message ACCESS_LOG__ON" << std::endl;
3058 ref_access_log_flag = false;
3059 test_obj.set_virtual_service_message(l7vs::tcp_session::ACCESS_LOG_ON);
3060 BOOST_CHECK(ref_access_log_flag);
3062 // unit_test [7] set_virtual_service_message ACCESS_LOG_OFF
3063 std::cerr << "[7] set_virtual_service_message ACCESS_LOG_OFF" << std::endl;
3064 ref_access_log_flag = true;
3065 test_obj.set_virtual_service_message(l7vs::tcp_session::ACCESS_LOG_OFF);
3066 BOOST_CHECK(!ref_access_log_flag);
3069 // unit_test [8] set_virtual_service_message up thread map find not message error
3070 std::cerr << "[8] set_virtual_service_message up thread map find not message error" << std::endl;
3071 ref_vs_up_msg_map.clear();
3072 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
3073 l7vs::Logger::putLogError_id = 0;
3074 while( !ref_up_msg_que.empty() ){
3075 up_msg = ref_up_msg_que.pop();
3078 BOOST_CHECK(ref_up_msg_que.empty());
3079 while( !ref_dw_msg_que.empty() ){
3080 dw_msg =ref_dw_msg_que.pop();
3083 BOOST_CHECK(ref_dw_msg_que.empty());
3085 test_obj.set_virtual_service_message(l7vs::tcp_session::SORRY_STATE_ENABLE);
3087 BOOST_CHECK(ref_up_msg_que.empty());
3088 BOOST_CHECK(!ref_dw_msg_que.empty());
3090 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
3091 BOOST_CHECK_EQUAL(6,l7vs::Logger::putLogError_id);
3092 std::cerr << l7vs::Logger::putLogError_message << std::endl;
3094 // unit_test [9] set_virtual_service_message up thread map find not message error
3095 std::cerr << "[9] set_virtual_service_message up thread map find not message error" << std::endl;
3096 ref_vs_dw_msg_map.clear();
3097 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
3098 l7vs::Logger::putLogError_id = 0;
3099 ref_vs_dw_msg_map.clear();
3100 BOOST_CHECK(ref_up_msg_que.empty());
3101 while( !ref_dw_msg_que.empty() ){
3102 dw_msg =ref_dw_msg_que.pop();
3105 BOOST_CHECK(ref_dw_msg_que.empty());
3107 test_obj.set_virtual_service_message(l7vs::tcp_session::SORRY_STATE_ENABLE);
3109 BOOST_CHECK(ref_up_msg_que.empty());
3110 BOOST_CHECK(ref_dw_msg_que.empty());
3112 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
3113 BOOST_CHECK_EQUAL(7,l7vs::Logger::putLogError_id);
3114 std::cerr << l7vs::Logger::putLogError_message << std::endl;
3117 BOOST_MESSAGE( "----- set_virtual_service_message test end -----" );
3121 // up_thread_run test class
3122 class up_thread_run_test_class : public l7vs::tcp_session{
3124 // up_thread_run_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){
3125 up_thread_run_test_class(
3126 l7vs::virtualservice_tcp& vs,
3127 boost::asio::io_service& session_io,
3128 l7vs::tcp_socket_option_info& set_socket_option,
3129 boost::asio::ip::tcp::endpoint listen_endpoint,
3131 boost::asio::ssl::context& set_ssl_context,
3132 bool set_ssl_cache_flag,
3133 int set_ssl_handshake_time_out,
3134 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
3141 set_ssl_handshake_time_out,
3146 ~up_thread_run_test_class(){};
3147 bool& get_exit_flag(){
3148 return (bool&)exit_flag;
3152 bool& get_session_pause_flag(){
3153 return session_pause_flag;
3158 std::bitset<TCP_SESSION_THREAD_STATE_BIT>& get_thread_state(){
3159 return thread_state;
3162 l7vs::tcp_session::UPTHREAD_STATUS_TAG& get_up_status(){
3163 return upthread_status;
3165 l7vs::tcp_session::DOWNTHREAD_STATUS_TAG& get_down_status(){
3166 return downthread_status;
3168 void set_up_status(int s){
3171 upthread_status = l7vs::tcp_session::UPTHREAD_SLEEP;
3174 upthread_status = l7vs::tcp_session::UPTHREAD_ALIVE;
3177 upthread_status = l7vs::tcp_session::UPTHREAD_ACTIVE;
3180 upthread_status = l7vs::tcp_session::UPTHREAD_LOCK;
3184 void set_down_status(int s){
3187 downthread_status = l7vs::tcp_session::DOWNTHREAD_SLEEP;
3190 downthread_status = l7vs::tcp_session::DOWNTHREAD_ALIVE;
3193 downthread_status = l7vs::tcp_session::DOWNTHREAD_ACTIVE;
3196 downthread_status = l7vs::tcp_session::DOWNTHREAD_LOCK;
3201 boost::mutex test_thread_wait;
3203 boost::mutex::scoped_lock scope_lock(test_thread_wait);
3205 std::cerr << "up_thread_run test call" << std::endl;
3214 void set_protocol_module(l7vs::protocol_module_base* set_proto){
3215 protocol_module = set_proto;
3218 l7vs::tcp_socket& get_client_socket(){
3219 return client_socket;
3222 boost::thread::id& get_up_thread_id(){
3223 return up_thread_id;
3226 boost::thread::id& get_down_thread_id(){
3227 return down_thread_id;
3230 void up_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
3231 up_thread_exit_process_type = process_type;
3232 l7vs::tcp_session::up_thread_exit(process_type);
3233 up_thread_exit_call_check = true;
3235 TCP_PROCESS_TYPE_TAG up_thread_exit_process_type;
3236 bool up_thread_exit_call_check;
3238 void up_thread_all_socket_close(void){
3239 up_thread_all_socket_close_call_check = true;
3241 bool up_thread_all_socket_close_call_check;
3243 void test_message_set(boost::asio::ip::tcp::endpoint set_endpoint){
3244 l7vs::tcp_thread_message* chk_msg = new l7vs::tcp_thread_message;
3245 up_thread_message_que.push(chk_msg);
3246 chk_msg->endpoint_info = set_endpoint;
3247 up_thread_function_pair func = up_thread_function_array[UP_FUNC_EXIT];
3248 chk_msg->message = func.second;
3251 l7vs::tcp_data& get_up_thread_message_data(){
3252 return up_thread_message_data;
3255 void clear_function_array(){
3256 for(int i = 0;i <= UP_FUNC_EXIT;i++){
3257 up_thread_function_array[i].second = NULL;
3260 void clear_event_map(){
3261 up_thread_module_event_map.clear();
3264 void set_up_thread_next_call_function_client_disconnect(){
3265 up_thread_next_call_function = up_thread_function_array[UP_FUNC_CLIENT_DISCONNECT];
3267 void set_up_thread_next_call_function_exit(){
3268 up_thread_next_call_function = up_thread_function_array[UP_FUNC_EXIT];
3272 void up_thread_run_test(){
3274 BOOST_MESSAGE( "----- up_thread_run test start -----" );
3276 boost::asio::io_service io;
3277 l7vs::virtualservice_tcp vs;
3278 l7vs::tcp_socket_option_info set_option;
3279 //! TCP_NODELAY (false:not set,true:set option)
3280 set_option.nodelay_opt = false;
3281 //! TCP_NODELAY option value (false:off,true:on)
3282 set_option.nodelay_val = false;
3283 //! TCP_CORK (false:not set,true:set option)
3284 set_option.cork_opt = false;
3285 //! TCP_CORK option value (false:off,true:on)
3286 set_option.cork_val = false;
3287 //! TCP_QUICKACK (false:not set,true:set option)
3288 set_option.quickack_opt = false;
3289 //! TCP_QUICKACK option value (false:off,true:on)
3290 set_option.quickack_val = false;
3292 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
3293 bool set_mode(false);
3294 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
3295 bool set_ssl_cache_flag(false);
3296 int set_ssl_handshake_time_out = 0;
3297 //std::string access_log_file_name = "test";
3298 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
3300 boost::system::error_code ec;
3302 std::string test_protocol_name("test protocol");
3303 l7vs::test_protocol_module proto_test(test_protocol_name);
3305 up_thread_run_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
3307 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
3308 bool& exit_flag = test_obj.get_exit_flag();
3309 // bool& session_pause_flag = test_obj.get_session_pause_flag();
3310 boost::thread::id& up_thread_id = test_obj.get_up_thread_id();
3311 boost::thread::id& down_thread_id = test_obj.get_down_thread_id();
3314 // std::bitset<TCP_SESSION_THREAD_STATE_BIT>& thread_state = test_obj.get_thread_state();
3315 l7vs::tcp_socket& client_socket = test_obj.get_client_socket();
3317 test_mirror_server test_server;
3319 test_server.breq_acc_flag = true;
3321 test_server.breq_close_wait_flag = true;
3323 test_server.req_recv_cnt = 0;
3324 // test server start
3325 boost::thread server_thread(boost::bind(&test_mirror_server::run,&test_server));
3326 while( !test_server.brun_flag ){
3330 boost::asio::ip::tcp::endpoint connect_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
3331 client_socket.get_socket().connect(connect_end,ec);
3333 while(!test_server.bconnect_flag){
3337 test_obj.test_thread_wait.lock();
3339 thread_state[0] = 0; // UP_THREAD_ALIVE
3340 thread_state[1] = 0; // DOWN_THREAD_ALIVE
3341 thread_state[2] = 0; // UP_THREAD_ACTIVE
3342 thread_state[3] = 0; // DOWN_THREAD_ACTIVE
3343 thread_state[4] = 0; // UP_THREAD_LOCK
3344 thread_state[5] = 0; // DOWN_THREAD_LOCK
3346 up_thread_id = boost::thread::id();
3347 boost::thread test_thread(boost::bind(&up_thread_run_test_class::test_run,&test_obj));
3349 boost::thread::id test_id = test_thread.get_id();
3350 boost::thread::id proc_id = boost::this_thread::get_id();
3353 BOOST_CHECK(!thread_state.test(0)); // UP_THREAD_ALIVE
3354 BOOST_CHECK(!thread_state.test(1)); // DOWN_THREAD_ALIVE
3355 BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
3356 BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
3357 BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
3358 BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
3360 BOOST_CHECK(test_obj.get_up_status() == 0);
3361 BOOST_CHECK(test_obj.get_down_status() == 0);
3362 BOOST_CHECK(up_thread_id != test_id);
3363 test_obj.test_thread_wait.unlock();
3366 // unit_test [1] up_thread_run thread id update check
3367 std::cerr << "[1] up_thread_run thread id update check" << std::endl;
3368 BOOST_CHECK(up_thread_id == test_id);
3370 // unit_test [2] up_thread_run down thread wait check
3371 std::cerr << "[2] up_thread_run down thread wait check" << std::endl;
3373 BOOST_CHECK(thread_state.test(0)); // UP_THREAD_ALIVE
3374 BOOST_CHECK(!thread_state.test(1)); // DOWN_THREAD_ALIVE
3375 BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
3376 BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
3377 BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
3378 BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
3380 BOOST_CHECK(test_obj.get_up_status() == 1);
3381 BOOST_CHECK(test_obj.get_down_status() == 0);
3383 proto_test.handle_session_initialize_res_tag = l7vs::protocol_module_base::FINALIZE;
3384 proto_test.handle_session_initialize_in_up_thread_id = boost::thread::id();
3385 proto_test.handle_session_initialize_in_down_thread_id = boost::thread::id();
3386 proto_test.handle_session_initialize_in_client_endpoint_tcp = boost::asio::ip::tcp::endpoint();
3387 proto_test.handle_session_initialize_in_client_endpoint_udp.address(boost::asio::ip::address::from_string("255.255.255.255"));
3388 proto_test.handle_session_initialize_in_client_endpoint_udp.port(65535);
3389 BOOST_CHECK(proto_test.handle_session_initialize_in_up_thread_id != test_id);
3390 BOOST_CHECK(proto_test.handle_session_initialize_in_down_thread_id != proc_id);
3391 BOOST_CHECK(proto_test.handle_session_initialize_in_client_endpoint_tcp != connect_end);
3392 BOOST_CHECK(proto_test.handle_session_initialize_in_client_endpoint_udp != boost::asio::ip::udp::endpoint());
3393 down_thread_id = proc_id;
3394 // session_pause_flag = true;
3396 // DOWN_THREAD_ALIVE
3397 // thread_state[1] = 1;
3398 test_obj.set_down_status(1);
3401 // unit_test [3] up_thread_run handle_session_initialize call check
3402 std::cerr << "[3] up_thread_run handle_session_initialize call check" << std::endl;
3403 BOOST_CHECK(proto_test.handle_session_initialize_in_up_thread_id == test_id);
3404 BOOST_CHECK(proto_test.handle_session_initialize_in_down_thread_id == proc_id);
3405 BOOST_CHECK(proto_test.handle_session_initialize_in_client_endpoint_tcp == connect_end);
3406 BOOST_CHECK(proto_test.handle_session_initialize_in_client_endpoint_udp == boost::asio::ip::udp::endpoint());
3408 // unit_test [4] up_thread_run state update(UP_THREAD_ACTIVE) check
3409 std::cerr << "[4] up_thread_run state update(UP_THREAD_ACTIVE) check" << std::endl;
3410 // BOOST_CHECK(thread_state.test(2)); // UP_THREAD_ACTIVE
3411 BOOST_CHECK(test_obj.get_up_status() == 2); // UP_THREAD_ACTIVE
3413 // unit_test [5] up_thread_run pause check
3414 std::cerr << "[5] up_thread_run pause check" << std::endl;
3415 // BOOST_CHECK(thread_state.test(4)); // UP_THREAD_LOCK
3417 test_obj.up_thread_exit_process_type = l7vs::tcp_session::MESSAGE_PROC;
3418 test_obj.up_thread_exit_call_check = false;
3419 test_obj.up_thread_all_socket_close_call_check = false;
3421 // session_pause_flag = false;
3424 // unit_test [6] up_thread_run restart check
3425 std::cerr << "[6] up_thread_run restart check" << std::endl;
3426 // BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
3428 // unit_test [7] up_thread_run up_thread_next_call_function call (up_thread_exit) check
3429 std::cerr << "[7] up_thread_run up_thread_next_call_function call (up_thread_exit) check" << std::endl;
3430 BOOST_CHECK(test_obj.up_thread_exit_call_check);
3431 BOOST_CHECK(test_obj.up_thread_exit_process_type == l7vs::tcp_session::LOCAL_PROC);
3433 // unit_test [8] up_thread_run main loop exit check
3434 std::cerr << "[8] up_thread_run main loop exit check" << std::endl;
3435 BOOST_CHECK(exit_flag);
3436 // BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
3439 // unit_test [9] up_thread_run up_thread_all_socket_close_call_check call check
3440 std::cerr << "[9] up_thread_run up_thread_all_socket_close_call_check call check" << std::endl;
3441 BOOST_CHECK(test_obj.up_thread_all_socket_close_call_check);
3443 // unit_test [10] up_thread_run down thread end wait check
3444 std::cerr << "[10] up_thread_run down thread wait check" << std::endl;
3446 BOOST_CHECK(thread_state.test(0)); // UP_THREAD_ALIVE
3447 BOOST_CHECK(thread_state.test(1)); // DOWN_THREAD_ALIVE
3448 BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
3449 BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
3450 BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
3451 BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
3454 BOOST_CHECK(test_obj.get_up_status() == 1); // UP_THREAD_ALIVE
3455 BOOST_CHECK(test_obj.get_down_status() == 1); // DOWN_THREAD_ALIVE
3457 // proto_test.handle_session_finalize_in_up_thread_id = boost::thread::id();
3458 // proto_test.handle_session_finalize_in_down_thread_id = boost::thread::id();
3459 // BOOST_CHECK(proto_test.handle_session_finalize_in_up_thread_id != test_id);
3460 // BOOST_CHECK(proto_test.handle_session_finalize_in_down_thread_id != proc_id);
3461 // vs.release_session_ptr = NULL;
3462 // BOOST_CHECK(vs.release_session_ptr != test_id);
3464 // thread_state[1] = 0;
3467 // unit_test [11] up_thread_run handle_session_finalize call check
3468 std::cerr << "[11] up_thread_run handle_session_finalize call check" << std::endl;
3469 BOOST_CHECK(proto_test.handle_session_finalize_in_up_thread_id == test_id);
3470 BOOST_CHECK(proto_test.handle_session_finalize_in_down_thread_id == proc_id);
3472 // unit_test [12] up_thread_run release_session_id call check
3473 std::cerr << "[12] up_thread_run release_session_id call check" << std::endl;
3474 // BOOST_CHECK(vs.release_session_id == test_id);
3476 // unit_test [13] up_thread_run state update(UP_THREAD_ACTIVE) check
3477 std::cerr << "[13] up_thread_run state update(UP_THREAD_ACTIVE) check" << std::endl;
3478 // BOOST_CHECK(!thread_state.test(0)); // UP_THREAD_ACTIVE
3480 // message call test
3482 // session_pause_flag = false;
3483 l7vs::tcp_data& msg_data = test_obj.get_up_thread_message_data();
3484 test_obj.test_message_set(connect_end);
3486 thread_state[0] = 0; // UP_THREAD_ALIVE
3487 thread_state[1] = 1; // DOWN_THREAD_ALIVE
3488 thread_state[2] = 0; // UP_THREAD_ACTIVE
3489 thread_state[3] = 0; // DOWN_THREAD_ACTIVE
3490 thread_state[4] = 0; // UP_THREAD_LOCK
3491 thread_state[5] = 0; // DOWN_THREAD_LOCK
3493 msg_data.set_endpoint(boost::asio::ip::tcp::endpoint());
3494 test_obj.up_thread_exit_call_check = false;
3495 test_obj.up_thread_exit_process_type = l7vs::tcp_session::LOCAL_PROC;
3496 proto_test.handle_session_initialize_res_tag = l7vs::protocol_module_base::CLIENT_DISCONNECT;
3498 // test thread start
3499 test_obj.test_wait = false;
3502 BOOST_CHECK(thread_state.test(0)); // UP_THREAD_ALIVE
3503 BOOST_CHECK(thread_state.test(1)); // DOWN_THREAD_ALIVE
3504 BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
3505 BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
3506 BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
3507 BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
3510 // unit_test [14] up_thread_run message call check
3511 std::cerr << "[14] up_thread_run message call check" << std::endl;
3512 BOOST_CHECK(test_obj.up_thread_exit_call_check);
3513 BOOST_CHECK(test_obj.up_thread_exit_process_type == l7vs::tcp_session::MESSAGE_PROC);
3515 proto_test.handle_session_initialize_res_tag = l7vs::protocol_module_base::FINALIZE;
3516 // thread_state[1] = 0;
3519 // error test not find function map
3520 test_obj.clear_function_array();
3522 // session_pause_flag = false;
3523 // thread_state[1] = 1;
3525 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
3526 l7vs::Logger::putLogError_id = 0;
3528 test_obj.test_wait = false;
3531 // unit_test [15] up_thread_run not find function map error test
3532 std::cerr << "[15] up_thread_run not find function map error test" << std::endl;
3533 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
3534 BOOST_CHECK_EQUAL(15,l7vs::Logger::putLogError_id);
3535 std::cerr << l7vs::Logger::putLogError_message << std::endl;
3537 // thread_state[1] = 0;
3540 //error test protocol_module returnd illegal EVENT_TAG
3541 test_obj.clear_event_map();
3543 // session_pause_flag = false;
3544 // thread_state[1] = 1;
3546 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
3547 l7vs::Logger::putLogError_id = 0;
3549 test_obj.test_wait = false;
3552 // unit_test [16] up_thread_run protocol_module returnd illegal EVENT_TAG error test
3553 std::cerr << "[16] up_thread_run protocol_module returnd illegal EVENT_TAG error test" << std::endl;
3554 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
3555 BOOST_CHECK_EQUAL(14,l7vs::Logger::putLogError_id);
3556 std::cerr << l7vs::Logger::putLogError_message << std::endl;
3558 // thread_state[1] = 0;
3562 // unit_test [17] up_thread_run set non blocking fail check
3563 std::cerr << "[17] up_thread_run set non blocking fail check" << std::endl;
3565 // session_pause_flag = false;
3566 // thread_state[1] = 1;
3568 l7vs::tcp_socket::set_non_blocking_mode_res = false;
3569 l7vs::tcp_socket::set_non_blocking_mode_ec = boost::asio::error::bad_descriptor;
3570 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
3571 l7vs::Logger::putLogError_id = 0;
3573 test_obj.test_wait = false;
3576 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
3577 BOOST_CHECK_EQUAL(11,l7vs::Logger::putLogError_id);
3578 std::cerr << l7vs::Logger::putLogError_message << std::endl;
3579 l7vs::tcp_socket::set_non_blocking_mode_res = true;
3580 l7vs::tcp_socket::set_non_blocking_mode_ec.clear();
3582 // thread_state[1] = 0;
3585 //error test client endpoint get error
3586 client_socket.get_socket().close(ec);
3588 // session_pause_flag = false;
3589 // thread_state[1] = 1;
3591 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
3592 l7vs::Logger::putLogError_id = 0;
3594 test_obj.test_wait = false;
3597 // unit_test [18] up_thread_run client endpoint get error test
3598 std::cerr << "[18] up_thread_run client endpoint get error test" << std::endl;
3599 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
3600 BOOST_CHECK_EQUAL(9,l7vs::Logger::putLogError_id);
3601 std::cerr << l7vs::Logger::putLogError_message << std::endl;
3603 // thread_state[1] = 0;
3606 //error test protocol module null error
3607 test_obj.set_protocol_module(NULL);
3609 // session_pause_flag = false;
3610 // thread_state[1] = 1;
3612 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
3613 l7vs::Logger::putLogError_id = 0;
3615 test_obj.test_wait = false;
3618 // unit_test [19] up_thread_run protocol module null error test
3619 std::cerr << "[19] up_thread_run protocol module null error test" << std::endl;
3620 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
3621 BOOST_CHECK_EQUAL(8,l7vs::Logger::putLogError_id);
3622 std::cerr << l7vs::Logger::putLogError_message << std::endl;
3624 // thread_state[1] = 0;
3627 test_obj.test_end = true;
3628 test_obj.test_wait = false;
3629 std::cerr << "test_thread.join wait" << std::endl;
3631 std::cerr << "test_thread.join ok" << std::endl;
3634 test_server.breq_close_wait_flag = false;
3635 test_server.bstop_flag = true;
3636 std::cerr << "server_thread.join wait" << std::endl;
3637 server_thread.join();
3638 std::cerr << "server_thread.join ok" << std::endl;
3641 BOOST_MESSAGE( "----- up_thread_run test end -----" );
3648 // down_thread_run test class
3649 class down_thread_run_test_class : public l7vs::tcp_session{
3651 // down_thread_run_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){
3652 down_thread_run_test_class(
3653 l7vs::virtualservice_tcp& vs,
3654 boost::asio::io_service& session_io,
3655 l7vs::tcp_socket_option_info& set_socket_option,
3656 boost::asio::ip::tcp::endpoint listen_endpoint,
3658 boost::asio::ssl::context& set_ssl_context,
3659 bool set_ssl_cache_flag,
3660 int set_ssl_handshake_time_out,
3661 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
3668 set_ssl_handshake_time_out,
3673 ~down_thread_run_test_class(){};
3674 bool& get_exit_flag(){
3675 return (bool&)exit_flag;
3679 bool& get_session_pause_flag(){
3680 return session_pause_flag;
3685 std::bitset<TCP_SESSION_THREAD_STATE_BIT>& get_thread_state(){
3686 return thread_state;
3690 boost::mutex test_thread_wait;
3692 boost::mutex::scoped_lock scope_lock(test_thread_wait);
3702 void set_protocol_module(l7vs::protocol_module_base* set_proto){
3703 protocol_module = set_proto;
3706 boost::thread::id& get_down_thread_id(){
3707 return down_thread_id;
3710 void down_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
3711 down_thread_exit_process_type = process_type;
3712 l7vs::tcp_session::down_thread_exit(process_type);
3713 down_thread_exit_call_check = true;
3715 TCP_PROCESS_TYPE_TAG down_thread_exit_process_type;
3716 bool down_thread_exit_call_check;
3718 void down_thread_all_socket_close(void){
3719 down_thread_all_socket_close_call_check = true;
3721 bool down_thread_all_socket_close_call_check;
3723 void test_message_set(boost::asio::ip::tcp::endpoint set_endpoint){
3724 l7vs::tcp_thread_message* chk_msg = new l7vs::tcp_thread_message;
3725 down_thread_message_que.push(chk_msg);
3726 chk_msg->endpoint_info = set_endpoint;
3727 down_thread_function_pair func = down_thread_function_array[DOWN_FUNC_EXIT];
3728 chk_msg->message = func.second;
3731 l7vs::tcp_data& get_down_thread_message_data(){
3732 return down_thread_message_data;
3735 void clear_function_array(){
3736 for(int i = 0;i < DOWN_FUNC_EXIT;i++){
3737 down_thread_function_array[i].second = NULL;
3741 void down_thread_realserver_receive(const TCP_PROCESS_TYPE_TAG process_type){
3742 down_thread_realserver_receive_call_check = true;
3743 down_thread_realserver_receive_process_type = process_type;
3746 bool down_thread_realserver_receive_call_check;
3747 TCP_PROCESS_TYPE_TAG down_thread_realserver_receive_process_type;
3749 void set_down_thread_connect_socket_list(){
3750 for(int i = 0 ; i < 1024;i++){
3751 std::pair<boost::asio::ip::tcp::endpoint,tcp_socket_ptr > push_element;
3752 boost::asio::ip::tcp::endpoint set_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), i);
3753 push_element.first = set_end;
3754 down_thread_connect_socket_list.push_back(push_element);
3755 //std::cerr << push_element.first << std::endl;
3757 if(down_thread_connect_socket_list.empty()){
3758 std::cerr << "down_thread_connect_socket_list.empty!" << std::endl;
3762 bool check_down_thread_receive_realserver_socket_list(){
3764 std::list<socket_element>::iterator cur_it = down_thread_receive_realserver_socket_list.begin();
3765 for(int i = 0 ; i < 1024;i++){
3766 if(cur_it == down_thread_receive_realserver_socket_list.end()){
3767 std::cerr << "DEBUG index[";
3769 std::cerr << "] not element" << std::endl;
3773 boost::asio::ip::tcp::endpoint set_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), i);
3774 if(cur_it->first != set_end){
3775 int port = (int)cur_it->first.port();
3777 std::cerr << "DEBUG index[";
3779 std::cerr << "] port[";
3781 std::cerr << "]" << std::endl;
3789 void down_thread_run_test(){
3791 BOOST_MESSAGE( "----- down_thread_run test start -----" );
3793 boost::asio::io_service io;
3794 l7vs::virtualservice_tcp vs;
3795 l7vs::tcp_socket_option_info set_option;
3796 //! TCP_NODELAY (false:not set,true:set option)
3797 set_option.nodelay_opt = false;
3798 //! TCP_NODELAY option value (false:off,true:on)
3799 set_option.nodelay_val = false;
3800 //! TCP_CORK (false:not set,true:set option)
3801 set_option.cork_opt = false;
3802 //! TCP_CORK option value (false:off,true:on)
3803 set_option.cork_val = false;
3804 //! TCP_QUICKACK (false:not set,true:set option)
3805 set_option.quickack_opt = false;
3806 //! TCP_QUICKACK option value (false:off,true:on)
3807 set_option.quickack_val = false;
3809 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
3810 bool set_mode(false);
3811 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
3812 bool set_ssl_cache_flag(false);
3813 int set_ssl_handshake_time_out = 0;
3814 //std::string access_log_file_name = "test";
3815 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
3817 boost::system::error_code ec;
3819 std::string test_protocol_name("test protocol");
3820 l7vs::test_protocol_module proto_test(test_protocol_name);
3822 // down_thread_run_test_class test_obj(vs,io);
3823 down_thread_run_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
3825 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
3826 bool& exit_flag = test_obj.get_exit_flag();
3827 // bool& session_pause_flag = test_obj.get_session_pause_flag();
3828 boost::thread::id& down_thread_id = test_obj.get_down_thread_id();
3831 boost::asio::ip::tcp::endpoint connect_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
3832 // std::bitset<TCP_SESSION_THREAD_STATE_BIT>& thread_state = test_obj.get_thread_state();
3834 test_obj.test_thread_wait.lock();
3836 thread_state[0] = 1; // UP_THREAD_ALIVE
3837 thread_state[1] = 0; // DOWN_THREAD_ALIVE
3838 thread_state[2] = 0; // UP_THREAD_ACTIVE
3839 thread_state[3] = 0; // DOWN_THREAD_ACTIVE
3840 thread_state[4] = 0; // UP_THREAD_LOCK
3841 thread_state[5] = 0; // DOWN_THREAD_LOCK
3843 down_thread_id = boost::thread::id();
3844 boost::thread test_thread(boost::bind(&down_thread_run_test_class::test_run,&test_obj));
3846 boost::thread::id test_id = test_thread.get_id();
3847 boost::thread::id proc_id = boost::this_thread::get_id();
3850 BOOST_CHECK(thread_state.test(0)); // UP_THREAD_ALIVE
3851 BOOST_CHECK(!thread_state.test(1)); // DOWN_THREAD_ALIVE
3852 BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
3853 BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
3854 BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
3855 BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
3857 BOOST_CHECK(down_thread_id != test_id);
3858 test_obj.test_thread_wait.unlock();
3861 // unit_test [1] down_thread_run thread id update check
3862 std::cerr << "[1] down_thread_run thread id update check" << std::endl;
3863 BOOST_CHECK(down_thread_id == test_id);
3865 // unit_test [2] down_thread_run up thread active wait check
3866 std::cerr << "[2] down_thread_run up thread active wait check" << std::endl;
3868 BOOST_CHECK(thread_state.test(0)); // UP_THREAD_ALIVE
3869 BOOST_CHECK(thread_state.test(1)); // DOWN_THREAD_ALIVE
3870 BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
3871 BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
3872 BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
3873 BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
3876 // session_pause_flag = true;
3879 // thread_state[2] = 1;
3882 // unit_test [3] down_thread_run state update(DOWN_THREAD_ACTIVE) check
3883 std::cerr << "[3] down_thread_run state update(DOWN_THREAD_ACTIVE) check" << std::endl;
3884 // BOOST_CHECK(thread_state.test(3)); // DOWN_THREAD_ACTIVE
3886 // unit_test [4] down_thread_run pause check
3887 std::cerr << "[4] down_thread_run pause check" << std::endl;
3888 // BOOST_CHECK(thread_state.test(5)); // DOWN_THREAD_LOCK
3890 test_obj.down_thread_realserver_receive_call_check = false;
3891 test_obj.down_thread_realserver_receive_process_type = l7vs::tcp_session::MESSAGE_PROC;
3892 test_obj.down_thread_all_socket_close_call_check = false;
3894 test_obj.set_down_thread_connect_socket_list();
3896 // session_pause_flag = false;
3899 // unit_test [5] down_thread_run restart check
3900 std::cerr << "[5] down_thread_run restart check" << std::endl;
3901 // BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
3904 // unit_test [6] down_thread_run connect realserver set receive list check
3905 std::cerr << "[6] down_thread_run connect realserver set receive list check" << std::endl;
3906 BOOST_CHECK(test_obj.check_down_thread_receive_realserver_socket_list());
3908 // unit_test [7] down_thread_run down_thread_next_call_function call (down_thread_realserver_receive) check
3909 std::cerr << "[7] down_thread_run down_thread_next_call_function call (down_thread_realserver_receive) check" << std::endl;
3910 BOOST_CHECK(test_obj.down_thread_realserver_receive_call_check);
3911 BOOST_CHECK(test_obj.down_thread_realserver_receive_process_type == l7vs::tcp_session::LOCAL_PROC);
3913 // unit_test [8] down_thread_run main loop exit check
3914 std::cerr << "[8] down_thread_run main loop exit check" << std::endl;
3915 BOOST_CHECK(exit_flag);
3916 // BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
3918 // unit_test [9] down_thread_run down_thread_all_socket_close_call_check call check
3919 std::cerr << "[9] down_thread_run down_thread_all_socket_close_call_check call check" << std::endl;
3920 BOOST_CHECK(test_obj.down_thread_all_socket_close_call_check);
3922 // unit_test [10] down_thread_run state update(DOWN_THREAD_ACTIVE) check
3923 std::cerr << "[10] down_thread_run state update(DOWN_THREAD_ACTIVE) check" << std::endl;
3924 // BOOST_CHECK(!thread_state.test(1)); // DOWN_THREAD_ACTIVE
3926 // message call test
3928 // session_pause_flag = false;
3929 l7vs::tcp_data& msg_data = test_obj.get_down_thread_message_data();
3930 test_obj.test_message_set(connect_end);
3932 thread_state[0] = 1; // UP_THREAD_ALIVE
3933 thread_state[2] = 1; // UP_THREAD_ACTIVE
3935 msg_data.set_endpoint(boost::asio::ip::tcp::endpoint());
3936 test_obj.down_thread_exit_call_check = false;
3937 test_obj.down_thread_exit_process_type = l7vs::tcp_session::LOCAL_PROC;
3939 // test thread start
3940 test_obj.test_wait = false;
3943 // unit_test [11] down_thread_run message call check
3944 std::cerr << "[11] down_thread_run message call check" << std::endl;
3945 BOOST_CHECK(test_obj.down_thread_exit_call_check);
3946 BOOST_CHECK(test_obj.down_thread_exit_process_type == l7vs::tcp_session::MESSAGE_PROC);
3948 // error test not find function map
3949 test_obj.clear_function_array();
3951 // session_pause_flag = true;
3953 thread_state[0] = 1; // UP_THREAD_ALIVE
3954 thread_state[2] = 1; // UP_THREAD_ACTIVE
3957 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
3958 l7vs::Logger::putLogError_id = 0;
3960 test_obj.test_wait = false;
3963 // unit_test [12] down_thread_run not find function map error test
3964 std::cerr << "[12] down_thread_run not find function map error test" << std::endl;
3965 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
3966 BOOST_CHECK_EQUAL(16,l7vs::Logger::putLogError_id);
3967 std::cerr << l7vs::Logger::putLogError_message << std::endl;
3970 test_obj.test_end = true;
3971 test_obj.test_wait = false;
3975 BOOST_MESSAGE( "----- down_thread_run test end -----" );
3981 // thread_state_update test
3982 // thread_state_update test class
3983 class thread_state_update_test_class : public l7vs::tcp_session{
3985 // thread_state_update_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){};
3986 thread_state_update_test_class(
3987 l7vs::virtualservice_tcp& vs,
3988 boost::asio::io_service& session_io,
3989 l7vs::tcp_socket_option_info& set_socket_option,
3990 boost::asio::ip::tcp::endpoint listen_endpoint,
3992 boost::asio::ssl::context& set_ssl_context,
3993 bool set_ssl_cache_flag,
3994 int set_ssl_handshake_time_out,
3995 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
4002 set_ssl_handshake_time_out,
4003 set_access_logger){};
4007 ~thread_state_update_test_class(){};
4008 std::bitset<TCP_SESSION_THREAD_STATE_BIT>& get_thread_state(){
4009 return thread_state;
4012 void test_call(const std::bitset<TCP_SESSION_THREAD_STATE_BIT> thread_flag,const bool regist){
4013 thread_state_update(thread_flag,regist);
4016 void thread_state_update_test(){
4018 BOOST_MESSAGE( "----- thread_state_update test start -----" );
4020 // boost::asio::io_service io;
4021 // l7vs::virtualservice_tcp vs;
4022 // thread_state_update_test_class test_obj(vs,io);
4023 l7vs::virtualservice_tcp vs;
4024 boost::asio::io_service io;
4025 l7vs::tcp_socket_option_info set_option;
4026 //! TCP_NODELAY (false:not set,true:set option)
4027 set_option.nodelay_opt = false;
4028 //! TCP_NODELAY option value (false:off,true:on)
4029 set_option.nodelay_val = false;
4030 //! TCP_CORK (false:not set,true:set option)
4031 set_option.cork_opt = false;
4032 //! TCP_CORK option value (false:off,true:on)
4033 set_option.cork_val = false;
4034 //! TCP_QUICKACK (false:not set,true:set option)
4035 set_option.quickack_opt = false;
4036 //! TCP_QUICKACK option value (false:off,true:on)
4037 set_option.quickack_val = false;
4039 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
4040 bool set_mode(false);
4041 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
4042 bool set_ssl_cache_flag(false);
4043 int set_ssl_handshake_time_out = 0;
4044 //std::string access_log_file_name = "test";
4045 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
4047 thread_state_update_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
4052 std::bitset<TCP_SESSION_THREAD_STATE_BIT>& thread_state = test_obj.get_thread_state();
4054 thread_state[0] = 0; // UP_THREAD_ALIVE
4055 thread_state[1] = 0; // DOWN_THREAD_ALIVE
4056 thread_state[2] = 0; // UP_THREAD_ACTIVE
4057 thread_state[3] = 0; // DOWN_THREAD_ACTIVE
4058 thread_state[4] = 0; // UP_THREAD_LOCK
4059 thread_state[5] = 0; // DOWN_THREAD_LOCK
4060 BOOST_CHECK(!thread_state.test(0)); // UP_THREAD_ALIVE
4061 BOOST_CHECK(!thread_state.test(1)); // DOWN_THREAD_ALIVE
4062 BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
4063 BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
4064 BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
4065 BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
4068 // unit_test [1] thread_state_update set flag test
4069 std::cerr << "[1] thread_state_update set flag test" << std::endl;
4070 test_obj.test_call(UP_THREAD_ALIVE,true);
4071 BOOST_CHECK(thread_state.test(0)); // UP_THREAD_ALIVE
4072 BOOST_CHECK(!thread_state.test(1)); // DOWN_THREAD_ALIVE
4073 BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
4074 BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
4075 BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
4076 BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
4078 test_obj.test_call(DOWN_THREAD_ALIVE,true);
4079 BOOST_CHECK(thread_state.test(0)); // UP_THREAD_ALIVE
4080 BOOST_CHECK(thread_state.test(1)); // DOWN_THREAD_ALIVE
4081 BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
4082 BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
4083 BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
4084 BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
4086 test_obj.test_call(UP_THREAD_ACTIVE,true);
4087 BOOST_CHECK(thread_state.test(0)); // UP_THREAD_ALIVE
4088 BOOST_CHECK(thread_state.test(1)); // DOWN_THREAD_ALIVE
4089 BOOST_CHECK(thread_state.test(2)); // UP_THREAD_ACTIVE
4090 BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
4091 BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
4092 BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
4094 test_obj.test_call(DOWN_THREAD_ACTIVE,true);
4095 BOOST_CHECK(thread_state.test(0)); // UP_THREAD_ALIVE
4096 BOOST_CHECK(thread_state.test(1)); // DOWN_THREAD_ALIVE
4097 BOOST_CHECK(thread_state.test(2)); // UP_THREAD_ACTIVE
4098 BOOST_CHECK(thread_state.test(3)); // DOWN_THREAD_ACTIVE
4099 BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
4100 BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
4102 test_obj.test_call(UP_THREAD_LOCK,true);
4103 BOOST_CHECK(thread_state.test(0)); // UP_THREAD_ALIVE
4104 BOOST_CHECK(thread_state.test(1)); // DOWN_THREAD_ALIVE
4105 BOOST_CHECK(thread_state.test(2)); // UP_THREAD_ACTIVE
4106 BOOST_CHECK(thread_state.test(3)); // DOWN_THREAD_ACTIVE
4107 BOOST_CHECK(thread_state.test(4)); // UP_THREAD_LOCK
4108 BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
4110 test_obj.test_call(DOWN_THREAD_LOCK,true);
4111 BOOST_CHECK(thread_state.test(0)); // UP_THREAD_ALIVE
4112 BOOST_CHECK(thread_state.test(1)); // DOWN_THREAD_ALIVE
4113 BOOST_CHECK(thread_state.test(2)); // UP_THREAD_ACTIVE
4114 BOOST_CHECK(thread_state.test(3)); // DOWN_THREAD_ACTIVE
4115 BOOST_CHECK(thread_state.test(4)); // UP_THREAD_LOCK
4116 BOOST_CHECK(thread_state.test(5)); // DOWN_THREAD_LOCK
4118 // unit_test [2] thread_state_update reset flag test
4119 std::cerr << "[2] thread_state_update reset flag test" << std::endl;
4120 test_obj.test_call(UP_THREAD_ALIVE,false);
4121 BOOST_CHECK(!thread_state.test(0)); // UP_THREAD_ALIVE
4122 BOOST_CHECK(thread_state.test(1)); // DOWN_THREAD_ALIVE
4123 BOOST_CHECK(thread_state.test(2)); // UP_THREAD_ACTIVE
4124 BOOST_CHECK(thread_state.test(3)); // DOWN_THREAD_ACTIVE
4125 BOOST_CHECK(thread_state.test(4)); // UP_THREAD_LOCK
4126 BOOST_CHECK(thread_state.test(5)); // DOWN_THREAD_LOCK
4128 test_obj.test_call(DOWN_THREAD_ALIVE,false);
4129 BOOST_CHECK(!thread_state.test(0)); // UP_THREAD_ALIVE
4130 BOOST_CHECK(!thread_state.test(1)); // DOWN_THREAD_ALIVE
4131 BOOST_CHECK(thread_state.test(2)); // UP_THREAD_ACTIVE
4132 BOOST_CHECK(thread_state.test(3)); // DOWN_THREAD_ACTIVE
4133 BOOST_CHECK(thread_state.test(4)); // UP_THREAD_LOCK
4134 BOOST_CHECK(thread_state.test(5)); // DOWN_THREAD_LOCK
4136 test_obj.test_call(UP_THREAD_ACTIVE,false);
4137 BOOST_CHECK(!thread_state.test(0)); // UP_THREAD_ALIVE
4138 BOOST_CHECK(!thread_state.test(1)); // DOWN_THREAD_ALIVE
4139 BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
4140 BOOST_CHECK(thread_state.test(3)); // DOWN_THREAD_ACTIVE
4141 BOOST_CHECK(thread_state.test(4)); // UP_THREAD_LOCK
4142 BOOST_CHECK(thread_state.test(5)); // DOWN_THREAD_LOCK
4144 test_obj.test_call(DOWN_THREAD_ACTIVE,false);
4145 BOOST_CHECK(!thread_state.test(0)); // UP_THREAD_ALIVE
4146 BOOST_CHECK(!thread_state.test(1)); // DOWN_THREAD_ALIVE
4147 BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
4148 BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
4149 BOOST_CHECK(thread_state.test(4)); // UP_THREAD_LOCK
4150 BOOST_CHECK(thread_state.test(5)); // DOWN_THREAD_LOCK
4152 test_obj.test_call(UP_THREAD_LOCK,false);
4153 BOOST_CHECK(!thread_state.test(0)); // UP_THREAD_ALIVE
4154 BOOST_CHECK(!thread_state.test(1)); // DOWN_THREAD_ALIVE
4155 BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
4156 BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
4157 BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
4158 BOOST_CHECK(thread_state.test(5)); // DOWN_THREAD_LOCK
4160 test_obj.test_call(DOWN_THREAD_LOCK,false);
4161 BOOST_CHECK(!thread_state.test(0)); // UP_THREAD_ALIVE
4162 BOOST_CHECK(!thread_state.test(1)); // DOWN_THREAD_ALIVE
4163 BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
4164 BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
4165 BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
4166 BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
4168 boost::thread::id proc_id = boost::this_thread::get_id();
4169 // mutex_lock_test test_lock_obj(vs,io);
4170 mutex_lock_test test_lock_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
4172 test_lock_obj.set_thread_state_update_test();
4174 test_lock_obj.test_thread_wait.lock();
4175 test_lock_obj.befor_thread_id = proc_id;
4176 test_lock_obj.after_thread_id = proc_id;
4177 test_lock_obj.mutex_lock();
4179 boost::thread test_thread(boost::bind(&mutex_lock_test::test_run,&test_lock_obj));
4181 BOOST_CHECK(test_lock_obj.befor_thread_id == proc_id);
4182 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
4184 boost::thread::id test_id = test_thread.get_id();
4185 BOOST_CHECK(test_id != proc_id);
4188 test_lock_obj.test_thread_wait.unlock();
4191 // unit_test [3] thread_state_update thread block test (mutex lock)
4192 std::cerr << "[3] thread_state_update thread block test (mutex lock)" << std::endl;
4193 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
4194 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
4196 test_lock_obj.mutex_unlock();
4199 // unit_test [4] thread_state_update thread run test (mutex unlock)
4200 std::cerr << "[4] thread_state_update thread run test (mutex unlock)" << std::endl;
4201 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
4202 BOOST_CHECK(test_lock_obj.after_thread_id == test_id);
4204 BOOST_MESSAGE( "----- thread_state_update test end -----" );
4210 // up_thread_exit test
4211 // up_thread_exit test class
4212 class up_thread_exit_test_class : public l7vs::tcp_session{
4214 // up_thread_exit_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){};
4215 up_thread_exit_test_class(
4216 l7vs::virtualservice_tcp& vs,
4217 boost::asio::io_service& session_io,
4218 l7vs::tcp_socket_option_info& set_socket_option,
4219 boost::asio::ip::tcp::endpoint listen_endpoint,
4221 boost::asio::ssl::context& set_ssl_context,
4222 bool set_ssl_cache_flag,
4223 int set_ssl_handshake_time_out,
4224 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
4231 set_ssl_handshake_time_out,
4232 set_access_logger){};
4233 ~up_thread_exit_test_class(){};
4234 bool& get_exit_flag(){
4235 return (bool&)exit_flag;
4238 l7vs::tcp_session::up_thread_exit(LOCAL_PROC);
4241 void up_thread_exit_test(){
4243 BOOST_MESSAGE( "----- up_thread_exit test start -----" );
4245 // boost::asio::io_service io;
4246 // l7vs::virtualservice_tcp vs;
4247 // up_thread_exit_test_class test_obj(vs,io);
4248 l7vs::virtualservice_tcp vs;
4249 boost::asio::io_service io;
4250 l7vs::tcp_socket_option_info set_option;
4251 //! TCP_NODELAY (false:not set,true:set option)
4252 set_option.nodelay_opt = false;
4253 //! TCP_NODELAY option value (false:off,true:on)
4254 set_option.nodelay_val = false;
4255 //! TCP_CORK (false:not set,true:set option)
4256 set_option.cork_opt = false;
4257 //! TCP_CORK option value (false:off,true:on)
4258 set_option.cork_val = false;
4259 //! TCP_QUICKACK (false:not set,true:set option)
4260 set_option.quickack_opt = false;
4261 //! TCP_QUICKACK option value (false:off,true:on)
4262 set_option.quickack_val = false;
4264 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
4265 bool set_mode(false);
4266 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
4267 bool set_ssl_cache_flag(false);
4268 int set_ssl_handshake_time_out = 0;
4269 //std::string access_log_file_name = "test";
4270 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
4272 up_thread_exit_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
4274 // unit_test [1] up_thread_exit update exit_flag
4275 std::cerr << "[1] up_thread_exit update exit_flag" << std::endl;
4278 bool& ref_exit_flag = test_obj.get_exit_flag();
4280 ref_exit_flag = false;
4282 test_obj.test_call();
4284 BOOST_CHECK(ref_exit_flag);
4287 // mutex_lock_test test_lock_obj(vs,io);
4288 mutex_lock_test test_lock_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
4290 test_lock_obj.set_up_thread_exit_test();
4293 test_lock_obj.test_thread_wait.lock();
4294 boost::thread::id proc_id = boost::this_thread::get_id();
4295 test_lock_obj.befor_thread_id = proc_id;
4296 test_lock_obj.after_thread_id = proc_id;
4297 test_lock_obj.mutex_lock();
4299 boost::thread test_thread(boost::bind(&mutex_lock_test::test_run,&test_lock_obj));
4301 BOOST_CHECK(test_lock_obj.befor_thread_id == proc_id);
4302 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
4304 boost::thread::id test_id = test_thread.get_id();
4306 BOOST_CHECK(test_id != proc_id);
4309 test_lock_obj.test_thread_wait.unlock();
4312 // unit_test [2] up_thread_exit thread block test (mutex lock)
4313 std::cerr << "[2] up_thread_exit thread block test (mutex lock)" << std::endl;
4314 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
4315 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
4317 test_lock_obj.mutex_unlock();
4320 // unit_test [3] up_thread_exit thread run test (mutex unlock)
4321 std::cerr << "[3] up_thread_exit thread run test (mutex unlock)" << std::endl;
4322 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
4323 BOOST_CHECK(test_lock_obj.after_thread_id == test_id);
4326 // // unit_test [4] up_thread_exit thread run after mutex unlock test
4327 // std::cerr << "[4] up_thread_exit thread run after mutex unlock test" << std::endl;
4328 // BOOST_CHECK(test_lock_obj.mutex_trylock());
4329 // test_lock_obj.mutex_unlock();
4331 BOOST_MESSAGE( "----- up_thread_exit test end -----" );
4334 // down_thread_exit test
4335 // down_thread_exit test class
4336 class down_thread_exit_test_class : public l7vs::tcp_session{
4338 // down_thread_exit_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){};
4339 down_thread_exit_test_class(
4340 l7vs::virtualservice_tcp& vs,
4341 boost::asio::io_service& session_io,
4342 l7vs::tcp_socket_option_info& set_socket_option,
4343 boost::asio::ip::tcp::endpoint listen_endpoint,
4345 boost::asio::ssl::context& set_ssl_context,
4346 bool set_ssl_cache_flag,
4347 int set_ssl_handshake_time_out,
4348 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
4355 set_ssl_handshake_time_out,
4356 set_access_logger){};
4358 ~down_thread_exit_test_class(){};
4359 bool& get_exit_flag(){
4360 return (bool&)exit_flag;
4363 l7vs::tcp_session::down_thread_exit(LOCAL_PROC);
4366 void down_thread_exit_test(){
4368 BOOST_MESSAGE( "----- down_thread_exit test start -----" );
4370 // boost::asio::io_service io;
4371 // l7vs::virtualservice_tcp vs;
4372 // down_thread_exit_test_class test_obj(vs,io);
4373 l7vs::virtualservice_tcp vs;
4374 boost::asio::io_service io;
4375 l7vs::tcp_socket_option_info set_option;
4376 //! TCP_NODELAY (false:not set,true:set option)
4377 set_option.nodelay_opt = false;
4378 //! TCP_NODELAY option value (false:off,true:on)
4379 set_option.nodelay_val = false;
4380 //! TCP_CORK (false:not set,true:set option)
4381 set_option.cork_opt = false;
4382 //! TCP_CORK option value (false:off,true:on)
4383 set_option.cork_val = false;
4384 //! TCP_QUICKACK (false:not set,true:set option)
4385 set_option.quickack_opt = false;
4386 //! TCP_QUICKACK option value (false:off,true:on)
4387 set_option.quickack_val = false;
4389 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
4390 bool set_mode(false);
4391 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
4392 bool set_ssl_cache_flag(false);
4393 int set_ssl_handshake_time_out = 0;
4394 //std::string access_log_file_name = "test";
4395 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
4397 down_thread_exit_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
4399 // unit_test [1] down_thread_exit update exit_flag
4400 std::cerr << "[1] down_thread_exit update exit_flag" << std::endl;
4403 bool& ref_exit_flag = test_obj.get_exit_flag();
4405 ref_exit_flag = false;
4407 test_obj.test_call();
4409 BOOST_CHECK(ref_exit_flag);
4412 // mutex_lock_test test_lock_obj(vs,io);
4413 mutex_lock_test test_lock_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
4414 test_lock_obj.set_down_thread_exit_test();
4417 test_lock_obj.test_thread_wait.lock();
4418 boost::thread::id proc_id = boost::this_thread::get_id();
4419 test_lock_obj.befor_thread_id = proc_id;
4420 test_lock_obj.after_thread_id = proc_id;
4421 test_lock_obj.mutex_lock();
4423 boost::thread test_thread(boost::bind(&mutex_lock_test::test_run,&test_lock_obj));
4425 BOOST_CHECK(test_lock_obj.befor_thread_id == proc_id);
4426 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
4428 boost::thread::id test_id = test_thread.get_id();
4430 BOOST_CHECK(test_id != proc_id);
4433 test_lock_obj.test_thread_wait.unlock();
4436 // unit_test [2] down_thread_exit thread block test (mutex lock)
4437 std::cerr << "[2] down_thread_exit thread block test (mutex lock)" << std::endl;
4438 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
4439 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
4441 test_lock_obj.mutex_unlock();
4444 // unit_test [3] down_thread_exit thread run test (mutex unlock)
4445 std::cerr << "[3] down_thread_exit thread run test (mutex unlock)" << std::endl;
4446 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
4447 BOOST_CHECK(test_lock_obj.after_thread_id == test_id);
4450 // // unit_test [4] down_thread_exit thread run after mutex unlock test
4451 // std::cerr << "[4] down_thread_exit thread run after mutex unlock test" << std::endl;
4452 // BOOST_CHECK(test_lock_obj.mutex_trylock());
4453 // test_lock_obj.mutex_unlock();
4457 BOOST_MESSAGE( "----- down_thread_exit test end -----" );
4461 // up_thread_client_disconnect_event test
4462 // up_thread_client_disconnect_event test class
4463 class up_thread_client_disconnect_event_test_class : public module_event_map_test_base_class{
4465 // up_thread_client_disconnect_event_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : module_event_map_test_base_class(vs,session_io){
4467 up_thread_client_disconnect_event_test_class(
4468 l7vs::virtualservice_tcp& vs,
4469 boost::asio::io_service& session_io,
4470 l7vs::tcp_socket_option_info& set_socket_option,
4471 boost::asio::ip::tcp::endpoint listen_endpoint,
4473 boost::asio::ssl::context& set_ssl_context,
4474 bool set_ssl_cache_flag,
4475 int set_ssl_handshake_time_out,
4476 l7vs::logger_implement_access* set_access_logger) : module_event_map_test_base_class( vs,
4483 set_ssl_handshake_time_out,
4484 set_access_logger){};
4486 ~up_thread_client_disconnect_event_test_class(){};
4489 l7vs::tcp_session::up_thread_client_disconnect_event(LOCAL_PROC);
4493 void up_thread_client_disconnect_event_test(){
4495 BOOST_MESSAGE( "----- up_thread_client_disconnect_event test start -----" );
4497 // boost::asio::io_service io;
4498 // l7vs::virtualservice_tcp vs;
4499 // up_thread_client_disconnect_event_test_class test_obj(vs,io);
4500 l7vs::virtualservice_tcp vs;
4501 boost::asio::io_service io;
4502 l7vs::tcp_socket_option_info set_option;
4503 //! TCP_NODELAY (false:not set,true:set option)
4504 set_option.nodelay_opt = false;
4505 //! TCP_NODELAY option value (false:off,true:on)
4506 set_option.nodelay_val = false;
4507 //! TCP_CORK (false:not set,true:set option)
4508 set_option.cork_opt = false;
4509 //! TCP_CORK option value (false:off,true:on)
4510 set_option.cork_val = false;
4511 //! TCP_QUICKACK (false:not set,true:set option)
4512 set_option.quickack_opt = false;
4513 //! TCP_QUICKACK option value (false:off,true:on)
4514 set_option.quickack_val = false;
4516 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
4517 bool set_mode(false);
4518 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
4519 bool set_ssl_cache_flag(false);
4520 int set_ssl_handshake_time_out = 0;
4521 //std::string access_log_file_name = "test";
4522 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
4524 up_thread_client_disconnect_event_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
4526 std::string test_protocol_name("test protocol");
4527 l7vs::test_protocol_module proto_test(test_protocol_name);
4529 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
4531 l7vs::protocol_module_base::EVENT_TAG chek_event[13];
4532 chek_event[0] = l7vs::protocol_module_base::ACCEPT;
4533 chek_event[1] = l7vs::protocol_module_base::CLIENT_DISCONNECT;
4534 chek_event[2] = l7vs::protocol_module_base::CLIENT_RECV;
4535 chek_event[3] = l7vs::protocol_module_base::CLIENT_RESPONSE_SEND;
4536 chek_event[4] = l7vs::protocol_module_base::REALSERVER_SELECT;
4537 chek_event[5] = l7vs::protocol_module_base::REALSERVER_CONNECT;
4538 chek_event[6] = l7vs::protocol_module_base::REALSERVER_SEND;
4539 chek_event[7] = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
4540 chek_event[8] = l7vs::protocol_module_base::SORRYSERVER_SELECT;
4541 chek_event[9] = l7vs::protocol_module_base::SORRYSERVER_CONNECT;
4542 chek_event[10] = l7vs::protocol_module_base::SORRYSERVER_SEND;
4543 chek_event[11] = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
4544 chek_event[12] = l7vs::protocol_module_base::FINALIZE;
4546 // unit_test [1] up_thread_client_disconnect_event up_thread_next_call_function update check
4547 std::cerr << "[1] up_thread_client_disconnect_event up_thread_next_call_function update check" << std::endl;
4548 for(int i = 0; i < 13;i++){
4549 proto_test.handle_client_disconnect_res_tag = chek_event[i];
4550 test_obj.test_call();
4551 BOOST_CHECK(test_obj.chk_up_thread_next_call_function(chek_event[i]));
4554 // unit_test [2] up_thread_client_disconnect_event module parameter check thread id
4555 std::cerr << "[2] up_thread_client_disconnect_event module parameter check thread id" << std::endl;
4556 boost::thread::id def_id;
4557 boost::thread::id proc_id = boost::this_thread::get_id();
4558 test_obj.set_up_thread_id(proc_id);
4559 proto_test.handle_client_disconnect_thread_id = def_id;
4560 proto_test.handle_client_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
4561 BOOST_CHECK(proto_test.handle_client_disconnect_thread_id != proc_id);
4562 test_obj.test_call();
4563 BOOST_CHECK(proto_test.handle_client_disconnect_thread_id == proc_id);
4565 // unit_test [3] up_thread_client_disconnect_event not fond function error check
4566 std::cerr << "[3] up_thread_client_disconnect_event not fond function error check" << std::endl;
4567 test_obj.up_thread_function_array_clear();
4568 proto_test.handle_client_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
4569 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
4570 l7vs::Logger::putLogError_id = 0;
4571 test_obj.test_call();
4572 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
4573 BOOST_CHECK_EQUAL(29,l7vs::Logger::putLogError_id);
4574 std::cerr << l7vs::Logger::putLogError_message << std::endl;
4576 // unit_test [4] up_thread_client_disconnect_event returnd illegal EVENT_TAG error check
4577 std::cerr << "[4] up_thread_client_disconnect_event returnd illegal EVENT_TAG error check" << std::endl;
4578 test_obj.up_thread_module_event_map_clear();
4579 proto_test.handle_client_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
4580 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
4581 l7vs::Logger::putLogError_id = 0;
4582 test_obj.test_call();
4583 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
4584 BOOST_CHECK_EQUAL(28,l7vs::Logger::putLogError_id);
4585 std::cerr << l7vs::Logger::putLogError_message << std::endl;
4587 // mutex_lock_test test_lock_obj(vs,io);
4588 mutex_lock_test test_lock_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
4590 test_lock_obj.set_up_thread_client_disconnect_event_test();
4591 test_lock_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
4594 test_lock_obj.test_thread_wait.lock();
4595 test_lock_obj.befor_thread_id = proc_id;
4596 test_lock_obj.after_thread_id = proc_id;
4597 test_lock_obj.mutex_lock();
4599 boost::thread test_thread(boost::bind(&mutex_lock_test::test_run,&test_lock_obj));
4601 BOOST_CHECK(test_lock_obj.befor_thread_id == proc_id);
4602 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
4604 boost::thread::id test_id = test_thread.get_id();
4606 BOOST_CHECK(test_id != proc_id);
4609 test_lock_obj.test_thread_wait.unlock();
4612 // unit_test [5] up_thread_client_disconnect_event thread block test (mutex lock)
4613 std::cerr << "[5] up_thread_client_disconnect_event thread block test (mutex lock)" << std::endl;
4614 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
4615 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
4617 test_lock_obj.mutex_unlock();
4620 // unit_test [6] up_thread_client_disconnect_event thread run test (mutex unlock)
4621 std::cerr << "[6] up_thread_client_disconnect_event thread run test (mutex unlock)" << std::endl;
4622 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
4623 BOOST_CHECK(test_lock_obj.after_thread_id == test_id);
4625 BOOST_MESSAGE( "----- up_thread_client_disconnect_event test end -----" );
4628 // down_thread_client_disconnetc_event test
4629 // dwon_thread_client_disconnetc_event test class
4630 class down_thread_client_disconnect_event_test_class : public module_event_map_test_base_class{
4632 // down_thread_client_disconnect_event_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : module_event_map_test_base_class(vs,session_io){
4634 down_thread_client_disconnect_event_test_class(
4635 l7vs::virtualservice_tcp& vs,
4636 boost::asio::io_service& session_io,
4637 l7vs::tcp_socket_option_info& set_socket_option,
4638 boost::asio::ip::tcp::endpoint listen_endpoint,
4640 boost::asio::ssl::context& set_ssl_context,
4641 bool set_ssl_cache_flag,
4642 int set_ssl_handshake_time_out,
4643 l7vs::logger_implement_access* set_access_logger) : module_event_map_test_base_class( vs,
4650 set_ssl_handshake_time_out,
4651 set_access_logger){};
4653 ~down_thread_client_disconnect_event_test_class(){};
4656 l7vs::tcp_session::down_thread_client_disconnect_event(LOCAL_PROC);
4660 void down_thread_client_disconnect_event_test(){
4662 BOOST_MESSAGE( "----- down_thread_client_disconnect_event test start -----" );
4664 // boost::asio::io_service io;
4665 // l7vs::virtualservice_tcp vs;
4666 // down_thread_client_disconnect_event_test_class test_obj(vs,io);
4667 l7vs::virtualservice_tcp vs;
4668 boost::asio::io_service io;
4669 l7vs::tcp_socket_option_info set_option;
4670 //! TCP_NODELAY (false:not set,true:set option)
4671 set_option.nodelay_opt = false;
4672 //! TCP_NODELAY option value (false:off,true:on)
4673 set_option.nodelay_val = false;
4674 //! TCP_CORK (false:not set,true:set option)
4675 set_option.cork_opt = false;
4676 //! TCP_CORK option value (false:off,true:on)
4677 set_option.cork_val = false;
4678 //! TCP_QUICKACK (false:not set,true:set option)
4679 set_option.quickack_opt = false;
4680 //! TCP_QUICKACK option value (false:off,true:on)
4681 set_option.quickack_val = false;
4683 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
4684 bool set_mode(false);
4685 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
4686 bool set_ssl_cache_flag(false);
4687 int set_ssl_handshake_time_out = 0;
4688 //std::string access_log_file_name = "test";
4689 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
4691 down_thread_client_disconnect_event_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
4693 std::string test_protocol_name("test protocol");
4694 l7vs::test_protocol_module proto_test(test_protocol_name);
4696 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
4698 l7vs::protocol_module_base::EVENT_TAG chek_event[7];
4699 chek_event[0] = l7vs::protocol_module_base::CLIENT_DISCONNECT;
4700 chek_event[1] = l7vs::protocol_module_base::CLIENT_CONNECTION_CHECK;
4701 chek_event[2] = l7vs::protocol_module_base::REALSERVER_RECV;
4702 chek_event[3] = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
4703 chek_event[4] = l7vs::protocol_module_base::SORRYSERVER_RECV;
4704 chek_event[5] = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
4705 chek_event[6] = l7vs::protocol_module_base::FINALIZE;
4707 // unit_test [1] down_thread_client_disconnect_event up_thread_next_call_function update check
4708 std::cerr << "[1] down_thread_client_disconnect_event up_thread_next_call_function update check" << std::endl;
4709 for(int i = 0; i < 7;i++){
4710 proto_test.handle_client_disconnect_res_tag = chek_event[i];
4711 test_obj.test_call();
4712 BOOST_CHECK(test_obj.chk_down_thread_next_call_function(chek_event[i]));
4715 // unit_test [2] down_thread_client_disconnect_event module parameter check thread id
4716 std::cerr << "[2] down_thread_client_disconnect_event module parameter check thread id" << std::endl;
4717 boost::thread::id def_id;
4718 boost::thread::id proc_id = boost::this_thread::get_id();
4719 test_obj.set_down_thread_id(proc_id);
4720 proto_test.handle_client_disconnect_thread_id = def_id;
4721 proto_test.handle_client_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
4722 BOOST_CHECK(proto_test.handle_client_disconnect_thread_id != proc_id);
4723 test_obj.test_call();
4724 BOOST_CHECK(proto_test.handle_client_disconnect_thread_id == proc_id);
4726 // unit_test [3] down_thread_client_disconnect_event not fond function error check
4727 std::cerr << "[3] down_thread_client_disconnect_event not fond function error check" << std::endl;
4728 test_obj.down_thread_function_array_clear();
4729 proto_test.handle_client_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
4730 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
4731 l7vs::Logger::putLogError_id = 0;
4732 test_obj.test_call();
4733 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
4734 BOOST_CHECK_EQUAL(87,l7vs::Logger::putLogError_id);
4735 std::cerr << l7vs::Logger::putLogError_message << std::endl;
4737 // unit_test [4] down_thread_client_disconnect_event returnd illegal EVENT_TAG error check
4738 std::cerr << "[4] down_thread_client_disconnect_event returnd illegal EVENT_TAG error check" << std::endl;
4739 test_obj.down_thread_module_event_map_clear();
4740 proto_test.handle_client_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
4741 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
4742 l7vs::Logger::putLogError_id = 0;
4743 test_obj.test_call();
4744 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
4745 BOOST_CHECK_EQUAL(86,l7vs::Logger::putLogError_id);
4746 std::cerr << l7vs::Logger::putLogError_message << std::endl;
4748 // mutex_lock_test test_lock_obj(vs,io);
4749 mutex_lock_test test_lock_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
4751 test_lock_obj.set_down_thread_client_disconnect_event_test();
4752 test_lock_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
4754 test_lock_obj.test_thread_wait.lock();
4755 test_lock_obj.befor_thread_id = proc_id;
4756 test_lock_obj.after_thread_id = proc_id;
4757 test_lock_obj.mutex_lock();
4759 boost::thread test_thread(boost::bind(&mutex_lock_test::test_run,&test_lock_obj));
4761 BOOST_CHECK(test_lock_obj.befor_thread_id == proc_id);
4762 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
4764 boost::thread::id test_id = test_thread.get_id();
4766 BOOST_CHECK(test_id != proc_id);
4769 test_lock_obj.test_thread_wait.unlock();
4772 // unit_test [5] down_thread_client_disconnect_event thread block test (mutex lock)
4773 std::cerr << "[5] down_thread_client_disconnect_event thread block test (mutex lock)" << std::endl;
4774 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
4775 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
4777 test_lock_obj.mutex_unlock();
4780 // unit_test [6] down_thread_client_disconnect_event thread run test (mutex unlock)
4781 std::cerr << "[6] down_thread_client_disconnect_event thread run test (mutex unlock)" << std::endl;
4782 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
4783 BOOST_CHECK(test_lock_obj.after_thread_id == test_id);
4785 BOOST_MESSAGE( "----- down_thread_client_disconnect_event test end -----" );
4788 // up_thread_realserver_get_detination_event test
4789 // up_thread_realserver_get_detination_event test class
4790 class up_thread_realserver_get_detination_event_test_class : public l7vs::tcp_session{
4792 // up_thread_realserver_get_detination_event_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){
4794 up_thread_realserver_get_detination_event_test_class(
4795 l7vs::virtualservice_tcp& vs,
4796 boost::asio::io_service& session_io,
4797 l7vs::tcp_socket_option_info& set_socket_option,
4798 boost::asio::ip::tcp::endpoint listen_endpoint,
4800 boost::asio::ssl::context& set_ssl_context,
4801 bool set_ssl_cache_flag,
4802 int set_ssl_handshake_time_out,
4803 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
4810 set_ssl_handshake_time_out,
4811 set_access_logger){};
4813 ~up_thread_realserver_get_detination_event_test_class(){};
4816 tcp_session::up_thread_realserver_get_destination_event(LOCAL_PROC);
4819 l7vs::tcp_data& get_up_thread_data_dest_side(){
4820 return up_thread_data_dest_side;
4823 up_thread_next_call_function.second(LOCAL_PROC);
4826 void up_thread_realserver_connect(const TCP_PROCESS_TYPE_TAG process_type){
4827 up_thread_realserver_connect_call_check = true;
4830 bool up_thread_realserver_connect_call_check;
4832 void set_protocol_module(l7vs::protocol_module_base* set_proto){
4833 protocol_module = set_proto;
4836 void set_up_thread_id(boost::thread::id set_id){
4837 up_thread_id = set_id;
4840 void up_thread_function_array_clear(){
4841 for(int i = 0; i <= UP_FUNC_EXIT;i++){
4842 up_thread_function_array[i].second = NULL;
4845 void up_thread_module_event_map_clear(){
4846 up_thread_module_event_map.clear();
4849 void up_thread_realserver_get_detination_event_test(){
4850 BOOST_MESSAGE( "----- up_thread_realserver_get_detination_event test start -----" );
4852 // boost::asio::io_service io;
4853 // l7vs::virtualservice_tcp vs;
4854 // up_thread_realserver_get_detination_event_test_class test_obj(vs,io);
4855 l7vs::virtualservice_tcp vs;
4856 boost::asio::io_service io;
4857 l7vs::tcp_socket_option_info set_option;
4858 //! TCP_NODELAY (false:not set,true:set option)
4859 set_option.nodelay_opt = false;
4860 //! TCP_NODELAY option value (false:off,true:on)
4861 set_option.nodelay_val = false;
4862 //! TCP_CORK (false:not set,true:set option)
4863 set_option.cork_opt = false;
4864 //! TCP_CORK option value (false:off,true:on)
4865 set_option.cork_val = false;
4866 //! TCP_QUICKACK (false:not set,true:set option)
4867 set_option.quickack_opt = false;
4868 //! TCP_QUICKACK option value (false:off,true:on)
4869 set_option.quickack_val = false;
4871 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
4872 bool set_mode(false);
4873 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
4874 bool set_ssl_cache_flag(false);
4875 int set_ssl_handshake_time_out = 0;
4876 //std::string access_log_file_name = "test";
4877 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
4879 up_thread_realserver_get_detination_event_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
4882 std::string test_protocol_name("test protocol");
4883 l7vs::test_protocol_module proto_test(test_protocol_name);
4884 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
4885 l7vs::tcp_data& up_thread_data_dest_side = test_obj.get_up_thread_data_dest_side();
4886 boost::thread::id proc_id = boost::this_thread::get_id();
4887 test_obj.set_up_thread_id(proc_id);
4889 proto_test.handle_realserver_select_tcp_res_tag = l7vs::protocol_module_base::REALSERVER_CONNECT;
4890 proto_test.handle_realserver_select_out_rs_endpoint = boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string("100.101.102.103"), 7777);
4891 up_thread_data_dest_side.initialize();
4892 BOOST_CHECK(proto_test.handle_realserver_select_in_thread_id != proc_id);
4894 test_obj.test_call();
4896 // unit_test [1] up_thread_realserver_get_detination_event handle_realserver_select call check
4897 std::cerr << "[1] up_thread_realserver_get_detination_event handle_realserver_select call check" << std::endl;
4898 BOOST_CHECK(proto_test.handle_realserver_select_in_thread_id == proc_id);
4899 boost::asio::ip::tcp::endpoint get_endpoint = up_thread_data_dest_side.get_endpoint();
4900 BOOST_CHECK(get_endpoint == proto_test.handle_realserver_select_out_rs_endpoint);
4902 // unit_test [2] up_thread_realserver_get_detination_event up_thread_next_call_function update check
4903 std::cerr << "[2] up_thread_realserver_get_detination_event up_thread_next_call_function update check" << std::endl;
4904 test_obj.up_thread_realserver_connect_call_check = false;
4905 test_obj.next_call();
4906 BOOST_CHECK(test_obj.up_thread_realserver_connect_call_check);
4908 // unit_test [3] up_thread_realserver_get_detination_event not fond function error check
4909 std::cerr << "[3] up_thread_realserver_get_detination_event not fond function error check" << std::endl;
4910 test_obj.up_thread_function_array_clear();
4911 proto_test.handle_realserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
4912 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
4913 l7vs::Logger::putLogError_id = 0;
4914 test_obj.test_call();
4915 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
4916 BOOST_CHECK_EQUAL(33,l7vs::Logger::putLogError_id);
4917 std::cerr << l7vs::Logger::putLogError_message << std::endl;
4919 // unit_test [4] up_thread_realserver_get_detination_event returnd illegal EVENT_TAG error check
4920 std::cerr << "[4] up_thread_realserver_get_detination_event returnd illegal EVENT_TAG error check" << std::endl;
4921 test_obj.up_thread_module_event_map_clear();
4922 proto_test.handle_realserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
4923 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
4924 l7vs::Logger::putLogError_id = 0;
4925 test_obj.test_call();
4926 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
4927 BOOST_CHECK_EQUAL(32,l7vs::Logger::putLogError_id);
4928 std::cerr << l7vs::Logger::putLogError_message << std::endl;
4930 BOOST_MESSAGE( "----- up_thread_realserver_get_detination_event test end -----" );
4932 // up_thread_sorryserver_get_detination_event test
4933 // up_thread_sorryserver_get_detination_event test class
4934 class up_thread_sorryserver_get_detination_event_test_class : public l7vs::tcp_session{
4936 // up_thread_sorryserver_get_detination_event_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){
4938 up_thread_sorryserver_get_detination_event_test_class(
4939 l7vs::virtualservice_tcp& vs,
4940 boost::asio::io_service& session_io,
4941 l7vs::tcp_socket_option_info& set_socket_option,
4942 boost::asio::ip::tcp::endpoint listen_endpoint,
4944 boost::asio::ssl::context& set_ssl_context,
4945 bool set_ssl_cache_flag,
4946 int set_ssl_handshake_time_out,
4947 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
4954 set_ssl_handshake_time_out,
4955 set_access_logger){};
4957 ~up_thread_sorryserver_get_detination_event_test_class(){};
4960 tcp_session::up_thread_sorryserver_get_destination_event(LOCAL_PROC);
4963 l7vs::tcp_data& get_up_thread_data_dest_side(){
4964 return up_thread_data_dest_side;
4967 up_thread_next_call_function.second(LOCAL_PROC);
4970 void up_thread_sorryserver_connect(const TCP_PROCESS_TYPE_TAG process_type){
4971 up_thread_sorryserver_connect_call_check = true;
4974 bool up_thread_sorryserver_connect_call_check;
4976 void set_protocol_module(l7vs::protocol_module_base* set_proto){
4977 protocol_module = set_proto;
4980 void set_up_thread_id(boost::thread::id set_id){
4981 up_thread_id = set_id;
4984 void up_thread_function_array_clear(){
4985 for(int i = 0; i <= UP_FUNC_EXIT; i++){
4986 up_thread_function_array[i].second = NULL;
4989 void up_thread_module_event_map_clear(){
4990 up_thread_module_event_map.clear();
4993 void up_thread_sorryserver_get_detination_event_test(){
4994 BOOST_MESSAGE( "----- up_thread_sorryserver_get_detination_event test start -----" );
4996 // boost::asio::io_service io;
4997 // l7vs::virtualservice_tcp vs;
4998 // up_thread_sorryserver_get_detination_event_test_class test_obj(vs,io);
4999 l7vs::virtualservice_tcp vs;
5000 boost::asio::io_service io;
5001 l7vs::tcp_socket_option_info set_option;
5002 //! TCP_NODELAY (false:not set,true:set option)
5003 set_option.nodelay_opt = false;
5004 //! TCP_NODELAY option value (false:off,true:on)
5005 set_option.nodelay_val = false;
5006 //! TCP_CORK (false:not set,true:set option)
5007 set_option.cork_opt = false;
5008 //! TCP_CORK option value (false:off,true:on)
5009 set_option.cork_val = false;
5010 //! TCP_QUICKACK (false:not set,true:set option)
5011 set_option.quickack_opt = false;
5012 //! TCP_QUICKACK option value (false:off,true:on)
5013 set_option.quickack_val = false;
5015 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
5016 bool set_mode(false);
5017 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
5018 bool set_ssl_cache_flag(false);
5019 int set_ssl_handshake_time_out = 0;
5020 //std::string access_log_file_name = "test";
5021 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
5023 up_thread_sorryserver_get_detination_event_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
5025 std::string test_protocol_name("test protocol");
5026 l7vs::test_protocol_module proto_test(test_protocol_name);
5027 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
5028 l7vs::tcp_data& up_thread_data_dest_side = test_obj.get_up_thread_data_dest_side();
5029 boost::thread::id proc_id = boost::this_thread::get_id();
5030 test_obj.set_up_thread_id(proc_id);
5032 proto_test.handle_sorryserver_select_res_tag = l7vs::protocol_module_base::SORRYSERVER_CONNECT;
5033 proto_test.handle_sorryserver_select_out_sorry_endpoint = boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string("100.101.102.103"), 7777);
5034 vs.my_element.sorry_endpoint = boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string("200.201.202.203"), 8888);
5036 up_thread_data_dest_side.initialize();
5037 BOOST_CHECK(proto_test.handle_sorryserver_select_in_thread_id != proc_id);
5039 test_obj.test_call();
5041 // unit_test [1] up_thread_sorryserver_get_detination_event handle_realserver_select call check
5042 std::cerr << "[1] up_thread_sorryserver_get_detination_event handle_realserver_select call check" << std::endl;
5043 BOOST_CHECK(proto_test.handle_sorryserver_select_in_thread_id == proc_id);
5044 boost::asio::ip::tcp::endpoint get_endpoint = up_thread_data_dest_side.get_endpoint();
5045 BOOST_CHECK(get_endpoint == proto_test.handle_sorryserver_select_out_sorry_endpoint);
5046 BOOST_CHECK(vs.my_element.sorry_endpoint == proto_test.handle_sorryserver_select_in_sorry_endpoint);
5048 // unit_test [2] up_thread_sorryserver_get_detination_event up_thread_next_call_function update check
5049 std::cerr << "[2] up_thread_sorryserver_get_detination_event up_thread_next_call_function update check" << std::endl;
5050 test_obj.up_thread_sorryserver_connect_call_check = false;
5051 test_obj.next_call();
5052 BOOST_CHECK(test_obj.up_thread_sorryserver_connect_call_check);
5054 // unit_test [3] up_thread_sorryserver_get_detination_event not fond function error check
5055 std::cerr << "[3] up_thread_sorryserver_get_detination_event not fond function error check" << std::endl;
5056 test_obj.up_thread_function_array_clear();
5057 proto_test.handle_sorryserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
5058 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
5059 l7vs::Logger::putLogError_id = 0;
5060 test_obj.test_call();
5061 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
5062 BOOST_CHECK_EQUAL(52,l7vs::Logger::putLogError_id);
5063 std::cerr << l7vs::Logger::putLogError_message << std::endl;
5065 // unit_test [4] up_thread_sorryserver_get_detination_event returnd illegal EVENT_TAG error check
5066 std::cerr << "[4] up_thread_sorryserver_get_detination_event returnd illegal EVENT_TAG error check" << std::endl;
5067 test_obj.up_thread_module_event_map_clear();
5068 proto_test.handle_sorryserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
5069 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
5070 l7vs::Logger::putLogError_id = 0;
5071 test_obj.test_call();
5072 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
5073 BOOST_CHECK_EQUAL(51,l7vs::Logger::putLogError_id);
5074 std::cerr << l7vs::Logger::putLogError_message << std::endl;
5076 BOOST_MESSAGE( "----- up_thread_sorryserver_get_detination_event test end -----" );
5080 // up_thread_realserver_disconnect_event test
5081 // up_thread_realserver_disconnect_event test class
5082 class up_thread_realserver_disconnect_event_test_class : public module_event_map_test_base_class{
5084 // up_thread_realserver_disconnect_event_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : module_event_map_test_base_class(vs,session_io){
5086 up_thread_realserver_disconnect_event_test_class(
5087 l7vs::virtualservice_tcp& vs,
5088 boost::asio::io_service& session_io,
5089 l7vs::tcp_socket_option_info& set_socket_option,
5090 boost::asio::ip::tcp::endpoint listen_endpoint,
5092 boost::asio::ssl::context& set_ssl_context,
5093 bool set_ssl_cache_flag,
5094 int set_ssl_handshake_time_out,
5095 l7vs::logger_implement_access* set_access_logger) : module_event_map_test_base_class( vs,
5102 set_ssl_handshake_time_out,
5103 set_access_logger){};
5106 ~up_thread_realserver_disconnect_event_test_class(){};
5109 l7vs::tcp_session::up_thread_realserver_disconnect_event(LOCAL_PROC);
5112 std::map<endpoint,tcp_socket_ptr>& get_realserver_socket_map(){
5113 return up_thread_send_realserver_socket_map;
5117 void up_thread_realserver_disconnect_event_test(){
5119 BOOST_MESSAGE( "----- up_thread_realserver_disconnect_event test start -----" );
5121 boost::asio::io_service io;
5122 l7vs::virtualservice_tcp vs;
5123 // up_thread_realserver_disconnect_event_test_class test_obj(vs,io);
5124 l7vs::tcp_socket_option_info set_option;
5125 //! TCP_NODELAY (false:not set,true:set option)
5126 set_option.nodelay_opt = false;
5127 //! TCP_NODELAY option value (false:off,true:on)
5128 set_option.nodelay_val = false;
5129 //! TCP_CORK (false:not set,true:set option)
5130 set_option.cork_opt = false;
5131 //! TCP_CORK option value (false:off,true:on)
5132 set_option.cork_val = false;
5133 //! TCP_QUICKACK (false:not set,true:set option)
5134 set_option.quickack_opt = false;
5135 //! TCP_QUICKACK option value (false:off,true:on)
5136 set_option.quickack_val = false;
5138 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
5139 bool set_mode(false);
5140 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
5141 bool set_ssl_cache_flag(false);
5142 int set_ssl_handshake_time_out = 0;
5143 //std::string access_log_file_name = "test";
5144 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
5146 up_thread_realserver_disconnect_event_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
5151 std::string test_protocol_name("test protocol");
5152 l7vs::test_protocol_module proto_test(test_protocol_name);
5154 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
5156 l7vs::protocol_module_base::EVENT_TAG chek_event[13];
5157 chek_event[0] = l7vs::protocol_module_base::ACCEPT;
5158 chek_event[1] = l7vs::protocol_module_base::CLIENT_DISCONNECT;
5159 chek_event[2] = l7vs::protocol_module_base::CLIENT_RECV;
5160 chek_event[3] = l7vs::protocol_module_base::CLIENT_RESPONSE_SEND;
5161 chek_event[4] = l7vs::protocol_module_base::REALSERVER_SELECT;
5162 chek_event[5] = l7vs::protocol_module_base::REALSERVER_CONNECT;
5163 chek_event[6] = l7vs::protocol_module_base::REALSERVER_SEND;
5164 chek_event[7] = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
5165 chek_event[8] = l7vs::protocol_module_base::SORRYSERVER_SELECT;
5166 chek_event[9] = l7vs::protocol_module_base::SORRYSERVER_CONNECT;
5167 chek_event[10] = l7vs::protocol_module_base::SORRYSERVER_SEND;
5168 chek_event[11] = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
5169 chek_event[12] = l7vs::protocol_module_base::FINALIZE;
5171 // unit_test [1] up_thread_realserver_disconnect_event up_thread_next_call_function update check
5172 std::cerr << "[1] up_thread_realserver_disconnect_event up_thread_next_call_function update check" << std::endl;
5173 for(int i = 0; i < 13;i++){
5174 proto_test.handle_realserver_disconnect_res_tag = chek_event[i];
5175 test_obj.test_call();
5176 BOOST_CHECK(test_obj.chk_up_thread_next_call_function(chek_event[i]));
5179 // module parameter check
5180 boost::thread::id def_id;
5181 boost::thread::id proc_id = boost::this_thread::get_id();
5182 boost::asio::ip::tcp::endpoint test_end(boost::asio::ip::address::from_string("100.102.103.104"), 7777);
5183 l7vs::tcp_data test_message;
5184 test_message.set_endpoint(test_end);
5185 test_obj.set_up_thread_id(proc_id);
5186 test_obj.set_up_thread_message_data(test_message);
5187 proto_test.handle_realserver_disconnect_thread_id = def_id;
5188 proto_test.handle_realserver_disconnect_rs_endpoint = boost::asio::ip::tcp::endpoint();
5189 proto_test.handle_realserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
5190 BOOST_CHECK(proto_test.handle_realserver_disconnect_thread_id != proc_id);
5191 BOOST_CHECK(proto_test.handle_realserver_disconnect_rs_endpoint != test_end);
5192 test_obj.test_call();
5193 // unit_test [2] up_thread_realserver_disconnect_event module parameter check thread id
5194 std::cerr << "[2] up_thread_realserver_disconnect_event module parameter check thread id" << std::endl;
5195 BOOST_CHECK(proto_test.handle_realserver_disconnect_thread_id == proc_id);
5197 // unit_test [3] up_thread_realserver_disconnect_event module parameter check endpoint
5198 std::cerr << "[3] up_thread_realserver_disconnect_event module parameter check endpoint" << std::endl;
5199 BOOST_CHECK(proto_test.handle_realserver_disconnect_rs_endpoint == test_end);
5202 // unit_test [4] up_thread_realserver_disconnect_event realserver map erase check
5203 std::cerr << "[4] up_thread_realserver_disconnect_event realserver map erase check" << std::endl;
5205 std::map<boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > >& realserver_map = test_obj.get_realserver_socket_map();
5206 boost::shared_ptr< l7vs::tcp_socket > test_tcp_sock0(new l7vs::tcp_socket(io));
5207 boost::shared_ptr< l7vs::tcp_socket > test_tcp_sock1(new l7vs::tcp_socket(io));
5208 boost::shared_ptr< l7vs::tcp_socket > test_tcp_sock2(new l7vs::tcp_socket(io));
5209 std::pair< boost::asio::ip::tcp::endpoint , boost::shared_ptr< l7vs::tcp_socket > > test_sock_list[3];
5210 test_sock_list[0].first = boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string("100.100.100.100"), 0);
5211 test_sock_list[0].second = test_tcp_sock0;
5212 test_sock_list[1].first = boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string("101.101.101.101"), 1);
5213 test_sock_list[1].second = test_tcp_sock1;
5214 test_sock_list[2].first = boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string("102.102.102.102"), 2);
5215 test_sock_list[2].second = test_tcp_sock2;
5216 for(int i = 0;i < 3;i++){
5217 realserver_map.insert(test_sock_list[i]);
5219 proto_test.handle_realserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
5222 test_message.set_endpoint(test_sock_list[1].first);
5223 test_obj.set_up_thread_message_data(test_message);
5224 BOOST_CHECK(realserver_map.find(test_sock_list[0].first) != realserver_map.end());
5225 BOOST_CHECK(realserver_map.find(test_sock_list[1].first) != realserver_map.end());
5226 BOOST_CHECK(realserver_map.find(test_sock_list[2].first) != realserver_map.end());
5227 test_obj.test_call();
5228 BOOST_CHECK(realserver_map.find(test_sock_list[0].first) != realserver_map.end());
5229 BOOST_CHECK(realserver_map.find(test_sock_list[1].first) == realserver_map.end());
5230 BOOST_CHECK(realserver_map.find(test_sock_list[2].first) != realserver_map.end());
5232 test_message.set_endpoint(test_sock_list[0].first);
5233 test_obj.set_up_thread_message_data(test_message);
5234 BOOST_CHECK(realserver_map.find(test_sock_list[0].first) != realserver_map.end());
5235 BOOST_CHECK(realserver_map.find(test_sock_list[1].first) == realserver_map.end());
5236 BOOST_CHECK(realserver_map.find(test_sock_list[2].first) != realserver_map.end());
5237 test_obj.test_call();
5238 BOOST_CHECK(realserver_map.find(test_sock_list[0].first) == realserver_map.end());
5239 BOOST_CHECK(realserver_map.find(test_sock_list[1].first) == realserver_map.end());
5240 BOOST_CHECK(realserver_map.find(test_sock_list[2].first) != realserver_map.end());
5242 test_message.set_endpoint(test_sock_list[2].first);
5243 test_obj.set_up_thread_message_data(test_message);
5244 BOOST_CHECK(realserver_map.find(test_sock_list[0].first) == realserver_map.end());
5245 BOOST_CHECK(realserver_map.find(test_sock_list[1].first) == realserver_map.end());
5246 BOOST_CHECK(realserver_map.find(test_sock_list[2].first) != realserver_map.end());
5247 test_obj.test_call();
5248 BOOST_CHECK(realserver_map.find(test_sock_list[0].first) == realserver_map.end());
5249 BOOST_CHECK(realserver_map.find(test_sock_list[1].first) == realserver_map.end());
5250 BOOST_CHECK(realserver_map.find(test_sock_list[2].first) == realserver_map.end());
5251 BOOST_CHECK(realserver_map.empty());
5253 // unit_test [5] up_thread_realserver_disconnect_event not fond function error check
5254 std::cerr << "[5] up_thread_realserver_disconnect_event not fond function error check" << std::endl;
5255 test_obj.up_thread_function_array_clear();
5256 proto_test.handle_realserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
5257 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
5258 l7vs::Logger::putLogError_id = 0;
5259 test_obj.test_call();
5260 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
5261 BOOST_CHECK_EQUAL(46,l7vs::Logger::putLogError_id);
5262 std::cerr << l7vs::Logger::putLogError_message << std::endl;
5264 // unit_test [6] up_thread_realserver_disconnect_event returnd illegal EVENT_TAG error check
5265 std::cerr << "[6] up_thread_realserver_disconnect_event returnd illegal EVENT_TAG error check" << std::endl;
5266 test_obj.up_thread_module_event_map_clear();
5267 proto_test.handle_realserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
5268 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
5269 l7vs::Logger::putLogError_id = 0;
5270 test_obj.test_call();
5271 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
5272 BOOST_CHECK_EQUAL(45,l7vs::Logger::putLogError_id);
5273 std::cerr << l7vs::Logger::putLogError_message << std::endl;
5275 // mutex_lock_test test_lock_obj(vs,io);
5276 mutex_lock_test test_lock_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
5278 test_lock_obj.set_up_thread_realserver_disconnect_event_test();
5279 test_lock_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
5281 test_lock_obj.test_thread_wait.lock();
5282 test_lock_obj.befor_thread_id = proc_id;
5283 test_lock_obj.after_thread_id = proc_id;
5284 test_lock_obj.mutex_lock();
5286 boost::thread test_thread(boost::bind(&mutex_lock_test::test_run,&test_lock_obj));
5288 BOOST_CHECK(test_lock_obj.befor_thread_id == proc_id);
5289 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
5291 boost::thread::id test_id = test_thread.get_id();
5293 BOOST_CHECK(test_id != proc_id);
5296 test_lock_obj.test_thread_wait.unlock();
5299 // unit_test [7] up_thread_realserver_disconnect_event thread block test (mutex lock)
5300 std::cerr << "[7] up_thread_realserver_disconnect_event thread block test (mutex lock)" << std::endl;
5301 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
5302 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
5304 test_lock_obj.mutex_unlock();
5307 // unit_test [8] up_thread_realserver_disconnect_event thread run test (mutex unlock)
5308 std::cerr << "[8] up_thread_realserver_disconnect_event thread run test (mutex unlock)" << std::endl;
5309 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
5310 BOOST_CHECK(test_lock_obj.after_thread_id == test_id);
5312 BOOST_MESSAGE( "----- up_thread_realserver_disconnect_event test end -----" );
5317 // down_thread_realserver_disconnetc_event test
5318 // down_thread_realserver_disconnetc_event test class
5319 class down_thread_realserver_disconnect_event_test_class : public module_event_map_test_base_class{
5321 // down_thread_realserver_disconnect_event_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : module_event_map_test_base_class(vs,session_io){
5323 down_thread_realserver_disconnect_event_test_class(
5324 l7vs::virtualservice_tcp& vs,
5325 boost::asio::io_service& session_io,
5326 l7vs::tcp_socket_option_info& set_socket_option,
5327 boost::asio::ip::tcp::endpoint listen_endpoint,
5329 boost::asio::ssl::context& set_ssl_context,
5330 bool set_ssl_cache_flag,
5331 int set_ssl_handshake_time_out,
5332 l7vs::logger_implement_access* set_access_logger) : module_event_map_test_base_class( vs,
5339 set_ssl_handshake_time_out,
5340 set_access_logger){};
5343 ~down_thread_realserver_disconnect_event_test_class(){};
5346 l7vs::tcp_session::down_thread_realserver_disconnect_event(LOCAL_PROC);
5349 std::list<socket_element>& get_realserver_socket_list(){
5350 return down_thread_receive_realserver_socket_list;
5354 void down_thread_realserver_disconnect_event_test(){
5356 BOOST_MESSAGE( "----- down_thread_realserver_disconnect_event test start -----" );
5358 boost::asio::io_service io;
5359 l7vs::virtualservice_tcp vs;
5360 l7vs::tcp_socket_option_info set_option;
5361 //! TCP_NODELAY (false:not set,true:set option)
5362 set_option.nodelay_opt = false;
5363 //! TCP_NODELAY option value (false:off,true:on)
5364 set_option.nodelay_val = false;
5365 //! TCP_CORK (false:not set,true:set option)
5366 set_option.cork_opt = false;
5367 //! TCP_CORK option value (false:off,true:on)
5368 set_option.cork_val = false;
5369 //! TCP_QUICKACK (false:not set,true:set option)
5370 set_option.quickack_opt = false;
5371 //! TCP_QUICKACK option value (false:off,true:on)
5372 set_option.quickack_val = false;
5374 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
5375 bool set_mode(false);
5376 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
5377 bool set_ssl_cache_flag(false);
5378 int set_ssl_handshake_time_out = 0;
5379 //std::string access_log_file_name = "test";
5380 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
5381 // down_thread_realserver_disconnect_event_test_class test_obj(vs,io);
5382 down_thread_realserver_disconnect_event_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
5388 std::string test_protocol_name("test protocol");
5389 l7vs::test_protocol_module proto_test(test_protocol_name);
5391 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
5393 l7vs::protocol_module_base::EVENT_TAG chek_event[7];
5394 chek_event[0] = l7vs::protocol_module_base::CLIENT_DISCONNECT;
5395 chek_event[1] = l7vs::protocol_module_base::CLIENT_CONNECTION_CHECK;
5396 chek_event[2] = l7vs::protocol_module_base::REALSERVER_RECV;
5397 chek_event[3] = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
5398 chek_event[4] = l7vs::protocol_module_base::SORRYSERVER_RECV;
5399 chek_event[5] = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
5400 chek_event[6] = l7vs::protocol_module_base::FINALIZE;
5402 // unit_test [1] down_thread_realserver_disconnect_event down_thread_next_call_function update check
5403 std::cerr << "[1] down_thread_realserver_disconnect_event down_thread_next_call_function update check" << std::endl;
5404 for(int i = 0; i < 7;i++){
5405 proto_test.handle_realserver_disconnect_res_tag = chek_event[i];
5406 test_obj.test_call();
5407 BOOST_CHECK(test_obj.chk_down_thread_next_call_function(chek_event[i]));
5410 // module parameter check
5411 boost::thread::id def_id;
5412 boost::thread::id proc_id = boost::this_thread::get_id();
5413 boost::asio::ip::tcp::endpoint test_end(boost::asio::ip::address::from_string("100.102.103.104"), 7777);
5414 l7vs::tcp_data test_message;
5415 test_message.set_endpoint(test_end);
5416 test_obj.set_down_thread_id(proc_id);
5417 test_obj.set_down_thread_message_data(test_message);
5418 proto_test.handle_realserver_disconnect_thread_id = def_id;
5419 proto_test.handle_realserver_disconnect_rs_endpoint = boost::asio::ip::tcp::endpoint();
5420 proto_test.handle_realserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
5421 BOOST_CHECK(proto_test.handle_realserver_disconnect_thread_id != proc_id);
5422 BOOST_CHECK(proto_test.handle_realserver_disconnect_rs_endpoint != test_end);
5423 test_obj.test_call();
5424 // unit_test [2] down_thread_realserver_disconnect_event module parameter check thread id
5425 std::cerr << "[2] down_thread_realserver_disconnect_event module parameter check thread id" << std::endl;
5426 BOOST_CHECK(proto_test.handle_realserver_disconnect_thread_id == proc_id);
5428 // unit_test [3] down_thread_realserver_disconnect_event module parameter check endpoint
5429 std::cerr << "[3] down_thread_realserver_disconnect_event module parameter check endpoint" << std::endl;
5430 BOOST_CHECK(proto_test.handle_realserver_disconnect_rs_endpoint == test_end);
5433 // unit_test [4] down_thread_realserver_disconnect_event realserver map erase check
5434 std::cerr << "[4] down_thread_realserver_disconnect_event realserver map erase check" << std::endl;
5436 std::list< std::pair< boost::asio::ip::tcp::endpoint , boost::shared_ptr< l7vs::tcp_socket > > >& realserver_list = test_obj.get_realserver_socket_list();
5437 boost::shared_ptr< l7vs::tcp_socket > test_tcp_sock0(new l7vs::tcp_socket(io));
5438 boost::shared_ptr< l7vs::tcp_socket > test_tcp_sock1(new l7vs::tcp_socket(io));
5439 boost::shared_ptr< l7vs::tcp_socket > test_tcp_sock2(new l7vs::tcp_socket(io));
5440 std::pair< boost::asio::ip::tcp::endpoint , boost::shared_ptr< l7vs::tcp_socket > > test_sock_list[3];
5441 test_sock_list[0].first = boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string("100.100.100.100"), 0);
5442 test_sock_list[0].second = test_tcp_sock0;
5443 test_sock_list[1].first = boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string("101.101.101.101"), 1);
5444 test_sock_list[1].second = test_tcp_sock1;
5445 test_sock_list[2].first = boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string("102.102.102.102"), 2);
5446 test_sock_list[2].second = test_tcp_sock2;
5447 for(int i = 0;i < 3;i++){
5448 realserver_list.push_back(test_sock_list[i]);
5450 proto_test.handle_realserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
5451 std::list< std::pair< boost::asio::ip::tcp::endpoint , boost::shared_ptr< l7vs::tcp_socket > > >::iterator ret_ite;
5454 test_message.set_endpoint(test_sock_list[1].first);
5455 test_obj.set_down_thread_message_data(test_message);
5456 ret_ite = realserver_list.begin();
5457 BOOST_CHECK(ret_ite->first == test_sock_list[0].first);
5459 BOOST_CHECK(ret_ite->first == test_sock_list[1].first);
5461 BOOST_CHECK(ret_ite->first == test_sock_list[2].first);
5463 BOOST_CHECK(ret_ite == realserver_list.end());
5464 test_obj.test_call();
5465 ret_ite = realserver_list.begin();
5466 BOOST_CHECK(ret_ite->first == test_sock_list[0].first);
5468 BOOST_CHECK(ret_ite->first == test_sock_list[2].first);
5470 BOOST_CHECK(ret_ite == realserver_list.end());
5473 test_message.set_endpoint(test_sock_list[0].first);
5474 test_obj.set_down_thread_message_data(test_message);
5475 ret_ite = realserver_list.begin();
5476 BOOST_CHECK(ret_ite->first == test_sock_list[0].first);
5478 BOOST_CHECK(ret_ite->first == test_sock_list[2].first);
5480 BOOST_CHECK(ret_ite == realserver_list.end());
5481 test_obj.test_call();
5482 ret_ite = realserver_list.begin();
5483 BOOST_CHECK(ret_ite->first == test_sock_list[2].first);
5485 BOOST_CHECK(ret_ite == realserver_list.end());
5488 test_message.set_endpoint(test_sock_list[2].first);
5489 test_obj.set_down_thread_message_data(test_message);
5490 ret_ite = realserver_list.begin();
5491 BOOST_CHECK(ret_ite->first == test_sock_list[2].first);
5493 BOOST_CHECK(ret_ite == realserver_list.end());
5494 test_obj.test_call();
5495 ret_ite = realserver_list.begin();
5496 BOOST_CHECK(ret_ite == realserver_list.end());
5497 BOOST_CHECK(realserver_list.empty());
5499 // unit_test [5] down_thread_realserver_disconnect_event not fond function error check
5500 std::cerr << "[5] down_thread_realserver_disconnect_event not fond function error check" << std::endl;
5501 test_obj.down_thread_function_array_clear();
5502 proto_test.handle_realserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
5503 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
5504 l7vs::Logger::putLogError_id = 0;
5505 test_obj.test_call();
5506 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
5507 BOOST_CHECK_EQUAL(75,l7vs::Logger::putLogError_id);
5508 std::cerr << l7vs::Logger::putLogError_message << std::endl;
5510 // unit_test [6] down_thread_realserver_disconnect_event returnd illegal EVENT_TAG error check
5511 std::cerr << "[6] down_thread_realserver_disconnect_event returnd illegal EVENT_TAG error check" << std::endl;
5512 test_obj.down_thread_module_event_map_clear();
5513 proto_test.handle_realserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
5514 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
5515 l7vs::Logger::putLogError_id = 0;
5516 test_obj.test_call();
5517 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
5518 BOOST_CHECK_EQUAL(74,l7vs::Logger::putLogError_id);
5519 std::cerr << l7vs::Logger::putLogError_message << std::endl;
5521 // mutex_lock_test test_lock_obj(vs,io);
5522 mutex_lock_test test_lock_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
5523 test_lock_obj.set_down_thread_realserver_disconnect_event_test();
5524 test_lock_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
5526 test_lock_obj.test_thread_wait.lock();
5527 test_lock_obj.befor_thread_id = proc_id;
5528 test_lock_obj.after_thread_id = proc_id;
5529 test_lock_obj.mutex_lock();
5531 boost::thread test_thread(boost::bind(&mutex_lock_test::test_run,&test_lock_obj));
5533 BOOST_CHECK(test_lock_obj.befor_thread_id == proc_id);
5534 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
5536 boost::thread::id test_id = test_thread.get_id();
5538 BOOST_CHECK(test_id != proc_id);
5541 test_lock_obj.test_thread_wait.unlock();
5544 // unit_test [7] down_thread_realserver_disconnect_event thread block test (mutex lock)
5545 std::cerr << "[7] down_thread_realserver_disconnect_event thread block test (mutex lock)" << std::endl;
5546 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
5547 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
5549 test_lock_obj.mutex_unlock();
5552 // unit_test [8] down_thread_realserver_disconnect_event thread run test (mutex unlock)
5553 std::cerr << "[8] down_thread_realserver_disconnect_event thread run test (mutex unlock)" << std::endl;
5554 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
5555 BOOST_CHECK(test_lock_obj.after_thread_id == test_id);
5557 BOOST_MESSAGE( "----- down_thread_realserver_disconnect_event test end -----" );
5560 // up_thread_sorryserver_disconnect_event test
5561 // up_thread_sorryserver_disconnect_event test class
5562 class up_thread_sorryserver_disconnect_event_test_class : public module_event_map_test_base_class{
5564 // up_thread_sorryserver_disconnect_event_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : module_event_map_test_base_class(vs,session_io){
5566 up_thread_sorryserver_disconnect_event_test_class(
5567 l7vs::virtualservice_tcp& vs,
5568 boost::asio::io_service& session_io,
5569 l7vs::tcp_socket_option_info& set_socket_option,
5570 boost::asio::ip::tcp::endpoint listen_endpoint,
5572 boost::asio::ssl::context& set_ssl_context,
5573 bool set_ssl_cache_flag,
5574 int set_ssl_handshake_time_out,
5575 l7vs::logger_implement_access* set_access_logger) : module_event_map_test_base_class( vs,
5582 set_ssl_handshake_time_out,
5583 set_access_logger){};
5586 ~up_thread_sorryserver_disconnect_event_test_class(){};
5589 l7vs::tcp_session::up_thread_sorryserver_disconnect_event(LOCAL_PROC);
5593 void up_thread_sorryserver_disconnect_event_test(){
5595 BOOST_MESSAGE( "----- up_thread_sorryserver_disconnect_event_test test start -----" );
5597 boost::asio::io_service io;
5598 l7vs::virtualservice_tcp vs;
5599 l7vs::tcp_socket_option_info set_option;
5600 //! TCP_NODELAY (false:not set,true:set option)
5601 set_option.nodelay_opt = false;
5602 //! TCP_NODELAY option value (false:off,true:on)
5603 set_option.nodelay_val = false;
5604 //! TCP_CORK (false:not set,true:set option)
5605 set_option.cork_opt = false;
5606 //! TCP_CORK option value (false:off,true:on)
5607 set_option.cork_val = false;
5608 //! TCP_QUICKACK (false:not set,true:set option)
5609 set_option.quickack_opt = false;
5610 //! TCP_QUICKACK option value (false:off,true:on)
5611 set_option.quickack_val = false;
5613 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
5614 bool set_mode(false);
5615 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
5616 bool set_ssl_cache_flag(false);
5617 int set_ssl_handshake_time_out = 0;
5618 //std::string access_log_file_name = "test";
5619 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
5621 // up_thread_sorryserver_disconnect_event_test_class test_obj(vs,io);
5622 up_thread_sorryserver_disconnect_event_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
5628 std::string test_protocol_name("test protocol");
5629 l7vs::test_protocol_module proto_test(test_protocol_name);
5631 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
5633 l7vs::protocol_module_base::EVENT_TAG chek_event[13];
5634 chek_event[0] = l7vs::protocol_module_base::ACCEPT;
5635 chek_event[1] = l7vs::protocol_module_base::CLIENT_DISCONNECT;
5636 chek_event[2] = l7vs::protocol_module_base::CLIENT_RECV;
5637 chek_event[3] = l7vs::protocol_module_base::CLIENT_RESPONSE_SEND;
5638 chek_event[4] = l7vs::protocol_module_base::REALSERVER_SELECT;
5639 chek_event[5] = l7vs::protocol_module_base::REALSERVER_CONNECT;
5640 chek_event[6] = l7vs::protocol_module_base::REALSERVER_SEND;
5641 chek_event[7] = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
5642 chek_event[8] = l7vs::protocol_module_base::SORRYSERVER_SELECT;
5643 chek_event[9] = l7vs::protocol_module_base::SORRYSERVER_CONNECT;
5644 chek_event[10] = l7vs::protocol_module_base::SORRYSERVER_SEND;
5645 chek_event[11] = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
5646 chek_event[12] = l7vs::protocol_module_base::FINALIZE;
5648 // unit_test [1] up_thread_sorryserver_disconnect_event up_thread_next_call_function update check
5649 std::cerr << "[1] up_thread_sorryserver_disconnect_event up_thread_next_call_function update check" << std::endl;
5650 for(int i = 0; i < 13;i++){
5651 proto_test.handle_sorryserver_disconnect_res_tag = chek_event[i];
5652 test_obj.test_call();
5653 BOOST_CHECK(test_obj.chk_up_thread_next_call_function(chek_event[i]));
5656 // module parameter check
5657 boost::thread::id def_id;
5658 boost::thread::id proc_id = boost::this_thread::get_id();
5659 boost::asio::ip::tcp::endpoint test_end(boost::asio::ip::address::from_string("100.102.103.104"), 7777);
5660 l7vs::tcp_data test_message;
5661 test_message.set_endpoint(test_end);
5662 test_obj.set_up_thread_id(proc_id);
5663 test_obj.set_up_thread_message_data(test_message);
5664 proto_test.handle_sorryserver_disconnect_thread_id = def_id;
5665 proto_test.handle_sorryserver_disconnect_rs_endpoint = boost::asio::ip::tcp::endpoint();
5666 proto_test.handle_sorryserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
5667 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_thread_id != proc_id);
5668 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_rs_endpoint != test_end);
5669 test_obj.test_call();
5670 // unit_test [2] up_thread_sorryserver_disconnect_event module parameter check thread id
5671 std::cerr << "[2] up_thread_sorryserver_disconnect_event module parameter check thread id" << std::endl;
5672 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_thread_id == proc_id);
5674 // unit_test [3] up_thread_sorryserver_disconnect_event module parameter check endpoint
5675 std::cerr << "[3] up_thread_sorryserver_disconnect_event module parameter check endpoint" << std::endl;
5676 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_rs_endpoint == test_end);
5678 // unit_test [4] up_thread_sorryserver_disconnect_event not fond function error check
5679 std::cerr << "[4] up_thread_sorryserver_disconnect_event not fond function error check" << std::endl;
5680 test_obj.up_thread_function_array_clear();
5681 proto_test.handle_sorryserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
5682 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
5683 l7vs::Logger::putLogError_id = 0;
5684 test_obj.test_call();
5685 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
5686 BOOST_CHECK_EQUAL(65,l7vs::Logger::putLogError_id);
5687 std::cerr << l7vs::Logger::putLogError_message << std::endl;
5689 // unit_test [5] up_thread_sorryserver_disconnect_event returnd illegal EVENT_TAG error check
5690 std::cerr << "[5] up_thread_sorryserver_disconnect_event returnd illegal EVENT_TAG error check" << std::endl;
5691 test_obj.up_thread_module_event_map_clear();
5692 proto_test.handle_sorryserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
5693 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
5694 l7vs::Logger::putLogError_id = 0;
5695 test_obj.test_call();
5696 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
5697 BOOST_CHECK_EQUAL(64,l7vs::Logger::putLogError_id);
5698 std::cerr << l7vs::Logger::putLogError_message << std::endl;
5700 // mutex_lock_test test_lock_obj(vs,io);
5701 mutex_lock_test test_lock_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
5702 test_lock_obj.set_up_thread_sorryserver_disconnect_event_test();
5703 test_lock_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
5705 test_lock_obj.test_thread_wait.lock();
5706 test_lock_obj.befor_thread_id = proc_id;
5707 test_lock_obj.after_thread_id = proc_id;
5708 test_lock_obj.mutex_lock();
5710 boost::thread test_thread(boost::bind(&mutex_lock_test::test_run,&test_lock_obj));
5712 BOOST_CHECK(test_lock_obj.befor_thread_id == proc_id);
5713 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
5715 boost::thread::id test_id = test_thread.get_id();
5717 BOOST_CHECK(test_id != proc_id);
5720 test_lock_obj.test_thread_wait.unlock();
5723 // unit_test [6] up_thread_sorryserver_disconnect_event thread block test (mutex lock)
5724 std::cerr << "[6] up_thread_sorryserver_disconnect_event thread block test (mutex lock)" << std::endl;
5725 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
5726 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
5728 test_lock_obj.mutex_unlock();
5731 // unit_test [7] up_thread_sorryserver_disconnect_event thread run test (mutex unlock)
5732 std::cerr << "[7] up_thread_sorryserver_disconnect_event thread run test (mutex unlock)" << std::endl;
5733 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
5734 BOOST_CHECK(test_lock_obj.after_thread_id == test_id);
5736 BOOST_MESSAGE( "----- up_thread_sorryserver_disconnect_event_test test end -----" );
5739 // up_thread_sorryserver_mod_disconnect test
5740 // up_thread_sorryserver_mod_disconnect test class
5741 class up_thread_sorryserver_mod_disconnect_test_class : public module_event_map_test_base_class{
5743 // up_thread_sorryserver_mod_disconnect_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : module_event_map_test_base_class(vs,session_io){
5745 up_thread_sorryserver_mod_disconnect_test_class(
5746 l7vs::virtualservice_tcp& vs,
5747 boost::asio::io_service& session_io,
5748 l7vs::tcp_socket_option_info& set_socket_option,
5749 boost::asio::ip::tcp::endpoint listen_endpoint,
5751 boost::asio::ssl::context& set_ssl_context,
5752 bool set_ssl_cache_flag,
5753 int set_ssl_handshake_time_out,
5754 l7vs::logger_implement_access* set_access_logger) : module_event_map_test_base_class( vs,
5761 set_ssl_handshake_time_out,
5762 set_access_logger){};
5764 ~up_thread_sorryserver_mod_disconnect_test_class(){};
5767 l7vs::tcp_session::up_thread_sorryserver_mod_disconnect(LOCAL_PROC);
5770 boost::shared_ptr< l7vs::tcp_socket > get_sorry_socket(){
5771 return sorryserver_socket.second;
5774 boost::asio::ip::tcp::endpoint& get_sorry_endpoint(){
5775 return sorryserver_socket.first;
5780 void up_thread_sorryserver_mod_disconnect_test(){
5782 BOOST_MESSAGE( "----- up_thread_sorryserver_mod_disconnect test start -----" );
5784 boost::asio::io_service io;
5785 l7vs::virtualservice_tcp vs;
5786 l7vs::tcp_socket_option_info set_option;
5787 //! TCP_NODELAY (false:not set,true:set option)
5788 set_option.nodelay_opt = false;
5789 //! TCP_NODELAY option value (false:off,true:on)
5790 set_option.nodelay_val = false;
5791 //! TCP_CORK (false:not set,true:set option)
5792 set_option.cork_opt = false;
5793 //! TCP_CORK option value (false:off,true:on)
5794 set_option.cork_val = false;
5795 //! TCP_QUICKACK (false:not set,true:set option)
5796 set_option.quickack_opt = false;
5797 //! TCP_QUICKACK option value (false:off,true:on)
5798 set_option.quickack_val = false;
5800 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
5801 bool set_mode(false);
5802 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
5803 bool set_ssl_cache_flag(false);
5804 int set_ssl_handshake_time_out = 0;
5805 //std::string access_log_file_name = "test";
5806 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
5808 // up_thread_sorryserver_mod_disconnect_test_class test_obj(vs,io);
5809 up_thread_sorryserver_mod_disconnect_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
5812 std::string test_protocol_name("test protocol");
5813 l7vs::test_protocol_module proto_test(test_protocol_name);
5815 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
5817 l7vs::protocol_module_base::EVENT_TAG chek_event[13];
5818 chek_event[0] = l7vs::protocol_module_base::ACCEPT;
5819 chek_event[1] = l7vs::protocol_module_base::CLIENT_DISCONNECT;
5820 chek_event[2] = l7vs::protocol_module_base::CLIENT_RECV;
5821 chek_event[3] = l7vs::protocol_module_base::CLIENT_RESPONSE_SEND;
5822 chek_event[4] = l7vs::protocol_module_base::REALSERVER_SELECT;
5823 chek_event[5] = l7vs::protocol_module_base::REALSERVER_CONNECT;
5824 chek_event[6] = l7vs::protocol_module_base::REALSERVER_SEND;
5825 chek_event[7] = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
5826 chek_event[8] = l7vs::protocol_module_base::SORRYSERVER_SELECT;
5827 chek_event[9] = l7vs::protocol_module_base::SORRYSERVER_CONNECT;
5828 chek_event[10] = l7vs::protocol_module_base::SORRYSERVER_SEND;
5829 chek_event[11] = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
5830 chek_event[12] = l7vs::protocol_module_base::FINALIZE;
5832 // unit_test [1] up_thread_sorryserver_mod_disconnect up_thread_next_call_function update check
5833 std::cerr << "[1] up_thread_sorryserver_mod_disconnect up_thread_next_call_function update check" << std::endl;
5834 for(int i = 0; i < 13;i++){
5835 proto_test.handle_sorryserver_disconnect_res_tag = chek_event[i];
5836 test_obj.test_call();
5837 BOOST_CHECK(test_obj.chk_up_thread_next_call_function(chek_event[i]));
5840 // module parameter check
5841 boost::thread::id def_id;
5842 boost::thread::id proc_id = boost::this_thread::get_id();
5843 boost::asio::ip::tcp::endpoint test_end(boost::asio::ip::address::from_string("100.102.103.104"), 7777);
5844 test_obj.get_sorry_endpoint() = test_end;
5845 test_obj.set_up_thread_id(proc_id);
5846 proto_test.handle_sorryserver_disconnect_thread_id = def_id;
5847 proto_test.handle_sorryserver_disconnect_rs_endpoint = boost::asio::ip::tcp::endpoint();
5848 proto_test.handle_sorryserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
5849 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_thread_id != proc_id);
5850 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_rs_endpoint != test_end);
5851 test_obj.get_sorry_socket()->close_call_check = false;
5852 test_obj.get_sorry_socket()->close_res = true;
5854 test_obj.test_call();
5856 // unit_test [2] up_thread_sorryserver_mod_disconnect socket close check
5857 std::cerr << "[2] up_thread_sorryserver_mod_disconnect socket close check" << std::endl;
5858 BOOST_CHECK(test_obj.get_sorry_socket()->close_call_check);
5860 // unit_test [3] up_thread_sorryserver_mod_disconnect endpoint not update check
5861 std::cerr << "[3] up_thread_sorryserver_mod_disconnect endpoint not update check" << std::endl;
5862 BOOST_CHECK(test_obj.get_sorry_endpoint() == test_end);
5864 // unit_test [4] up_thread_sorryserver_mod_disconnect module parameter check thread id
5865 std::cerr << "[4] up_thread_sorryserver_mod_disconnect module parameter check thread id" << std::endl;
5866 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_thread_id == proc_id);
5868 // unit_test [5] up_thread_sorryserver_mod_disconnect module parameter check endpoint
5869 std::cerr << "[5] up_thread_sorryserver_mod_disconnect module parameter check endpoint" << std::endl;
5870 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_rs_endpoint == test_end);
5873 proto_test.handle_sorryserver_disconnect_thread_id = def_id;
5874 proto_test.handle_sorryserver_disconnect_rs_endpoint = boost::asio::ip::tcp::endpoint();
5875 proto_test.handle_sorryserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
5876 test_obj.get_sorry_socket()->close_call_check = false;
5877 test_obj.get_sorry_socket()->close_res = false;
5879 test_obj.test_call();
5881 // unit_test [6] up_thread_sorryserver_mod_disconnect socket close check
5882 std::cerr << "[6] up_thread_sorryserver_mod_disconnect socket close check" << std::endl;
5883 BOOST_CHECK(test_obj.get_sorry_socket()->close_call_check);
5885 // unit_test [7] up_thread_sorryserver_mod_disconnect endpoint not update check
5886 std::cerr << "[7] up_thread_sorryserver_mod_disconnect endpoint not update check" << std::endl;
5887 BOOST_CHECK(test_obj.get_sorry_endpoint() == boost::asio::ip::tcp::endpoint());
5889 // unit_test [8] up_thread_sorryserver_mod_disconnect module parameter check thread id
5890 std::cerr << "[8] up_thread_sorryserver_mod_disconnect module parameter check thread id" << std::endl;
5891 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_thread_id == proc_id);
5893 // unit_test [9] up_thread_sorryserver_mod_disconnect module parameter check endpoint
5894 std::cerr << "[9] up_thread_sorryserver_mod_disconnect module parameter check endpoint" << std::endl;
5895 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_rs_endpoint == test_end);
5897 proto_test.handle_sorryserver_disconnect_thread_id = def_id;
5898 proto_test.handle_sorryserver_disconnect_rs_endpoint = boost::asio::ip::tcp::endpoint();
5899 proto_test.handle_sorryserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
5900 test_obj.get_sorry_socket()->close_call_check = false;
5901 test_obj.get_sorry_socket()->close_res = false;
5903 test_obj.test_call();
5905 // unit_test [10] up_thread_sorryserver_mod_disconnect socket close check
5906 std::cerr << "[10] up_thread_sorryserver_mod_disconnect socket close check" << std::endl;
5907 BOOST_CHECK(test_obj.get_sorry_socket()->close_call_check);
5909 // unit_test [11] up_thread_sorryserver_mod_disconnect endpoint not update check
5910 std::cerr << "[11] up_thread_sorryserver_mod_disconnect endpoint not update check" << std::endl;
5911 BOOST_CHECK(test_obj.get_sorry_endpoint() == boost::asio::ip::tcp::endpoint());
5913 // unit_test [12] up_thread_sorryserver_mod_disconnect module parameter check thread id
5914 std::cerr << "[12] up_thread_sorryserver_mod_disconnect module parameter check thread id" << std::endl;
5915 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_thread_id == proc_id);
5917 // unit_test [13] up_thread_sorryserver_mod_disconnect module parameter check endpoint
5918 std::cerr << "[13] up_thread_sorryserver_mod_disconnect module parameter check endpoint" << std::endl;
5919 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_rs_endpoint == boost::asio::ip::tcp::endpoint());
5921 // unit_test [14] up_thread_sorryserver_mod_disconnect not fond function error check
5922 std::cerr << "[14] up_thread_sorryserver_mod_disconnect not fond function error check" << std::endl;
5923 test_obj.up_thread_function_array_clear();
5924 proto_test.handle_sorryserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
5925 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
5926 l7vs::Logger::putLogError_id = 0;
5927 test_obj.test_call();
5928 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
5929 BOOST_CHECK_EQUAL(63,l7vs::Logger::putLogError_id);
5930 std::cerr << l7vs::Logger::putLogError_message << std::endl;
5932 // unit_test [15] up_thread_sorryserver_mod_disconnect returnd illegal EVENT_TAG error check
5933 std::cerr << "[15] up_thread_sorryserver_mod_disconnect returnd illegal EVENT_TAG error check" << std::endl;
5934 test_obj.up_thread_module_event_map_clear();
5935 proto_test.handle_sorryserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
5936 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
5937 l7vs::Logger::putLogError_id = 0;
5938 test_obj.test_call();
5939 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
5940 BOOST_CHECK_EQUAL(62,l7vs::Logger::putLogError_id);
5941 std::cerr << l7vs::Logger::putLogError_message << std::endl;
5943 // mutex_lock_test test_lock_obj(vs,io);
5944 mutex_lock_test test_lock_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
5945 test_lock_obj.set_up_thread_sorryserver_disconnect_event_test();
5946 test_lock_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
5948 test_lock_obj.test_thread_wait.lock();
5949 test_lock_obj.befor_thread_id = proc_id;
5950 test_lock_obj.after_thread_id = proc_id;
5951 test_lock_obj.mutex_lock();
5953 boost::thread test_thread(boost::bind(&mutex_lock_test::test_run,&test_lock_obj));
5955 BOOST_CHECK(test_lock_obj.befor_thread_id == proc_id);
5956 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
5958 boost::thread::id test_id = test_thread.get_id();
5960 BOOST_CHECK(test_id != proc_id);
5963 test_lock_obj.test_thread_wait.unlock();
5966 // unit_test [16] up_thread_sorryserver_mod_disconnect thread block test (mutex lock)
5967 std::cerr << "[16] up_thread_sorryserver_mod_disconnect thread block test (mutex lock)" << std::endl;
5968 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
5969 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
5971 test_lock_obj.mutex_unlock();
5974 // unit_test [17] up_thread_sorryserver_mod_disconnect thread run test (mutex unlock)
5975 std::cerr << "[17] up_thread_sorryserver_mod_disconnect thread run test (mutex unlock)" << std::endl;
5976 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
5977 BOOST_CHECK(test_lock_obj.after_thread_id == test_id);
5979 BOOST_MESSAGE( "----- up_thread_sorryserver_mod_disconnect test end -----" );
5982 // down_thread_sorryserver_mod_disconnect test
5983 // down_thread_sorryserver_mod_disconnect test class
5984 class down_thread_sorryserver_mod_disconnect_test_class : public module_event_map_test_base_class{
5986 // down_thread_sorryserver_mod_disconnect_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : module_event_map_test_base_class(vs,session_io){
5988 down_thread_sorryserver_mod_disconnect_test_class(
5989 l7vs::virtualservice_tcp& vs,
5990 boost::asio::io_service& session_io,
5991 l7vs::tcp_socket_option_info& set_socket_option,
5992 boost::asio::ip::tcp::endpoint listen_endpoint,
5994 boost::asio::ssl::context& set_ssl_context,
5995 bool set_ssl_cache_flag,
5996 int set_ssl_handshake_time_out,
5997 l7vs::logger_implement_access* set_access_logger) : module_event_map_test_base_class( vs,
6004 set_ssl_handshake_time_out,
6005 set_access_logger){};
6008 ~down_thread_sorryserver_mod_disconnect_test_class(){};
6011 l7vs::tcp_session::down_thread_sorryserver_mod_disconnect(LOCAL_PROC);
6014 boost::shared_ptr< l7vs::tcp_socket > get_sorry_socket(){
6015 return sorryserver_socket.second;
6018 boost::asio::ip::tcp::endpoint& get_sorry_endpoint(){
6019 return sorryserver_socket.first;
6024 void down_thread_sorryserver_mod_disconnect_test(){
6026 BOOST_MESSAGE( "----- down_thread_sorryserver_mod_disconnect test start -----" );
6028 boost::asio::io_service io;
6029 l7vs::virtualservice_tcp vs;
6030 l7vs::tcp_socket_option_info set_option;
6031 //! TCP_NODELAY (false:not set,true:set option)
6032 set_option.nodelay_opt = false;
6033 //! TCP_NODELAY option value (false:off,true:on)
6034 set_option.nodelay_val = false;
6035 //! TCP_CORK (false:not set,true:set option)
6036 set_option.cork_opt = false;
6037 //! TCP_CORK option value (false:off,true:on)
6038 set_option.cork_val = false;
6039 //! TCP_QUICKACK (false:not set,true:set option)
6040 set_option.quickack_opt = false;
6041 //! TCP_QUICKACK option value (false:off,true:on)
6042 set_option.quickack_val = false;
6044 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
6045 bool set_mode(false);
6046 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
6047 bool set_ssl_cache_flag(false);
6048 int set_ssl_handshake_time_out = 0;
6049 //std::string access_log_file_name = "test";
6050 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
6052 // down_thread_sorryserver_mod_disconnect_test_class test_obj(vs,io);
6053 down_thread_sorryserver_mod_disconnect_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
6056 std::string test_protocol_name("test protocol");
6057 l7vs::test_protocol_module proto_test(test_protocol_name);
6059 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
6061 l7vs::protocol_module_base::EVENT_TAG chek_event[7];
6062 chek_event[0] = l7vs::protocol_module_base::CLIENT_DISCONNECT;
6063 chek_event[1] = l7vs::protocol_module_base::CLIENT_CONNECTION_CHECK;
6064 chek_event[2] = l7vs::protocol_module_base::REALSERVER_RECV;
6065 chek_event[3] = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
6066 chek_event[4] = l7vs::protocol_module_base::SORRYSERVER_RECV;
6067 chek_event[5] = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
6068 chek_event[6] = l7vs::protocol_module_base::FINALIZE;
6070 // unit_test [1] down_thread_sorryserver_mod_disconnect down_thread_next_call_function update check
6071 std::cerr << "[1] down_thread_sorryserver_mod_disconnect down_thread_next_call_function update check" << std::endl;
6072 for(int i = 0; i < 7;i++){
6073 proto_test.handle_sorryserver_disconnect_res_tag = chek_event[i];
6074 test_obj.test_call();
6075 BOOST_CHECK(test_obj.chk_down_thread_next_call_function(chek_event[i]));
6078 // module parameter check
6079 boost::thread::id def_id;
6080 boost::thread::id proc_id = boost::this_thread::get_id();
6081 boost::asio::ip::tcp::endpoint test_end(boost::asio::ip::address::from_string("100.102.103.104"), 7777);
6082 test_obj.get_sorry_endpoint() = test_end;
6083 test_obj.set_down_thread_id(proc_id);
6084 proto_test.handle_sorryserver_disconnect_thread_id = def_id;
6085 proto_test.handle_sorryserver_disconnect_rs_endpoint = boost::asio::ip::tcp::endpoint();
6086 proto_test.handle_sorryserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
6087 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_thread_id != proc_id);
6088 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_rs_endpoint != test_end);
6089 test_obj.get_sorry_socket()->close_call_check = false;
6090 test_obj.get_sorry_socket()->close_res = true;
6092 test_obj.test_call();
6094 // unit_test [2] down_thread_sorryserver_mod_disconnect socket close check
6095 std::cerr << "[2] down_thread_sorryserver_mod_disconnect socket close check" << std::endl;
6096 BOOST_CHECK(test_obj.get_sorry_socket()->close_call_check);
6098 // unit_test [3] down_thread_sorryserver_mod_disconnect endpoint not update check
6099 std::cerr << "[3] down_thread_sorryserver_mod_disconnect endpoint not update check" << std::endl;
6100 BOOST_CHECK(test_obj.get_sorry_endpoint() == test_end);
6102 // unit_test [4] down_thread_sorryserver_mod_disconnect module parameter check thread id
6103 std::cerr << "[4] down_thread_sorryserver_mod_disconnect module parameter check thread id" << std::endl;
6104 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_thread_id == proc_id);
6106 // unit_test [5] down_thread_sorryserver_mod_disconnect module parameter check endpoint
6107 std::cerr << "[5] down_thread_sorryserver_mod_disconnect module parameter check endpoint" << std::endl;
6108 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_rs_endpoint == test_end);
6110 proto_test.handle_sorryserver_disconnect_thread_id = def_id;
6111 proto_test.handle_sorryserver_disconnect_rs_endpoint = boost::asio::ip::tcp::endpoint();
6112 proto_test.handle_sorryserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
6113 test_obj.get_sorry_socket()->close_call_check = false;
6114 test_obj.get_sorry_socket()->close_res = false;
6116 test_obj.test_call();
6118 // unit_test [6] down_thread_sorryserver_mod_disconnect socket close check
6119 std::cerr << "[6] down_thread_sorryserver_mod_disconnect socket close check" << std::endl;
6120 BOOST_CHECK(test_obj.get_sorry_socket()->close_call_check);
6122 // unit_test [7] down_thread_sorryserver_mod_disconnect endpoint not update check
6123 std::cerr << "[7] down_thread_sorryserver_mod_disconnect endpoint not update check" << std::endl;
6124 BOOST_CHECK(test_obj.get_sorry_endpoint() == boost::asio::ip::tcp::endpoint());
6126 // unit_test [8] down_thread_sorryserver_mod_disconnect module parameter check thread id
6127 std::cerr << "[8] down_thread_sorryserver_mod_disconnect module parameter check thread id" << std::endl;
6128 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_thread_id == proc_id);
6130 // unit_test [9] down_thread_sorryserver_mod_disconnect module parameter check endpoint
6131 std::cerr << "[9] down_thread_sorryserver_mod_disconnect module parameter check endpoint" << std::endl;
6132 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_rs_endpoint == test_end);
6134 proto_test.handle_sorryserver_disconnect_thread_id = def_id;
6135 proto_test.handle_sorryserver_disconnect_rs_endpoint = boost::asio::ip::tcp::endpoint();
6136 proto_test.handle_sorryserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
6137 test_obj.get_sorry_socket()->close_call_check = false;
6138 test_obj.get_sorry_socket()->close_res = false;
6140 test_obj.test_call();
6142 // unit_test [10] down_thread_sorryserver_mod_disconnect socket close check
6143 std::cerr << "[10] down_thread_sorryserver_mod_disconnect socket close check" << std::endl;
6144 BOOST_CHECK(test_obj.get_sorry_socket()->close_call_check);
6146 // unit_test [11] down_thread_sorryserver_mod_disconnect endpoint not update check
6147 std::cerr << "[11] down_thread_sorryserver_mod_disconnect endpoint not update check" << std::endl;
6148 BOOST_CHECK(test_obj.get_sorry_endpoint() == boost::asio::ip::tcp::endpoint());
6150 // unit_test [12] down_thread_sorryserver_mod_disconnect module parameter check thread id
6151 std::cerr << "[12] down_thread_sorryserver_mod_disconnect module parameter check thread id" << std::endl;
6152 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_thread_id == proc_id);
6154 // unit_test [13] down_thread_sorryserver_mod_disconnect module parameter check endpoint
6155 std::cerr << "[13] down_thread_sorryserver_mod_disconnect module parameter check endpoint" << std::endl;
6156 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_rs_endpoint == boost::asio::ip::tcp::endpoint());
6158 // unit_test [14] down_thread_sorryserver_mod_disconnect not fond function error check
6159 std::cerr << "[14] down_thread_sorryserver_mod_disconnect not fond function error check" << std::endl;
6160 test_obj.down_thread_function_array_clear();
6161 proto_test.handle_sorryserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
6162 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
6163 l7vs::Logger::putLogError_id = 0;
6164 test_obj.test_call();
6165 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
6166 BOOST_CHECK_EQUAL(93,l7vs::Logger::putLogError_id);
6167 std::cerr << l7vs::Logger::putLogError_message << std::endl;
6169 // unit_test [15] down_thread_sorryserver_mod_disconnect returnd illegal EVENT_TAG error check
6170 std::cerr << "[15] down_thread_sorryserver_mod_disconnect returnd illegal EVENT_TAG error check" << std::endl;
6171 test_obj.down_thread_module_event_map_clear();
6172 proto_test.handle_sorryserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
6173 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
6174 l7vs::Logger::putLogError_id = 0;
6175 test_obj.test_call();
6176 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
6177 BOOST_CHECK_EQUAL(92,l7vs::Logger::putLogError_id);
6178 std::cerr << l7vs::Logger::putLogError_message << std::endl;
6180 // mutex_lock_test test_lock_obj(vs,io);
6181 mutex_lock_test test_lock_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
6182 test_lock_obj.set_down_thread_sorryserver_disconnect_event_test();
6183 test_lock_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
6185 test_lock_obj.test_thread_wait.lock();
6186 test_lock_obj.befor_thread_id = proc_id;
6187 test_lock_obj.after_thread_id = proc_id;
6188 test_lock_obj.mutex_lock();
6190 boost::thread test_thread(boost::bind(&mutex_lock_test::test_run,&test_lock_obj));
6192 BOOST_CHECK(test_lock_obj.befor_thread_id == proc_id);
6193 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
6195 boost::thread::id test_id = test_thread.get_id();
6197 BOOST_CHECK(test_id != proc_id);
6200 test_lock_obj.test_thread_wait.unlock();
6203 // unit_test [16] down_thread_sorryserver_mod_disconnect thread block test (mutex lock)
6204 std::cerr << "[16] down_thread_sorryserver_mod_disconnect thread block test (mutex lock)" << std::endl;
6205 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
6206 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
6208 test_lock_obj.mutex_unlock();
6211 // unit_test [17] down_thread_sorryserver_mod_disconnect thread run test (mutex unlock)
6212 std::cerr << "[17] down_thread_sorryserver_mod_disconnect thread run test (mutex unlock)" << std::endl;
6213 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
6214 BOOST_CHECK(test_lock_obj.after_thread_id == test_id);
6216 BOOST_MESSAGE( "----- down_thread_sorryserver_mod_disconnect test end -----" );
6221 // down_thread_sorryserver_disconnetc_event test
6222 // down_thread_sorryserver_disconnetc_event test class
6223 class down_thread_sorryserver_disconnect_event_test_class : public module_event_map_test_base_class{
6225 // down_thread_sorryserver_disconnect_event_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : module_event_map_test_base_class(vs,session_io){
6227 down_thread_sorryserver_disconnect_event_test_class(
6228 l7vs::virtualservice_tcp& vs,
6229 boost::asio::io_service& session_io,
6230 l7vs::tcp_socket_option_info& set_socket_option,
6231 boost::asio::ip::tcp::endpoint listen_endpoint,
6233 boost::asio::ssl::context& set_ssl_context,
6234 bool set_ssl_cache_flag,
6235 int set_ssl_handshake_time_out,
6236 l7vs::logger_implement_access* set_access_logger) : module_event_map_test_base_class( vs,
6243 set_ssl_handshake_time_out,
6244 set_access_logger){};
6247 ~down_thread_sorryserver_disconnect_event_test_class(){};
6250 l7vs::tcp_session::down_thread_sorryserver_disconnect_event(LOCAL_PROC);
6254 void down_thread_sorryserver_disconnect_event_test(){
6256 BOOST_MESSAGE( "----- down_thread_sorryserver_disconnect_event test start -----" );
6258 boost::asio::io_service io;
6259 l7vs::virtualservice_tcp vs;
6260 l7vs::tcp_socket_option_info set_option;
6261 //! TCP_NODELAY (false:not set,true:set option)
6262 set_option.nodelay_opt = false;
6263 //! TCP_NODELAY option value (false:off,true:on)
6264 set_option.nodelay_val = false;
6265 //! TCP_CORK (false:not set,true:set option)
6266 set_option.cork_opt = false;
6267 //! TCP_CORK option value (false:off,true:on)
6268 set_option.cork_val = false;
6269 //! TCP_QUICKACK (false:not set,true:set option)
6270 set_option.quickack_opt = false;
6271 //! TCP_QUICKACK option value (false:off,true:on)
6272 set_option.quickack_val = false;
6274 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
6275 bool set_mode(false);
6276 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
6277 bool set_ssl_cache_flag(false);
6278 int set_ssl_handshake_time_out = 0;
6279 //std::string access_log_file_name = "test";
6280 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
6282 // down_thread_sorryserver_disconnect_event_test_class test_obj(vs,io);
6283 down_thread_sorryserver_disconnect_event_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
6285 std::string test_protocol_name("test protocol");
6286 l7vs::test_protocol_module proto_test(test_protocol_name);
6288 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
6290 l7vs::protocol_module_base::EVENT_TAG chek_event[7];
6291 chek_event[0] = l7vs::protocol_module_base::CLIENT_DISCONNECT;
6292 chek_event[1] = l7vs::protocol_module_base::CLIENT_CONNECTION_CHECK;
6293 chek_event[2] = l7vs::protocol_module_base::REALSERVER_RECV;
6294 chek_event[3] = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
6295 chek_event[4] = l7vs::protocol_module_base::SORRYSERVER_RECV;
6296 chek_event[5] = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
6297 chek_event[6] = l7vs::protocol_module_base::FINALIZE;
6299 // unit_test [1] down_thread_sorryserver_disconnect_event down_thread_next_call_function update check
6300 std::cerr << "[1] down_thread_sorryserver_disconnect_event down_thread_next_call_function update check" << std::endl;
6301 for(int i = 0; i < 7;i++){
6302 proto_test.handle_sorryserver_disconnect_res_tag = chek_event[i];
6303 test_obj.test_call();
6304 BOOST_CHECK(test_obj.chk_down_thread_next_call_function(chek_event[i]));
6307 // module parameter check
6308 boost::thread::id def_id;
6309 boost::thread::id proc_id = boost::this_thread::get_id();
6310 boost::asio::ip::tcp::endpoint test_end(boost::asio::ip::address::from_string("100.102.103.104"), 7777);
6311 l7vs::tcp_data test_message;
6312 test_message.set_endpoint(test_end);
6313 test_obj.set_down_thread_id(proc_id);
6314 test_obj.set_down_thread_message_data(test_message);
6315 proto_test.handle_sorryserver_disconnect_thread_id = def_id;
6316 proto_test.handle_sorryserver_disconnect_rs_endpoint = boost::asio::ip::tcp::endpoint();
6317 proto_test.handle_sorryserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
6318 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_thread_id != proc_id);
6319 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_rs_endpoint != test_end);
6320 test_obj.test_call();
6321 // unit_test [2] down_thread_sorryserver_disconnect_event module parameter check thread id
6322 std::cerr << "[2] down_thread_sorryserver_disconnect_event module parameter check thread id" << std::endl;
6323 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_thread_id == proc_id);
6325 // unit_test [3] down_thread_sorryserver_disconnect_event module parameter check endpoint
6326 std::cerr << "[3] down_thread_sorryserver_disconnect_event module parameter check endpoint" << std::endl;
6327 BOOST_CHECK(proto_test.handle_sorryserver_disconnect_rs_endpoint == test_end);
6329 // unit_test [4] down_thread_sorryserver_disconnect_event not fond function error check
6330 std::cerr << "[4] down_thread_sorryserver_disconnect_event not fond function error check" << std::endl;
6331 test_obj.down_thread_function_array_clear();
6332 proto_test.handle_sorryserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
6333 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
6334 l7vs::Logger::putLogError_id = 0;
6335 test_obj.test_call();
6336 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
6337 BOOST_CHECK_EQUAL(95,l7vs::Logger::putLogError_id);
6338 std::cerr << l7vs::Logger::putLogError_message << std::endl;
6340 // unit_test [5] down_thread_sorryserver_disconnect_event returnd illegal EVENT_TAG error check
6341 std::cerr << "[5] down_thread_sorryserver_disconnect_event returnd illegal EVENT_TAG error check" << std::endl;
6342 test_obj.down_thread_module_event_map_clear();
6343 proto_test.handle_sorryserver_disconnect_res_tag = l7vs::protocol_module_base::FINALIZE;
6344 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
6345 l7vs::Logger::putLogError_id = 0;
6346 test_obj.test_call();
6347 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
6348 BOOST_CHECK_EQUAL(94,l7vs::Logger::putLogError_id);
6349 std::cerr << l7vs::Logger::putLogError_message << std::endl;
6351 // mutex_lock_test test_lock_obj(vs,io);
6352 mutex_lock_test test_lock_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
6353 test_lock_obj.set_down_thread_sorryserver_disconnect_event_test();
6354 test_lock_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
6356 test_lock_obj.test_thread_wait.lock();
6357 test_lock_obj.befor_thread_id = proc_id;
6358 test_lock_obj.after_thread_id = proc_id;
6359 test_lock_obj.mutex_lock();
6361 boost::thread test_thread(boost::bind(&mutex_lock_test::test_run,&test_lock_obj));
6363 BOOST_CHECK(test_lock_obj.befor_thread_id == proc_id);
6364 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
6366 boost::thread::id test_id = test_thread.get_id();
6368 BOOST_CHECK(test_id != proc_id);
6371 test_lock_obj.test_thread_wait.unlock();
6374 // unit_test [6] down_thread_sorryserver_disconnect_event thread block test (mutex lock)
6375 std::cerr << "[6] down_thread_sorryserver_disconnect_event thread block test (mutex lock)" << std::endl;
6376 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
6377 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
6379 test_lock_obj.mutex_unlock();
6382 // unit_test [7] down_thread_sorryserver_disconnect_event thread run test (mutex unlock)
6383 std::cerr << "[7] down_thread_sorryserver_disconnect_event thread run test (mutex unlock)" << std::endl;
6384 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
6385 BOOST_CHECK(test_lock_obj.after_thread_id == test_id);
6387 BOOST_MESSAGE( "----- down_thread_sorryserver_disconnect_event test end -----" );
6390 // up_thread_sorry_enable_event test
6391 // up_thread_sorry_enable_event test class
6392 class up_thread_sorry_enable_event_test_class : public module_event_map_test_base_class{
6394 // up_thread_sorry_enable_event_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : module_event_map_test_base_class(vs,session_io){
6396 up_thread_sorry_enable_event_test_class(
6397 l7vs::virtualservice_tcp& vs,
6398 boost::asio::io_service& session_io,
6399 l7vs::tcp_socket_option_info& set_socket_option,
6400 boost::asio::ip::tcp::endpoint listen_endpoint,
6402 boost::asio::ssl::context& set_ssl_context,
6403 bool set_ssl_cache_flag,
6404 int set_ssl_handshake_time_out,
6405 l7vs::logger_implement_access* set_access_logger) : module_event_map_test_base_class( vs,
6412 set_ssl_handshake_time_out,
6413 set_access_logger){};
6416 ~up_thread_sorry_enable_event_test_class(){};
6419 l7vs::tcp_session::up_thread_sorry_enable_event(LOCAL_PROC);
6423 void up_thread_sorry_enable_event_test(){
6425 BOOST_MESSAGE( "----- up_thread_sorry_enable_event test start -----" );
6427 boost::asio::io_service io;
6428 l7vs::virtualservice_tcp vs;
6429 l7vs::tcp_socket_option_info set_option;
6430 //! TCP_NODELAY (false:not set,true:set option)
6431 set_option.nodelay_opt = false;
6432 //! TCP_NODELAY option value (false:off,true:on)
6433 set_option.nodelay_val = false;
6434 //! TCP_CORK (false:not set,true:set option)
6435 set_option.cork_opt = false;
6436 //! TCP_CORK option value (false:off,true:on)
6437 set_option.cork_val = false;
6438 //! TCP_QUICKACK (false:not set,true:set option)
6439 set_option.quickack_opt = false;
6440 //! TCP_QUICKACK option value (false:off,true:on)
6441 set_option.quickack_val = false;
6443 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
6444 bool set_mode(false);
6445 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
6446 bool set_ssl_cache_flag(false);
6447 int set_ssl_handshake_time_out = 0;
6448 //std::string access_log_file_name = "test";
6449 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
6451 // up_thread_sorry_enable_event_test_class test_obj(vs,io);
6452 up_thread_sorry_enable_event_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
6455 std::string test_protocol_name("test protocol");
6456 l7vs::test_protocol_module proto_test(test_protocol_name);
6458 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
6460 l7vs::protocol_module_base::EVENT_TAG chek_event[13];
6461 chek_event[0] = l7vs::protocol_module_base::ACCEPT;
6462 chek_event[1] = l7vs::protocol_module_base::CLIENT_DISCONNECT;
6463 chek_event[2] = l7vs::protocol_module_base::CLIENT_RECV;
6464 chek_event[3] = l7vs::protocol_module_base::CLIENT_RESPONSE_SEND;
6465 chek_event[4] = l7vs::protocol_module_base::REALSERVER_SELECT;
6466 chek_event[5] = l7vs::protocol_module_base::REALSERVER_CONNECT;
6467 chek_event[6] = l7vs::protocol_module_base::REALSERVER_SEND;
6468 chek_event[7] = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
6469 chek_event[8] = l7vs::protocol_module_base::SORRYSERVER_SELECT;
6470 chek_event[9] = l7vs::protocol_module_base::SORRYSERVER_CONNECT;
6471 chek_event[10] = l7vs::protocol_module_base::SORRYSERVER_SEND;
6472 chek_event[11] = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
6473 chek_event[12] = l7vs::protocol_module_base::FINALIZE;
6475 // unit_test [1] up_thread_sorry_enable_event up_thread_next_call_function update check
6476 std::cerr << "[1] up_thread_sorry_enable_event up_thread_next_call_function update check" << std::endl;
6477 for(int i = 0; i < 13;i++){
6478 proto_test.handle_sorry_enable_res_tag = chek_event[i];
6479 test_obj.test_call();
6480 BOOST_CHECK(test_obj.chk_up_thread_next_call_function(chek_event[i]));
6483 // unit_test [2] up_thread_sorry_enable_event module parameter check thread id
6484 std::cerr << "[2] up_thread_sorry_enable_event module parameter check thread id" << std::endl;
6485 boost::thread::id def_id;
6486 boost::thread::id proc_id = boost::this_thread::get_id();
6487 test_obj.set_up_thread_id(proc_id);
6488 proto_test.handle_sorry_enable_thread_id = def_id;
6489 proto_test.handle_sorry_enable_res_tag = l7vs::protocol_module_base::FINALIZE;
6490 BOOST_CHECK(proto_test.handle_sorry_enable_thread_id != proc_id);
6491 test_obj.test_call();
6492 BOOST_CHECK(proto_test.handle_sorry_enable_thread_id == proc_id);
6494 // unit_test [3] up_thread_sorry_enable_event not fond function error check
6495 std::cerr << "[3] up_thread_sorry_enable_event not fond function error check" << std::endl;
6496 test_obj.up_thread_function_array_clear();
6497 proto_test.handle_sorry_enable_res_tag = l7vs::protocol_module_base::FINALIZE;
6498 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
6499 l7vs::Logger::putLogError_id = 0;
6500 test_obj.test_call();
6501 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
6502 BOOST_CHECK_EQUAL(67,l7vs::Logger::putLogError_id);
6503 std::cerr << l7vs::Logger::putLogError_message << std::endl;
6505 // unit_test [4] up_thread_sorry_enable_event returnd illegal EVENT_TAG error check
6506 std::cerr << "[4] up_thread_sorry_enable_event returnd illegal EVENT_TAG error check" << std::endl;
6507 test_obj.up_thread_module_event_map_clear();
6508 proto_test.handle_sorry_enable_res_tag = l7vs::protocol_module_base::FINALIZE;
6509 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
6510 l7vs::Logger::putLogError_id = 0;
6511 test_obj.test_call();
6512 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
6513 BOOST_CHECK_EQUAL(66,l7vs::Logger::putLogError_id);
6514 std::cerr << l7vs::Logger::putLogError_message << std::endl;
6516 // mutex_lock_test test_lock_obj(vs,io);
6517 mutex_lock_test test_lock_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
6518 test_lock_obj.set_up_thread_sorry_enable_event_test();
6519 test_lock_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
6521 test_lock_obj.test_thread_wait.lock();
6522 test_lock_obj.befor_thread_id = proc_id;
6523 test_lock_obj.after_thread_id = proc_id;
6524 test_lock_obj.mutex_lock();
6526 boost::thread test_thread(boost::bind(&mutex_lock_test::test_run,&test_lock_obj));
6528 BOOST_CHECK(test_lock_obj.befor_thread_id == proc_id);
6529 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
6531 boost::thread::id test_id = test_thread.get_id();
6533 BOOST_CHECK(test_id != proc_id);
6536 test_lock_obj.test_thread_wait.unlock();
6539 // unit_test [5] up_thread_sorry_enable_event thread block test (mutex lock)
6540 std::cerr << "[5] up_thread_sorry_enable_event thread block test (mutex lock)" << std::endl;
6541 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
6542 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
6544 test_lock_obj.mutex_unlock();
6547 // unit_test [6] up_thread_sorry_enable_event thread run test (mutex unlock)
6548 std::cerr << "[6] up_thread_sorry_enable_event thread run test (mutex unlock)" << std::endl;
6549 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
6550 BOOST_CHECK(test_lock_obj.after_thread_id == test_id);
6552 BOOST_MESSAGE( "----- up_thread_sorry_enable_event test end -----" );
6555 // up_thread_sorry_disable_event test
6556 // up_thread_sorry_disable_event test class
6557 class up_thread_sorry_disable_event_test_class : public module_event_map_test_base_class{
6559 // up_thread_sorry_disable_event_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : module_event_map_test_base_class(vs,session_io){
6561 up_thread_sorry_disable_event_test_class(
6562 l7vs::virtualservice_tcp& vs,
6563 boost::asio::io_service& session_io,
6564 l7vs::tcp_socket_option_info& set_socket_option,
6565 boost::asio::ip::tcp::endpoint listen_endpoint,
6567 boost::asio::ssl::context& set_ssl_context,
6568 bool set_ssl_cache_flag,
6569 int set_ssl_handshake_time_out,
6570 l7vs::logger_implement_access* set_access_logger) : module_event_map_test_base_class( vs,
6577 set_ssl_handshake_time_out,
6578 set_access_logger){};
6583 ~up_thread_sorry_disable_event_test_class(){};
6586 l7vs::tcp_session::up_thread_sorry_disable_event(LOCAL_PROC);
6590 void up_thread_sorry_disable_event_test(){
6592 BOOST_MESSAGE( "----- up_thread_sorry_disable_event test start -----" );
6594 boost::asio::io_service io;
6595 l7vs::virtualservice_tcp vs;
6596 l7vs::tcp_socket_option_info set_option;
6597 //! TCP_NODELAY (false:not set,true:set option)
6598 set_option.nodelay_opt = false;
6599 //! TCP_NODELAY option value (false:off,true:on)
6600 set_option.nodelay_val = false;
6601 //! TCP_CORK (false:not set,true:set option)
6602 set_option.cork_opt = false;
6603 //! TCP_CORK option value (false:off,true:on)
6604 set_option.cork_val = false;
6605 //! TCP_QUICKACK (false:not set,true:set option)
6606 set_option.quickack_opt = false;
6607 //! TCP_QUICKACK option value (false:off,true:on)
6608 set_option.quickack_val = false;
6610 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
6611 bool set_mode(false);
6612 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
6613 bool set_ssl_cache_flag(false);
6614 int set_ssl_handshake_time_out = 0;
6615 //std::string access_log_file_name = "test";
6616 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
6618 // up_thread_sorry_disable_event_test_class test_obj(vs,io);
6619 up_thread_sorry_disable_event_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
6623 std::string test_protocol_name("test protocol");
6624 l7vs::test_protocol_module proto_test(test_protocol_name);
6626 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
6628 l7vs::protocol_module_base::EVENT_TAG chek_event[13];
6629 chek_event[0] = l7vs::protocol_module_base::ACCEPT;
6630 chek_event[1] = l7vs::protocol_module_base::CLIENT_DISCONNECT;
6631 chek_event[2] = l7vs::protocol_module_base::CLIENT_RECV;
6632 chek_event[3] = l7vs::protocol_module_base::CLIENT_RESPONSE_SEND;
6633 chek_event[4] = l7vs::protocol_module_base::REALSERVER_SELECT;
6634 chek_event[5] = l7vs::protocol_module_base::REALSERVER_CONNECT;
6635 chek_event[6] = l7vs::protocol_module_base::REALSERVER_SEND;
6636 chek_event[7] = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
6637 chek_event[8] = l7vs::protocol_module_base::SORRYSERVER_SELECT;
6638 chek_event[9] = l7vs::protocol_module_base::SORRYSERVER_CONNECT;
6639 chek_event[10] = l7vs::protocol_module_base::SORRYSERVER_SEND;
6640 chek_event[11] = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
6641 chek_event[12] = l7vs::protocol_module_base::FINALIZE;
6643 // unit_test [1] up_thread_sorry_disable_event up_thread_next_call_function update check
6644 std::cerr << "[1] up_thread_sorry_disable_event up_thread_next_call_function update check" << std::endl;
6645 for(int i = 0; i < 13;i++){
6646 proto_test.handle_sorry_disable_res_tag = chek_event[i];
6647 test_obj.test_call();
6648 BOOST_CHECK(test_obj.chk_up_thread_next_call_function(chek_event[i]));
6651 // unit_test [2] up_thread_sorry_disable_event module parameter check thread id
6652 std::cerr << "[2] up_thread_sorry_disable_event module parameter check thread id" << std::endl;
6653 boost::thread::id def_id;
6654 boost::thread::id proc_id = boost::this_thread::get_id();
6655 test_obj.set_up_thread_id(proc_id);
6656 proto_test.handle_sorry_disable_thread_id = def_id;
6657 proto_test.handle_sorry_disable_res_tag = l7vs::protocol_module_base::FINALIZE;
6658 BOOST_CHECK(proto_test.handle_sorry_disable_thread_id != proc_id);
6659 test_obj.test_call();
6660 BOOST_CHECK(proto_test.handle_sorry_disable_thread_id == proc_id);
6662 // unit_test [3] up_thread_sorry_disable_event not fond function error check
6663 std::cerr << "[3] up_thread_sorry_disable_event not fond function error check" << std::endl;
6664 test_obj.up_thread_function_array_clear();
6665 proto_test.handle_sorry_disable_res_tag = l7vs::protocol_module_base::FINALIZE;
6666 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
6667 l7vs::Logger::putLogError_id = 0;
6668 test_obj.test_call();
6669 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
6670 BOOST_CHECK_EQUAL(69,l7vs::Logger::putLogError_id);
6671 std::cerr << l7vs::Logger::putLogError_message << std::endl;
6673 // unit_test [4] up_thread_sorry_disable_event returnd illegal EVENT_TAG error check
6674 std::cerr << "[4] up_thread_sorry_disable_event returnd illegal EVENT_TAG error check" << std::endl;
6675 test_obj.up_thread_module_event_map_clear();
6676 proto_test.handle_sorry_disable_res_tag = l7vs::protocol_module_base::FINALIZE;
6677 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
6678 l7vs::Logger::putLogError_id = 0;
6679 test_obj.test_call();
6680 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
6681 BOOST_CHECK_EQUAL(68,l7vs::Logger::putLogError_id);
6682 std::cerr << l7vs::Logger::putLogError_message << std::endl;
6684 // mutex_lock_test test_lock_obj(vs,io);
6685 mutex_lock_test test_lock_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
6686 test_lock_obj.set_up_thread_sorry_disable_event_test();
6687 test_lock_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
6689 test_lock_obj.test_thread_wait.lock();
6690 test_lock_obj.befor_thread_id = proc_id;
6691 test_lock_obj.after_thread_id = proc_id;
6692 test_lock_obj.mutex_lock();
6694 boost::thread test_thread(boost::bind(&mutex_lock_test::test_run,&test_lock_obj));
6696 BOOST_CHECK(test_lock_obj.befor_thread_id == proc_id);
6697 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
6699 boost::thread::id test_id = test_thread.get_id();
6701 BOOST_CHECK(test_id != proc_id);
6704 test_lock_obj.test_thread_wait.unlock();
6707 // unit_test [5] up_thread_sorry_disable_event thread block test (mutex lock)
6708 std::cerr << "[5] up_thread_sorry_disable_event thread block test (mutex lock)" << std::endl;
6709 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
6710 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
6712 test_lock_obj.mutex_unlock();
6715 // unit_test [6] up_thread_sorry_disable_event thread run test (mutex unlock)
6716 std::cerr << "[6] up_thread_sorry_disable_event thread run test (mutex unlock)" << std::endl;
6717 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
6718 BOOST_CHECK(test_lock_obj.after_thread_id == test_id);
6720 BOOST_MESSAGE( "----- up_thread_sorry_disable_event test end -----" );
6724 // down_thread_sorry_enable_event test
6725 // dwon_thread_sorry_enable_event test class
6726 class down_thread_sorry_enable_event_test_class : public module_event_map_test_base_class{
6728 // down_thread_sorry_enable_event_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : module_event_map_test_base_class(vs,session_io){
6730 down_thread_sorry_enable_event_test_class(
6731 l7vs::virtualservice_tcp& vs,
6732 boost::asio::io_service& session_io,
6733 l7vs::tcp_socket_option_info& set_socket_option,
6734 boost::asio::ip::tcp::endpoint listen_endpoint,
6736 boost::asio::ssl::context& set_ssl_context,
6737 bool set_ssl_cache_flag,
6738 int set_ssl_handshake_time_out,
6739 l7vs::logger_implement_access* set_access_logger) : module_event_map_test_base_class( vs,
6746 set_ssl_handshake_time_out,
6747 set_access_logger){};
6751 ~down_thread_sorry_enable_event_test_class(){};
6754 l7vs::tcp_session::down_thread_sorry_enable_event(LOCAL_PROC);
6758 void down_thread_sorry_enable_event_test(){
6760 BOOST_MESSAGE( "----- down_thread_sorry_enable_event test start -----" );
6762 boost::asio::io_service io;
6763 l7vs::virtualservice_tcp vs;
6764 l7vs::tcp_socket_option_info set_option;
6765 //! TCP_NODELAY (false:not set,true:set option)
6766 set_option.nodelay_opt = false;
6767 //! TCP_NODELAY option value (false:off,true:on)
6768 set_option.nodelay_val = false;
6769 //! TCP_CORK (false:not set,true:set option)
6770 set_option.cork_opt = false;
6771 //! TCP_CORK option value (false:off,true:on)
6772 set_option.cork_val = false;
6773 //! TCP_QUICKACK (false:not set,true:set option)
6774 set_option.quickack_opt = false;
6775 //! TCP_QUICKACK option value (false:off,true:on)
6776 set_option.quickack_val = false;
6778 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
6779 bool set_mode(false);
6780 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
6781 bool set_ssl_cache_flag(false);
6782 int set_ssl_handshake_time_out = 0;
6783 //std::string access_log_file_name = "test";
6784 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
6786 // down_thread_sorry_enable_event_test_class test_obj(vs,io);
6787 down_thread_sorry_enable_event_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
6789 std::string test_protocol_name("test protocol");
6790 l7vs::test_protocol_module proto_test(test_protocol_name);
6792 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
6794 l7vs::protocol_module_base::EVENT_TAG chek_event[7];
6795 chek_event[0] = l7vs::protocol_module_base::CLIENT_DISCONNECT;
6796 chek_event[1] = l7vs::protocol_module_base::CLIENT_CONNECTION_CHECK;
6797 chek_event[2] = l7vs::protocol_module_base::REALSERVER_RECV;
6798 chek_event[3] = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
6799 chek_event[4] = l7vs::protocol_module_base::SORRYSERVER_RECV;
6800 chek_event[5] = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
6801 chek_event[6] = l7vs::protocol_module_base::FINALIZE;
6803 // unit_test [1] down_thread_sorry_enable_event up_thread_next_call_function update check
6804 std::cerr << "[1] down_thread_sorry_enable_event up_thread_next_call_function update check" << std::endl;
6805 for(int i = 0; i < 7;i++){
6806 proto_test.handle_sorry_enable_res_tag = chek_event[i];
6807 test_obj.test_call();
6808 BOOST_CHECK(test_obj.chk_down_thread_next_call_function(chek_event[i]));
6811 // unit_test [2] down_thread_sorry_enable_event module parameter check thread id
6812 std::cerr << "[2] down_thread_sorry_enable_event module parameter check thread id" << std::endl;
6813 boost::thread::id def_id;
6814 boost::thread::id proc_id = boost::this_thread::get_id();
6815 test_obj.set_down_thread_id(proc_id);
6816 proto_test.handle_sorry_enable_thread_id = def_id;
6817 proto_test.handle_sorry_enable_res_tag = l7vs::protocol_module_base::FINALIZE;
6818 BOOST_CHECK(proto_test.handle_sorry_enable_thread_id != proc_id);
6819 test_obj.test_call();
6820 BOOST_CHECK(proto_test.handle_sorry_enable_thread_id == proc_id);
6822 // unit_test [3] down_thread_sorry_enable_event not fond function error check
6823 std::cerr << "[3] down_thread_sorry_enable_event not fond function error check" << std::endl;
6824 test_obj.down_thread_function_array_clear();
6825 proto_test.handle_sorry_enable_res_tag = l7vs::protocol_module_base::FINALIZE;
6826 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
6827 l7vs::Logger::putLogError_id = 0;
6828 test_obj.test_call();
6829 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
6830 BOOST_CHECK_EQUAL(97,l7vs::Logger::putLogError_id);
6831 std::cerr << l7vs::Logger::putLogError_message << std::endl;
6833 // unit_test [4] down_thread_sorry_enable_event returnd illegal EVENT_TAG error check
6834 std::cerr << "[4] down_thread_sorry_enable_event returnd illegal EVENT_TAG error check" << std::endl;
6835 test_obj.down_thread_module_event_map_clear();
6836 proto_test.handle_sorry_enable_res_tag = l7vs::protocol_module_base::FINALIZE;
6837 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
6838 l7vs::Logger::putLogError_id = 0;
6839 test_obj.test_call();
6840 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
6841 BOOST_CHECK_EQUAL(96,l7vs::Logger::putLogError_id);
6842 std::cerr << l7vs::Logger::putLogError_message << std::endl;
6844 // mutex_lock_test test_lock_obj(vs,io);
6845 mutex_lock_test test_lock_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
6846 test_lock_obj.set_down_thread_sorry_enable_event_test();
6847 test_lock_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
6850 test_lock_obj.test_thread_wait.lock();
6851 test_lock_obj.befor_thread_id = proc_id;
6852 test_lock_obj.after_thread_id = proc_id;
6853 test_lock_obj.mutex_lock();
6855 boost::thread test_thread(boost::bind(&mutex_lock_test::test_run,&test_lock_obj));
6857 BOOST_CHECK(test_lock_obj.befor_thread_id == proc_id);
6858 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
6860 boost::thread::id test_id = test_thread.get_id();
6862 BOOST_CHECK(test_id != proc_id);
6865 test_lock_obj.test_thread_wait.unlock();
6868 // unit_test [5] down_thread_sorry_enable_event thread block test (mutex lock)
6869 std::cerr << "[5] down_thread_sorry_enable_event thread block test (mutex lock)" << std::endl;
6870 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
6871 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
6873 test_lock_obj.mutex_unlock();
6876 // unit_test [6] down_thread_sorry_enable_event thread run test (mutex unlock)
6877 std::cerr << "[6] down_thread_sorry_enable_event thread run test (mutex unlock)" << std::endl;
6878 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
6879 BOOST_CHECK(test_lock_obj.after_thread_id == test_id);
6881 BOOST_MESSAGE( "----- down_thread_sorry_enable_event test end -----" );
6883 // down_thread_sorry_disable_event test
6884 // dwon_thread_sorry_disable_event test class
6885 class down_thread_sorry_disable_event_test_class : public module_event_map_test_base_class{
6887 // down_thread_sorry_disable_event_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : module_event_map_test_base_class(vs,session_io){
6889 down_thread_sorry_disable_event_test_class(
6890 l7vs::virtualservice_tcp& vs,
6891 boost::asio::io_service& session_io,
6892 l7vs::tcp_socket_option_info& set_socket_option,
6893 boost::asio::ip::tcp::endpoint listen_endpoint,
6895 boost::asio::ssl::context& set_ssl_context,
6896 bool set_ssl_cache_flag,
6897 int set_ssl_handshake_time_out,
6898 l7vs::logger_implement_access* set_access_logger) : module_event_map_test_base_class( vs,
6905 set_ssl_handshake_time_out,
6906 set_access_logger){};
6909 ~down_thread_sorry_disable_event_test_class(){};
6912 l7vs::tcp_session::down_thread_sorry_disable_event(LOCAL_PROC);
6916 void down_thread_sorry_disable_event_test(){
6918 BOOST_MESSAGE( "----- down_thread_sorry_disable_event test start -----" );
6920 boost::asio::io_service io;
6921 l7vs::virtualservice_tcp vs;
6922 l7vs::tcp_socket_option_info set_option;
6923 //! TCP_NODELAY (false:not set,true:set option)
6924 set_option.nodelay_opt = false;
6925 //! TCP_NODELAY option value (false:off,true:on)
6926 set_option.nodelay_val = false;
6927 //! TCP_CORK (false:not set,true:set option)
6928 set_option.cork_opt = false;
6929 //! TCP_CORK option value (false:off,true:on)
6930 set_option.cork_val = false;
6931 //! TCP_QUICKACK (false:not set,true:set option)
6932 set_option.quickack_opt = false;
6933 //! TCP_QUICKACK option value (false:off,true:on)
6934 set_option.quickack_val = false;
6936 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
6937 bool set_mode(false);
6938 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
6939 bool set_ssl_cache_flag(false);
6940 int set_ssl_handshake_time_out = 0;
6941 //std::string access_log_file_name = "test";
6942 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
6944 // down_thread_sorry_disable_event_test_class test_obj(vs,io);
6945 down_thread_sorry_disable_event_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
6948 std::string test_protocol_name("test protocol");
6949 l7vs::test_protocol_module proto_test(test_protocol_name);
6951 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
6953 l7vs::protocol_module_base::EVENT_TAG chek_event[7];
6954 chek_event[0] = l7vs::protocol_module_base::CLIENT_DISCONNECT;
6955 chek_event[1] = l7vs::protocol_module_base::CLIENT_CONNECTION_CHECK;
6956 chek_event[2] = l7vs::protocol_module_base::REALSERVER_RECV;
6957 chek_event[3] = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
6958 chek_event[4] = l7vs::protocol_module_base::SORRYSERVER_RECV;
6959 chek_event[5] = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
6960 chek_event[6] = l7vs::protocol_module_base::FINALIZE;
6962 // unit_test [1] down_thread_sorry_disable_event up_thread_next_call_function update check
6963 std::cerr << "[1] down_thread_sorry_disable_event up_thread_next_call_function update check" << std::endl;
6964 for(int i = 0; i < 7;i++){
6965 proto_test.handle_sorry_disable_res_tag = chek_event[i];
6966 test_obj.test_call();
6967 BOOST_CHECK(test_obj.chk_down_thread_next_call_function(chek_event[i]));
6970 // unit_test [2] down_thread_sorry_disable_event module parameter check thread id
6971 std::cerr << "[2] down_thread_sorry_disable_event module parameter check thread id" << std::endl;
6972 boost::thread::id def_id;
6973 boost::thread::id proc_id = boost::this_thread::get_id();
6974 test_obj.set_down_thread_id(proc_id);
6975 proto_test.handle_sorry_disable_thread_id = def_id;
6976 proto_test.handle_sorry_disable_res_tag = l7vs::protocol_module_base::FINALIZE;
6977 BOOST_CHECK(proto_test.handle_sorry_disable_thread_id != proc_id);
6978 test_obj.test_call();
6979 BOOST_CHECK(proto_test.handle_sorry_disable_thread_id == proc_id);
6981 // unit_test [3] down_thread_sorry_disable_event not fond function error check
6982 std::cerr << "[3] down_thread_sorry_disable_event not fond function error check" << std::endl;
6983 test_obj.down_thread_function_array_clear();
6984 proto_test.handle_sorry_disable_res_tag = l7vs::protocol_module_base::FINALIZE;
6985 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
6986 l7vs::Logger::putLogError_id = 0;
6987 test_obj.test_call();
6988 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
6989 BOOST_CHECK_EQUAL(99,l7vs::Logger::putLogError_id);
6990 std::cerr << l7vs::Logger::putLogError_message << std::endl;
6992 // unit_test [4] down_thread_sorry_disable_event returnd illegal EVENT_TAG error check
6993 std::cerr << "[4] down_thread_sorry_disable_event returnd illegal EVENT_TAG error check" << std::endl;
6994 test_obj.down_thread_module_event_map_clear();
6995 proto_test.handle_sorry_disable_res_tag = l7vs::protocol_module_base::FINALIZE;
6996 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
6997 l7vs::Logger::putLogError_id = 0;
6998 test_obj.test_call();
6999 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
7000 BOOST_CHECK_EQUAL(98,l7vs::Logger::putLogError_id);
7001 std::cerr << l7vs::Logger::putLogError_message << std::endl;
7003 // mutex_lock_test test_lock_obj(vs,io);
7004 mutex_lock_test test_lock_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
7005 test_lock_obj.set_down_thread_sorry_disable_event_test();
7006 test_lock_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
7008 test_lock_obj.test_thread_wait.lock();
7009 test_lock_obj.befor_thread_id = proc_id;
7010 test_lock_obj.after_thread_id = proc_id;
7011 test_lock_obj.mutex_lock();
7013 boost::thread test_thread(boost::bind(&mutex_lock_test::test_run,&test_lock_obj));
7015 BOOST_CHECK(test_lock_obj.befor_thread_id == proc_id);
7016 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
7018 boost::thread::id test_id = test_thread.get_id();
7020 BOOST_CHECK(test_id != proc_id);
7023 test_lock_obj.test_thread_wait.unlock();
7026 // unit_test [5] down_thread_sorry_disable_event thread block test (mutex lock)
7027 std::cerr << "[5] down_thread_sorry_disable_event thread block test (mutex lock)" << std::endl;
7028 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
7029 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
7031 test_lock_obj.mutex_unlock();
7034 // unit_test [6] down_thread_sorry_disable_event thread run test (mutex unlock)
7035 std::cerr << "[6] down_thread_sorry_disable_event thread run test (mutex unlock)" << std::endl;
7036 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
7037 BOOST_CHECK(test_lock_obj.after_thread_id == test_id);
7039 BOOST_MESSAGE( "----- down_thread_sorry_disable_event test end -----" );
7042 // up_thread_client_accept_event test
7043 // up_thread_client_accept_event test class
7044 class up_thread_client_accept_event_test_class : public module_event_map_test_base_class{
7046 // up_thread_client_accept_event_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : module_event_map_test_base_class(vs,session_io){
7048 up_thread_client_accept_event_test_class(
7049 l7vs::virtualservice_tcp& vs,
7050 boost::asio::io_service& session_io,
7051 l7vs::tcp_socket_option_info& set_socket_option,
7052 boost::asio::ip::tcp::endpoint listen_endpoint,
7054 boost::asio::ssl::context& set_ssl_context,
7055 bool set_ssl_cache_flag,
7056 int set_ssl_handshake_time_out,
7057 l7vs::logger_implement_access* set_access_logger) : module_event_map_test_base_class( vs,
7064 set_ssl_handshake_time_out,
7065 set_access_logger){};
7068 ~up_thread_client_accept_event_test_class(){};
7071 l7vs::tcp_session::up_thread_client_accept_event(LOCAL_PROC);
7075 void up_thread_client_accept_event_test(){
7077 BOOST_MESSAGE( "----- up_thread_client_accept_event test start -----" );
7079 boost::asio::io_service io;
7080 l7vs::virtualservice_tcp vs;
7081 l7vs::tcp_socket_option_info set_option;
7082 //! TCP_NODELAY (false:not set,true:set option)
7083 set_option.nodelay_opt = false;
7084 //! TCP_NODELAY option value (false:off,true:on)
7085 set_option.nodelay_val = false;
7086 //! TCP_CORK (false:not set,true:set option)
7087 set_option.cork_opt = false;
7088 //! TCP_CORK option value (false:off,true:on)
7089 set_option.cork_val = false;
7090 //! TCP_QUICKACK (false:not set,true:set option)
7091 set_option.quickack_opt = false;
7092 //! TCP_QUICKACK option value (false:off,true:on)
7093 set_option.quickack_val = false;
7095 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
7096 bool set_mode(false);
7097 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
7098 bool set_ssl_cache_flag(false);
7099 int set_ssl_handshake_time_out = 0;
7100 //std::string access_log_file_name = "test";
7101 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
7103 // up_thread_client_accept_event_test_class test_obj(vs,io);
7104 up_thread_client_accept_event_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
7106 std::string test_protocol_name("test protocol");
7107 l7vs::test_protocol_module proto_test(test_protocol_name);
7109 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
7111 l7vs::protocol_module_base::EVENT_TAG chek_event[13];
7112 chek_event[0] = l7vs::protocol_module_base::ACCEPT;
7113 chek_event[1] = l7vs::protocol_module_base::CLIENT_DISCONNECT;
7114 chek_event[2] = l7vs::protocol_module_base::CLIENT_RECV;
7115 chek_event[3] = l7vs::protocol_module_base::CLIENT_RESPONSE_SEND;
7116 chek_event[4] = l7vs::protocol_module_base::REALSERVER_SELECT;
7117 chek_event[5] = l7vs::protocol_module_base::REALSERVER_CONNECT;
7118 chek_event[6] = l7vs::protocol_module_base::REALSERVER_SEND;
7119 chek_event[7] = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
7120 chek_event[8] = l7vs::protocol_module_base::SORRYSERVER_SELECT;
7121 chek_event[9] = l7vs::protocol_module_base::SORRYSERVER_CONNECT;
7122 chek_event[10] = l7vs::protocol_module_base::SORRYSERVER_SEND;
7123 chek_event[11] = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
7124 chek_event[12] = l7vs::protocol_module_base::FINALIZE;
7126 // unit_test [1] up_thread_client_accept_event up_thread_next_call_function update check
7127 std::cerr << "[1] up_thread_client_accept_event up_thread_next_call_function update check" << std::endl;
7128 for(int i = 0; i < 13;i++){
7129 proto_test.handle_accept_res_tag = chek_event[i];
7130 test_obj.test_call();
7131 BOOST_CHECK(test_obj.chk_up_thread_next_call_function(chek_event[i]));
7134 // unit_test [2] up_thread_client_accept_event module parameter check thread id
7135 std::cerr << "[2] up_thread_client_accept_event module parameter check thread id" << std::endl;
7136 boost::thread::id def_id;
7137 boost::thread::id proc_id = boost::this_thread::get_id();
7138 test_obj.set_up_thread_id(proc_id);
7139 proto_test.handle_accept_in_thread_id = def_id;
7140 proto_test.handle_accept_res_tag = l7vs::protocol_module_base::FINALIZE;
7141 BOOST_CHECK(proto_test.handle_accept_in_thread_id != proc_id);
7142 test_obj.test_call();
7143 BOOST_CHECK(proto_test.handle_accept_in_thread_id == proc_id);
7145 // unit_test [3] up_thread_client_accept_event not fond function error check
7146 std::cerr << "[3] up_thread_client_accept_event not fond function error check" << std::endl;
7147 test_obj.up_thread_function_array_clear();
7148 proto_test.handle_accept_res_tag = l7vs::protocol_module_base::FINALIZE;
7149 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
7150 l7vs::Logger::putLogError_id = 0;
7151 test_obj.test_call();
7152 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
7153 BOOST_CHECK_EQUAL(19,l7vs::Logger::putLogError_id);
7154 std::cerr << l7vs::Logger::putLogError_message << std::endl;
7156 // unit_test [4] up_thread_client_accept_event returnd illegal EVENT_TAG error check
7157 std::cerr << "[4] up_thread_client_accept_event returnd illegal EVENT_TAG error check" << std::endl;
7158 test_obj.up_thread_module_event_map_clear();
7159 proto_test.handle_accept_res_tag = l7vs::protocol_module_base::FINALIZE;
7160 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
7161 l7vs::Logger::putLogError_id = 0;
7162 test_obj.test_call();
7163 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
7164 BOOST_CHECK_EQUAL(18,l7vs::Logger::putLogError_id);
7165 std::cerr << l7vs::Logger::putLogError_message << std::endl;
7167 BOOST_MESSAGE( "----- up_thread_client_accept_event test end -----" );
7172 // up_thread_client_respond test
7173 // up_thread_client_respond test class
7174 class up_thread_client_respond_test_class : public l7vs::tcp_session{
7176 // up_thread_client_respond_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){
7178 up_thread_client_respond_test_class(
7179 l7vs::virtualservice_tcp& vs,
7180 boost::asio::io_service& session_io,
7181 l7vs::tcp_socket_option_info& set_socket_option,
7182 boost::asio::ip::tcp::endpoint listen_endpoint,
7184 boost::asio::ssl::context& set_ssl_context,
7185 bool set_ssl_cache_flag,
7186 int set_ssl_handshake_time_out,
7187 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
7194 set_ssl_handshake_time_out,
7195 set_access_logger){};
7198 ~up_thread_client_respond_test_class(){};
7201 l7vs::tcp_session::up_thread_client_respond(LOCAL_PROC);
7204 l7vs::lockfree_queue<l7vs::tcp_thread_message>& get_up_thread_message_que(){
7205 return up_thread_message_que;
7208 l7vs::lockfree_queue<l7vs::tcp_thread_message>& get_down_thread_message_que(){
7209 return down_thread_message_que;
7212 void up_thread_function_array_clear(){
7213 for(int i = 0;i <= UP_FUNC_EXIT;i++){
7214 up_thread_function_array[i].second = NULL;
7217 void up_thread_message_down_thread_function_map_clear(){
7218 up_thread_message_down_thread_function_map.clear();
7221 void up_thread_client_respond_event(const TCP_PROCESS_TYPE_TAG process_type){
7222 up_thread_client_respond_event_call_chek = true;
7224 bool up_thread_client_respond_event_call_chek;
7226 void down_thread_client_respond_event(const TCP_PROCESS_TYPE_TAG process_type){
7227 down_thread_client_respond_event_call_chek = true;
7229 bool down_thread_client_respond_event_call_chek;
7231 void up_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
7232 up_thread_exit_call_chek = true;
7234 bool up_thread_exit_call_chek;
7236 void up_thread_client_respond_test(){
7237 BOOST_MESSAGE( "----- up_thread_client_respond test start -----" );
7238 // boost::asio::io_service io;
7239 // l7vs::virtualservice_tcp vs;
7240 // up_thread_client_respond_test_class test_obj(vs,io);
7242 l7vs::virtualservice_tcp vs;
7243 boost::asio::io_service io;
7244 l7vs::tcp_socket_option_info set_option;
7245 //! TCP_NODELAY (false:not set,true:set option)
7246 set_option.nodelay_opt = false;
7247 //! TCP_NODELAY option value (false:off,true:on)
7248 set_option.nodelay_val = false;
7249 //! TCP_CORK (false:not set,true:set option)
7250 set_option.cork_opt = false;
7251 //! TCP_CORK option value (false:off,true:on)
7252 set_option.cork_val = false;
7253 //! TCP_QUICKACK (false:not set,true:set option)
7254 set_option.quickack_opt = false;
7255 //! TCP_QUICKACK option value (false:off,true:on)
7256 set_option.quickack_val = false;
7258 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
7259 bool set_mode(false);
7260 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
7261 bool set_ssl_cache_flag(false);
7262 int set_ssl_handshake_time_out = 0;
7263 //std::string access_log_file_name = "test";
7264 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
7266 up_thread_client_respond_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
7270 l7vs::lockfree_queue<l7vs::tcp_thread_message>& up_thread_message_que = test_obj.get_up_thread_message_que();
7271 l7vs::lockfree_queue<l7vs::tcp_thread_message>& down_thread_message_que = test_obj.get_down_thread_message_que();
7273 BOOST_CHECK(up_thread_message_que.empty());
7274 BOOST_CHECK(down_thread_message_que.empty());
7276 test_obj.test_call();
7278 // unit_test [1] up_thread_client_respond up thread message set check
7279 std::cerr << "[1] up_thread_client_respond up thread message set check" << std::endl;
7280 BOOST_CHECK(!up_thread_message_que.empty());
7281 l7vs::tcp_thread_message* up_msg = up_thread_message_que.pop();
7282 BOOST_CHECK(up_thread_message_que.empty());
7283 test_obj.up_thread_client_respond_event_call_chek = false;
7284 up_msg->message(l7vs::tcp_session::MESSAGE_PROC);
7285 BOOST_CHECK(test_obj.up_thread_client_respond_event_call_chek);
7288 // unit_test [2] up_thread_client_respond down thread message set check
7289 std::cerr << "[2] up_thread_client_respond down thread message set check" << std::endl;
7290 BOOST_CHECK(!down_thread_message_que.empty());
7291 l7vs::tcp_thread_message* down_msg = down_thread_message_que.pop();
7292 BOOST_CHECK(down_thread_message_que.empty());
7293 test_obj.down_thread_client_respond_event_call_chek = false;
7294 down_msg->message(l7vs::tcp_session::MESSAGE_PROC);
7295 BOOST_CHECK(test_obj.down_thread_client_respond_event_call_chek);
7298 // unit_test [3] up_thread_client_respond not fond down_thread_client_respond_event function error check
7299 std::cerr << "[3] up_thread_client_respond not fond down_thread_client_respond_event function error check" << std::endl;
7300 test_obj.up_thread_message_down_thread_function_map_clear();
7301 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
7302 l7vs::Logger::putLogError_id = 0;
7303 test_obj.up_thread_exit_call_chek = false;
7304 test_obj.test_call();
7305 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
7306 BOOST_CHECK_EQUAL(23,l7vs::Logger::putLogError_id);
7307 std::cerr << l7vs::Logger::putLogError_message << std::endl;
7308 BOOST_CHECK(test_obj.up_thread_exit_call_chek);
7310 // unit_test [4] up_thread_client_respond not fond up_thread_client_respond_event function error check
7311 std::cerr << "[4] up_thread_client_respond not fond up_thread_client_respond_event function error check" << std::endl;
7312 test_obj.up_thread_function_array_clear();
7313 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
7314 l7vs::Logger::putLogError_id = 0;
7315 test_obj.up_thread_exit_call_chek = false;
7316 test_obj.test_call();
7317 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
7318 BOOST_CHECK_EQUAL(22,l7vs::Logger::putLogError_id);
7319 std::cerr << l7vs::Logger::putLogError_message << std::endl;
7320 BOOST_CHECK(test_obj.up_thread_exit_call_chek);
7322 BOOST_MESSAGE( "----- up_thread_client_respond test end -----" );
7326 // up_thread_client_respond_event test
7327 // up_thread_client_respond_event test class
7328 class up_thread_client_respond_event_test_class : public module_event_map_test_base_class{
7330 // up_thread_client_respond_event_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : module_event_map_test_base_class(vs,session_io){
7332 up_thread_client_respond_event_test_class(
7333 l7vs::virtualservice_tcp& vs,
7334 boost::asio::io_service& session_io,
7335 l7vs::tcp_socket_option_info& set_socket_option,
7336 boost::asio::ip::tcp::endpoint listen_endpoint,
7338 boost::asio::ssl::context& set_ssl_context,
7339 bool set_ssl_cache_flag,
7340 int set_ssl_handshake_time_out,
7341 l7vs::logger_implement_access* set_access_logger) : module_event_map_test_base_class( vs,
7348 set_ssl_handshake_time_out,
7349 set_access_logger){};
7352 ~up_thread_client_respond_event_test_class(){};
7355 l7vs::tcp_session::up_thread_client_respond_event(LOCAL_PROC);
7359 void up_thread_client_respond_event_test(){
7361 BOOST_MESSAGE( "----- up_thread_client_respond_event test start -----" );
7363 // boost::asio::io_service io;
7364 // l7vs::virtualservice_tcp vs;
7365 // up_thread_client_respond_event_test_class test_obj(vs,io);
7366 l7vs::virtualservice_tcp vs;
7367 boost::asio::io_service io;
7368 l7vs::tcp_socket_option_info set_option;
7369 //! TCP_NODELAY (false:not set,true:set option)
7370 set_option.nodelay_opt = false;
7371 //! TCP_NODELAY option value (false:off,true:on)
7372 set_option.nodelay_val = false;
7373 //! TCP_CORK (false:not set,true:set option)
7374 set_option.cork_opt = false;
7375 //! TCP_CORK option value (false:off,true:on)
7376 set_option.cork_val = false;
7377 //! TCP_QUICKACK (false:not set,true:set option)
7378 set_option.quickack_opt = false;
7379 //! TCP_QUICKACK option value (false:off,true:on)
7380 set_option.quickack_val = false;
7382 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
7383 bool set_mode(false);
7384 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
7385 bool set_ssl_cache_flag(false);
7386 int set_ssl_handshake_time_out = 0;
7387 //std::string access_log_file_name = "test";
7388 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
7390 up_thread_client_respond_event_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
7393 std::string test_protocol_name("test protocol");
7394 l7vs::test_protocol_module proto_test(test_protocol_name);
7396 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
7398 l7vs::protocol_module_base::EVENT_TAG chek_event[13];
7399 chek_event[0] = l7vs::protocol_module_base::ACCEPT;
7400 chek_event[1] = l7vs::protocol_module_base::CLIENT_DISCONNECT;
7401 chek_event[2] = l7vs::protocol_module_base::CLIENT_RECV;
7402 chek_event[3] = l7vs::protocol_module_base::CLIENT_RESPONSE_SEND;
7403 chek_event[4] = l7vs::protocol_module_base::REALSERVER_SELECT;
7404 chek_event[5] = l7vs::protocol_module_base::REALSERVER_CONNECT;
7405 chek_event[6] = l7vs::protocol_module_base::REALSERVER_SEND;
7406 chek_event[7] = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
7407 chek_event[8] = l7vs::protocol_module_base::SORRYSERVER_SELECT;
7408 chek_event[9] = l7vs::protocol_module_base::SORRYSERVER_CONNECT;
7409 chek_event[10] = l7vs::protocol_module_base::SORRYSERVER_SEND;
7410 chek_event[11] = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
7411 chek_event[12] = l7vs::protocol_module_base::FINALIZE;
7413 // unit_test [1] up_thread_client_respond_event up_thread_next_call_function update check
7414 std::cerr << "[1] up_thread_client_respond_event up_thread_next_call_function update check" << std::endl;
7415 for(int i = 0; i < 13;i++){
7416 proto_test.handle_response_send_inform_res_tag = chek_event[i];
7417 test_obj.test_call();
7418 BOOST_CHECK(test_obj.chk_up_thread_next_call_function(chek_event[i]));
7421 // unit_test [2] up_thread_client_respond_event module parameter check thread id
7422 std::cerr << "[2] up_thread_client_respond_event module parameter check thread id" << std::endl;
7423 boost::thread::id def_id;
7424 boost::thread::id proc_id = boost::this_thread::get_id();
7425 test_obj.set_up_thread_id(proc_id);
7426 proto_test.handle_response_send_inform_thread_id = def_id;
7427 proto_test.handle_response_send_inform_res_tag = l7vs::protocol_module_base::FINALIZE;
7428 BOOST_CHECK(proto_test.handle_response_send_inform_thread_id != proc_id);
7429 test_obj.test_call();
7430 BOOST_CHECK(proto_test.handle_response_send_inform_thread_id == proc_id);
7432 // unit_test [3] up_thread_client_respond_event not fond function error check
7433 std::cerr << "[3] up_thread_client_respond_event not fond function error check" << std::endl;
7434 test_obj.up_thread_function_array_clear();
7435 proto_test.handle_response_send_inform_res_tag = l7vs::protocol_module_base::FINALIZE;
7436 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
7437 l7vs::Logger::putLogError_id = 0;
7438 test_obj.test_call();
7439 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
7440 BOOST_CHECK_EQUAL(25,l7vs::Logger::putLogError_id);
7441 std::cerr << l7vs::Logger::putLogError_message << std::endl;
7443 // unit_test [4] up_thread_client_respond_event returnd illegal EVENT_TAG error check
7444 std::cerr << "[4] up_thread_client_respond_event returnd illegal EVENT_TAG error check" << std::endl;
7445 test_obj.up_thread_module_event_map_clear();
7446 proto_test.handle_response_send_inform_res_tag = l7vs::protocol_module_base::FINALIZE;
7447 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
7448 l7vs::Logger::putLogError_id = 0;
7449 test_obj.test_call();
7450 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
7451 BOOST_CHECK_EQUAL(24,l7vs::Logger::putLogError_id);
7452 std::cerr << l7vs::Logger::putLogError_message << std::endl;
7454 // mutex_lock_test test_lock_obj(vs,io);
7455 mutex_lock_test test_lock_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
7456 test_lock_obj.set_up_thread_client_respond_event_test();
7457 test_lock_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
7459 test_lock_obj.test_thread_wait.lock();
7460 test_lock_obj.befor_thread_id = proc_id;
7461 test_lock_obj.after_thread_id = proc_id;
7462 test_lock_obj.mutex_lock();
7464 boost::thread test_thread(boost::bind(&mutex_lock_test::test_run,&test_lock_obj));
7466 BOOST_CHECK(test_lock_obj.befor_thread_id == proc_id);
7467 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
7469 boost::thread::id test_id = test_thread.get_id();
7471 BOOST_CHECK(test_id != proc_id);
7474 test_lock_obj.test_thread_wait.unlock();
7477 // unit_test [5] up_thread_client_respond_event thread block test (mutex lock)
7478 std::cerr << "[5] up_thread_client_respond_event thread block test (mutex lock)" << std::endl;
7479 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
7480 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
7482 test_lock_obj.mutex_unlock();
7485 // unit_test [6] up_thread_client_respond_event thread run test (mutex unlock)
7486 std::cerr << "[6] up_thread_client_respond_event thread run test (mutex unlock)" << std::endl;
7487 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
7488 BOOST_CHECK(test_lock_obj.after_thread_id == test_id);
7490 BOOST_MESSAGE( "----- up_thread_client_respond_event test end -----" );
7495 // down_thread_client_respond_event test
7496 // dwon_thread_client_respond_event test class
7497 class down_thread_client_respond_event_test_class : public module_event_map_test_base_class{
7499 // down_thread_client_respond_event_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : module_event_map_test_base_class(vs,session_io){
7501 down_thread_client_respond_event_test_class(
7502 l7vs::virtualservice_tcp& vs,
7503 boost::asio::io_service& session_io,
7504 l7vs::tcp_socket_option_info& set_socket_option,
7505 boost::asio::ip::tcp::endpoint listen_endpoint,
7507 boost::asio::ssl::context& set_ssl_context,
7508 bool set_ssl_cache_flag,
7509 int set_ssl_handshake_time_out,
7510 l7vs::logger_implement_access* set_access_logger) : module_event_map_test_base_class( vs,
7517 set_ssl_handshake_time_out,
7518 set_access_logger){};
7521 ~down_thread_client_respond_event_test_class(){};
7524 l7vs::tcp_session::down_thread_client_respond_event(LOCAL_PROC);
7528 void down_thread_client_respond_event_test(){
7530 BOOST_MESSAGE( "----- down_thread_client_respond_event test start -----" );
7532 // boost::asio::io_service io;
7533 // l7vs::virtualservice_tcp vs;
7534 // down_thread_client_respond_event_test_class test_obj(vs,io);
7535 l7vs::virtualservice_tcp vs;
7536 boost::asio::io_service io;
7537 l7vs::tcp_socket_option_info set_option;
7538 //! TCP_NODELAY (false:not set,true:set option)
7539 set_option.nodelay_opt = false;
7540 //! TCP_NODELAY option value (false:off,true:on)
7541 set_option.nodelay_val = false;
7542 //! TCP_CORK (false:not set,true:set option)
7543 set_option.cork_opt = false;
7544 //! TCP_CORK option value (false:off,true:on)
7545 set_option.cork_val = false;
7546 //! TCP_QUICKACK (false:not set,true:set option)
7547 set_option.quickack_opt = false;
7548 //! TCP_QUICKACK option value (false:off,true:on)
7549 set_option.quickack_val = false;
7551 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
7552 bool set_mode(false);
7553 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
7554 bool set_ssl_cache_flag(false);
7555 int set_ssl_handshake_time_out = 0;
7556 //std::string access_log_file_name = "test";
7557 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
7559 down_thread_client_respond_event_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
7562 std::string test_protocol_name("test protocol");
7563 l7vs::test_protocol_module proto_test(test_protocol_name);
7565 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
7567 l7vs::protocol_module_base::EVENT_TAG chek_event[7];
7568 chek_event[0] = l7vs::protocol_module_base::CLIENT_DISCONNECT;
7569 chek_event[1] = l7vs::protocol_module_base::CLIENT_CONNECTION_CHECK;
7570 chek_event[2] = l7vs::protocol_module_base::REALSERVER_RECV;
7571 chek_event[3] = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
7572 chek_event[4] = l7vs::protocol_module_base::SORRYSERVER_RECV;
7573 chek_event[5] = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
7574 chek_event[6] = l7vs::protocol_module_base::FINALIZE;
7576 // unit_test [1] down_thread_client_respond_event down_thread_next_call_function update check
7577 std::cerr << "[1] down_thread_client_respond_event down_thread_next_call_function update check" << std::endl;
7578 for(int i = 0; i < 7;i++){
7579 proto_test.handle_response_send_inform_res_tag = chek_event[i];
7580 test_obj.test_call();
7581 BOOST_CHECK(test_obj.chk_down_thread_next_call_function(chek_event[i]));
7584 // unit_test [2] down_thread_client_respond_event module parameter check thread id
7585 std::cerr << "[2] down_thread_client_respond_event module parameter check thread id" << std::endl;
7586 boost::thread::id def_id;
7587 boost::thread::id proc_id = boost::this_thread::get_id();
7588 test_obj.set_down_thread_id(proc_id);
7589 proto_test.handle_response_send_inform_thread_id = def_id;
7590 proto_test.handle_response_send_inform_res_tag = l7vs::protocol_module_base::FINALIZE;
7591 BOOST_CHECK(proto_test.handle_response_send_inform_thread_id != proc_id);
7592 test_obj.test_call();
7593 BOOST_CHECK(proto_test.handle_response_send_inform_thread_id == proc_id);
7595 // unit_test [3] down_thread_client_respond_event not fond function error check
7596 std::cerr << "[3] down_thread_client_respond_event not fond function error check" << std::endl;
7597 test_obj.down_thread_function_array_clear();
7598 proto_test.handle_response_send_inform_res_tag = l7vs::protocol_module_base::FINALIZE;
7599 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
7600 l7vs::Logger::putLogError_id = 0;
7601 test_obj.test_call();
7602 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
7603 BOOST_CHECK_EQUAL(81,l7vs::Logger::putLogError_id);
7604 std::cerr << l7vs::Logger::putLogError_message << std::endl;
7606 // unit_test [4] down_thread_client_respond_event returnd illegal EVENT_TAG error check
7607 std::cerr << "[4] down_thread_client_respond_event returnd illegal EVENT_TAG error check" << std::endl;
7608 test_obj.down_thread_module_event_map_clear();
7609 proto_test.handle_response_send_inform_res_tag = l7vs::protocol_module_base::FINALIZE;
7610 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
7611 l7vs::Logger::putLogError_id = 0;
7612 test_obj.test_call();
7613 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
7614 BOOST_CHECK_EQUAL(80,l7vs::Logger::putLogError_id);
7615 std::cerr << l7vs::Logger::putLogError_message << std::endl;
7617 // mutex_lock_test test_lock_obj(vs,io);
7618 mutex_lock_test test_lock_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
7619 test_lock_obj.set_down_thread_client_respond_event_test();
7620 test_lock_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
7622 test_lock_obj.test_thread_wait.lock();
7623 test_lock_obj.befor_thread_id = proc_id;
7624 test_lock_obj.after_thread_id = proc_id;
7625 test_lock_obj.mutex_lock();
7627 boost::thread test_thread(boost::bind(&mutex_lock_test::test_run,&test_lock_obj));
7629 BOOST_CHECK(test_lock_obj.befor_thread_id == proc_id);
7630 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
7632 boost::thread::id test_id = test_thread.get_id();
7634 BOOST_CHECK(test_id != proc_id);
7637 test_lock_obj.test_thread_wait.unlock();
7640 // unit_test [5] down_thread_client_respond_event thread block test (mutex lock)
7641 std::cerr << "[5] down_thread_client_respond_event thread block test (mutex lock)" << std::endl;
7642 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
7643 BOOST_CHECK(test_lock_obj.after_thread_id == proc_id);
7645 test_lock_obj.mutex_unlock();
7648 // unit_test [6] down_thread_client_respond_event thread run test (mutex unlock)
7649 std::cerr << "[6] down_thread_client_respond_event thread run test (mutex unlock)" << std::endl;
7650 BOOST_CHECK(test_lock_obj.befor_thread_id == test_id);
7651 BOOST_CHECK(test_lock_obj.after_thread_id == test_id);
7653 BOOST_MESSAGE( "----- down_thread_client_respond_event test end -----" );
7657 // up_thread_all_socket_close test
7658 // up_thread_all_socket_close test class
7659 class up_thread_all_socket_close_test_class : public l7vs::tcp_session{
7661 // up_thread_all_socket_close_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){
7663 up_thread_all_socket_close_test_class(
7664 l7vs::virtualservice_tcp& vs,
7665 boost::asio::io_service& session_io,
7666 l7vs::tcp_socket_option_info& set_socket_option,
7667 boost::asio::ip::tcp::endpoint listen_endpoint,
7669 boost::asio::ssl::context& set_ssl_context,
7670 bool set_ssl_cache_flag,
7671 int set_ssl_handshake_time_out,
7672 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
7679 set_ssl_handshake_time_out,
7680 set_access_logger){};
7682 ~up_thread_all_socket_close_test_class(){};
7685 tcp_session::up_thread_all_socket_close();
7688 l7vs::tcp_socket& get_client_socket(){
7689 return client_socket;
7691 l7vs::tcp_ssl_socket& get_client_ssl_socket(){
7692 return client_ssl_socket;
7695 boost::shared_ptr< l7vs::tcp_socket > get_sorry_socket(){
7696 return sorryserver_socket.second;
7699 std::map<endpoint,tcp_socket_ptr>& get_up_thread_send_realserver_socket_map(){
7700 return up_thread_send_realserver_socket_map;
7703 l7vs::tcp_realserver_connect_socket_list& get_down_thread_connect_socket_list(){
7704 return down_thread_connect_socket_list;
7707 void up_thread_all_socket_close_test(){
7708 BOOST_MESSAGE( "----- up_thread_all_socket_close test start -----" );
7709 // boost::asio::io_service io;
7710 // l7vs::virtualservice_tcp vs;
7711 // up_thread_all_socket_close_test_class test_obj(vs,io);
7712 l7vs::virtualservice_tcp vs;
7713 boost::asio::io_service io;
7714 l7vs::tcp_socket_option_info set_option;
7715 //! TCP_NODELAY (false:not set,true:set option)
7716 set_option.nodelay_opt = false;
7717 //! TCP_NODELAY option value (false:off,true:on)
7718 set_option.nodelay_val = false;
7719 //! TCP_CORK (false:not set,true:set option)
7720 set_option.cork_opt = false;
7721 //! TCP_CORK option value (false:off,true:on)
7722 set_option.cork_val = false;
7723 //! TCP_QUICKACK (false:not set,true:set option)
7724 set_option.quickack_opt = false;
7725 //! TCP_QUICKACK option value (false:off,true:on)
7726 set_option.quickack_val = false;
7728 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
7729 bool set_mode(false);
7730 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
7731 bool set_ssl_cache_flag(false);
7732 int set_ssl_handshake_time_out = 0;
7733 //std::string access_log_file_name = "test";
7734 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
7736 up_thread_all_socket_close_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
7739 l7vs::tcp_socket& client_socket = test_obj.get_client_socket();
7740 client_socket.close_call_check = false;
7741 l7vs::tcp_socket& sorry_socket = *(test_obj.get_sorry_socket());
7742 sorry_socket.close_call_check = false;
7743 std::map< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > >& up_thread_send_realserver_socket_map = test_obj.get_up_thread_send_realserver_socket_map();
7744 std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > pair_socket;
7745 std::list< std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > > rs_socket_list;
7746 std::list< std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > >::iterator rs_list_it;
7747 pair_socket.first.address(boost::asio::ip::address::from_string(DUMMY_SERVER_IP));
7748 vs.connection_inactive_list.clear();
7749 std::list<boost::asio::ip::tcp::endpoint>::iterator inact_list_it;
7750 l7vs::tcp_realserver_connect_socket_list& connect_socket_list = test_obj.get_down_thread_connect_socket_list();
7752 for(int i = 0; i < 1024;i++){
7753 pair_socket.first.port(i);
7754 boost::shared_ptr< l7vs::tcp_socket > new_socket(new l7vs::tcp_socket(io));
7755 pair_socket.second = new_socket;
7756 new_socket->close_call_check = false;
7757 new_socket->close_res = true;
7758 rs_socket_list.push_back(pair_socket);
7759 up_thread_send_realserver_socket_map.insert(pair_socket);
7760 connect_socket_list.push_back(pair_socket);
7762 BOOST_CHECK(!up_thread_send_realserver_socket_map.empty());
7763 BOOST_CHECK(!connect_socket_list.empty());
7764 BOOST_CHECK(!rs_socket_list.empty());
7766 test_obj.test_call();
7768 // unit_test [1] up_thread_all_socket_close realserver socket close call check
7769 std::cerr << "[1] up_thread_all_socket_close realserver socket close call check" << std::endl;
7770 rs_list_it = rs_socket_list.begin();
7771 for(int i = 0; i < 1024;i++){
7772 BOOST_CHECK(rs_list_it->second->close_call_check);
7776 // unit_test [2] up_thread_all_socket_close parent virtual service connection incactive call check
7777 std::cerr << "[2] up_thread_all_socket_close parent virtual service connection incactive call check" << std::endl;
7778 rs_list_it = rs_socket_list.begin();
7779 for(int i = 0; i < 1024;i++){
7780 inact_list_it = vs.connection_inactive_list.begin();
7781 while(inact_list_it != vs.connection_inactive_list.end()){
7782 if(*inact_list_it == rs_list_it->first)
7786 BOOST_CHECK(inact_list_it != vs.connection_inactive_list.end());
7787 vs.connection_inactive_list.erase(inact_list_it);
7790 BOOST_CHECK(vs.connection_inactive_list.empty());
7792 // unit_test [3] up_thread_all_socket_close realserver send socket map clear check
7793 std::cerr << "[3] up_thread_all_socket_close realserver send socket map clear check" << std::endl;
7794 BOOST_CHECK(up_thread_send_realserver_socket_map.empty());
7796 // unit_test [4] up_thread_all_socket_close down thread connect socket list clear check
7797 std::cerr << "[4] up_thread_all_socket_close down thread connect socket list clear check" << std::endl;
7798 BOOST_CHECK(connect_socket_list.empty());
7800 // unit_test [5] up_thread_all_socket_close client socket close call check
7801 std::cerr << "[5] up_thread_all_socket_close client socket close call check" << std::endl;
7802 BOOST_CHECK(client_socket.close_call_check);
7804 // unit_test [6] up_thread_all_socket_close sorry socket close call check
7805 std::cerr << "[6] up_thread_all_socket_close sorry socket close call check" << std::endl;
7806 BOOST_CHECK(sorry_socket.close_call_check);
7809 rs_list_it = rs_socket_list.begin();
7810 for(int i = 0; i < 1024;i++){
7811 rs_list_it->second->close_res = false;
7812 up_thread_send_realserver_socket_map.insert(*rs_list_it);
7816 test_obj.test_call();
7818 // unit_test [7] up_thread_all_socket_close closed socket parent virtual service connection incactive not call check
7819 std::cerr << "[7] up_thread_all_socket_close closed socket parent virtual service connection incactive not call check" << std::endl;
7820 BOOST_CHECK(vs.connection_inactive_list.empty());
7823 up_thread_all_socket_close_test_class ssl_test_obj(vs,io,set_option,listen_endpoint,true,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
7824 l7vs::tcp_ssl_socket& client_ssl_socket = ssl_test_obj.get_client_ssl_socket();
7825 client_ssl_socket.close_call_check = false;
7827 ssl_test_obj.test_call();
7829 // unit_test [8] up_thread_all_socket_close client ssl socket close call check
7830 std::cerr << "[8] up_thread_all_socket_close client ssl socket close call check" << std::endl;
7831 BOOST_CHECK(client_ssl_socket.close_call_check);
7833 BOOST_MESSAGE( "----- up_thread_all_socket_close test end -----" );
7836 // down_thread_all_socket_close test
7837 // down_thread_all_socket_close test class
7838 class down_thread_all_socket_close_test_class : public l7vs::tcp_session{
7840 // down_thread_all_socket_close_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){
7842 down_thread_all_socket_close_test_class(
7843 l7vs::virtualservice_tcp& vs,
7844 boost::asio::io_service& session_io,
7845 l7vs::tcp_socket_option_info& set_socket_option,
7846 boost::asio::ip::tcp::endpoint listen_endpoint,
7848 boost::asio::ssl::context& set_ssl_context,
7849 bool set_ssl_cache_flag,
7850 int set_ssl_handshake_time_out,
7851 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
7858 set_ssl_handshake_time_out,
7859 set_access_logger){};
7861 ~down_thread_all_socket_close_test_class(){};
7863 tcp_session::down_thread_all_socket_close();
7865 l7vs::tcp_socket& get_client_socket(){
7866 return client_socket;
7868 l7vs::tcp_ssl_socket& get_client_ssl_socket(){
7869 return client_ssl_socket;
7871 boost::shared_ptr< l7vs::tcp_socket > get_sorry_socket(){
7872 return sorryserver_socket.second;
7874 std::list<socket_element>& get_down_thread_receive_realserver_socket_list(){
7875 return down_thread_receive_realserver_socket_list;
7878 void down_thread_all_socket_close_test(){
7879 BOOST_MESSAGE( "----- down_thread_all_socket_close test start -----" );
7880 // boost::asio::io_service io;
7881 // l7vs::virtualservice_tcp vs;
7882 // down_thread_all_socket_close_test_class test_obj(vs,io);
7883 l7vs::virtualservice_tcp vs;
7884 boost::asio::io_service io;
7885 l7vs::tcp_socket_option_info set_option;
7886 //! TCP_NODELAY (false:not set,true:set option)
7887 set_option.nodelay_opt = false;
7888 //! TCP_NODELAY option value (false:off,true:on)
7889 set_option.nodelay_val = false;
7890 //! TCP_CORK (false:not set,true:set option)
7891 set_option.cork_opt = false;
7892 //! TCP_CORK option value (false:off,true:on)
7893 set_option.cork_val = false;
7894 //! TCP_QUICKACK (false:not set,true:set option)
7895 set_option.quickack_opt = false;
7896 //! TCP_QUICKACK option value (false:off,true:on)
7897 set_option.quickack_val = false;
7899 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
7900 bool set_mode(false);
7901 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
7902 bool set_ssl_cache_flag(false);
7903 int set_ssl_handshake_time_out = 0;
7904 //std::string access_log_file_name = "test";
7905 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
7907 down_thread_all_socket_close_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
7911 l7vs::tcp_socket& client_socket = test_obj.get_client_socket();
7912 client_socket.close_call_check = false;
7913 l7vs::tcp_socket& sorry_socket = *(test_obj.get_sorry_socket());
7914 sorry_socket.close_call_check = false;
7915 std::list< std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > >& down_thread_receive_realserver_socket_list = test_obj.get_down_thread_receive_realserver_socket_list();
7916 std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > pair_socket;
7917 std::list< std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > > rs_socket_list;
7918 std::list< std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > >::iterator rs_list_it;
7919 pair_socket.first.address(boost::asio::ip::address::from_string(DUMMY_SERVER_IP));
7920 vs.connection_inactive_list.clear();
7921 std::list<boost::asio::ip::tcp::endpoint>::iterator inact_list_it;
7923 for(int i = 0; i < 1024;i++){
7924 pair_socket.first.port(i);
7925 boost::shared_ptr< l7vs::tcp_socket > new_socket(new l7vs::tcp_socket(io));
7926 pair_socket.second = new_socket;
7927 new_socket->close_call_check = false;
7928 new_socket->close_res = true;
7929 rs_socket_list.push_back(pair_socket);
7930 down_thread_receive_realserver_socket_list.push_back(pair_socket);
7932 BOOST_CHECK(!down_thread_receive_realserver_socket_list.empty());
7933 BOOST_CHECK(!rs_socket_list.empty());
7935 test_obj.test_call();
7937 // unit_test [1] down_thread_all_socket_close realserver socket close call check
7938 std::cerr << "[1] down_thread_all_socket_close realserver socket close call check" << std::endl;
7939 rs_list_it = rs_socket_list.begin();
7940 for(int i = 0; i < 1024;i++){
7941 BOOST_CHECK(rs_list_it->second->close_call_check);
7945 // unit_test [2] down_thread_all_socket_close parent virtual service connection incactive call check
7946 std::cerr << "[2] down_thread_all_socket_close parent virtual service connection incactive call check" << std::endl;
7947 rs_list_it = rs_socket_list.begin();
7948 for(int i = 0; i < 1024;i++){
7949 inact_list_it = vs.connection_inactive_list.begin();
7950 while(inact_list_it != vs.connection_inactive_list.end()){
7951 if(*inact_list_it == rs_list_it->first)
7955 BOOST_CHECK(inact_list_it != vs.connection_inactive_list.end());
7956 vs.connection_inactive_list.erase(inact_list_it);
7959 BOOST_CHECK(vs.connection_inactive_list.empty());
7961 // unit_test [3] down_thread_all_socket_close realserver receive socket list clear check
7962 std::cerr << "[3] down_thread_all_socket_close realserver receive socket list clear check" << std::endl;
7963 BOOST_CHECK(down_thread_receive_realserver_socket_list.empty());
7965 // unit_test [4] up_thread_all_socket_close client socket close call check
7966 std::cerr << "[4] up_thread_all_socket_close client socket close call check" << std::endl;
7967 BOOST_CHECK(client_socket.close_call_check);
7969 // unit_test [5] up_thread_all_socket_close sorry socket close call check
7970 std::cerr << "[5] up_thread_all_socket_close sorry socket close call check" << std::endl;
7971 BOOST_CHECK(sorry_socket.close_call_check);
7973 rs_list_it = rs_socket_list.begin();
7974 for(int i = 0; i < 1024;i++){
7975 rs_list_it->second->close_res = false;
7976 down_thread_receive_realserver_socket_list.push_back(*rs_list_it);
7980 test_obj.test_call();
7982 // unit_test [6] down_thread_all_socket_close closed socket parent virtual service connection incactive not call check
7983 std::cerr << "[6] down_thread_all_socket_close closed socket parent virtual service connection incactive not call check" << std::endl;
7984 BOOST_CHECK(vs.connection_inactive_list.empty());
7987 down_thread_all_socket_close_test_class ssl_test_obj(vs,io,set_option,listen_endpoint,true,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
7988 l7vs::tcp_ssl_socket& client_ssl_socket = ssl_test_obj.get_client_ssl_socket();
7989 client_ssl_socket.close_call_check = false;
7991 ssl_test_obj.test_call();
7993 // unit_test [7] up_thread_all_socket_close client ssl socket close call check
7994 std::cerr << "[7] up_thread_all_socket_close client ssl socket close call check" << std::endl;
7995 BOOST_CHECK(client_ssl_socket.close_call_check);
7997 BOOST_MESSAGE( "----- down_thread_all_socket_close test end -----" );
8000 // up_thread_client_disconnect test
8001 // up_thread_client_disconnect test class
8002 class up_thread_client_disconnect : public l7vs::tcp_session{
8004 // up_thread_client_disconnect(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){
8006 up_thread_client_disconnect(
8007 l7vs::virtualservice_tcp& vs,
8008 boost::asio::io_service& session_io,
8009 l7vs::tcp_socket_option_info& set_socket_option,
8010 boost::asio::ip::tcp::endpoint listen_endpoint,
8012 boost::asio::ssl::context& set_ssl_context,
8013 bool set_ssl_cache_flag,
8014 int set_ssl_handshake_time_out,
8015 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
8022 set_ssl_handshake_time_out,
8023 set_access_logger){};
8025 ~up_thread_client_disconnect(){};
8028 l7vs::tcp_session::up_thread_client_disconnect(LOCAL_PROC);
8031 l7vs::lockfree_queue<l7vs::tcp_thread_message>& get_up_thread_message_que(){
8032 return up_thread_message_que;
8035 l7vs::lockfree_queue<l7vs::tcp_thread_message>& get_down_thread_message_que(){
8036 return down_thread_message_que;
8039 void up_thread_function_array_clear(){
8040 for(int i = 0;i <= UP_FUNC_EXIT;i++){
8041 up_thread_function_array[i].second = NULL;
8044 void up_thread_message_down_thread_function_map_clear(){
8045 up_thread_message_down_thread_function_map.clear();
8048 void up_thread_client_disconnect_event(const TCP_PROCESS_TYPE_TAG process_type){
8049 up_thread_client_disconnect_event_call_chek = true;
8051 bool up_thread_client_disconnect_event_call_chek;
8053 void down_thread_client_disconnect_event(const TCP_PROCESS_TYPE_TAG process_type){
8054 down_thread_client_disconnect_event_call_chek = true;
8056 bool down_thread_client_disconnect_event_call_chek;
8058 void up_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
8059 up_thread_exit_call_chek = true;
8061 bool up_thread_exit_call_chek;
8063 l7vs::tcp_socket& get_client_socket(){
8064 return client_socket;
8066 l7vs::tcp_ssl_socket& get_client_ssl_socket(){
8067 return client_ssl_socket;
8071 void up_thread_client_disconnect_test(){
8072 BOOST_MESSAGE( "----- up_thread_client_disconnect test start -----" );
8073 // boost::asio::io_service io;
8074 // l7vs::virtualservice_tcp vs;
8075 // up_thread_client_disconnect test_obj(vs,io);
8076 l7vs::virtualservice_tcp vs;
8077 boost::asio::io_service io;
8078 l7vs::tcp_socket_option_info set_option;
8079 //! TCP_NODELAY (false:not set,true:set option)
8080 set_option.nodelay_opt = false;
8081 //! TCP_NODELAY option value (false:off,true:on)
8082 set_option.nodelay_val = false;
8083 //! TCP_CORK (false:not set,true:set option)
8084 set_option.cork_opt = false;
8085 //! TCP_CORK option value (false:off,true:on)
8086 set_option.cork_val = false;
8087 //! TCP_QUICKACK (false:not set,true:set option)
8088 set_option.quickack_opt = false;
8089 //! TCP_QUICKACK option value (false:off,true:on)
8090 set_option.quickack_val = false;
8092 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
8093 bool set_mode(false);
8094 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
8095 bool set_ssl_cache_flag(false);
8096 int set_ssl_handshake_time_out = 0;
8097 //std::string access_log_file_name = "test";
8098 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
8100 up_thread_client_disconnect test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
8103 l7vs::lockfree_queue<l7vs::tcp_thread_message>& up_thread_message_que = test_obj.get_up_thread_message_que();
8104 l7vs::lockfree_queue<l7vs::tcp_thread_message>& down_thread_message_que = test_obj.get_down_thread_message_que();
8106 BOOST_CHECK(up_thread_message_que.empty());
8107 BOOST_CHECK(down_thread_message_que.empty());
8108 l7vs::tcp_socket& client_socket = test_obj.get_client_socket();
8109 client_socket.close_res = true;
8110 client_socket.close_call_check = false;
8112 test_obj.test_call();
8114 // unit_test [1] up_thread_client_disconnect client socket close call check
8115 std::cerr << "[1] up_thread_client_disconnect client socket close call check" << std::endl;
8116 BOOST_CHECK(client_socket.close_call_check);
8118 // unit_test [2] up_thread_client_disconnect up thread message set check
8119 std::cerr << "[2] up_thread_client_disconnect up thread message set check" << std::endl;
8120 BOOST_CHECK(!up_thread_message_que.empty());
8121 l7vs::tcp_thread_message* up_msg = up_thread_message_que.pop();
8122 BOOST_CHECK(up_thread_message_que.empty());
8123 test_obj.up_thread_client_disconnect_event_call_chek = false;
8124 up_msg->message(l7vs::tcp_session::MESSAGE_PROC);
8125 BOOST_CHECK(test_obj.up_thread_client_disconnect_event_call_chek);
8128 // unit_test [3] up_thread_client_disconnect down thread message set check
8129 std::cerr << "[3] up_thread_client_disconnect down thread message set check" << std::endl;
8130 BOOST_CHECK(!down_thread_message_que.empty());
8131 l7vs::tcp_thread_message* down_msg = down_thread_message_que.pop();
8132 BOOST_CHECK(down_thread_message_que.empty());
8133 test_obj.down_thread_client_disconnect_event_call_chek = false;
8134 down_msg->message(l7vs::tcp_session::MESSAGE_PROC);
8135 BOOST_CHECK(test_obj.down_thread_client_disconnect_event_call_chek);
8138 // unit_test [4] up_thread_client_disconnect closed client socket not set message check
8139 std::cerr << "[4] up_thread_client_disconnect closed client socket not set message check" << std::endl;
8140 client_socket.close_res = false;
8141 test_obj.test_call();
8142 BOOST_CHECK(up_thread_message_que.empty());
8143 BOOST_CHECK(down_thread_message_que.empty());
8145 client_socket.close_res = true;
8147 // unit_test [5] up_thread_client_disconnect not fond down_thread_client_disconnect_event function error check
8148 std::cerr << "[5] up_thread_client_disconnect not fond down_thread_client_disconnect_event function error check" << std::endl;
8149 test_obj.up_thread_message_down_thread_function_map_clear();
8150 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
8151 l7vs::Logger::putLogError_id = 0;
8152 test_obj.up_thread_exit_call_chek = false;
8153 test_obj.test_call();
8154 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
8155 BOOST_CHECK_EQUAL(27,l7vs::Logger::putLogError_id);
8156 std::cerr << l7vs::Logger::putLogError_message << std::endl;
8157 BOOST_CHECK(test_obj.up_thread_exit_call_chek);
8159 // unit_test [6] up_thread_client_disconnect not fond up_thread_client_disconnect_event function error check
8160 std::cerr << "[6] up_thread_client_disconnect not fond up_thread_client_disconnect_event function error check" << std::endl;
8161 test_obj.up_thread_function_array_clear();
8162 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
8163 l7vs::Logger::putLogError_id = 0;
8164 test_obj.up_thread_exit_call_chek = false;
8165 test_obj.test_call();
8166 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
8167 BOOST_CHECK_EQUAL(26,l7vs::Logger::putLogError_id);
8168 std::cerr << l7vs::Logger::putLogError_message << std::endl;
8169 BOOST_CHECK(test_obj.up_thread_exit_call_chek);
8171 // ----SSL Mode Test
8172 up_thread_client_disconnect ssl_test_obj(vs,io,set_option,listen_endpoint,true,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
8174 l7vs::tcp_ssl_socket& client_ssl_socket = ssl_test_obj.get_client_ssl_socket();
8175 client_ssl_socket.close_res = true;
8176 client_ssl_socket.close_call_check = false;
8178 ssl_test_obj.test_call();
8180 // unit_test [7] up_thread_client_disconnect client ssl socket close call check
8181 std::cerr << "[7] up_thread_client_disconnect client ssl socket close call check" << std::endl;
8182 BOOST_CHECK(client_ssl_socket.close_call_check);
8185 BOOST_MESSAGE( "----- up_thread_client_disconnect test end -----" );
8190 // down_thread_client_disconnect test
8191 // down_thread_client_disconnect test class
8192 class down_thread_client_disconnect_test_class : public l7vs::tcp_session{
8194 // down_thread_client_disconnect_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){
8196 down_thread_client_disconnect_test_class(
8197 l7vs::virtualservice_tcp& vs,
8198 boost::asio::io_service& session_io,
8199 l7vs::tcp_socket_option_info& set_socket_option,
8200 boost::asio::ip::tcp::endpoint listen_endpoint,
8202 boost::asio::ssl::context& set_ssl_context,
8203 bool set_ssl_cache_flag,
8204 int set_ssl_handshake_time_out,
8205 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
8212 set_ssl_handshake_time_out,
8213 set_access_logger){};
8215 ~down_thread_client_disconnect_test_class(){};
8218 l7vs::tcp_session::down_thread_client_disconnect(LOCAL_PROC);
8221 l7vs::lockfree_queue<l7vs::tcp_thread_message>& get_up_thread_message_que(){
8222 return up_thread_message_que;
8225 l7vs::lockfree_queue<l7vs::tcp_thread_message>& get_down_thread_message_que(){
8226 return down_thread_message_que;
8229 void down_thread_function_array_clear(){
8230 for(int i = 0; i <= DOWN_FUNC_EXIT; i++){
8231 down_thread_function_array[i].second = NULL;
8234 void down_thread_message_up_thread_function_map_clear(){
8235 down_thread_message_up_thread_function_map.clear();
8238 void up_thread_client_disconnect_event(const TCP_PROCESS_TYPE_TAG process_type){
8239 up_thread_client_disconnect_event_call_chek = true;
8241 bool up_thread_client_disconnect_event_call_chek;
8243 void down_thread_client_disconnect_event(const TCP_PROCESS_TYPE_TAG process_type){
8244 down_thread_client_disconnect_event_call_chek = true;
8246 bool down_thread_client_disconnect_event_call_chek;
8248 void down_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
8249 down_thread_exit_call_chek = true;
8251 bool down_thread_exit_call_chek;
8253 l7vs::tcp_socket& get_client_socket(){
8254 return client_socket;
8256 l7vs::tcp_ssl_socket& get_client_ssl_socket(){
8257 return client_ssl_socket;
8260 void down_thread_client_disconnect_test(){
8261 BOOST_MESSAGE( "----- down_thread_client_disconnect test start -----" );
8262 // boost::asio::io_service io;
8263 // l7vs::virtualservice_tcp vs;
8264 // down_thread_client_disconnect_test_class test_obj(vs,io);
8265 l7vs::virtualservice_tcp vs;
8266 boost::asio::io_service io;
8267 l7vs::tcp_socket_option_info set_option;
8268 //! TCP_NODELAY (false:not set,true:set option)
8269 set_option.nodelay_opt = false;
8270 //! TCP_NODELAY option value (false:off,true:on)
8271 set_option.nodelay_val = false;
8272 //! TCP_CORK (false:not set,true:set option)
8273 set_option.cork_opt = false;
8274 //! TCP_CORK option value (false:off,true:on)
8275 set_option.cork_val = false;
8276 //! TCP_QUICKACK (false:not set,true:set option)
8277 set_option.quickack_opt = false;
8278 //! TCP_QUICKACK option value (false:off,true:on)
8279 set_option.quickack_val = false;
8281 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
8282 bool set_mode(false);
8283 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
8284 bool set_ssl_cache_flag(false);
8285 int set_ssl_handshake_time_out = 0;
8286 //std::string access_log_file_name = "test";
8287 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
8289 down_thread_client_disconnect_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
8291 l7vs::lockfree_queue<l7vs::tcp_thread_message>& up_thread_message_que = test_obj.get_up_thread_message_que();
8292 l7vs::lockfree_queue<l7vs::tcp_thread_message>& down_thread_message_que = test_obj.get_down_thread_message_que();
8294 BOOST_CHECK(up_thread_message_que.empty());
8295 BOOST_CHECK(down_thread_message_que.empty());
8296 l7vs::tcp_socket& client_socket = test_obj.get_client_socket();
8297 client_socket.close_res = true;
8298 client_socket.close_call_check = false;
8300 test_obj.test_call();
8302 // unit_test [1] down_thread_client_disconnect client socket close call check
8303 std::cerr << "[1] down_thread_client_disconnect client socket close call check" << std::endl;
8304 BOOST_CHECK(client_socket.close_call_check);
8306 // unit_test [2] down_thread_client_disconnect up thread message set check
8307 std::cerr << "[2] down_thread_client_disconnect up thread message set check" << std::endl;
8308 BOOST_CHECK(!up_thread_message_que.empty());
8309 l7vs::tcp_thread_message* up_msg = up_thread_message_que.pop();
8310 BOOST_CHECK(up_thread_message_que.empty());
8311 test_obj.up_thread_client_disconnect_event_call_chek = false;
8312 up_msg->message(l7vs::tcp_session::MESSAGE_PROC);
8313 BOOST_CHECK(test_obj.up_thread_client_disconnect_event_call_chek);
8316 // unit_test [3] down_thread_client_disconnect down thread message set check
8317 std::cerr << "[3] down_thread_client_disconnect down thread message set check" << std::endl;
8318 BOOST_CHECK(!down_thread_message_que.empty());
8319 l7vs::tcp_thread_message* down_msg = down_thread_message_que.pop();
8320 BOOST_CHECK(down_thread_message_que.empty());
8321 test_obj.down_thread_client_disconnect_event_call_chek = false;
8322 down_msg->message(l7vs::tcp_session::MESSAGE_PROC);
8323 BOOST_CHECK(test_obj.down_thread_client_disconnect_event_call_chek);
8326 // unit_test [4] down_thread_client_disconnect closed client socket not set message check
8327 std::cerr << "[4] down_thread_client_disconnect closed client socket not set message check" << std::endl;
8328 client_socket.close_res = false;
8329 test_obj.test_call();
8330 BOOST_CHECK(up_thread_message_que.empty());
8331 BOOST_CHECK(down_thread_message_que.empty());
8333 client_socket.close_res = true;
8335 // unit_test [5] down_thread_client_disconnect not fond up_thread_client_disconnect_event function error check
8336 std::cerr << "[5] down_thread_client_disconnect not fond up_thread_client_disconnect_event function error check" << std::endl;
8337 test_obj.down_thread_message_up_thread_function_map_clear();
8338 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
8339 l7vs::Logger::putLogError_id = 0;
8340 test_obj.down_thread_exit_call_chek = false;
8341 test_obj.test_call();
8342 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
8343 BOOST_CHECK_EQUAL(85,l7vs::Logger::putLogError_id);
8344 std::cerr << l7vs::Logger::putLogError_message << std::endl;
8345 BOOST_CHECK(test_obj.down_thread_exit_call_chek);
8347 // unit_test [6] down_thread_client_disconnect not fond down_thread_client_disconnect_event function error check
8348 std::cerr << "[6] down_thread_client_disconnect not fond down_thread_client_disconnect_event function error check" << std::endl;
8349 test_obj.down_thread_function_array_clear();
8350 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
8351 l7vs::Logger::putLogError_id = 0;
8352 test_obj.down_thread_exit_call_chek = false;
8353 test_obj.test_call();
8354 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
8355 BOOST_CHECK_EQUAL(84,l7vs::Logger::putLogError_id);
8356 std::cerr << l7vs::Logger::putLogError_message << std::endl;
8357 BOOST_CHECK(test_obj.down_thread_exit_call_chek);
8360 // ----SSL Mode Test
8361 down_thread_client_disconnect_test_class ssl_test_obj(vs,io,set_option,listen_endpoint,true,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
8363 l7vs::tcp_ssl_socket& client_ssl_socket = ssl_test_obj.get_client_ssl_socket();
8364 client_ssl_socket.close_res = true;
8365 client_ssl_socket.close_call_check = false;
8367 ssl_test_obj.test_call();
8369 // unit_test [7] down_thread_client_disconnect client ssl socket close call check
8370 std::cerr << "[7] down_thread_client_disconnect client ssl socket close call check" << std::endl;
8371 BOOST_CHECK(client_ssl_socket.close_call_check);
8374 BOOST_MESSAGE( "----- down_thread_client_disconnect test end -----" );
8378 // up_thread_sorryserver_disconnect test
8379 // up_thread_sorryserver_disconnect test class
8380 class up_thread_sorryserver_disconnect_test_class : public l7vs::tcp_session{
8382 // up_thread_sorryserver_disconnect_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){
8384 up_thread_sorryserver_disconnect_test_class(
8385 l7vs::virtualservice_tcp& vs,
8386 boost::asio::io_service& session_io,
8387 l7vs::tcp_socket_option_info& set_socket_option,
8388 boost::asio::ip::tcp::endpoint listen_endpoint,
8390 boost::asio::ssl::context& set_ssl_context,
8391 bool set_ssl_cache_flag,
8392 int set_ssl_handshake_time_out,
8393 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
8400 set_ssl_handshake_time_out,
8401 set_access_logger){};
8403 ~up_thread_sorryserver_disconnect_test_class(){};
8406 l7vs::tcp_session::up_thread_sorryserver_disconnect(LOCAL_PROC);
8409 l7vs::lockfree_queue<l7vs::tcp_thread_message>& get_up_thread_message_que(){
8410 return up_thread_message_que;
8413 l7vs::lockfree_queue<l7vs::tcp_thread_message>& get_down_thread_message_que(){
8414 return down_thread_message_que;
8417 void up_thread_function_array_clear(){
8418 for(int i = 0;i <= UP_FUNC_EXIT;i++){
8419 up_thread_function_array[i].second = NULL;
8422 void up_thread_message_down_thread_function_map_clear(){
8423 up_thread_message_down_thread_function_map.clear();
8426 void up_thread_sorryserver_disconnect_event(const TCP_PROCESS_TYPE_TAG process_type){
8427 up_thread_sorryserver_disconnect_event_call_chek = true;
8429 bool up_thread_sorryserver_disconnect_event_call_chek;
8431 void down_thread_sorryserver_disconnect_event(const TCP_PROCESS_TYPE_TAG process_type){
8432 down_thread_sorryserver_disconnect_event_call_chek = true;
8434 bool down_thread_sorryserver_disconnect_event_call_chek;
8436 void up_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
8437 up_thread_exit_call_chek = true;
8439 bool up_thread_exit_call_chek;
8441 boost::shared_ptr< l7vs::tcp_socket > get_sorry_socket(){
8442 return sorryserver_socket.second;
8444 void set_sorry_endpoint(endpoint set_end){
8445 sorryserver_socket.first = set_end;
8448 void up_thread_sorryserver_disconnect_test(){
8449 BOOST_MESSAGE( "----- up_thread_sorryserver_disconnect test start -----" );
8450 // boost::asio::io_service io;
8451 // l7vs::virtualservice_tcp vs;
8452 // up_thread_sorryserver_disconnect_test_class test_obj(vs,io);
8453 l7vs::virtualservice_tcp vs;
8454 boost::asio::io_service io;
8455 l7vs::tcp_socket_option_info set_option;
8456 //! TCP_NODELAY (false:not set,true:set option)
8457 set_option.nodelay_opt = false;
8458 //! TCP_NODELAY option value (false:off,true:on)
8459 set_option.nodelay_val = false;
8460 //! TCP_CORK (false:not set,true:set option)
8461 set_option.cork_opt = false;
8462 //! TCP_CORK option value (false:off,true:on)
8463 set_option.cork_val = false;
8464 //! TCP_QUICKACK (false:not set,true:set option)
8465 set_option.quickack_opt = false;
8466 //! TCP_QUICKACK option value (false:off,true:on)
8467 set_option.quickack_val = false;
8469 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
8470 bool set_mode(false);
8471 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
8472 bool set_ssl_cache_flag(false);
8473 int set_ssl_handshake_time_out = 0;
8474 //std::string access_log_file_name = "test";
8475 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
8477 up_thread_sorryserver_disconnect_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
8481 l7vs::lockfree_queue<l7vs::tcp_thread_message>& up_thread_message_que = test_obj.get_up_thread_message_que();
8482 l7vs::lockfree_queue<l7vs::tcp_thread_message>& down_thread_message_que = test_obj.get_down_thread_message_que();
8484 BOOST_CHECK(up_thread_message_que.empty());
8485 BOOST_CHECK(down_thread_message_que.empty());
8486 l7vs::tcp_socket& sorry_socket = *(test_obj.get_sorry_socket());
8487 sorry_socket.close_res = true;
8488 sorry_socket.close_call_check = false;
8489 boost::asio::ip::tcp::endpoint sorry_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
8490 test_obj.set_sorry_endpoint(sorry_end);
8492 test_obj.test_call();
8494 // unit_test [1] up_thread_sorryserver_disconnect client socket close call check
8495 std::cerr << "[1] up_thread_sorryserver_disconnect client socket close call check" << std::endl;
8496 BOOST_CHECK(sorry_socket.close_call_check);
8498 // unit_test [2] up_thread_sorryserver_disconnect up thread message set check
8499 std::cerr << "[2] up_thread_sorryserver_disconnect up thread message set check" << std::endl;
8500 BOOST_CHECK(!up_thread_message_que.empty());
8501 l7vs::tcp_thread_message* up_msg = up_thread_message_que.pop();
8502 BOOST_CHECK(up_thread_message_que.empty());
8503 BOOST_CHECK(up_msg->endpoint_info == sorry_end);
8504 test_obj.up_thread_sorryserver_disconnect_event_call_chek = false;
8505 up_msg->message(l7vs::tcp_session::MESSAGE_PROC);
8506 BOOST_CHECK(test_obj.up_thread_sorryserver_disconnect_event_call_chek);
8509 // unit_test [3] up_thread_sorryserver_disconnect down thread message set check
8510 std::cerr << "[3] up_thread_sorryserver_disconnect down thread message set check" << std::endl;
8511 BOOST_CHECK(!down_thread_message_que.empty());
8512 l7vs::tcp_thread_message* down_msg = down_thread_message_que.pop();
8513 BOOST_CHECK(down_thread_message_que.empty());
8514 BOOST_CHECK(down_msg->endpoint_info == sorry_end);
8515 test_obj.down_thread_sorryserver_disconnect_event_call_chek = false;
8516 down_msg->message(l7vs::tcp_session::MESSAGE_PROC);
8517 BOOST_CHECK(test_obj.down_thread_sorryserver_disconnect_event_call_chek);
8520 // unit_test [4] up_thread_sorryserver_disconnect closed client socket not set message check
8521 std::cerr << "[4] up_thread_sorryserver_disconnect closed client socket not set message check" << std::endl;
8522 sorry_socket.close_res = false;
8523 test_obj.test_call();
8524 BOOST_CHECK(up_thread_message_que.empty());
8525 BOOST_CHECK(down_thread_message_que.empty());
8527 sorry_socket.close_res = true;
8530 // unit_test [5] up_thread_sorryserver_disconnect not fond down_thread_sorryserver_disconnect_event function error check
8531 std::cerr << "[5] up_thread_sorryserver_disconnect not fond down_thread_sorryserver_disconnect_event function error check" << std::endl;
8532 test_obj.up_thread_message_down_thread_function_map_clear();
8533 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
8534 l7vs::Logger::putLogError_id = 0;
8535 test_obj.up_thread_exit_call_chek = false;
8536 test_obj.test_call();
8537 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
8538 BOOST_CHECK_EQUAL(61,l7vs::Logger::putLogError_id);
8539 std::cerr << l7vs::Logger::putLogError_message << std::endl;
8540 BOOST_CHECK(test_obj.up_thread_exit_call_chek);
8542 // unit_test [6] up_thread_sorryserver_disconnect not fond up_thread_sorryserver_disconnect_event function error check
8543 std::cerr << "[6] up_thread_sorryserver_disconnect not fond up_thread_sorryserver_disconnect_event function error check" << std::endl;
8544 test_obj.up_thread_function_array_clear();
8545 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
8546 l7vs::Logger::putLogError_id = 0;
8547 test_obj.up_thread_exit_call_chek = false;
8548 test_obj.test_call();
8549 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
8550 BOOST_CHECK_EQUAL(60,l7vs::Logger::putLogError_id);
8551 std::cerr << l7vs::Logger::putLogError_message << std::endl;
8552 BOOST_CHECK(test_obj.up_thread_exit_call_chek);
8555 BOOST_MESSAGE( "----- up_thread_sorryserver_disconnect test end -----" );
8559 // down_thread_sorryserver_disconnect test
8560 // down_thread_sorryserver_disconnect test class
8561 class down_thread_sorryserver_disconnect_test_class : public l7vs::tcp_session{
8563 // down_thread_sorryserver_disconnect_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){
8565 down_thread_sorryserver_disconnect_test_class(
8566 l7vs::virtualservice_tcp& vs,
8567 boost::asio::io_service& session_io,
8568 l7vs::tcp_socket_option_info& set_socket_option,
8569 boost::asio::ip::tcp::endpoint listen_endpoint,
8571 boost::asio::ssl::context& set_ssl_context,
8572 bool set_ssl_cache_flag,
8573 int set_ssl_handshake_time_out,
8574 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
8581 set_ssl_handshake_time_out,
8582 set_access_logger){};
8584 ~down_thread_sorryserver_disconnect_test_class(){};
8587 l7vs::tcp_session::down_thread_sorryserver_disconnect(LOCAL_PROC);
8590 l7vs::lockfree_queue<l7vs::tcp_thread_message>& get_up_thread_message_que(){
8591 return up_thread_message_que;
8594 l7vs::lockfree_queue<l7vs::tcp_thread_message>& get_down_thread_message_que(){
8595 return down_thread_message_que;
8598 void down_thread_function_array_clear(){
8599 for(int i = 0; i <= DOWN_FUNC_EXIT;i++){
8600 down_thread_function_array[i].second = NULL;
8603 void down_thread_message_up_thread_function_map_clear(){
8604 down_thread_message_up_thread_function_map.clear();
8607 void up_thread_sorryserver_disconnect_event(const TCP_PROCESS_TYPE_TAG process_type){
8608 up_thread_sorryserver_disconnect_event_call_chek = true;
8610 bool up_thread_sorryserver_disconnect_event_call_chek;
8612 void down_thread_sorryserver_disconnect_event(const TCP_PROCESS_TYPE_TAG process_type){
8613 down_thread_sorryserver_disconnect_event_call_chek = true;
8615 bool down_thread_sorryserver_disconnect_event_call_chek;
8617 void down_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
8618 down_thread_exit_call_chek = true;
8620 bool down_thread_exit_call_chek;
8622 boost::shared_ptr< l7vs::tcp_socket > get_sorry_socket(){
8623 return sorryserver_socket.second;
8625 void set_sorry_endpoint(endpoint set_end){
8626 sorryserver_socket.first = set_end;
8629 void down_thread_sorryserver_disconnect_test(){
8630 BOOST_MESSAGE( "----- down_thread_sorryserver_disconnect test start -----" );
8631 // boost::asio::io_service io;
8632 // l7vs::virtualservice_tcp vs;
8633 // down_thread_sorryserver_disconnect_test_class test_obj(vs,io);
8634 l7vs::virtualservice_tcp vs;
8635 boost::asio::io_service io;
8636 l7vs::tcp_socket_option_info set_option;
8637 //! TCP_NODELAY (false:not set,true:set option)
8638 set_option.nodelay_opt = false;
8639 //! TCP_NODELAY option value (false:off,true:on)
8640 set_option.nodelay_val = false;
8641 //! TCP_CORK (false:not set,true:set option)
8642 set_option.cork_opt = false;
8643 //! TCP_CORK option value (false:off,true:on)
8644 set_option.cork_val = false;
8645 //! TCP_QUICKACK (false:not set,true:set option)
8646 set_option.quickack_opt = false;
8647 //! TCP_QUICKACK option value (false:off,true:on)
8648 set_option.quickack_val = false;
8650 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
8651 bool set_mode(false);
8652 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
8653 bool set_ssl_cache_flag(false);
8654 int set_ssl_handshake_time_out = 0;
8655 //std::string access_log_file_name = "test";
8656 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
8658 down_thread_sorryserver_disconnect_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
8660 l7vs::lockfree_queue<l7vs::tcp_thread_message>& up_thread_message_que = test_obj.get_up_thread_message_que();
8661 l7vs::lockfree_queue<l7vs::tcp_thread_message>& down_thread_message_que = test_obj.get_down_thread_message_que();
8663 BOOST_CHECK(up_thread_message_que.empty());
8664 BOOST_CHECK(down_thread_message_que.empty());
8665 l7vs::tcp_socket& sorry_socket = *(test_obj.get_sorry_socket());
8666 sorry_socket.close_res = true;
8667 sorry_socket.close_call_check = false;
8668 boost::asio::ip::tcp::endpoint sorry_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
8669 test_obj.set_sorry_endpoint(sorry_end);
8671 test_obj.test_call();
8673 // unit_test [1] down_thread_sorryserver_disconnect client socket close call check
8674 std::cerr << "[1] down_thread_sorryserver_disconnect client socket close call check" << std::endl;
8675 BOOST_CHECK(sorry_socket.close_call_check);
8677 // unit_test [2] down_thread_sorryserver_disconnect up thread message set check
8678 std::cerr << "[2] down_thread_sorryserver_disconnect up thread message set check" << std::endl;
8679 BOOST_CHECK(!up_thread_message_que.empty());
8680 l7vs::tcp_thread_message* up_msg = up_thread_message_que.pop();
8681 BOOST_CHECK(up_thread_message_que.empty());
8682 BOOST_CHECK(up_msg->endpoint_info == sorry_end);
8683 test_obj.up_thread_sorryserver_disconnect_event_call_chek = false;
8684 up_msg->message(l7vs::tcp_session::MESSAGE_PROC);
8685 BOOST_CHECK(test_obj.up_thread_sorryserver_disconnect_event_call_chek);
8688 // unit_test [3] down_thread_sorryserver_disconnect down thread message set check
8689 std::cerr << "[3] down_thread_sorryserver_disconnect down thread message set check" << std::endl;
8690 BOOST_CHECK(!down_thread_message_que.empty());
8691 l7vs::tcp_thread_message* down_msg = down_thread_message_que.pop();
8692 BOOST_CHECK(down_thread_message_que.empty());
8693 BOOST_CHECK(down_msg->endpoint_info == sorry_end);
8694 test_obj.down_thread_sorryserver_disconnect_event_call_chek = false;
8695 down_msg->message(l7vs::tcp_session::MESSAGE_PROC);
8696 BOOST_CHECK(test_obj.down_thread_sorryserver_disconnect_event_call_chek);
8699 // unit_test [4] down_thread_sorryserver_disconnect closed client socket not set message check
8700 std::cerr << "[4] down_thread_sorryserver_disconnect closed client socket not set message check" << std::endl;
8701 sorry_socket.close_res = false;
8702 test_obj.test_call();
8703 BOOST_CHECK(up_thread_message_que.empty());
8704 BOOST_CHECK(down_thread_message_que.empty());
8706 sorry_socket.close_res = true;
8709 // unit_test [5] down_thread_sorryserver_disconnect not fond up_thread_sorryserver_disconnect_event function error check
8710 std::cerr << "[5] down_thread_sorryserver_disconnect not fond up_thread_sorryserver_disconnect_event function error check" << std::endl;
8711 test_obj.down_thread_message_up_thread_function_map_clear();
8712 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
8713 l7vs::Logger::putLogError_id = 0;
8714 test_obj.down_thread_exit_call_chek = false;
8715 test_obj.test_call();
8716 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
8717 BOOST_CHECK_EQUAL(91,l7vs::Logger::putLogError_id);
8718 std::cerr << l7vs::Logger::putLogError_message << std::endl;
8719 BOOST_CHECK(test_obj.down_thread_exit_call_chek);
8721 // unit_test [6] down_thread_sorryserver_disconnect not fond down_thread_sorryserver_disconnect_event function error check
8722 std::cerr << "[6] down_thread_sorryserver_disconnect not fond down_thread_sorryserver_disconnect_event function error check" << std::endl;
8723 test_obj.down_thread_function_array_clear();
8724 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
8725 l7vs::Logger::putLogError_id = 0;
8726 test_obj.down_thread_exit_call_chek = false;
8727 test_obj.test_call();
8728 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
8729 BOOST_CHECK_EQUAL(90,l7vs::Logger::putLogError_id);
8730 std::cerr << l7vs::Logger::putLogError_message << std::endl;
8731 BOOST_CHECK(test_obj.down_thread_exit_call_chek);
8734 BOOST_MESSAGE( "----- down_thread_sorryserver_disconnect test end -----" );
8737 // up_thread_realserver_connect_event test
8738 // up_thread_realserver_connect_event test class
8739 class up_thread_realserver_connect_event_test_class : public module_event_map_test_base_class{
8741 // up_thread_realserver_connect_event_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : module_event_map_test_base_class(vs,session_io){
8743 up_thread_realserver_connect_event_test_class(
8744 l7vs::virtualservice_tcp& vs,
8745 boost::asio::io_service& session_io,
8746 l7vs::tcp_socket_option_info& set_socket_option,
8747 boost::asio::ip::tcp::endpoint listen_endpoint,
8749 boost::asio::ssl::context& set_ssl_context,
8750 bool set_ssl_cache_flag,
8751 int set_ssl_handshake_time_out,
8752 l7vs::logger_implement_access* set_access_logger) : module_event_map_test_base_class( vs,
8759 set_ssl_handshake_time_out,
8760 set_access_logger){};
8762 ~up_thread_realserver_connect_event_test_class(){};
8765 l7vs::tcp_session::up_thread_realserver_connect_event(LOCAL_PROC);
8769 void up_thread_realserver_connect_event_test(){
8770 BOOST_MESSAGE( "----- up_thread_realserver_connect_event test start -----" );
8771 // boost::asio::io_service io;
8772 // l7vs::virtualservice_tcp vs;
8773 // up_thread_realserver_connect_event_test_class test_obj(vs,io);
8774 l7vs::virtualservice_tcp vs;
8775 boost::asio::io_service io;
8776 l7vs::tcp_socket_option_info set_option;
8777 //! TCP_NODELAY (false:not set,true:set option)
8778 set_option.nodelay_opt = false;
8779 //! TCP_NODELAY option value (false:off,true:on)
8780 set_option.nodelay_val = false;
8781 //! TCP_CORK (false:not set,true:set option)
8782 set_option.cork_opt = false;
8783 //! TCP_CORK option value (false:off,true:on)
8784 set_option.cork_val = false;
8785 //! TCP_QUICKACK (false:not set,true:set option)
8786 set_option.quickack_opt = false;
8787 //! TCP_QUICKACK option value (false:off,true:on)
8788 set_option.quickack_val = false;
8790 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
8791 bool set_mode(false);
8792 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
8793 bool set_ssl_cache_flag(false);
8794 int set_ssl_handshake_time_out = 0;
8795 //std::string access_log_file_name = "test";
8796 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
8798 up_thread_realserver_connect_event_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
8801 std::string test_protocol_name("test protocol");
8802 l7vs::test_protocol_module proto_test(test_protocol_name);
8804 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
8806 l7vs::protocol_module_base::EVENT_TAG chek_event[13];
8807 chek_event[0] = l7vs::protocol_module_base::ACCEPT;
8808 chek_event[1] = l7vs::protocol_module_base::CLIENT_DISCONNECT;
8809 chek_event[2] = l7vs::protocol_module_base::CLIENT_RECV;
8810 chek_event[3] = l7vs::protocol_module_base::CLIENT_RESPONSE_SEND;
8811 chek_event[4] = l7vs::protocol_module_base::REALSERVER_SELECT;
8812 chek_event[5] = l7vs::protocol_module_base::REALSERVER_CONNECT;
8813 chek_event[6] = l7vs::protocol_module_base::REALSERVER_SEND;
8814 chek_event[7] = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
8815 chek_event[8] = l7vs::protocol_module_base::SORRYSERVER_SELECT;
8816 chek_event[9] = l7vs::protocol_module_base::SORRYSERVER_CONNECT;
8817 chek_event[10] = l7vs::protocol_module_base::SORRYSERVER_SEND;
8818 chek_event[11] = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
8819 chek_event[12] = l7vs::protocol_module_base::FINALIZE;
8821 // unit_test [1] up_thread_realserver_connect_event up_thread_next_call_function update check
8822 std::cerr << "[1] up_thread_realserver_connect_event up_thread_next_call_function update check" << std::endl;
8823 for(int i = 0; i < 13;i++){
8824 proto_test.handle_realserver_connect_res_tag = chek_event[i];
8825 test_obj.test_call();
8826 BOOST_CHECK(test_obj.chk_up_thread_next_call_function(chek_event[i]));
8829 // unit_test [2] up_thread_realserver_connect_event module parameter check
8830 std::cerr << "[2] up_thread_realserver_connect_event module parameter check" << std::endl;
8831 boost::thread::id def_id;
8832 boost::thread::id proc_id = boost::this_thread::get_id();
8833 test_obj.set_up_thread_id(proc_id);
8834 proto_test.handle_realserver_connect_thread_id = def_id;
8835 proto_test.handle_realserver_connect_res_tag = l7vs::protocol_module_base::FINALIZE;
8836 BOOST_CHECK(proto_test.handle_realserver_connect_thread_id != proc_id);
8837 char set_char = CHAR_MIN;
8838 for(int i = 0;i < MAX_BUFFER_SIZE;i++){
8839 proto_test.handle_realserver_connect_sendbuffer[i] = set_char;
8840 if(set_char == CHAR_MAX){
8841 set_char = CHAR_MIN;
8846 proto_test.handle_realserver_connect_datalen = MAX_BUFFER_SIZE;
8847 l7vs::tcp_data& test_data = test_obj.get_up_thread_data_dest_side();
8848 test_data.initialize();
8849 boost::asio::ip::tcp::endpoint server_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
8850 test_data.set_endpoint(server_end);
8852 test_obj.test_call();
8854 BOOST_CHECK(proto_test.handle_realserver_connect_thread_id == proc_id);
8855 BOOST_CHECK(proto_test.handle_realserver_connect_sendbuffer == test_data.get_data());
8856 BOOST_CHECK(proto_test.handle_realserver_connect_datalen == test_data.get_size());
8857 BOOST_CHECK(server_end == test_data.get_endpoint());
8859 // unit_test [3] up_thread_realserver_connect_event not fond function error check
8860 std::cerr << "[3] up_thread_realserver_connect_event not fond function error check" << std::endl;
8861 test_obj.up_thread_function_array_clear();
8862 proto_test.handle_realserver_connect_res_tag = l7vs::protocol_module_base::FINALIZE;
8863 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
8864 l7vs::Logger::putLogError_id = 0;
8865 test_obj.test_call();
8866 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
8867 BOOST_CHECK_EQUAL(40,l7vs::Logger::putLogError_id);
8868 std::cerr << l7vs::Logger::putLogError_message << std::endl;
8870 // unit_test [4] up_thread_realserver_connect_event returnd illegal EVENT_TAG error check
8871 std::cerr << "[4] up_thread_realserver_connect_event returnd illegal EVENT_TAG error check" << std::endl;
8872 test_obj.up_thread_module_event_map_clear();
8873 proto_test.handle_realserver_connect_res_tag = l7vs::protocol_module_base::FINALIZE;
8874 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
8875 l7vs::Logger::putLogError_id = 0;
8876 test_obj.test_call();
8877 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
8878 BOOST_CHECK_EQUAL(39,l7vs::Logger::putLogError_id);
8879 std::cerr << l7vs::Logger::putLogError_message << std::endl;
8881 BOOST_MESSAGE( "----- up_thread_realserver_connect_event test end -----" );
8884 // up_thread_sorryserver_connect_event test
8885 // up_thread_sorryserver_connect_event test class
8886 class up_thread_sorryserver_connect_event_test_class : public module_event_map_test_base_class{
8888 // up_thread_sorryserver_connect_event_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : module_event_map_test_base_class(vs,session_io){
8890 up_thread_sorryserver_connect_event_test_class(
8891 l7vs::virtualservice_tcp& vs,
8892 boost::asio::io_service& session_io,
8893 l7vs::tcp_socket_option_info& set_socket_option,
8894 boost::asio::ip::tcp::endpoint listen_endpoint,
8896 boost::asio::ssl::context& set_ssl_context,
8897 bool set_ssl_cache_flag,
8898 int set_ssl_handshake_time_out,
8899 l7vs::logger_implement_access* set_access_logger) : module_event_map_test_base_class( vs,
8906 set_ssl_handshake_time_out,
8907 set_access_logger){};
8909 ~up_thread_sorryserver_connect_event_test_class(){};
8912 l7vs::tcp_session::up_thread_sorryserver_connect_event(LOCAL_PROC);
8916 void up_thread_sorryserver_connect_event_test(){
8917 BOOST_MESSAGE( "----- up_thread_sorryserver_connect_event test start -----" );
8918 // boost::asio::io_service io;
8919 // l7vs::virtualservice_tcp vs;
8920 // up_thread_sorryserver_connect_event_test_class test_obj(vs,io);
8921 l7vs::virtualservice_tcp vs;
8922 boost::asio::io_service io;
8923 l7vs::tcp_socket_option_info set_option;
8924 //! TCP_NODELAY (false:not set,true:set option)
8925 set_option.nodelay_opt = false;
8926 //! TCP_NODELAY option value (false:off,true:on)
8927 set_option.nodelay_val = false;
8928 //! TCP_CORK (false:not set,true:set option)
8929 set_option.cork_opt = false;
8930 //! TCP_CORK option value (false:off,true:on)
8931 set_option.cork_val = false;
8932 //! TCP_QUICKACK (false:not set,true:set option)
8933 set_option.quickack_opt = false;
8934 //! TCP_QUICKACK option value (false:off,true:on)
8935 set_option.quickack_val = false;
8937 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
8938 bool set_mode(false);
8939 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
8940 bool set_ssl_cache_flag(false);
8941 int set_ssl_handshake_time_out = 0;
8942 //std::string access_log_file_name = "test";
8943 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
8945 up_thread_sorryserver_connect_event_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
8948 std::string test_protocol_name("test protocol");
8949 l7vs::test_protocol_module proto_test(test_protocol_name);
8951 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
8953 l7vs::protocol_module_base::EVENT_TAG chek_event[13];
8954 chek_event[0] = l7vs::protocol_module_base::ACCEPT;
8955 chek_event[1] = l7vs::protocol_module_base::CLIENT_DISCONNECT;
8956 chek_event[2] = l7vs::protocol_module_base::CLIENT_RECV;
8957 chek_event[3] = l7vs::protocol_module_base::CLIENT_RESPONSE_SEND;
8958 chek_event[4] = l7vs::protocol_module_base::REALSERVER_SELECT;
8959 chek_event[5] = l7vs::protocol_module_base::REALSERVER_CONNECT;
8960 chek_event[6] = l7vs::protocol_module_base::REALSERVER_SEND;
8961 chek_event[7] = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
8962 chek_event[8] = l7vs::protocol_module_base::SORRYSERVER_SELECT;
8963 chek_event[9] = l7vs::protocol_module_base::SORRYSERVER_CONNECT;
8964 chek_event[10] = l7vs::protocol_module_base::SORRYSERVER_SEND;
8965 chek_event[11] = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
8966 chek_event[12] = l7vs::protocol_module_base::FINALIZE;
8968 // unit_test [1] up_thread_sorryserver_connect_event up_thread_next_call_function update check
8969 std::cerr << "[1] up_thread_sorryserver_connect_event up_thread_next_call_function update check" << std::endl;
8970 for(int i = 0; i < 13;i++){
8971 proto_test.handle_sorryserver_connect_res_tag = chek_event[i];
8972 test_obj.test_call();
8973 BOOST_CHECK(test_obj.chk_up_thread_next_call_function(chek_event[i]));
8976 // unit_test [2] up_thread_sorryserver_connect_event module parameter check
8977 std::cerr << "[2] up_thread_sorryserver_connect_event module parameter check" << std::endl;
8978 boost::thread::id def_id;
8979 boost::thread::id proc_id = boost::this_thread::get_id();
8980 test_obj.set_up_thread_id(proc_id);
8981 proto_test.handle_sorryserver_connect_thread_id = def_id;
8982 proto_test.handle_sorryserver_connect_res_tag = l7vs::protocol_module_base::FINALIZE;
8983 BOOST_CHECK(proto_test.handle_sorryserver_connect_thread_id != proc_id);
8984 char set_char = CHAR_MIN;
8985 for(int i = 0;i < MAX_BUFFER_SIZE;i++){
8986 proto_test.handle_sorryserver_connect_sendbuffer[i] = set_char;
8987 if(set_char == CHAR_MAX){
8988 set_char = CHAR_MIN;
8993 proto_test.handle_sorryserver_connect_datalen = MAX_BUFFER_SIZE;
8994 l7vs::tcp_data& test_data = test_obj.get_up_thread_data_dest_side();
8995 test_data.initialize();
8996 boost::asio::ip::tcp::endpoint server_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
8997 test_data.set_endpoint(server_end);
8999 test_obj.test_call();
9001 BOOST_CHECK(proto_test.handle_sorryserver_connect_thread_id == proc_id);
9002 BOOST_CHECK(proto_test.handle_sorryserver_connect_sendbuffer == test_data.get_data());
9003 BOOST_CHECK(proto_test.handle_sorryserver_connect_datalen == test_data.get_size());
9004 BOOST_CHECK(server_end == test_data.get_endpoint());
9006 // unit_test [3] up_thread_sorryserver_connect_event not fond function error check
9007 std::cerr << "[3] up_thread_sorryserver_connect_event not fond function error check" << std::endl;
9008 test_obj.up_thread_function_array_clear();
9009 proto_test.handle_sorryserver_connect_res_tag = l7vs::protocol_module_base::FINALIZE;
9010 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
9011 l7vs::Logger::putLogError_id = 0;
9012 test_obj.test_call();
9013 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
9014 BOOST_CHECK_EQUAL(57,l7vs::Logger::putLogError_id);
9015 std::cerr << l7vs::Logger::putLogError_message << std::endl;
9017 // unit_test [4] up_thread_sorryserver_connect_event returnd illegal EVENT_TAG error check
9018 std::cerr << "[4] up_thread_sorryserver_connect_event returnd illegal EVENT_TAG error check" << std::endl;
9019 test_obj.up_thread_module_event_map_clear();
9020 proto_test.handle_sorryserver_connect_res_tag = l7vs::protocol_module_base::FINALIZE;
9021 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
9022 l7vs::Logger::putLogError_id = 0;
9023 test_obj.test_call();
9024 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
9025 BOOST_CHECK_EQUAL(56,l7vs::Logger::putLogError_id);
9026 std::cerr << l7vs::Logger::putLogError_message << std::endl;
9028 BOOST_MESSAGE( "----- up_thread_sorryserver_connect_event test end -----" );
9030 // down_thread_client_connection_chk_event test
9031 // down_thread_client_connection_chk_event test class
9032 class down_thread_client_connection_chk_event_test_class : public module_event_map_test_base_class{
9034 // down_thread_client_connection_chk_event_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : module_event_map_test_base_class(vs,session_io){
9036 down_thread_client_connection_chk_event_test_class(
9037 l7vs::virtualservice_tcp& vs,
9038 boost::asio::io_service& session_io,
9039 l7vs::tcp_socket_option_info& set_socket_option,
9040 boost::asio::ip::tcp::endpoint listen_endpoint,
9042 boost::asio::ssl::context& set_ssl_context,
9043 bool set_ssl_cache_flag,
9044 int set_ssl_handshake_time_out,
9045 l7vs::logger_implement_access* set_access_logger) : module_event_map_test_base_class( vs,
9052 set_ssl_handshake_time_out,
9053 set_access_logger){};
9055 ~down_thread_client_connection_chk_event_test_class(){};
9058 l7vs::tcp_session::down_thread_client_connection_chk_event(LOCAL_PROC);
9062 void down_thread_client_connection_chk_event_test(){
9063 BOOST_MESSAGE( "----- down_thread_client_connection_chk_event test start -----" );
9064 // boost::asio::io_service io;
9065 // l7vs::virtualservice_tcp vs;
9066 // down_thread_client_connection_chk_event_test_class test_obj(vs,io);
9067 l7vs::virtualservice_tcp vs;
9068 boost::asio::io_service io;
9069 l7vs::tcp_socket_option_info set_option;
9070 //! TCP_NODELAY (false:not set,true:set option)
9071 set_option.nodelay_opt = false;
9072 //! TCP_NODELAY option value (false:off,true:on)
9073 set_option.nodelay_val = false;
9074 //! TCP_CORK (false:not set,true:set option)
9075 set_option.cork_opt = false;
9076 //! TCP_CORK option value (false:off,true:on)
9077 set_option.cork_val = false;
9078 //! TCP_QUICKACK (false:not set,true:set option)
9079 set_option.quickack_opt = false;
9080 //! TCP_QUICKACK option value (false:off,true:on)
9081 set_option.quickack_val = false;
9083 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
9084 bool set_mode(false);
9085 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
9086 bool set_ssl_cache_flag(false);
9087 int set_ssl_handshake_time_out = 0;
9088 //std::string access_log_file_name = "test";
9089 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
9091 down_thread_client_connection_chk_event_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
9094 std::string test_protocol_name("test protocol");
9095 l7vs::test_protocol_module proto_test(test_protocol_name);
9097 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
9099 l7vs::protocol_module_base::EVENT_TAG chek_event[7];
9100 chek_event[0] = l7vs::protocol_module_base::CLIENT_DISCONNECT;
9101 chek_event[1] = l7vs::protocol_module_base::CLIENT_CONNECTION_CHECK;
9102 chek_event[2] = l7vs::protocol_module_base::REALSERVER_RECV;
9103 chek_event[3] = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
9104 chek_event[4] = l7vs::protocol_module_base::SORRYSERVER_RECV;
9105 chek_event[5] = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
9106 chek_event[6] = l7vs::protocol_module_base::FINALIZE;
9108 // unit_test [1] down_thread_client_connection_chk_event down_thread_next_call_function update check
9109 std::cerr << "[1] down_thread_client_connection_chk_event down_thread_next_call_function update check" << std::endl;
9110 for(int i = 0; i < 7;i++){
9111 proto_test.handle_client_connection_check_res_tag = chek_event[i];
9112 test_obj.test_call();
9113 BOOST_CHECK(test_obj.chk_down_thread_next_call_function(chek_event[i]));
9116 // unit_test [2] down_thread_client_connection_chk_event module parameter check
9117 std::cerr << "[2] down_thread_client_connection_chk_event module parameter check" << std::endl;
9118 boost::thread::id def_id;
9119 boost::thread::id proc_id = boost::this_thread::get_id();
9120 test_obj.set_down_thread_id(proc_id);
9121 proto_test.handle_client_connection_check_thread_id = def_id;
9122 proto_test.handle_client_connection_check_res_tag = l7vs::protocol_module_base::FINALIZE;
9123 BOOST_CHECK(proto_test.handle_client_connection_check_thread_id != proc_id);
9124 char set_char = CHAR_MIN;
9125 for(int i = 0;i < MAX_BUFFER_SIZE;i++){
9126 proto_test.handle_client_connection_check_sendbuffer[i] = set_char;
9127 if(set_char == CHAR_MAX){
9128 set_char = CHAR_MIN;
9133 proto_test.handle_client_connection_check_datalen = MAX_BUFFER_SIZE;
9134 l7vs::tcp_data& test_data = test_obj.get_down_thread_data_client_side();
9135 test_data.initialize();
9137 test_obj.test_call();
9139 BOOST_CHECK(proto_test.handle_client_connection_check_thread_id == proc_id);
9140 BOOST_CHECK(proto_test.handle_client_connection_check_sendbuffer == test_data.get_data());
9141 BOOST_CHECK(proto_test.handle_client_connection_check_datalen == test_data.get_size());
9143 // unit_test [3] down_thread_client_connection_chk_event not fond function error check
9144 std::cerr << "[3] down_thread_client_connection_chk_event not fond function error check" << std::endl;
9145 test_obj.down_thread_function_array_clear();
9146 proto_test.handle_client_connection_check_res_tag = l7vs::protocol_module_base::FINALIZE;
9147 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
9148 l7vs::Logger::putLogError_id = 0;
9149 test_obj.test_call();
9150 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
9151 BOOST_CHECK_EQUAL(79,l7vs::Logger::putLogError_id);
9152 std::cerr << l7vs::Logger::putLogError_message << std::endl;
9154 // unit_test [4] down_thread_client_connection_chk_event returnd illegal EVENT_TAG error check
9155 std::cerr << "[4] down_thread_client_connection_chk_event returnd illegal EVENT_TAG error check" << std::endl;
9156 test_obj.down_thread_module_event_map_clear();
9157 proto_test.handle_client_connection_check_res_tag = l7vs::protocol_module_base::FINALIZE;
9158 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
9159 l7vs::Logger::putLogError_id = 0;
9160 test_obj.test_call();
9161 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
9162 BOOST_CHECK_EQUAL(78,l7vs::Logger::putLogError_id);
9163 std::cerr << l7vs::Logger::putLogError_message << std::endl;
9165 BOOST_MESSAGE( "----- down_thread_client_connection_chk_event test end -----" );
9167 // up_thread_realserver_connection_fail_event test
9168 // up_thread_realserver_connection_fail_event test class
9169 class up_thread_realserver_connection_fail_event_test_class : public module_event_map_test_base_class{
9171 // up_thread_realserver_connection_fail_event_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : module_event_map_test_base_class(vs,session_io){
9173 up_thread_realserver_connection_fail_event_test_class(
9174 l7vs::virtualservice_tcp& vs,
9175 boost::asio::io_service& session_io,
9176 l7vs::tcp_socket_option_info& set_socket_option,
9177 boost::asio::ip::tcp::endpoint listen_endpoint,
9179 boost::asio::ssl::context& set_ssl_context,
9180 bool set_ssl_cache_flag,
9181 int set_ssl_handshake_time_out,
9182 l7vs::logger_implement_access* set_access_logger) : module_event_map_test_base_class( vs,
9189 set_ssl_handshake_time_out,
9190 set_access_logger){};
9192 ~up_thread_realserver_connection_fail_event_test_class(){};
9195 l7vs::tcp_session::up_thread_realserver_connection_fail_event(LOCAL_PROC);
9199 void up_thread_realserver_connection_fail_event_test(){
9200 BOOST_MESSAGE( "----- up_thread_realserver_connection_fail_event test start -----" );
9201 // boost::asio::io_service io;
9202 // l7vs::virtualservice_tcp vs;
9203 // up_thread_realserver_connection_fail_event_test_class test_obj(vs,io);
9204 l7vs::virtualservice_tcp vs;
9205 boost::asio::io_service io;
9206 l7vs::tcp_socket_option_info set_option;
9207 //! TCP_NODELAY (false:not set,true:set option)
9208 set_option.nodelay_opt = false;
9209 //! TCP_NODELAY option value (false:off,true:on)
9210 set_option.nodelay_val = false;
9211 //! TCP_CORK (false:not set,true:set option)
9212 set_option.cork_opt = false;
9213 //! TCP_CORK option value (false:off,true:on)
9214 set_option.cork_val = false;
9215 //! TCP_QUICKACK (false:not set,true:set option)
9216 set_option.quickack_opt = false;
9217 //! TCP_QUICKACK option value (false:off,true:on)
9218 set_option.quickack_val = false;
9220 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
9221 bool set_mode(false);
9222 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
9223 bool set_ssl_cache_flag(false);
9224 int set_ssl_handshake_time_out = 0;
9225 //std::string access_log_file_name = "test";
9226 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
9228 up_thread_realserver_connection_fail_event_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
9232 std::string test_protocol_name("test protocol");
9233 l7vs::test_protocol_module proto_test(test_protocol_name);
9235 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
9237 l7vs::protocol_module_base::EVENT_TAG chek_event[13];
9238 chek_event[0] = l7vs::protocol_module_base::ACCEPT;
9239 chek_event[1] = l7vs::protocol_module_base::CLIENT_DISCONNECT;
9240 chek_event[2] = l7vs::protocol_module_base::CLIENT_RECV;
9241 chek_event[3] = l7vs::protocol_module_base::CLIENT_RESPONSE_SEND;
9242 chek_event[4] = l7vs::protocol_module_base::REALSERVER_SELECT;
9243 chek_event[5] = l7vs::protocol_module_base::REALSERVER_CONNECT;
9244 chek_event[6] = l7vs::protocol_module_base::REALSERVER_SEND;
9245 chek_event[7] = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
9246 chek_event[8] = l7vs::protocol_module_base::SORRYSERVER_SELECT;
9247 chek_event[9] = l7vs::protocol_module_base::SORRYSERVER_CONNECT;
9248 chek_event[10] = l7vs::protocol_module_base::SORRYSERVER_SEND;
9249 chek_event[11] = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
9250 chek_event[12] = l7vs::protocol_module_base::FINALIZE;
9252 // unit_test [1] up_thread_realserver_connection_fail_event up_thread_next_call_function update check
9253 std::cerr << "[1] up_thread_realserver_connection_fail_event up_thread_next_call_function update check" << std::endl;
9254 for(int i = 0; i < 13;i++){
9255 proto_test.handle_realserver_connection_fail_res_tag = chek_event[i];
9256 test_obj.test_call();
9257 BOOST_CHECK(test_obj.chk_up_thread_next_call_function(chek_event[i]));
9260 // unit_test [2] up_thread_realserver_connection_fail_event module parameter check
9261 std::cerr << "[2] up_thread_realserver_connection_fail_event module parameter check" << std::endl;
9262 boost::thread::id def_id;
9263 boost::thread::id proc_id = boost::this_thread::get_id();
9264 test_obj.set_up_thread_id(proc_id);
9265 proto_test.handle_realserver_connection_fail_thread_id = def_id;
9266 proto_test.handle_realserver_connection_fail_res_tag = l7vs::protocol_module_base::FINALIZE;
9267 BOOST_CHECK(proto_test.handle_realserver_connection_fail_thread_id != proc_id);
9268 boost::asio::ip::tcp::endpoint server_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
9269 l7vs::tcp_data& test_data = test_obj.get_up_thread_data_dest_side();
9270 test_data.set_endpoint(server_end);
9272 test_obj.test_call();
9274 BOOST_CHECK(proto_test.handle_realserver_connection_fail_thread_id == proc_id);
9275 BOOST_CHECK(server_end == test_data.get_endpoint());
9277 // unit_test [3] up_thread_realserver_connection_fail_event not fond function error check
9278 std::cerr << "[3] up_thread_realserver_connection_fail_event not fond function error check" << std::endl;
9279 test_obj.up_thread_function_array_clear();
9280 proto_test.handle_realserver_connection_fail_res_tag = l7vs::protocol_module_base::FINALIZE;
9281 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
9282 l7vs::Logger::putLogError_id = 0;
9283 test_obj.test_call();
9284 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
9285 BOOST_CHECK_EQUAL(42,l7vs::Logger::putLogError_id);
9286 std::cerr << l7vs::Logger::putLogError_message << std::endl;
9288 // unit_test [4] up_thread_realserver_connection_fail_event returnd illegal EVENT_TAG error check
9289 std::cerr << "[4] up_thread_realserver_connection_fail_event returnd illegal EVENT_TAG error check" << std::endl;
9290 test_obj.up_thread_module_event_map_clear();
9291 proto_test.handle_realserver_connection_fail_res_tag = l7vs::protocol_module_base::FINALIZE;
9292 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
9293 l7vs::Logger::putLogError_id = 0;
9294 test_obj.test_call();
9295 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
9296 BOOST_CHECK_EQUAL(41,l7vs::Logger::putLogError_id);
9297 std::cerr << l7vs::Logger::putLogError_message << std::endl;
9299 BOOST_MESSAGE( "----- up_thread_realserver_connection_fail_event test end -----" );
9302 // up_thread_sorryserver_connection_fail_event test
9303 // up_thread_sorryserver_connection_fail_event test class
9304 class up_thread_sorryserver_connection_fail_event_test_class : public module_event_map_test_base_class{
9306 // up_thread_sorryserver_connection_fail_event_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : module_event_map_test_base_class(vs,session_io){
9308 up_thread_sorryserver_connection_fail_event_test_class(
9309 l7vs::virtualservice_tcp& vs,
9310 boost::asio::io_service& session_io,
9311 l7vs::tcp_socket_option_info& set_socket_option,
9312 boost::asio::ip::tcp::endpoint listen_endpoint,
9314 boost::asio::ssl::context& set_ssl_context,
9315 bool set_ssl_cache_flag,
9316 int set_ssl_handshake_time_out,
9317 l7vs::logger_implement_access* set_access_logger) : module_event_map_test_base_class( vs,
9324 set_ssl_handshake_time_out,
9325 set_access_logger){};
9327 ~up_thread_sorryserver_connection_fail_event_test_class(){};
9330 l7vs::tcp_session::up_thread_sorryserver_connection_fail_event(LOCAL_PROC);
9334 void up_thread_sorryserver_connection_fail_event_test(){
9335 BOOST_MESSAGE( "----- up_thread_sorryserver_connection_fail_event test start -----" );
9336 // boost::asio::io_service io;
9337 // l7vs::virtualservice_tcp vs;
9338 // up_thread_sorryserver_connection_fail_event_test_class test_obj(vs,io);
9339 l7vs::virtualservice_tcp vs;
9340 boost::asio::io_service io;
9341 l7vs::tcp_socket_option_info set_option;
9342 //! TCP_NODELAY (false:not set,true:set option)
9343 set_option.nodelay_opt = false;
9344 //! TCP_NODELAY option value (false:off,true:on)
9345 set_option.nodelay_val = false;
9346 //! TCP_CORK (false:not set,true:set option)
9347 set_option.cork_opt = false;
9348 //! TCP_CORK option value (false:off,true:on)
9349 set_option.cork_val = false;
9350 //! TCP_QUICKACK (false:not set,true:set option)
9351 set_option.quickack_opt = false;
9352 //! TCP_QUICKACK option value (false:off,true:on)
9353 set_option.quickack_val = false;
9355 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
9356 bool set_mode(false);
9357 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
9358 bool set_ssl_cache_flag(false);
9359 int set_ssl_handshake_time_out = 0;
9360 //std::string access_log_file_name = "test";
9361 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
9363 up_thread_sorryserver_connection_fail_event_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
9366 std::string test_protocol_name("test protocol");
9367 l7vs::test_protocol_module proto_test(test_protocol_name);
9369 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
9371 l7vs::protocol_module_base::EVENT_TAG chek_event[13];
9372 chek_event[0] = l7vs::protocol_module_base::ACCEPT;
9373 chek_event[1] = l7vs::protocol_module_base::CLIENT_DISCONNECT;
9374 chek_event[2] = l7vs::protocol_module_base::CLIENT_RECV;
9375 chek_event[3] = l7vs::protocol_module_base::CLIENT_RESPONSE_SEND;
9376 chek_event[4] = l7vs::protocol_module_base::REALSERVER_SELECT;
9377 chek_event[5] = l7vs::protocol_module_base::REALSERVER_CONNECT;
9378 chek_event[6] = l7vs::protocol_module_base::REALSERVER_SEND;
9379 chek_event[7] = l7vs::protocol_module_base::REALSERVER_DISCONNECT;
9380 chek_event[8] = l7vs::protocol_module_base::SORRYSERVER_SELECT;
9381 chek_event[9] = l7vs::protocol_module_base::SORRYSERVER_CONNECT;
9382 chek_event[10] = l7vs::protocol_module_base::SORRYSERVER_SEND;
9383 chek_event[11] = l7vs::protocol_module_base::SORRYSERVER_DISCONNECT;
9384 chek_event[12] = l7vs::protocol_module_base::FINALIZE;
9386 // unit_test [1] up_thread_sorryserver_connection_fail_event up_thread_next_call_function update check
9387 std::cerr << "[1] up_thread_sorryserver_connection_fail_event up_thread_next_call_function update check" << std::endl;
9388 for(int i = 0; i < 13;i++){
9389 proto_test.handle_sorryserver_connection_fail_res_tag = chek_event[i];
9390 test_obj.test_call();
9391 BOOST_CHECK(test_obj.chk_up_thread_next_call_function(chek_event[i]));
9394 // unit_test [2] up_thread_sorryserver_connection_fail_event module parameter check
9395 std::cerr << "[2] up_thread_sorryserver_connection_fail_event module parameter check" << std::endl;
9396 boost::thread::id def_id;
9397 boost::thread::id proc_id = boost::this_thread::get_id();
9398 test_obj.set_up_thread_id(proc_id);
9399 proto_test.handle_sorryserver_connection_fail_thread_id = def_id;
9400 proto_test.handle_sorryserver_connection_fail_res_tag = l7vs::protocol_module_base::FINALIZE;
9401 BOOST_CHECK(proto_test.handle_sorryserver_connection_fail_thread_id != proc_id);
9402 boost::asio::ip::tcp::endpoint server_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
9403 l7vs::tcp_data& test_data = test_obj.get_up_thread_data_dest_side();
9404 test_data.set_endpoint(server_end);
9406 test_obj.test_call();
9408 BOOST_CHECK(proto_test.handle_sorryserver_connection_fail_thread_id == proc_id);
9409 BOOST_CHECK(server_end == test_data.get_endpoint());
9411 // unit_test [3] up_thread_sorryserver_connection_fail_event not fond function error check
9412 std::cerr << "[3] up_thread_sorryserver_connection_fail_event not fond function error check" << std::endl;
9413 test_obj.up_thread_function_array_clear();
9414 proto_test.handle_sorryserver_connection_fail_res_tag = l7vs::protocol_module_base::FINALIZE;
9415 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
9416 l7vs::Logger::putLogError_id = 0;
9417 test_obj.test_call();
9418 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
9419 BOOST_CHECK_EQUAL(59,l7vs::Logger::putLogError_id);
9420 std::cerr << l7vs::Logger::putLogError_message << std::endl;
9422 // unit_test [4] up_thread_sorryserver_connection_fail_event returnd illegal EVENT_TAG error check
9423 std::cerr << "[4] up_thread_sorryserver_connection_fail_event returnd illegal EVENT_TAG error check" << std::endl;
9424 test_obj.up_thread_module_event_map_clear();
9425 proto_test.handle_sorryserver_connection_fail_res_tag = l7vs::protocol_module_base::FINALIZE;
9426 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
9427 l7vs::Logger::putLogError_id = 0;
9428 test_obj.test_call();
9429 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
9430 BOOST_CHECK_EQUAL(58,l7vs::Logger::putLogError_id);
9431 std::cerr << l7vs::Logger::putLogError_message << std::endl;
9433 BOOST_MESSAGE( "----- up_thread_sorryserver_connection_fail_event test end -----" );
9436 // receive & send test class
9437 class receive_send_test_class : public l7vs::tcp_session{
9439 // receive_send_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){
9441 receive_send_test_class(
9442 l7vs::virtualservice_tcp& vs,
9443 boost::asio::io_service& session_io,
9444 l7vs::tcp_socket_option_info& set_socket_option,
9445 boost::asio::ip::tcp::endpoint listen_endpoint,
9447 boost::asio::ssl::context& set_ssl_context,
9448 bool set_ssl_cache_flag,
9449 int set_ssl_handshake_time_out,
9450 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
9457 set_ssl_handshake_time_out,
9458 set_access_logger){};
9460 ~receive_send_test_class(){};
9462 void test_call_client_receive(){
9463 l7vs::tcp_session::up_thread_client_receive(LOCAL_PROC);
9465 void test_call_client_send(){
9466 l7vs::tcp_session::down_thread_client_send(LOCAL_PROC);
9468 void test_call_realserver_receive(){
9469 l7vs::tcp_session::down_thread_realserver_receive(LOCAL_PROC);
9471 void test_call_realserver_send(){
9472 l7vs::tcp_session::up_thread_realserver_send(LOCAL_PROC);
9474 void test_call_sorryserver_receive(){
9475 l7vs::tcp_session::down_thread_sorryserver_receive(LOCAL_PROC);
9477 void test_call_sorryserver_send(){
9478 l7vs::tcp_session::up_thread_sorryserver_send(LOCAL_PROC);
9480 void set_protocol_module(l7vs::protocol_module_base* set_prot){
9481 protocol_module = set_prot;
9483 l7vs::tcp_data& get_up_thread_data_client_side(){
9484 return up_thread_data_client_side;
9486 l7vs::tcp_data& get_up_thread_data_dest_side(){
9487 return up_thread_data_dest_side;
9489 l7vs::tcp_data& get_down_thread_data_client_side(){
9490 return down_thread_data_client_side;
9492 l7vs::tcp_data& get_down_thread_data_dest_side(){
9493 return down_thread_data_dest_side;
9495 l7vs::tcp_socket& get_client_socket(){
9496 return client_socket;
9498 l7vs::tcp_ssl_socket& get_client_ssl_socket(){
9499 return client_ssl_socket;
9501 socket_element& get_sorryserver_socket(){
9502 return sorryserver_socket;
9504 std::list<socket_element>& get_down_thread_receive_realserver_socket_list(){
9505 return down_thread_receive_realserver_socket_list;
9507 std::map<endpoint,tcp_socket_ptr>& get_up_thread_send_realserver_socket_map(){
9508 return up_thread_send_realserver_socket_map;
9510 std::list<socket_element>::iterator& get_down_thread_current_receive_realserver_socket(){
9511 return down_thread_current_receive_realserver_socket;
9514 void set_up_thread_id(boost::thread::id set_id){
9515 up_thread_id = set_id;
9517 void set_down_thread_id(boost::thread::id set_id){
9518 down_thread_id = set_id;
9521 void next_up_function_call(){
9522 up_thread_next_call_function.second(LOCAL_PROC);
9524 void next_down_function_call(){
9525 down_thread_next_call_function.second(LOCAL_PROC);
9528 void set_up_thread_next_function_call_exit(){
9529 up_thread_function_pair fun_it = up_thread_function_array[UP_FUNC_EXIT];
9530 up_thread_next_call_function = fun_it;
9533 void set_down_thread_next_function_call_exit(){
9534 down_thread_function_pair fun_it = down_thread_function_array[DOWN_FUNC_EXIT];
9535 down_thread_next_call_function = fun_it;
9538 // next call function check
9539 void up_thread_realserver_get_destination_event(const TCP_PROCESS_TYPE_TAG process_type){
9540 up_thread_realserver_get_destination_event_call_check = true;
9542 bool up_thread_realserver_get_destination_event_call_check;
9543 void up_thread_sorryserver_get_destination_event(const TCP_PROCESS_TYPE_TAG process_type){
9544 up_thread_sorryserver_get_destination_event_call_check = true;
9546 bool up_thread_sorryserver_get_destination_event_call_check;
9548 void up_thread_client_disconnect(const TCP_PROCESS_TYPE_TAG process_type){
9549 up_thread_client_disconnect_call_check = true;
9551 bool up_thread_client_disconnect_call_check;
9554 void down_thread_client_disconnect(const TCP_PROCESS_TYPE_TAG process_type){
9555 down_thread_client_disconnect_call_check = true;
9557 bool down_thread_client_disconnect_call_check;
9559 void up_thread_realserver_disconnect(const TCP_PROCESS_TYPE_TAG process_type){
9560 up_thread_realserver_disconnect_call_check = true;
9562 bool up_thread_realserver_disconnect_call_check;
9564 void up_thread_sorryserver_disconnect(const TCP_PROCESS_TYPE_TAG process_type){
9565 up_thread_sorryserver_disconnect_call_check = true;
9567 bool up_thread_sorryserver_disconnect_call_check;
9569 void down_thread_realserver_disconnect(const TCP_PROCESS_TYPE_TAG process_type){
9570 down_thread_realserver_disconnect_call_check = true;
9572 bool down_thread_realserver_disconnect_call_check;
9574 void down_thread_sorryserver_disconnect(const TCP_PROCESS_TYPE_TAG process_type){
9575 down_thread_sorryserver_disconnect_call_check = true;
9577 bool down_thread_sorryserver_disconnect_call_check;
9579 void up_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
9580 up_thread_exit_call_check = true;
9582 bool up_thread_exit_call_check;
9584 void down_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
9585 down_thread_exit_call_check = true;
9587 bool down_thread_exit_call_check;
9589 void up_thread_client_receive(const TCP_PROCESS_TYPE_TAG process_type){
9590 up_thread_client_receive_call_check = true;
9591 tcp_session::up_thread_client_receive(process_type);
9593 bool up_thread_client_receive_call_check;
9595 void down_thread_realserver_receive(const TCP_PROCESS_TYPE_TAG process_type){
9596 down_thread_realserver_receive_call_check = true;
9597 tcp_session::down_thread_realserver_receive(process_type);
9599 bool down_thread_realserver_receive_call_check;
9601 void down_thread_sorryserver_receive(const TCP_PROCESS_TYPE_TAG process_type){
9602 down_thread_sorryserver_receive_call_check = true;
9603 tcp_session::down_thread_sorryserver_receive(process_type);
9605 bool down_thread_sorryserver_receive_call_check;
9607 void down_thread_client_send(const TCP_PROCESS_TYPE_TAG process_type){
9608 down_thread_client_send_call_check = true;
9610 bool down_thread_client_send_call_check;
9612 void up_thread_realserver_send(const TCP_PROCESS_TYPE_TAG process_type){
9613 up_thread_realserver_send_call_check = true;
9615 bool up_thread_realserver_send_call_check;
9617 void up_thread_sorryserver_send(const TCP_PROCESS_TYPE_TAG process_type){
9618 up_thread_sorryserver_send_call_check = true;
9620 bool up_thread_sorryserver_send_call_check;
9622 void down_thread_client_connection_chk_event(const TCP_PROCESS_TYPE_TAG process_type){
9623 down_thread_client_connection_chk_event_call_check = true;;
9625 bool down_thread_client_connection_chk_event_call_check;
9628 void up_thread_function_array_clear(){
9629 for(int i = 0;i <= UP_FUNC_EXIT;i++){
9630 up_thread_function_array[i].second = NULL;
9633 void down_thread_function_array_clear(){
9634 for(int i = 0; i <= DOWN_FUNC_EXIT;i++){
9635 down_thread_function_array[i].second = NULL;
9639 void up_thread_module_event_map_clear(){
9640 up_thread_module_event_map.clear();
9643 void down_thread_module_event_map_clear(){
9644 down_thread_module_event_map.clear();
9648 // up_thread_client_receive test
9649 void up_thread_client_receive_test(){
9650 BOOST_MESSAGE( "----- up_thread_client_receive test end -----" );
9652 l7vs::virtualservice_tcp vs;
9653 boost::asio::io_service io;
9654 l7vs::tcp_socket_option_info set_option;
9655 //! TCP_NODELAY (false:not set,true:set option)
9656 set_option.nodelay_opt = false;
9657 //! TCP_NODELAY option value (false:off,true:on)
9658 set_option.nodelay_val = false;
9659 //! TCP_CORK (false:not set,true:set option)
9660 set_option.cork_opt = false;
9661 //! TCP_CORK option value (false:off,true:on)
9662 set_option.cork_val = false;
9663 //! TCP_QUICKACK (false:not set,true:set option)
9664 set_option.quickack_opt = false;
9665 //! TCP_QUICKACK option value (false:off,true:on)
9666 set_option.quickack_val = false;
9668 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
9669 bool set_mode(false);
9670 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
9671 bool set_ssl_cache_flag(false);
9672 int set_ssl_handshake_time_out = 0;
9673 //std::string access_log_file_name = "test";
9674 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
9676 std::string test_protocol_name("test protocol");
9677 l7vs::test_protocol_module proto_test(test_protocol_name);
9678 // up_thread_client_receive
9679 receive_send_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
9681 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
9682 boost::thread::id proc_id = boost::this_thread::get_id();
9684 l7vs::tcp_data& up_thread_data_client_side = test_obj.get_up_thread_data_client_side();
9687 // get client socket
9688 l7vs::tcp_socket& socket = test_obj.get_client_socket();
9689 // dummy server client socket connect
9690 boost::system::error_code ec;
9691 test_mirror_server test_server;
9693 test_server.breq_acc_flag = true;
9695 test_server.breq_close_wait_flag = true;
9697 test_server.req_recv_cnt = 0;
9698 // test server start
9699 boost::thread server_thread(boost::bind(&test_mirror_server::run,&test_server));
9700 while( !test_server.brun_flag ){
9705 boost::asio::ip::tcp::endpoint connect_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
9706 socket.get_socket().connect(connect_end,ec);
9708 socket.is_open_res = true;
9710 while(!test_server.bconnect_flag){
9713 boost::asio::ip::tcp::endpoint local_endpoint = socket.get_socket().local_endpoint(ec);
9717 up_thread_data_client_side.initialize();
9718 test_obj.set_up_thread_id(proc_id);
9719 test_obj.set_down_thread_id(boost::thread::id());
9720 test_obj.up_thread_realserver_get_destination_event_call_check = false;
9721 test_obj.up_thread_client_disconnect_call_check = false;
9722 test_obj.up_thread_exit_call_check = false;
9723 test_obj.up_thread_client_receive_call_check = false;
9725 vs.get_wait_upstream_res = 0;
9726 vs.update_up_recv_size_in = 0;
9728 socket.read_some_res = MAX_BUFFER_SIZE;
9729 socket.read_some_ec.clear();
9730 char set_char = CHAR_MIN;
9731 for(int i = 0;i < MAX_BUFFER_SIZE;i++){
9732 socket.read_some_buffers_out[i] = set_char;
9733 if(set_char == CHAR_MAX)
9734 set_char = CHAR_MIN;
9738 socket.read_some_buffers_size_in = 0;
9739 socket.read_some_call_check = false;
9740 // protocol module set
9741 proto_test.handle_client_recv_res_tag = l7vs::protocol_module_base::REALSERVER_SELECT;
9742 proto_test.handle_client_recv_in_thread_id = boost::thread::id();
9743 for(int i = 0;i < MAX_BUFFER_SIZE;i++){
9744 proto_test.handle_client_recv_in_recvbuffer[i] = '\0';
9746 proto_test.handle_client_recv_in_recvlen = 0;
9748 l7vs::Logger::test_loglevel = l7vs::LOG_LV_DEBUG;
9749 l7vs::Logger::putLogDebug_category = l7vs::LOG_CAT_NONE;
9750 l7vs::Logger::putLogDebug_id = 0;
9752 test_obj.test_call_client_receive();
9754 // unit_test [1] up_thread_client_receive client_socket read_some call check
9755 std::cerr << "[1] up_thread_client_receive client_socket read_some call check" << std::endl;
9756 BOOST_CHECK(socket.read_some_call_check);
9757 BOOST_CHECK(socket.read_some_buffers_out == up_thread_data_client_side.get_data());
9758 BOOST_CHECK(socket.read_some_buffers_size_in == MAX_BUFFER_SIZE);
9759 BOOST_CHECK(socket.read_some_res == up_thread_data_client_side.get_size());
9761 // unit_test [2] up_thread_client_receive virtualservice update_up_recv_size_in call check
9762 std::cerr << "[2] up_thread_client_receive virtualservice update_up_recv_size_in call check" << std::endl;
9763 BOOST_CHECK(vs.update_up_recv_size_in == MAX_BUFFER_SIZE);
9765 // unit_test [3] up_thread_client_receive protocol module handle_client_recv call check
9766 std::cerr << "[3] up_thread_client_receive protocol module handle_client_recv call check" << std::endl;
9767 BOOST_CHECK(proto_test.handle_client_recv_in_thread_id == proc_id);
9768 BOOST_CHECK(proto_test.handle_client_recv_in_recvlen == socket.read_some_res);
9769 BOOST_CHECK(proto_test.handle_client_recv_in_recvbuffer == socket.read_some_buffers_out);
9771 // unit_test [4] up_thread_client_receive up_thread_next_call_function update check
9772 std::cerr << "[4] up_thread_client_receive up_thread_next_call_function update check" << std::endl;
9773 test_obj.next_up_function_call();
9774 BOOST_CHECK(test_obj.up_thread_realserver_get_destination_event_call_check);
9776 // unit_test [5] up_thread_client_receive qos check
9777 std::cerr << "[5] up_thread_client_receive qos check" << std::endl;
9778 socket.read_some_res = 0;
9779 vs.get_wait_upstream_res = 1;
9781 // wait = 0 >> receive
9782 socket.read_some_call_check = false;
9783 vs.get_wait_upstream_res = 0;
9784 test_obj.test_call_client_receive();
9785 BOOST_CHECK(socket.read_some_call_check);
9787 // wait = 1 >> not receive
9788 socket.read_some_call_check = false;
9789 vs.get_wait_upstream_res = 1;
9790 test_obj.test_call_client_receive();
9791 BOOST_CHECK(!socket.read_some_call_check);
9792 std::cerr << l7vs::Logger::putLogDebug_message << std::endl;
9794 socket.read_some_res = MAX_BUFFER_SIZE;
9795 vs.get_throughput_upstream_res = 0;
9796 vs.get_wait_upstream_res = 0;
9798 // unit_test [6] up_thread_client_receive receive size 0 check
9799 std::cerr << "[6] up_thread_client_receive receive size 0 check" << std::endl;
9800 test_obj.set_up_thread_next_function_call_exit();
9801 socket.read_some_res = 0;
9802 test_obj.test_call_client_receive();
9803 test_obj.up_thread_client_receive_call_check = false;
9804 test_obj.next_up_function_call();
9805 BOOST_CHECK(test_obj.up_thread_client_receive_call_check);
9806 socket.read_some_res = MAX_BUFFER_SIZE;
9808 // unit_test [7] up_thread_client_receive socket error (try_again) check
9809 std::cerr << "[7] up_thread_client_receive socket error (try_again) check" << std::endl;
9810 test_obj.set_up_thread_next_function_call_exit();
9811 socket.read_some_ec = boost::asio::error::try_again;
9812 test_obj.test_call_client_receive();
9813 test_obj.up_thread_client_receive_call_check = false;
9814 test_obj.next_up_function_call();
9815 BOOST_CHECK(test_obj.up_thread_client_receive_call_check);
9816 socket.read_some_ec.clear();
9818 // unit_test [8] up_thread_client_receive socket error (eof) check
9819 std::cerr << "[8] up_thread_client_receive socket error (eof) check" << std::endl;
9820 test_obj.set_up_thread_next_function_call_exit();
9821 socket.read_some_ec = boost::asio::error::eof;
9822 test_obj.test_call_client_receive();
9823 test_obj.up_thread_client_disconnect_call_check = false;
9824 test_obj.next_up_function_call();
9825 BOOST_CHECK(test_obj.up_thread_client_disconnect_call_check);
9826 socket.read_some_ec.clear();
9828 // unit_test [9] up_thread_client_receive socket error (connection_reset) check
9829 std::cerr << "[9] up_thread_client_receive socket error (connection_reset) check" << std::endl;
9830 test_obj.set_up_thread_next_function_call_exit();
9831 socket.read_some_ec = boost::asio::error::connection_reset;
9832 test_obj.test_call_client_receive();
9833 test_obj.up_thread_client_disconnect_call_check = false;
9834 test_obj.next_up_function_call();
9835 BOOST_CHECK(test_obj.up_thread_client_disconnect_call_check);
9836 socket.read_some_ec.clear();
9838 // unit_test [10] up_thread_client_receive socket error (bad_descriptor) check
9839 std::cerr << "[10] up_thread_client_receive socket error (bad_descriptor) check" << std::endl;
9840 test_obj.set_up_thread_next_function_call_exit();
9841 socket.read_some_ec = boost::asio::error::bad_descriptor;
9842 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
9843 l7vs::Logger::putLogError_id = 0;
9844 test_obj.test_call_client_receive();
9845 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE,l7vs::Logger::putLogError_category);
9846 BOOST_CHECK_EQUAL(0,l7vs::Logger::putLogError_id);
9847 test_obj.up_thread_client_disconnect_call_check = false;
9848 test_obj.next_up_function_call();
9849 BOOST_CHECK(test_obj.up_thread_client_disconnect_call_check);
9850 socket.read_some_ec.clear();
9852 // unit_test [11] up_thread_client_receive closed socket error (bad_descriptor) check
9853 std::cerr << "[11] up_thread_client_receive closed socket error (bad_descriptor) check" << std::endl;
9854 test_obj.set_up_thread_next_function_call_exit();
9855 socket.read_some_ec = boost::asio::error::bad_descriptor;
9856 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
9857 l7vs::Logger::putLogError_id = 0;
9858 socket.is_open_res = false;
9859 test_obj.test_call_client_receive();
9860 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE,l7vs::Logger::putLogError_category);
9861 BOOST_CHECK_EQUAL(0,l7vs::Logger::putLogError_id);
9862 test_obj.up_thread_client_disconnect_call_check = false;
9863 test_obj.next_up_function_call();
9864 BOOST_CHECK(test_obj.up_thread_client_disconnect_call_check);
9865 socket.read_some_ec.clear();
9867 // unit_test [12] up_thread_client_receive not fond function error check
9868 std::cerr << "[12] up_thread_client_receive not fond function error check" << std::endl;
9869 test_obj.up_thread_function_array_clear();
9870 test_obj.up_thread_exit_call_check = false;
9871 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
9872 l7vs::Logger::putLogError_id = 0;
9873 test_obj.test_call_client_receive();
9874 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
9875 BOOST_CHECK_EQUAL(21,l7vs::Logger::putLogError_id);
9876 std::cerr << l7vs::Logger::putLogError_message << std::endl;
9877 BOOST_CHECK(test_obj.up_thread_exit_call_check);
9879 // unit_test [13] up_thread_client_receive returnd illegal EVENT_TAG error check
9880 std::cerr << "[13] up_thread_client_receive returnd illegal EVENT_TAG error check" << std::endl;
9881 test_obj.up_thread_module_event_map_clear();
9882 test_obj.up_thread_exit_call_check = false;
9883 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
9884 l7vs::Logger::putLogError_id = 0;
9885 test_obj.test_call_client_receive();
9886 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
9887 BOOST_CHECK_EQUAL(20,l7vs::Logger::putLogError_id);
9888 std::cerr << l7vs::Logger::putLogError_message << std::endl;
9889 BOOST_CHECK(test_obj.up_thread_exit_call_check);
9891 // dummy server stop
9892 test_server.breq_close_wait_flag = false;
9893 test_server.bstop_flag = true;
9894 server_thread.join();
9898 receive_send_test_class test_ssl_mode_obj(vs,io,set_option,listen_endpoint,true,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
9899 test_ssl_mode_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
9900 l7vs::tcp_ssl_socket& ssl_socket = test_ssl_mode_obj.get_client_ssl_socket();
9901 l7vs::tcp_data& up_thread_data_ssl_client_side = test_ssl_mode_obj.get_up_thread_data_client_side();
9904 up_thread_data_ssl_client_side.initialize();
9905 test_ssl_mode_obj.set_up_thread_id(proc_id);
9906 test_ssl_mode_obj.set_down_thread_id(boost::thread::id());
9907 test_ssl_mode_obj.up_thread_realserver_get_destination_event_call_check = false;
9908 test_ssl_mode_obj.up_thread_client_disconnect_call_check = false;
9909 test_ssl_mode_obj.up_thread_exit_call_check = false;
9910 test_ssl_mode_obj.up_thread_client_receive_call_check = false;
9913 vs.get_wait_upstream_res = 0;
9914 vs.update_up_recv_size_in = 0;
9917 ssl_socket.read_some_res = MAX_BUFFER_SIZE;
9918 ssl_socket.read_some_ec.clear();
9919 set_char = CHAR_MIN;
9920 for(int i = 0;i < MAX_BUFFER_SIZE;i++){
9921 ssl_socket.read_some_buffers_out[i] = set_char;
9922 if(set_char == CHAR_MAX)
9923 set_char = CHAR_MIN;
9927 ssl_socket.read_some_buffers_size_in = 0;
9928 ssl_socket.read_some_call_check = false;
9930 // protocol module set
9931 proto_test.handle_client_recv_res_tag = l7vs::protocol_module_base::REALSERVER_SELECT;
9932 proto_test.handle_client_recv_in_thread_id = boost::thread::id();
9933 for(int i = 0;i < MAX_BUFFER_SIZE;i++){
9934 proto_test.handle_client_recv_in_recvbuffer[i] = '\0';
9936 proto_test.handle_client_recv_in_recvlen = 0;
9938 l7vs::Logger::test_loglevel = l7vs::LOG_LV_DEBUG;
9939 l7vs::Logger::putLogDebug_category = l7vs::LOG_CAT_NONE;
9940 l7vs::Logger::putLogDebug_id = 0;
9942 test_ssl_mode_obj.test_call_client_receive();
9944 // unit_test [14] up_thread_client_receive ssl mode client_ssl_socket read_some call check
9945 std::cerr << "[14] up_thread_client_receive ssl mode client_ssl_socket read_some call check" << std::endl;
9946 BOOST_CHECK(ssl_socket.read_some_call_check);
9947 BOOST_CHECK(ssl_socket.read_some_buffers_out == up_thread_data_ssl_client_side.get_data());
9948 BOOST_CHECK(ssl_socket.read_some_buffers_size_in == MAX_BUFFER_SIZE);
9949 BOOST_CHECK(ssl_socket.read_some_res == up_thread_data_ssl_client_side.get_size());
9951 BOOST_MESSAGE( "----- up_thread_client_receive test end -----" );
9955 // down_thread_realserver_receive test
9956 void down_thread_realserver_receive_test(){
9957 BOOST_MESSAGE( "----- down_thread_realserver_receive test start -----" );
9958 // boost::asio::io_service io;
9959 // l7vs::virtualservice_tcp vs;
9960 l7vs::virtualservice_tcp vs;
9961 boost::asio::io_service io;
9962 l7vs::tcp_socket_option_info set_option;
9963 //! TCP_NODELAY (false:not set,true:set option)
9964 set_option.nodelay_opt = false;
9965 //! TCP_NODELAY option value (false:off,true:on)
9966 set_option.nodelay_val = false;
9967 //! TCP_CORK (false:not set,true:set option)
9968 set_option.cork_opt = false;
9969 //! TCP_CORK option value (false:off,true:on)
9970 set_option.cork_val = false;
9971 //! TCP_QUICKACK (false:not set,true:set option)
9972 set_option.quickack_opt = false;
9973 //! TCP_QUICKACK option value (false:off,true:on)
9974 set_option.quickack_val = false;
9976 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
9977 bool set_mode(false);
9978 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
9979 bool set_ssl_cache_flag(false);
9980 int set_ssl_handshake_time_out = 0;
9981 //std::string access_log_file_name = "test";
9982 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
9984 std::string test_protocol_name("test protocol");
9985 l7vs::test_protocol_module proto_test(test_protocol_name);
9986 // receive_send_test_class test_obj(vs,io);
9987 receive_send_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
9990 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
9991 boost::thread::id proc_id = boost::this_thread::get_id();
9993 l7vs::tcp_data& down_thread_data_dest_side = test_obj.get_down_thread_data_dest_side();
9995 // set realserver socket
9996 std::list< std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > >& rs_list = test_obj.get_down_thread_receive_realserver_socket_list();
9997 std::list< std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > >::iterator& rs_cur = test_obj.get_down_thread_current_receive_realserver_socket();
9998 std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > push_pair;
10000 for(int i = 0 ; i < 3 ;i++){
10001 boost::shared_ptr< l7vs::tcp_socket > new_socket(new l7vs::tcp_socket(io));
10002 push_pair.first.address(boost::asio::ip::address::from_string(DUMMY_SERVER_IP));
10003 push_pair.first.port(7000+i);
10004 push_pair.second = new_socket;
10006 new_socket->read_some_res = MAX_BUFFER_SIZE;
10007 new_socket->read_some_ec.clear();
10008 new_socket->is_open_res = true;
10009 char set_char = CHAR_MIN;
10010 for(int j = 0;j < MAX_BUFFER_SIZE;j++){
10011 new_socket->read_some_buffers_out[j] = set_char;
10012 if(set_char == CHAR_MAX)
10013 set_char = CHAR_MIN;
10017 new_socket->read_some_buffers_size_in = 0;
10018 new_socket->read_some_call_check = false;
10019 rs_list.push_back(push_pair);
10021 rs_cur = rs_list.begin();
10024 down_thread_data_dest_side.initialize();
10025 test_obj.set_down_thread_id(proc_id);
10026 test_obj.set_up_thread_id(boost::thread::id());
10027 test_obj.down_thread_client_connection_chk_event_call_check = false;
10028 test_obj.down_thread_realserver_disconnect_call_check = false;
10029 test_obj.down_thread_exit_call_check = false;
10030 test_obj.down_thread_realserver_receive_call_check = false;
10032 // vs.get_qos_downstream_res = 104857600;
10033 // vs.get_throughput_downstream_res = 0;
10034 vs.get_wait_downstream_res = 0;
10035 vs.update_down_recv_size_in = 0;
10036 // protocol module set
10037 proto_test.handle_realserver_recv_tcp_res_tag = l7vs::protocol_module_base::CLIENT_CONNECTION_CHECK;
10038 proto_test.handle_realserver_recv_tcp_in_thread_id = boost::thread::id();
10039 for(int i = 0;i < MAX_BUFFER_SIZE;i++){
10040 proto_test.handle_realserver_recv_tcp_in_recvbuffer[i] = '\0';
10042 proto_test.handle_realserver_recv_tcp_in_recvlen = 0;
10043 proto_test.handle_realserver_recv_tcp_in_rs_endpoint = boost::asio::ip::tcp::endpoint();
10045 boost::asio::ip::tcp::endpoint rs_end = rs_cur->first;
10046 l7vs::tcp_socket& socket = *(rs_cur->second);
10047 l7vs::Logger::test_loglevel = l7vs::LOG_LV_DEBUG;
10048 l7vs::Logger::putLogDebug_category = l7vs::LOG_CAT_NONE;
10049 l7vs::Logger::putLogDebug_id = 0;
10051 test_obj.test_call_realserver_receive();
10053 // unit_test [1] down_thread_realserver_receive realserver read_some call check
10054 std::cerr << "[1] down_thread_realserver_receive realserver read_some call check" << std::endl;
10055 BOOST_CHECK(socket.read_some_call_check);
10056 BOOST_CHECK(socket.read_some_buffers_out == down_thread_data_dest_side.get_data());
10057 BOOST_CHECK(socket.read_some_buffers_size_in == MAX_BUFFER_SIZE);
10058 BOOST_CHECK(socket.read_some_res == down_thread_data_dest_side.get_size());
10059 BOOST_CHECK(rs_end == down_thread_data_dest_side.get_endpoint());
10061 // unit_test [2] down_thread_realserver_receive virtualservice update_down_recv_size_in call check
10062 std::cerr << "[2] down_thread_realserver_receive virtualservice update_down_recv_size_in call check" << std::endl;
10063 BOOST_CHECK(vs.update_down_recv_size_in == MAX_BUFFER_SIZE);
10065 // unit_test [3] down_thread_realserver_receive protocol module handle_realserver_recv call check
10066 std::cerr << "[3] down_thread_realserver_receive protocol module handle_realserver_recv call check" << std::endl;
10067 BOOST_CHECK(proto_test.handle_realserver_recv_tcp_in_thread_id == proc_id);
10068 BOOST_CHECK(proto_test.handle_realserver_recv_tcp_in_recvlen == socket.read_some_res);
10069 BOOST_CHECK(proto_test.handle_realserver_recv_tcp_in_recvbuffer == socket.read_some_buffers_out);
10070 BOOST_CHECK(proto_test.handle_realserver_recv_tcp_in_rs_endpoint == rs_end);
10072 // unit_test [4] down_thread_realserver_receive down_thread_next_call_function update check
10073 std::cerr << "[4] down_thread_realserver_receive down_thread_next_call_function update check" << std::endl;
10074 test_obj.next_down_function_call();
10075 BOOST_CHECK(test_obj.down_thread_client_connection_chk_event_call_check);
10077 // unit_test [5] down_thread_realserver_receive realserver_recv down_thread_current_receive_realserver_socket inclement & cyclic check
10078 std::cerr << "[5] down_thread_realserver_receive realserver_recv down_thread_current_receive_realserver_socket inclement & cyclic check" << std::endl;
10079 std::list< std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > >::iterator check_it;
10080 rs_cur = rs_list.begin();
10081 check_it = rs_list.begin();
10082 test_obj.test_call_realserver_receive();
10084 BOOST_CHECK(check_it == rs_cur);
10085 test_obj.test_call_realserver_receive();
10087 BOOST_CHECK(check_it == rs_cur);
10088 test_obj.test_call_realserver_receive();
10089 check_it = rs_list.begin();
10090 BOOST_CHECK(check_it == rs_cur);
10092 // unit_test [6] down_thread_realserver_receive qos check
10093 std::cerr << "[6] down_thread_realserver_receive qos check" << std::endl;
10094 socket.read_some_res = 0;
10096 // wait = 0 >> receive
10097 rs_cur = rs_list.begin();
10098 socket.read_some_call_check = false;
10099 vs.get_wait_downstream_res = 0;
10100 test_obj.test_call_realserver_receive();
10101 BOOST_CHECK(socket.read_some_call_check);
10103 // wait = 1 >> not receive
10104 rs_cur = rs_list.begin();
10105 socket.read_some_call_check = false;
10106 vs.get_wait_downstream_res = 1;
10107 test_obj.test_call_realserver_receive();
10108 BOOST_CHECK(!socket.read_some_call_check);
10110 socket.read_some_res = MAX_BUFFER_SIZE;
10111 vs.get_throughput_downstream_res = 0;
10112 vs.get_wait_downstream_res = 0;
10114 // unit_test [7] down_thread_realserver_receive receive size 0 check
10115 std::cerr << "[7] down_thread_realserver_receive receive size 0 check" << std::endl;
10116 rs_cur = rs_list.begin();
10117 test_obj.set_down_thread_next_function_call_exit();
10118 socket.read_some_res = 0;
10119 test_obj.test_call_realserver_receive();
10120 test_obj.down_thread_realserver_receive_call_check = false;
10121 test_obj.next_down_function_call();
10122 BOOST_CHECK(test_obj.down_thread_realserver_receive_call_check);
10123 socket.read_some_res = MAX_BUFFER_SIZE;
10125 // unit_test [8] down_thread_realserver_receive socket error (try_again) check
10126 std::cerr << "[8] down_thread_realserver_receive socket error (try_again) check" << std::endl;
10127 rs_cur = rs_list.begin();
10128 test_obj.set_down_thread_next_function_call_exit();
10129 socket.read_some_ec = boost::asio::error::try_again;
10130 test_obj.test_call_realserver_receive();
10131 test_obj.down_thread_realserver_receive_call_check = false;
10132 test_obj.next_down_function_call();
10133 BOOST_CHECK(test_obj.down_thread_realserver_receive_call_check);
10134 socket.read_some_ec.clear();
10136 // unit_test [9] down_thread_realserver_receive socket error (eof) check
10137 std::cerr << "[9] down_thread_realserver_receive socket error (eof) check" << std::endl;
10138 rs_cur = rs_list.begin();
10139 test_obj.set_down_thread_next_function_call_exit();
10140 socket.read_some_ec = boost::asio::error::eof;
10141 test_obj.test_call_realserver_receive();
10142 test_obj.down_thread_realserver_disconnect_call_check = false;
10143 test_obj.next_down_function_call();
10144 BOOST_CHECK(test_obj.down_thread_realserver_disconnect_call_check);
10145 socket.read_some_ec.clear();
10147 // unit_test [10] down_thread_realserver_receive socket error (connection_reset) check
10148 std::cerr << "[10] down_thread_realserver_receive socket error (connection_reset) check" << std::endl;
10149 rs_cur = rs_list.begin();
10150 test_obj.set_down_thread_next_function_call_exit();
10151 socket.read_some_ec = boost::asio::error::connection_reset;
10152 test_obj.test_call_realserver_receive();
10153 test_obj.down_thread_realserver_disconnect_call_check = false;
10154 test_obj.next_down_function_call();
10155 BOOST_CHECK(test_obj.down_thread_realserver_disconnect_call_check);
10156 socket.read_some_ec.clear();
10158 // unit_test [11] down_thread_realserver_receive socket error (bad_descriptor) check
10159 std::cerr << "[11] down_thread_realserver_receive socket error (bad_descriptor) check" << std::endl;
10160 rs_cur = rs_list.begin();
10161 test_obj.set_down_thread_next_function_call_exit();
10162 socket.read_some_ec = boost::asio::error::bad_descriptor;
10163 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
10164 l7vs::Logger::putLogError_id = 0;
10165 test_obj.test_call_realserver_receive();
10166 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE,l7vs::Logger::putLogError_category);
10167 BOOST_CHECK_EQUAL(0,l7vs::Logger::putLogError_id);
10168 std::cerr << l7vs::Logger::putLogError_message << std::endl;
10169 test_obj.down_thread_realserver_disconnect_call_check = false;
10170 test_obj.next_down_function_call();
10171 BOOST_CHECK(test_obj.down_thread_realserver_disconnect_call_check);
10172 socket.read_some_ec.clear();
10174 // unit_test [12] down_thread_realserver_receive closed socket error (bad_descriptor) check
10175 std::cerr << "[12] down_thread_realserver_receive closed socket error (bad_descriptor) check" << std::endl;
10176 rs_cur = rs_list.begin();
10177 test_obj.set_down_thread_next_function_call_exit();
10178 socket.read_some_ec = boost::asio::error::bad_descriptor;
10179 socket.is_open_res = false;
10180 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
10181 l7vs::Logger::putLogError_id = 0;
10182 test_obj.test_call_realserver_receive();
10183 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE,l7vs::Logger::putLogError_category);
10184 BOOST_CHECK_EQUAL(0,l7vs::Logger::putLogError_id);
10185 test_obj.down_thread_realserver_disconnect_call_check = false;
10186 test_obj.next_down_function_call();
10187 BOOST_CHECK(test_obj.down_thread_realserver_disconnect_call_check);
10188 socket.read_some_ec.clear();
10190 // unit_test [13] down_thread_realserver_receive not fond function error check
10191 std::cerr << "[13] down_thread_realserver_receive not fond function error check" << std::endl;
10192 test_obj.down_thread_function_array_clear();
10193 test_obj.down_thread_exit_call_check = false;
10194 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
10195 l7vs::Logger::putLogError_id = 0;
10196 test_obj.test_call_realserver_receive();
10197 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
10198 BOOST_CHECK_EQUAL(71,l7vs::Logger::putLogError_id);
10199 std::cerr << l7vs::Logger::putLogError_message << std::endl;
10200 BOOST_CHECK(test_obj.down_thread_exit_call_check);
10202 // unit_test [14] down_thread_realserver_receive returnd illegal EVENT_TAG error check
10203 std::cerr << "[14] down_thread_realserver_receive returnd illegal EVENT_TAG error check" << std::endl;
10204 test_obj.down_thread_module_event_map_clear();
10205 test_obj.down_thread_exit_call_check = false;
10206 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
10207 l7vs::Logger::putLogError_id = 0;
10208 test_obj.test_call_realserver_receive();
10209 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
10210 BOOST_CHECK_EQUAL(70,l7vs::Logger::putLogError_id);
10211 std::cerr << l7vs::Logger::putLogError_message << std::endl;
10212 BOOST_CHECK(test_obj.down_thread_exit_call_check);
10214 // unit_test [15] down_thread_realserver_receive empty down_thread_receive_realserver_socket_list check
10215 std::cerr << "[15] down_thread_realserver_receive empty down_thread_receive_realserver_socket_list check" << std::endl;
10216 rs_cur = rs_list.begin();
10217 std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > sock_pair = *rs_cur;
10219 // BOOST_CHECK(*rs_cur == sock_pair);
10220 socket.read_some_call_check = false;
10221 test_obj.test_call_realserver_receive();
10222 BOOST_CHECK(!socket.read_some_call_check);
10224 BOOST_MESSAGE( "----- down_thread_realserver_receive test end -----" );
10227 // down_thread_sorryserver_receive test
10228 void down_thread_sorryserver_receive_test(){
10229 BOOST_MESSAGE( "----- down_thread_sorryserver_receive test start -----" );
10230 // boost::asio::io_service io;
10231 // l7vs::virtualservice_tcp vs;
10232 l7vs::virtualservice_tcp vs;
10233 boost::asio::io_service io;
10234 l7vs::tcp_socket_option_info set_option;
10235 //! TCP_NODELAY (false:not set,true:set option)
10236 set_option.nodelay_opt = false;
10237 //! TCP_NODELAY option value (false:off,true:on)
10238 set_option.nodelay_val = false;
10239 //! TCP_CORK (false:not set,true:set option)
10240 set_option.cork_opt = false;
10241 //! TCP_CORK option value (false:off,true:on)
10242 set_option.cork_val = false;
10243 //! TCP_QUICKACK (false:not set,true:set option)
10244 set_option.quickack_opt = false;
10245 //! TCP_QUICKACK option value (false:off,true:on)
10246 set_option.quickack_val = false;
10248 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
10249 bool set_mode(false);
10250 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
10251 bool set_ssl_cache_flag(false);
10252 int set_ssl_handshake_time_out = 0;
10253 //std::string access_log_file_name = "test";
10254 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
10256 std::string test_protocol_name("test protocol");
10257 l7vs::test_protocol_module proto_test(test_protocol_name);
10258 // receive_send_test_class test_obj(vs,io);
10259 receive_send_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
10261 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
10262 boost::thread::id proc_id = boost::this_thread::get_id();
10264 l7vs::tcp_data& down_thread_data_dest_side = test_obj.get_down_thread_data_dest_side();
10266 // set sorryserver socket
10267 std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > >& socket_pair = test_obj.get_sorryserver_socket();
10268 boost::asio::ip::tcp::endpoint& sorry_end = socket_pair.first;
10269 l7vs::tcp_socket& socket = *(socket_pair.second);
10270 sorry_end.address(boost::asio::ip::address::from_string(DUMMY_SERVER_IP));
10271 sorry_end.port(7000);
10273 socket.read_some_res = MAX_BUFFER_SIZE;
10274 socket.read_some_ec.clear();
10275 socket.is_open_res = true;
10276 char set_char = CHAR_MIN;
10277 for(int j = 0;j < MAX_BUFFER_SIZE;j++){
10278 socket.read_some_buffers_out[j] = set_char;
10279 if(set_char == CHAR_MAX)
10280 set_char = CHAR_MIN;
10284 socket.read_some_buffers_size_in = 0;
10285 socket.read_some_call_check = false;
10287 down_thread_data_dest_side.initialize();
10288 test_obj.set_down_thread_id(proc_id);
10289 test_obj.set_up_thread_id(boost::thread::id());
10290 test_obj.down_thread_client_connection_chk_event_call_check = false;
10291 test_obj.down_thread_realserver_disconnect_call_check = false;
10292 test_obj.down_thread_exit_call_check = false;
10293 test_obj.down_thread_realserver_receive_call_check = false;
10295 vs.get_qos_downstream_res = 104857600;
10296 vs.get_throughput_downstream_res = 0;
10297 vs.update_down_recv_size_in = 0;
10298 // protocol module set
10299 proto_test.handle_sorryserver_recv_res_tag = l7vs::protocol_module_base::CLIENT_CONNECTION_CHECK;
10300 proto_test.handle_sorryserver_recv_in_thread_id = boost::thread::id();
10301 for(int i = 0;i < MAX_BUFFER_SIZE;i++){
10302 proto_test.handle_sorryserver_recv_in_recvbuffer[i] = '\0';
10304 proto_test.handle_sorryserver_recv_in_recvlen = 0;
10305 proto_test.handle_sorryserver_recv_in_sorry_endpoint = boost::asio::ip::tcp::endpoint();
10307 l7vs::Logger::test_loglevel = l7vs::LOG_LV_DEBUG;
10308 l7vs::Logger::putLogDebug_category = l7vs::LOG_CAT_NONE;
10309 l7vs::Logger::putLogDebug_id = 0;
10311 test_obj.test_call_sorryserver_receive();
10313 // unit_test [1] down_thread_sorryserver_receive sorryserver read_some call check
10314 std::cerr << "[1] down_thread_sorryserver_receive sorryserver read_some call check" << std::endl;
10315 BOOST_CHECK(socket.read_some_call_check);
10316 BOOST_CHECK(socket.read_some_buffers_out == down_thread_data_dest_side.get_data());
10317 BOOST_CHECK(socket.read_some_buffers_size_in == MAX_BUFFER_SIZE);
10318 BOOST_CHECK(socket.read_some_res == down_thread_data_dest_side.get_size());
10319 BOOST_CHECK(sorry_end == down_thread_data_dest_side.get_endpoint());
10321 // unit_test [2] down_thread_sorryserver_receive protocol module handle_sorryserver_recv call check
10322 std::cerr << "[2] down_thread_sorryserver_receive protocol module handle_sorryserver_recv call check" << std::endl;
10323 BOOST_CHECK(proto_test.handle_sorryserver_recv_in_thread_id == proc_id);
10324 BOOST_CHECK(proto_test.handle_sorryserver_recv_in_recvlen == socket.read_some_res);
10325 BOOST_CHECK(proto_test.handle_sorryserver_recv_in_recvbuffer == socket.read_some_buffers_out);
10326 BOOST_CHECK(proto_test.handle_sorryserver_recv_in_sorry_endpoint == sorry_end);
10328 // unit_test [3] down_thread_sorryserver_receive down_thread_next_call_function update check
10329 std::cerr << "[3] down_thread_sorryserver_receive down_thread_next_call_function update check" << std::endl;
10330 test_obj.next_down_function_call();
10331 BOOST_CHECK(test_obj.down_thread_client_connection_chk_event_call_check);
10333 // unit_test [4] down_thread_sorryserver_receive receive size 0 check
10334 std::cerr << "[4] down_thread_sorryserver_receive receive size 0 check" << std::endl;
10335 test_obj.set_down_thread_next_function_call_exit();
10336 socket.read_some_res = 0;
10337 test_obj.test_call_sorryserver_receive();
10338 test_obj.down_thread_sorryserver_receive_call_check = false;
10339 test_obj.next_down_function_call();
10340 BOOST_CHECK(test_obj.down_thread_sorryserver_receive_call_check);
10341 socket.read_some_res = MAX_BUFFER_SIZE;
10343 // unit_test [5] down_thread_sorryserver_receive socket error (try_again) check
10344 std::cerr << "[5] down_thread_sorryserver_receive socket error (try_again) check" << std::endl;
10345 test_obj.set_down_thread_next_function_call_exit();
10346 socket.read_some_ec = boost::asio::error::try_again;
10347 test_obj.test_call_sorryserver_receive();
10348 test_obj.down_thread_sorryserver_receive_call_check = false;
10349 test_obj.next_down_function_call();
10350 BOOST_CHECK(test_obj.down_thread_sorryserver_receive_call_check);
10351 socket.read_some_ec.clear();
10353 // unit_test [6] down_thread_sorryserver_receive socket error (eof) check
10354 std::cerr << "[6] down_thread_sorryserver_receive socket error (eof) check" << std::endl;
10355 test_obj.set_down_thread_next_function_call_exit();
10356 socket.read_some_ec = boost::asio::error::eof;
10357 test_obj.test_call_sorryserver_receive();
10358 test_obj.down_thread_sorryserver_disconnect_call_check = false;
10359 test_obj.next_down_function_call();
10360 BOOST_CHECK(test_obj.down_thread_sorryserver_disconnect_call_check);
10361 socket.read_some_ec.clear();
10363 // unit_test [7] down_thread_sorryserver_receive socket error (connection_reset) check
10364 std::cerr << "[7] down_thread_sorryserver_receive socket error (connection_reset) check" << std::endl;
10365 test_obj.set_down_thread_next_function_call_exit();
10366 socket.read_some_ec = boost::asio::error::connection_reset;
10367 test_obj.test_call_sorryserver_receive();
10368 test_obj.down_thread_sorryserver_disconnect_call_check = false;
10369 test_obj.next_down_function_call();
10370 BOOST_CHECK(test_obj.down_thread_sorryserver_disconnect_call_check);
10371 socket.read_some_ec.clear();
10373 // unit_test [8] down_thread_sorryserver_receive socket error (bad_descriptor) check
10374 std::cerr << "[8] down_thread_sorryserver_receive socket error (bad_descriptor) check" << std::endl;
10375 test_obj.set_down_thread_next_function_call_exit();
10376 socket.read_some_ec = boost::asio::error::bad_descriptor;
10377 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
10378 l7vs::Logger::putLogError_id = 0;
10379 test_obj.test_call_sorryserver_receive();
10380 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE,l7vs::Logger::putLogError_category);
10381 BOOST_CHECK_EQUAL(0,l7vs::Logger::putLogError_id);
10382 std::cerr << l7vs::Logger::putLogError_message << std::endl;
10383 test_obj.down_thread_sorryserver_disconnect_call_check = false;
10384 test_obj.next_down_function_call();
10385 BOOST_CHECK(test_obj.down_thread_sorryserver_disconnect_call_check);
10386 socket.read_some_ec.clear();
10388 // unit_test [9] down_thread_sorryserver_receive closed socket error (bad_descriptor) check
10389 std::cerr << "[9] down_thread_sorryserver_receive closed socket error (bad_descriptor) check" << std::endl;
10390 test_obj.set_down_thread_next_function_call_exit();
10391 socket.read_some_ec = boost::asio::error::bad_descriptor;
10392 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
10393 l7vs::Logger::putLogError_id = 0;
10394 socket.is_open_res = false;
10395 test_obj.test_call_sorryserver_receive();
10396 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE,l7vs::Logger::putLogError_category);
10397 BOOST_CHECK_EQUAL(0,l7vs::Logger::putLogError_id);
10398 test_obj.down_thread_sorryserver_disconnect_call_check = false;
10399 test_obj.next_down_function_call();
10400 BOOST_CHECK(test_obj.down_thread_sorryserver_disconnect_call_check);
10401 socket.read_some_ec.clear();
10403 // unit_test [10] down_thread_sorryserver_receive not fond function error check
10404 std::cerr << "[10] down_thread_sorryserver_receive not fond function error check" << std::endl;
10405 test_obj.down_thread_function_array_clear();
10406 test_obj.down_thread_exit_call_check = false;
10407 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
10408 l7vs::Logger::putLogError_id = 0;
10409 test_obj.test_call_sorryserver_receive();
10410 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
10411 BOOST_CHECK_EQUAL(89,l7vs::Logger::putLogError_id);
10412 std::cerr << l7vs::Logger::putLogError_message << std::endl;
10413 BOOST_CHECK(test_obj.down_thread_exit_call_check);
10415 // unit_test [11] down_thread_sorryserver_receive returnd illegal EVENT_TAG error check
10416 std::cerr << "[11] down_thread_sorryserver_receive returnd illegal EVENT_TAG error check" << std::endl;
10417 test_obj.down_thread_module_event_map_clear();
10418 test_obj.down_thread_exit_call_check = false;
10419 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
10420 l7vs::Logger::putLogError_id = 0;
10421 test_obj.test_call_sorryserver_receive();
10422 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
10423 BOOST_CHECK_EQUAL(88,l7vs::Logger::putLogError_id);
10424 std::cerr << l7vs::Logger::putLogError_message << std::endl;
10425 BOOST_CHECK(test_obj.down_thread_exit_call_check);
10427 BOOST_MESSAGE( "----- down_thread_sorryserver_receive test end -----" );
10430 // up_thread_realserver_send test
10431 void up_thread_realserver_send_test(){
10432 BOOST_MESSAGE( "----- up_thread_realserver_send test end -----" );
10433 // boost::asio::io_service io;
10434 // l7vs::virtualservice_tcp vs;
10435 l7vs::virtualservice_tcp vs;
10436 boost::asio::io_service io;
10437 l7vs::tcp_socket_option_info set_option;
10438 //! TCP_NODELAY (false:not set,true:set option)
10439 set_option.nodelay_opt = false;
10440 //! TCP_NODELAY option value (false:off,true:on)
10441 set_option.nodelay_val = false;
10442 //! TCP_CORK (false:not set,true:set option)
10443 set_option.cork_opt = false;
10444 //! TCP_CORK option value (false:off,true:on)
10445 set_option.cork_val = false;
10446 //! TCP_QUICKACK (false:not set,true:set option)
10447 set_option.quickack_opt = false;
10448 //! TCP_QUICKACK option value (false:off,true:on)
10449 set_option.quickack_val = false;
10451 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
10452 bool set_mode(false);
10453 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
10454 bool set_ssl_cache_flag(false);
10455 int set_ssl_handshake_time_out = 0;
10456 //std::string access_log_file_name = "test";
10457 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
10459 std::string test_protocol_name("test protocol");
10460 l7vs::test_protocol_module proto_test(test_protocol_name);
10461 // up_thread_realserver_send
10462 // receive_send_test_class test_obj(vs,io);
10463 receive_send_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
10465 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
10466 boost::thread::id proc_id = boost::this_thread::get_id();
10468 l7vs::tcp_data& send_data = test_obj.get_up_thread_data_dest_side();
10470 // set realserver socket
10471 std::map<boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > >& rs_map = test_obj.get_up_thread_send_realserver_socket_map();
10472 std::map<boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > >::iterator rs_it;
10473 std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > push_pair;
10474 for(int i = 0 ; i < 3 ;i++){
10475 boost::shared_ptr< l7vs::tcp_socket > new_socket(new l7vs::tcp_socket(io));
10476 push_pair.first.address(boost::asio::ip::address::from_string(DUMMY_SERVER_IP));
10477 push_pair.first.port(7000+i);
10478 push_pair.second = new_socket;
10479 new_socket->write_some_res = MAX_BUFFER_SIZE;
10480 new_socket->write_some_ec.clear();
10481 new_socket->write_some_buffers_in = NULL;
10482 new_socket->write_some_buffers_size_in = 0;
10483 new_socket->write_some_call_check = false;
10484 rs_map.insert(push_pair);
10488 send_data.initialize();
10489 send_data.set_size(MAX_BUFFER_SIZE);
10490 boost::asio::ip::tcp::endpoint send_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP),7002);
10491 send_data.set_endpoint(send_end);
10492 test_obj.set_up_thread_id(proc_id);
10493 test_obj.set_down_thread_id(boost::thread::id());
10494 test_obj.up_thread_client_receive_call_check = false;
10495 test_obj.up_thread_realserver_disconnect_call_check = false;
10496 test_obj.up_thread_exit_call_check = false;
10497 test_obj.up_thread_realserver_get_destination_event_call_check = false;
10499 vs.update_up_send_size_in = 0;
10500 // protocol module set
10501 proto_test.handle_realserver_send_res_tag = l7vs::protocol_module_base::CLIENT_RECV;
10502 proto_test.handle_realserver_send_in_thread_id = boost::thread::id();
10504 rs_it = rs_map.find(send_end);
10505 l7vs::tcp_socket& socket = *(rs_it->second);
10507 l7vs::Logger::test_loglevel = l7vs::LOG_LV_DEBUG;
10508 l7vs::Logger::putLogDebug_category = l7vs::LOG_CAT_NONE;
10509 l7vs::Logger::putLogDebug_id = 0;
10511 test_obj.test_call_realserver_send();
10513 // unit_test [1] up_thread_realserver_send realserver_socket write_some call check
10514 std::cerr << "[1] up_thread_realserver_send realserver_socket write_some call check" << std::endl;
10515 BOOST_CHECK(socket.write_some_call_check);
10516 BOOST_CHECK(socket.write_some_buffers_in == (void*)&(send_data.get_data()));
10517 BOOST_CHECK(socket.write_some_buffers_size_in == MAX_BUFFER_SIZE);
10518 BOOST_CHECK(socket.write_some_res == send_data.get_send_size());
10520 // unit_test [2] up_thread_realserver_send virtualservice update_up_send_size_in call check
10521 std::cerr << "[2] up_thread_realserver_send virtualservice update_up_send_size_in call check" << std::endl;
10522 BOOST_CHECK(vs.update_up_send_size_in == MAX_BUFFER_SIZE);
10524 // unit_test [3] up_thread_realserver_send protocol module handle_realserver_send call check
10525 std::cerr << "[3] up_thread_realserver_send protocol module handle_realserver_send call check" << std::endl;
10526 BOOST_CHECK(proto_test.handle_realserver_send_in_thread_id == proc_id);
10528 // unit_test [4] up_thread_realserver_send up_thread_next_call_function update check
10529 std::cerr << "[4] up_thread_realserver_send up_thread_next_call_function update check" << std::endl;
10530 test_obj.next_up_function_call();
10531 BOOST_CHECK(test_obj.up_thread_client_receive_call_check);
10533 // unit_test [5] up_thread_realserver_send send size check
10534 std::cerr << "[5] up_thread_realserver_send send size check" << std::endl;
10535 send_data.set_send_size(0);
10536 socket.write_some_res = 0;
10537 test_obj.set_up_thread_next_function_call_exit();
10538 socket.write_some_buffers_in = NULL;
10539 test_obj.test_call_realserver_send();
10540 // BOOST_CHECK((char*)socket.write_some_buffers_in == (char*)&(send_data.get_data()) + 0);
10541 BOOST_CHECK((char*)socket.write_some_buffers_in == (send_data.get_data().data() + 0));
10542 test_obj.up_thread_realserver_send_call_check = false;
10543 test_obj.next_up_function_call();
10544 BOOST_CHECK(test_obj.up_thread_realserver_send_call_check);
10546 socket.write_some_res = MAX_BUFFER_SIZE / 3;
10547 test_obj.set_up_thread_next_function_call_exit();
10548 socket.write_some_buffers_in = NULL;
10549 test_obj.test_call_realserver_send();
10550 // BOOST_CHECK((char*)socket.write_some_buffers_in == (char*)&(send_data.get_data()) + 0);
10551 BOOST_CHECK((char*)socket.write_some_buffers_in == (send_data.get_data().data() + 0));
10552 test_obj.up_thread_realserver_send_call_check = false;
10553 test_obj.next_up_function_call();
10554 BOOST_CHECK(test_obj.up_thread_realserver_send_call_check);
10556 socket.write_some_res = MAX_BUFFER_SIZE / 3;
10557 test_obj.set_up_thread_next_function_call_exit();
10558 socket.write_some_buffers_in = NULL;
10559 test_obj.test_call_realserver_send();
10560 // BOOST_CHECK((char*)socket.write_some_buffers_in == (char*)(&(send_data.get_data()) + (MAX_BUFFER_SIZE / 3)));
10561 BOOST_CHECK((char*)socket.write_some_buffers_in == (send_data.get_data().data() + (MAX_BUFFER_SIZE / 3)));
10562 test_obj.up_thread_realserver_send_call_check = false;
10563 test_obj.next_up_function_call();
10564 BOOST_CHECK(test_obj.up_thread_realserver_send_call_check);
10566 socket.write_some_res = MAX_BUFFER_SIZE - send_data.get_send_size();
10567 test_obj.set_up_thread_next_function_call_exit();
10568 socket.write_some_buffers_in = NULL;
10569 test_obj.test_call_realserver_send();
10570 // BOOST_CHECK((char*)socket.write_some_buffers_in == (char*)(&(send_data.get_data()) + (MAX_BUFFER_SIZE / 3) * 2));
10571 BOOST_CHECK((char*)socket.write_some_buffers_in == (send_data.get_data().data() + (MAX_BUFFER_SIZE / 3) * 2));
10572 test_obj.up_thread_client_receive_call_check = false;
10573 test_obj.next_up_function_call();
10574 BOOST_CHECK(test_obj.up_thread_client_receive_call_check);
10576 socket.write_some_res = MAX_BUFFER_SIZE;
10578 // unit_test [6] up_thread_realserver_send socket error (try_again) check
10579 std::cerr << "[6] up_thread_realserver_send socket error (try_again) check" << std::endl;
10580 send_data.set_send_size(0);
10581 test_obj.set_up_thread_next_function_call_exit();
10582 socket.write_some_ec = boost::asio::error::try_again;
10583 test_obj.test_call_realserver_send();
10584 test_obj.up_thread_realserver_send_call_check = false;
10585 test_obj.next_up_function_call();
10586 BOOST_CHECK(test_obj.up_thread_realserver_send_call_check);
10587 socket.read_some_ec.clear();
10589 // unit_test [7] up_thread_realserver_send socket error (eof) check
10590 std::cerr << "[7] up_thread_realserver_send socket error (eof) check" << std::endl;
10591 send_data.set_send_size(0);
10592 test_obj.set_up_thread_next_function_call_exit();
10593 socket.write_some_ec = boost::asio::error::eof;
10594 test_obj.test_call_realserver_send();
10595 test_obj.up_thread_realserver_disconnect_call_check = false;
10596 test_obj.next_up_function_call();
10597 BOOST_CHECK(test_obj.up_thread_realserver_disconnect_call_check);
10598 socket.read_some_ec.clear();
10600 // unit_test [8] up_thread_realserver_send socket error (connection_reset) check
10601 std::cerr << "[8] up_thread_realserver_send socket error (connection_reset) check" << std::endl;
10602 send_data.set_send_size(0);
10603 test_obj.set_up_thread_next_function_call_exit();
10604 socket.write_some_ec = boost::asio::error::connection_reset;
10605 test_obj.test_call_realserver_send();
10606 test_obj.up_thread_realserver_disconnect_call_check = false;
10607 test_obj.next_up_function_call();
10608 BOOST_CHECK(test_obj.up_thread_realserver_disconnect_call_check);
10609 socket.read_some_ec.clear();
10611 // unit_test [9] up_thread_realserver_send socket error (bad_descriptor) check
10612 std::cerr << "[9] up_thread_realserver_send socket error (bad_descriptor) check" << std::endl;
10613 send_data.set_send_size(0);
10614 test_obj.set_up_thread_next_function_call_exit();
10615 socket.write_some_ec = boost::asio::error::bad_descriptor;
10616 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
10617 l7vs::Logger::putLogError_id = 0;
10618 test_obj.test_call_realserver_send();
10619 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE,l7vs::Logger::putLogError_category);
10620 BOOST_CHECK_EQUAL(0,l7vs::Logger::putLogError_id);
10621 test_obj.up_thread_realserver_disconnect_call_check = false;
10622 test_obj.next_up_function_call();
10623 BOOST_CHECK(test_obj.up_thread_realserver_disconnect_call_check);
10624 socket.read_some_ec.clear();
10626 // unit_test [10] up_thread_realserver_send not fond function error check
10627 std::cerr << "[10] up_thread_realserver_send not fond function error check" << std::endl;
10628 send_data.set_send_size(0);
10629 test_obj.up_thread_function_array_clear();
10630 test_obj.up_thread_exit_call_check = false;
10631 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
10632 l7vs::Logger::putLogError_id = 0;
10633 test_obj.test_call_realserver_send();
10634 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
10635 BOOST_CHECK_EQUAL(31,l7vs::Logger::putLogError_id);
10636 std::cerr << l7vs::Logger::putLogError_message << std::endl;
10637 BOOST_CHECK(test_obj.up_thread_exit_call_check);
10639 // unit_test [11] up_thread_realserver_send returnd illegal EVENT_TAG error check
10640 std::cerr << "[11] up_thread_realserver_send returnd illegal EVENT_TAG error check" << std::endl;
10641 send_data.set_send_size(0);
10642 send_data.set_size(MAX_BUFFER_SIZE);
10643 socket.write_some_ec.clear();
10644 test_obj.up_thread_module_event_map_clear();
10645 test_obj.up_thread_exit_call_check = false;
10646 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
10647 l7vs::Logger::putLogError_id = 0;
10648 test_obj.test_call_realserver_send();
10649 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
10650 BOOST_CHECK_EQUAL(30,l7vs::Logger::putLogError_id);
10651 std::cerr << l7vs::Logger::putLogError_message << std::endl;
10652 BOOST_CHECK(test_obj.up_thread_exit_call_check);
10654 BOOST_MESSAGE( "----- up_thread_realserver_send test end -----" );
10657 // up_thread_sorryserver_send test
10658 void up_thread_sorryserver_send_test(){
10659 BOOST_MESSAGE( "----- up_thread_sorryserver_send test end -----" );
10660 // boost::asio::io_service io;
10661 // l7vs::virtualservice_tcp vs;
10662 l7vs::virtualservice_tcp vs;
10663 boost::asio::io_service io;
10664 l7vs::tcp_socket_option_info set_option;
10665 //! TCP_NODELAY (false:not set,true:set option)
10666 set_option.nodelay_opt = false;
10667 //! TCP_NODELAY option value (false:off,true:on)
10668 set_option.nodelay_val = false;
10669 //! TCP_CORK (false:not set,true:set option)
10670 set_option.cork_opt = false;
10671 //! TCP_CORK option value (false:off,true:on)
10672 set_option.cork_val = false;
10673 //! TCP_QUICKACK (false:not set,true:set option)
10674 set_option.quickack_opt = false;
10675 //! TCP_QUICKACK option value (false:off,true:on)
10676 set_option.quickack_val = false;
10678 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
10679 bool set_mode(false);
10680 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
10681 bool set_ssl_cache_flag(false);
10682 int set_ssl_handshake_time_out = 0;
10683 //std::string access_log_file_name = "test";
10684 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
10686 std::string test_protocol_name("test protocol");
10687 l7vs::test_protocol_module proto_test(test_protocol_name);
10688 // up_thread_sorryserver_send
10689 // receive_send_test_class test_obj(vs,io);
10690 receive_send_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
10692 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
10693 boost::thread::id proc_id = boost::this_thread::get_id();
10695 l7vs::tcp_data& send_data = test_obj.get_up_thread_data_dest_side();
10697 // set sorryserver socket
10698 std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > >& sorry_pair = test_obj.get_sorryserver_socket();
10699 sorry_pair.first = boost::asio::ip::tcp::endpoint();
10702 send_data.initialize();
10703 send_data.set_size(MAX_BUFFER_SIZE);
10704 boost::asio::ip::tcp::endpoint send_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP),7000);
10705 send_data.set_endpoint(send_end);
10706 test_obj.set_up_thread_id(proc_id);
10707 test_obj.set_down_thread_id(boost::thread::id());
10708 test_obj.up_thread_client_receive_call_check = false;
10709 test_obj.up_thread_sorryserver_disconnect_call_check = false;
10710 test_obj.up_thread_exit_call_check = false;
10711 test_obj.up_thread_sorryserver_get_destination_event_call_check = false;
10713 vs.update_up_send_size_in = 0;
10714 // protocol module set
10715 proto_test.handle_sorryserver_send_res_tag = l7vs::protocol_module_base::CLIENT_RECV;
10716 proto_test.handle_sorryserver_send_in_thread_id = boost::thread::id();
10718 l7vs::tcp_socket& socket = *(sorry_pair.second);
10719 socket.write_some_res = MAX_BUFFER_SIZE;
10720 socket.write_some_ec.clear();
10721 socket.write_some_buffers_in = NULL;
10722 socket.write_some_buffers_size_in = 0;
10723 socket.write_some_call_check = false;
10725 l7vs::Logger::test_loglevel = l7vs::LOG_LV_DEBUG;
10726 l7vs::Logger::putLogDebug_category = l7vs::LOG_CAT_NONE;
10727 l7vs::Logger::putLogDebug_id = 0;
10729 test_obj.test_call_sorryserver_send();
10731 // unit_test [1] up_thread_sorryserver_send realserver_socket write_some call check
10732 std::cerr << "[1] up_thread_sorryserver_send realserver_socket write_some call check" << std::endl;
10733 BOOST_CHECK(socket.write_some_call_check);
10734 BOOST_CHECK(socket.write_some_buffers_in == (void*)&(send_data.get_data()));
10735 BOOST_CHECK(socket.write_some_buffers_size_in == MAX_BUFFER_SIZE);
10736 BOOST_CHECK(socket.write_some_res == send_data.get_send_size());
10738 // unit_test [2] up_thread_sorryserver_send protocol module handle_realserver_send call check
10739 std::cerr << "[2] up_thread_sorryserver_send protocol module handle_realserver_send call check" << std::endl;
10740 BOOST_CHECK(proto_test.handle_sorryserver_send_in_thread_id == proc_id);
10742 // unit_test [3] up_thread_sorryserver_send up_thread_next_call_function update check
10743 std::cerr << "[3] up_thread_sorryserver_send up_thread_next_call_function update check" << std::endl;
10744 test_obj.next_up_function_call();
10745 BOOST_CHECK(test_obj.up_thread_client_receive_call_check);
10747 // unit_test [4] up_thread_sorryserver_send send size check
10748 std::cerr << "[4] up_thread_sorryserver_send send size check" << std::endl;
10749 send_data.set_send_size(0);
10750 socket.write_some_res = 0;
10751 test_obj.set_up_thread_next_function_call_exit();
10752 socket.write_some_buffers_in = NULL;
10753 test_obj.test_call_sorryserver_send();
10754 // BOOST_CHECK((char*)socket.write_some_buffers_in == (char*)&(send_data.get_data()) + 0);
10755 BOOST_CHECK((char*)socket.write_some_buffers_in == (send_data.get_data().data() + 0));
10756 test_obj.up_thread_sorryserver_send_call_check = false;
10757 test_obj.next_up_function_call();
10758 BOOST_CHECK(test_obj.up_thread_sorryserver_send_call_check);
10760 socket.write_some_res = MAX_BUFFER_SIZE / 3;
10761 test_obj.set_up_thread_next_function_call_exit();
10762 socket.write_some_buffers_in = NULL;
10763 test_obj.test_call_sorryserver_send();
10764 // BOOST_CHECK((char*)socket.write_some_buffers_in == (char*)&(send_data.get_data()) + 0);
10765 BOOST_CHECK((char*)socket.write_some_buffers_in == (send_data.get_data().data() + 0));
10766 test_obj.up_thread_sorryserver_send_call_check = false;
10767 test_obj.next_up_function_call();
10768 BOOST_CHECK(test_obj.up_thread_sorryserver_send_call_check);
10770 socket.write_some_res = MAX_BUFFER_SIZE / 3;
10771 test_obj.set_up_thread_next_function_call_exit();
10772 socket.write_some_buffers_in = NULL;
10773 test_obj.test_call_sorryserver_send();
10774 // BOOST_CHECK((char*)socket.write_some_buffers_in == (char*)(&(send_data.get_data()) + (MAX_BUFFER_SIZE / 3)));
10775 BOOST_CHECK((char*)socket.write_some_buffers_in == (send_data.get_data().data() + (MAX_BUFFER_SIZE / 3)));
10776 test_obj.up_thread_sorryserver_send_call_check = false;
10777 test_obj.next_up_function_call();
10778 BOOST_CHECK(test_obj.up_thread_sorryserver_send_call_check);
10780 socket.write_some_res = MAX_BUFFER_SIZE - send_data.get_send_size();
10781 test_obj.set_up_thread_next_function_call_exit();
10782 socket.write_some_buffers_in = NULL;
10783 test_obj.test_call_sorryserver_send();
10784 // BOOST_CHECK((char*)socket.write_some_buffers_in == (char*)(&(send_data.get_data()) + (MAX_BUFFER_SIZE / 3) * 2));
10785 BOOST_CHECK((char*)socket.write_some_buffers_in == (send_data.get_data().data() + (MAX_BUFFER_SIZE / 3) * 2));
10786 test_obj.up_thread_client_receive_call_check = false;
10787 test_obj.next_up_function_call();
10788 BOOST_CHECK(test_obj.up_thread_client_receive_call_check);
10790 socket.write_some_res = MAX_BUFFER_SIZE;
10792 // unit_test [5] up_thread_sorryserver_send socket error (try_again) check
10793 std::cerr << "[5] up_thread_sorryserver_send socket error (try_again) check" << std::endl;
10794 send_data.set_send_size(0);
10795 test_obj.set_up_thread_next_function_call_exit();
10796 socket.write_some_ec = boost::asio::error::try_again;
10797 test_obj.test_call_sorryserver_send();
10798 test_obj.up_thread_sorryserver_send_call_check = false;
10799 test_obj.next_up_function_call();
10800 BOOST_CHECK(test_obj.up_thread_sorryserver_send_call_check);
10801 socket.read_some_ec.clear();
10803 // unit_test [6] up_thread_sorryserver_send socket error (eof) check
10804 std::cerr << "[6] up_thread_sorryserver_send socket error (eof) check" << std::endl;
10805 send_data.set_send_size(0);
10806 test_obj.set_up_thread_next_function_call_exit();
10807 socket.write_some_ec = boost::asio::error::eof;
10808 test_obj.test_call_sorryserver_send();
10809 test_obj.up_thread_sorryserver_disconnect_call_check = false;
10810 test_obj.next_up_function_call();
10811 BOOST_CHECK(test_obj.up_thread_sorryserver_disconnect_call_check);
10812 socket.read_some_ec.clear();
10814 // unit_test [7] up_thread_sorryserver_send socket error (connection_reset) check
10815 std::cerr << "[7] up_thread_sorryserver_send socket error (connection_reset) check" << std::endl;
10816 send_data.set_send_size(0);
10817 test_obj.set_up_thread_next_function_call_exit();
10818 socket.write_some_ec = boost::asio::error::connection_reset;
10819 test_obj.test_call_sorryserver_send();
10820 test_obj.up_thread_sorryserver_disconnect_call_check = false;
10821 test_obj.next_up_function_call();
10822 BOOST_CHECK(test_obj.up_thread_sorryserver_disconnect_call_check);
10823 socket.read_some_ec.clear();
10825 // unit_test [8] up_thread_sorryserver_send socket error (bad_descriptor) check
10826 std::cerr << "[8] up_thread_sorryserver_send socket error (bad_descriptor) check" << std::endl;
10827 send_data.set_send_size(0);
10828 test_obj.set_up_thread_next_function_call_exit();
10829 socket.write_some_ec = boost::asio::error::bad_descriptor;
10830 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
10831 l7vs::Logger::putLogError_id = 0;
10832 test_obj.test_call_sorryserver_send();
10833 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE,l7vs::Logger::putLogError_category);
10834 BOOST_CHECK_EQUAL(0,l7vs::Logger::putLogError_id);
10835 std::cerr << l7vs::Logger::putLogError_message << std::endl;
10836 test_obj.up_thread_sorryserver_disconnect_call_check = false;
10837 test_obj.next_up_function_call();
10838 BOOST_CHECK(test_obj.up_thread_sorryserver_disconnect_call_check);
10839 socket.write_some_ec.clear();
10841 // unit_test [9] up_thread_sorryserver_send not fond function error check
10842 std::cerr << "[9] up_thread_sorryserver_send not fond function error check" << std::endl;
10843 send_data.set_send_size(0);
10844 test_obj.up_thread_function_array_clear();
10845 test_obj.up_thread_exit_call_check = false;
10846 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
10847 l7vs::Logger::putLogError_id = 0;
10848 test_obj.test_call_sorryserver_send();
10849 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
10850 BOOST_CHECK_EQUAL(50,l7vs::Logger::putLogError_id);
10851 std::cerr << l7vs::Logger::putLogError_message << std::endl;
10852 BOOST_CHECK(test_obj.up_thread_exit_call_check);
10854 // unit_test [10] up_thread_sorryserver_send returnd illegal EVENT_TAG error check
10855 std::cerr << "[10] up_thread_sorryserver_send returnd illegal EVENT_TAG error check" << std::endl;
10856 send_data.set_size(MAX_BUFFER_SIZE);
10857 send_data.set_send_size(0);
10858 test_obj.up_thread_module_event_map_clear();
10859 test_obj.up_thread_exit_call_check = false;
10860 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
10861 l7vs::Logger::putLogError_id = 0;
10862 test_obj.test_call_sorryserver_send();
10863 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
10864 BOOST_CHECK_EQUAL(49,l7vs::Logger::putLogError_id);
10865 std::cerr << l7vs::Logger::putLogError_message << std::endl;
10866 BOOST_CHECK(test_obj.up_thread_exit_call_check);
10868 BOOST_MESSAGE( "----- up_thread_sorryserver_send test end -----" );
10871 // down_thread_client_send test
10872 void down_thread_client_send_test(){
10873 BOOST_MESSAGE( "----- down_thread_client_send test end -----" );
10874 // boost::asio::io_service io;
10875 // l7vs::virtualservice_tcp vs;
10876 l7vs::virtualservice_tcp vs;
10877 boost::asio::io_service io;
10878 l7vs::tcp_socket_option_info set_option;
10879 //! TCP_NODELAY (false:not set,true:set option)
10880 set_option.nodelay_opt = false;
10881 //! TCP_NODELAY option value (false:off,true:on)
10882 set_option.nodelay_val = false;
10883 //! TCP_CORK (false:not set,true:set option)
10884 set_option.cork_opt = false;
10885 //! TCP_CORK option value (false:off,true:on)
10886 set_option.cork_val = false;
10887 //! TCP_QUICKACK (false:not set,true:set option)
10888 set_option.quickack_opt = false;
10889 //! TCP_QUICKACK option value (false:off,true:on)
10890 set_option.quickack_val = false;
10892 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
10893 bool set_mode(false);
10894 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
10895 bool set_ssl_cache_flag(false);
10896 int set_ssl_handshake_time_out = 0;
10897 //std::string access_log_file_name = "test";
10898 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
10900 std::string test_protocol_name("test protocol");
10901 l7vs::test_protocol_module proto_test(test_protocol_name);
10902 // up_thread_sorryserver_send
10903 receive_send_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
10905 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
10906 boost::thread::id proc_id = boost::this_thread::get_id();
10908 l7vs::tcp_data& send_data = test_obj.get_down_thread_data_client_side();
10910 // get client socket
10911 l7vs::tcp_socket& socket = test_obj.get_client_socket();
10913 // dummy server client socket connect
10914 boost::system::error_code ec;
10915 test_mirror_server test_server;
10917 test_server.breq_acc_flag = true;
10919 test_server.breq_close_wait_flag = true;
10921 test_server.req_recv_cnt = 0;
10922 // test server start
10923 boost::thread server_thread(boost::bind(&test_mirror_server::run,&test_server));
10924 while( !test_server.brun_flag ){
10928 boost::asio::ip::tcp::endpoint connect_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
10929 socket.get_socket().connect(connect_end,ec);
10931 socket.is_open_res = true;
10933 while(!test_server.bconnect_flag){
10936 boost::asio::ip::tcp::endpoint local_endpoint = socket.get_socket().local_endpoint(ec);
10940 send_data.initialize();
10941 send_data.set_size(MAX_BUFFER_SIZE);
10942 test_obj.set_up_thread_id(boost::thread::id());
10943 test_obj.set_down_thread_id(proc_id);
10944 test_obj.down_thread_realserver_receive_call_check = false;
10945 test_obj.down_thread_client_disconnect_call_check = false;
10946 test_obj.down_thread_exit_call_check = false;
10947 test_obj.down_thread_client_connection_chk_event_call_check = false;
10950 vs.update_down_send_size_in = 0;
10951 // protocol module set
10952 proto_test.handle_client_send_res_tag = l7vs::protocol_module_base::REALSERVER_RECV;
10953 proto_test.handle_client_send_in_thread_id = boost::thread::id();
10955 socket.write_some_res = MAX_BUFFER_SIZE;
10956 socket.write_some_ec.clear();
10957 socket.write_some_buffers_in = NULL;
10958 socket.write_some_buffers_size_in = 0;
10959 socket.write_some_call_check = false;
10961 l7vs::Logger::test_loglevel = l7vs::LOG_LV_DEBUG;
10962 l7vs::Logger::putLogDebug_category = l7vs::LOG_CAT_NONE;
10963 l7vs::Logger::putLogDebug_id = 0;
10965 test_obj.test_call_client_send();
10967 // unit_test [1] down_thread_client_send socket write_some call check
10968 std::cerr << "[1] down_thread_client_send socket write_some call check" << std::endl;
10969 BOOST_CHECK(socket.write_some_call_check);
10970 BOOST_CHECK(socket.write_some_buffers_in == (void*)&(send_data.get_data()));
10971 BOOST_CHECK(socket.write_some_buffers_size_in == MAX_BUFFER_SIZE);
10972 BOOST_CHECK(socket.write_some_res == send_data.get_send_size());
10974 // unit_test [2] down_thread_client_send protocol module handle_client_send call check
10975 std::cerr << "[2] down_thread_client_send protocol module handle_client_send call check" << std::endl;
10976 BOOST_CHECK(proto_test.handle_client_send_in_thread_id == proc_id);
10978 // unit_test [3] down_thread_client_send up_thread_next_call_function update check
10979 std::cerr << "[3] down_thread_client_send up_thread_next_call_function update check" << std::endl;
10980 test_obj.next_down_function_call();
10981 BOOST_CHECK(test_obj.down_thread_realserver_receive_call_check);
10983 // unit_test [4] down_thread_client_send send size check
10984 std::cerr << "[4] down_thread_client_send send size check" << std::endl;
10985 send_data.set_send_size(0);
10986 socket.write_some_res = 0;
10987 test_obj.set_down_thread_next_function_call_exit();
10988 socket.write_some_buffers_in = NULL;
10989 test_obj.test_call_client_send();
10990 // BOOST_CHECK((char*)socket.write_some_buffers_in == (char*)&(send_data.get_data()) + 0);
10991 BOOST_CHECK((char*)socket.write_some_buffers_in == (send_data.get_data().data() + 0));
10992 test_obj.down_thread_client_send_call_check = false;
10993 test_obj.next_down_function_call();
10994 BOOST_CHECK(test_obj.down_thread_client_send_call_check);
10996 socket.write_some_res = MAX_BUFFER_SIZE / 3;
10997 test_obj.set_down_thread_next_function_call_exit();
10998 socket.write_some_buffers_in = NULL;
10999 test_obj.test_call_client_send();
11000 // BOOST_CHECK((char*)socket.write_some_buffers_in == (char*)&(send_data.get_data()) + 0);
11001 BOOST_CHECK((char*)socket.write_some_buffers_in == (send_data.get_data().data() + 0));
11002 test_obj.down_thread_client_send_call_check = false;
11003 test_obj.next_down_function_call();
11004 BOOST_CHECK(test_obj.down_thread_client_send_call_check);
11006 socket.write_some_res = MAX_BUFFER_SIZE / 3;
11007 test_obj.set_down_thread_next_function_call_exit();
11008 socket.write_some_buffers_in = NULL;
11009 test_obj.test_call_client_send();
11010 // BOOST_CHECK((char*)socket.write_some_buffers_in == (char*)(&(send_data.get_data()) + (MAX_BUFFER_SIZE / 3)));
11011 BOOST_CHECK((char*)socket.write_some_buffers_in == (send_data.get_data().data() + (MAX_BUFFER_SIZE / 3)));
11012 test_obj.down_thread_client_send_call_check = false;
11013 test_obj.next_down_function_call();
11014 BOOST_CHECK(test_obj.down_thread_client_send_call_check);
11016 socket.write_some_res = MAX_BUFFER_SIZE - send_data.get_send_size();
11017 test_obj.set_down_thread_next_function_call_exit();
11018 socket.write_some_buffers_in = NULL;
11019 test_obj.test_call_client_send();
11020 // BOOST_CHECK((char*)socket.write_some_buffers_in == (char*)(&(send_data.get_data()) + (MAX_BUFFER_SIZE / 3) * 2));
11021 BOOST_CHECK((char*)socket.write_some_buffers_in == (send_data.get_data().data() + (MAX_BUFFER_SIZE / 3) * 2));
11022 test_obj.down_thread_realserver_receive_call_check = false;
11023 test_obj.next_down_function_call();
11024 BOOST_CHECK(test_obj.down_thread_realserver_receive_call_check);
11026 socket.write_some_res = MAX_BUFFER_SIZE;
11028 // unit_test [5] down_thread_client_send socket error (try_again) check
11029 std::cerr << "[5] down_thread_client_send socket error (try_again) check" << std::endl;
11030 send_data.set_send_size(0);
11031 test_obj.set_down_thread_next_function_call_exit();
11032 socket.write_some_ec = boost::asio::error::try_again;
11033 test_obj.test_call_client_send();
11034 test_obj.down_thread_client_send_call_check = false;
11035 test_obj.next_down_function_call();
11036 BOOST_CHECK(test_obj.down_thread_client_send_call_check);
11037 socket.read_some_ec.clear();
11039 // unit_test [6] down_thread_client_send socket error (eof) check
11040 std::cerr << "[6] down_thread_client_send socket error (eof) check" << std::endl;
11041 send_data.set_send_size(0);
11042 test_obj.set_down_thread_next_function_call_exit();
11043 socket.write_some_ec = boost::asio::error::eof;
11044 test_obj.test_call_client_send();
11045 test_obj.down_thread_client_disconnect_call_check = false;
11046 test_obj.next_down_function_call();
11047 BOOST_CHECK(test_obj.down_thread_client_disconnect_call_check);
11048 socket.read_some_ec.clear();
11050 // unit_test [7] down_thread_client_send socket error (connection_reset) check
11051 std::cerr << "[7] down_thread_client_send socket error (connection_reset) check" << std::endl;
11052 send_data.set_send_size(0);
11053 test_obj.set_down_thread_next_function_call_exit();
11054 socket.write_some_ec = boost::asio::error::connection_reset;
11055 test_obj.test_call_client_send();
11056 test_obj.down_thread_client_disconnect_call_check = false;
11057 test_obj.next_down_function_call();
11058 BOOST_CHECK(test_obj.down_thread_client_disconnect_call_check);
11059 socket.read_some_ec.clear();
11061 // unit_test [8] down_thread_client_send socket error (bad_descriptor) check
11062 std::cerr << "[8] down_thread_client_send socket error (bad_descriptor) check" << std::endl;
11063 send_data.set_send_size(0);
11064 test_obj.set_down_thread_next_function_call_exit();
11065 socket.write_some_ec = boost::asio::error::bad_descriptor;
11066 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
11067 l7vs::Logger::putLogError_id = 0;
11068 test_obj.test_call_client_send();
11069 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE,l7vs::Logger::putLogError_category);
11070 BOOST_CHECK_EQUAL(0,l7vs::Logger::putLogError_id);
11071 std::cerr << l7vs::Logger::putLogError_message << std::endl;
11072 test_obj.down_thread_client_disconnect_call_check = false;
11073 test_obj.next_down_function_call();
11074 BOOST_CHECK(test_obj.down_thread_client_disconnect_call_check);
11075 socket.write_some_ec.clear();
11077 // unit_test [9] down_thread_client_send not fond function error check
11078 std::cerr << "[9] down_thread_client_send not fond function error check" << std::endl;
11079 send_data.set_send_size(0);
11080 test_obj.down_thread_function_array_clear();
11081 test_obj.down_thread_exit_call_check = false;
11082 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
11083 l7vs::Logger::putLogError_id = 0;
11084 test_obj.test_call_client_send();
11085 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
11086 BOOST_CHECK_EQUAL(83,l7vs::Logger::putLogError_id);
11087 std::cerr << l7vs::Logger::putLogError_message << std::endl;
11088 BOOST_CHECK(test_obj.down_thread_exit_call_check);
11090 // unit_test [10] down_thread_client_send returnd illegal EVENT_TAG error check
11091 std::cerr << "[10] down_thread_client_send returnd illegal EVENT_TAG error check" << std::endl;
11092 send_data.set_send_size(0);
11093 test_obj.down_thread_module_event_map_clear();
11094 test_obj.down_thread_exit_call_check = false;
11095 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
11096 l7vs::Logger::putLogError_id = 0;
11097 test_obj.test_call_client_send();
11098 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
11099 BOOST_CHECK_EQUAL(82,l7vs::Logger::putLogError_id);
11100 std::cerr << l7vs::Logger::putLogError_message << std::endl;
11101 BOOST_CHECK(test_obj.down_thread_exit_call_check);
11103 // dummy server stop
11104 test_server.breq_close_wait_flag = false;
11105 test_server.bstop_flag = true;
11106 server_thread.join();
11110 receive_send_test_class ssl_test_obj(vs,io,set_option,listen_endpoint,true,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
11112 ssl_test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
11114 l7vs::tcp_data& ssl_send_data = ssl_test_obj.get_down_thread_data_client_side();
11116 // get client socket
11117 l7vs::tcp_ssl_socket& ssl_socket = ssl_test_obj.get_client_ssl_socket();
11120 ssl_send_data.initialize();
11121 ssl_send_data.set_size(MAX_BUFFER_SIZE);
11122 ssl_test_obj.set_up_thread_id(boost::thread::id());
11123 ssl_test_obj.set_down_thread_id(proc_id);
11124 ssl_test_obj.down_thread_realserver_receive_call_check = false;
11125 ssl_test_obj.down_thread_client_disconnect_call_check = false;
11126 ssl_test_obj.down_thread_exit_call_check = false;
11127 ssl_test_obj.down_thread_client_connection_chk_event_call_check = false;
11130 vs.update_down_send_size_in = 0;
11131 // protocol module set
11132 proto_test.handle_client_send_res_tag = l7vs::protocol_module_base::REALSERVER_RECV;
11133 proto_test.handle_client_send_in_thread_id = boost::thread::id();
11135 ssl_socket.write_some_res = MAX_BUFFER_SIZE;
11136 ssl_socket.write_some_ec.clear();
11137 ssl_socket.write_some_buffers_in = NULL;
11138 ssl_socket.write_some_buffers_size_in = 0;
11139 ssl_socket.write_some_call_check = false;
11141 ssl_test_obj.test_call_client_send();
11143 // unit_test [11] down_thread_client_send ssl mode socket write_some call check
11144 std::cerr << "[11] down_thread_client_send ssl mode socket write_some call check" << std::endl;
11145 BOOST_CHECK(ssl_socket.write_some_call_check);
11146 BOOST_CHECK(ssl_socket.write_some_buffers_in == (void*)&(ssl_send_data.get_data()));
11147 BOOST_CHECK(ssl_socket.write_some_buffers_size_in == MAX_BUFFER_SIZE);
11148 BOOST_CHECK(ssl_socket.write_some_res == ssl_send_data.get_send_size());
11151 BOOST_MESSAGE( "----- down_thread_client_send test end -----" );
11155 //up_thread_realserver_connect test
11156 //up_thread_realserver_connect test class
11157 class up_thread_realserver_connect_test_class : public l7vs::tcp_session{
11159 up_thread_realserver_connect_test_class(
11160 l7vs::virtualservice_tcp& vs,
11161 boost::asio::io_service& session_io,
11162 l7vs::tcp_socket_option_info& set_socket_option,
11163 boost::asio::ip::tcp::endpoint listen_endpoint,
11165 boost::asio::ssl::context& set_ssl_context,
11166 bool set_ssl_cache_flag,
11167 int set_ssl_handshake_time_out,
11168 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
11174 set_ssl_cache_flag,
11175 set_ssl_handshake_time_out,
11176 set_access_logger){};
11178 ~up_thread_realserver_connect_test_class(){};
11181 l7vs::tcp_session::up_thread_realserver_connect(LOCAL_PROC);
11184 void set_protocol_module(l7vs::protocol_module_base* set_prot){
11185 protocol_module = set_prot;
11187 l7vs::tcp_data& get_up_thread_data_client_side(){
11188 return up_thread_data_client_side;
11190 void set_up_thread_data_dest_side(l7vs::tcp_data& set_data){
11191 up_thread_data_dest_side.set_size(set_data.get_size());
11192 up_thread_data_dest_side.set_send_size(set_data.get_send_size());
11193 up_thread_data_dest_side.set_data(set_data.get_data());
11194 up_thread_data_dest_side.set_endpoint(set_data.get_endpoint());
11196 l7vs::tcp_data& get_up_thread_data_dest_side(){
11197 return up_thread_data_dest_side;
11199 l7vs::tcp_data& get_down_thread_data_client_side(){
11200 return down_thread_data_client_side;
11202 l7vs::tcp_data& get_down_thread_data_dest_side(){
11203 return down_thread_data_dest_side;
11205 l7vs::tcp_socket& get_client_socket(){
11206 return client_socket;
11208 socket_element& get_sorryserver_socket(){
11209 return sorryserver_socket;
11211 std::list<socket_element>& get_down_thread_receive_realserver_socket_list(){
11212 return down_thread_receive_realserver_socket_list;
11214 std::map<endpoint,tcp_socket_ptr>& get_up_thread_send_realserver_socket_map(){
11215 return up_thread_send_realserver_socket_map;
11217 std::list<socket_element>::iterator& get_down_thread_current_receive_realserver_socket(){
11218 return down_thread_current_receive_realserver_socket;
11220 l7vs::tcp_realserver_connect_socket_list& get_down_thread_connect_socket_list(){
11221 return down_thread_connect_socket_list;
11225 void set_client_endpoint(boost::asio::ip::tcp::endpoint& set_endpoint){
11226 client_endpoint = set_endpoint;
11228 void set_up_thread_id(boost::thread::id set_id){
11229 up_thread_id = set_id;
11231 void set_down_thread_id(boost::thread::id set_id){
11232 down_thread_id = set_id;
11235 void next_up_function_call(){
11236 up_thread_next_call_function.second(LOCAL_PROC);
11238 void next_down_function_call(){
11239 down_thread_next_call_function.second(LOCAL_PROC);
11242 void set_up_thread_next_function_call_exit(){
11243 up_thread_function_pair fun_it = up_thread_function_array[UP_FUNC_EXIT];
11244 up_thread_next_call_function = fun_it;
11247 void set_down_thread_next_function_call_exit(){
11248 down_thread_function_pair fun_it = down_thread_function_array[DOWN_FUNC_EXIT];
11249 down_thread_next_call_function = fun_it;
11252 // next call function check
11253 void up_thread_realserver_connect_event(const TCP_PROCESS_TYPE_TAG process_type){
11254 up_thread_realserver_connect_event_call_check = true;
11256 bool up_thread_realserver_connect_event_call_check;
11257 void up_thread_realserver_connection_fail_event(const TCP_PROCESS_TYPE_TAG process_type){
11258 up_thread_realserver_connection_fail_event_check = true;
11260 bool up_thread_realserver_connection_fail_event_check;
11262 void up_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
11263 up_thread_exit_call_check = true;
11265 bool up_thread_exit_call_check;
11267 void down_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
11268 down_thread_exit_call_check = true;
11270 bool down_thread_exit_call_check;
11273 void up_thread_function_array_clear(){
11274 for(int i = 0;i <= UP_FUNC_EXIT;i++){
11275 up_thread_function_array[i].second = NULL;
11278 void down_thread_function_array_clear(){
11279 for(int i = 0;i <= DOWN_FUNC_EXIT;i++){
11280 down_thread_function_array[i].second = NULL;
11284 void up_thread_module_event_map_clear(){
11285 up_thread_module_event_map.clear();
11288 void down_thread_module_event_map_clear(){
11289 down_thread_module_event_map.clear();
11293 void up_thread_realserver_connect_test(){
11294 BOOST_MESSAGE( "----- up_thread_realserver_connect test start -----" );
11296 boost::asio::io_service io;
11297 l7vs::virtualservice_tcp vs;
11300 std::string test_protocol_name("test protocol");
11301 l7vs::test_protocol_module proto_test(test_protocol_name);
11303 l7vs::tcp_socket_option_info set_option;
11304 //! TCP_NODELAY (false:not set,true:set option)
11305 set_option.nodelay_opt = true;
11306 //! TCP_NODELAY option value (false:off,true:on)
11307 set_option.nodelay_val = true;
11308 //! TCP_CORK (false:not set,true:set option)
11309 set_option.cork_opt = true;
11310 //! TCP_CORK option value (false:off,true:on)
11311 set_option.cork_val = true;
11312 //! TCP_QUICKACK (false:not set,true:set option)
11313 set_option.quickack_opt = true;
11314 //! TCP_QUICKACK option value (false:off,true:on)
11315 set_option.quickack_val = true;
11317 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
11318 bool set_mode(false);
11319 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
11320 bool set_ssl_cache_flag(false);
11321 int set_ssl_handshake_time_out = 0;
11322 l7vs::logger_implement_access* plogger = NULL;// new l7vs::logger_implement_access(access_log_file_name);
11324 up_thread_realserver_connect_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
11326 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
11327 boost::thread::id proc_id = boost::this_thread::get_id();
11329 l7vs::tcp_data& con_data = test_obj.get_up_thread_data_dest_side();
11330 boost::asio::ip::tcp::endpoint con_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP),DUMMY_SERVER_PORT);
11332 //up_thread_data_dest_side set
11333 con_data.initialize();
11334 con_data.set_endpoint(con_end);
11336 test_obj.set_up_thread_id(boost::thread::id());
11337 test_obj.set_down_thread_id(proc_id);
11339 l7vs::tcp_socket::connect_res = true;
11340 l7vs::tcp_socket::connect_connect_endpoint = boost::asio::ip::tcp::endpoint();
11341 l7vs::tcp_socket::connect_ec = NULL;
11342 l7vs::tcp_socket::connect_call_check = false;
11343 l7vs::tcp_socket::is_connect = true;
11345 vs.connection_active_list.clear();
11347 std::map< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > >& rs_map = test_obj.get_up_thread_send_realserver_socket_map();
11349 // connection list set
11350 l7vs::tcp_realserver_connect_socket_list& con_list = test_obj.get_down_thread_connect_socket_list();
11353 test_obj.set_up_thread_next_function_call_exit();
11354 test_obj.up_thread_realserver_connect_event_call_check = false;
11357 test_mirror_server test_server;
11359 test_server.breq_acc_flag = true;
11361 test_server.breq_close_wait_flag = true;
11363 test_server.req_recv_cnt = 0;
11364 // test server start
11365 boost::thread server_thread(boost::bind(&test_mirror_server::run,&test_server));
11366 while( !test_server.brun_flag ){
11370 test_obj.test_call();
11372 // unit_test [1] up_thread_realserver_connect socket connect call check
11373 std::cerr << "[1] up_thread_realserver_connect socket connect call check" << std::endl;
11374 BOOST_CHECK(con_end == l7vs::tcp_socket::connect_connect_endpoint);
11375 BOOST_CHECK(l7vs::tcp_socket::connect_ec != NULL);
11376 BOOST_CHECK(l7vs::tcp_socket::connect_call_check);
11378 // unit_test [2] up_thread_realserver_connect virtualservice connection_active call check
11379 std::cerr << "[2] up_thread_realserver_connect virtualservice connection_active call check" << std::endl;
11380 BOOST_CHECK(!vs.connection_active_list.empty());
11381 BOOST_CHECK(*(vs.connection_active_list.begin()) == con_end);
11383 // unit_test [3] up_thread_realserver_connect up_thread_send_realserver_socket_map insert check
11384 std::cerr << "[3] up_thread_realserver_connect up_thread_send_realserver_socket_map insert check" << std::endl;
11385 BOOST_CHECK(!rs_map.empty());
11386 BOOST_CHECK(rs_map.begin()->first == con_end);
11387 BOOST_CHECK(rs_map.begin()->second != NULL);
11388 std::cerr << l7vs::Logger::putLogError_message << std::endl;
11390 // unit_test [4] up_thread_realserver_connect down_thread_connect_socket_list push check
11391 std::cerr << "[4] up_thread_realserver_connect down_thread_connect_socket_list push check" << std::endl;
11392 BOOST_CHECK(!con_list.empty());
11393 std::pair<boost::asio::ip::tcp::endpoint,boost::shared_ptr<l7vs::tcp_socket> > set_socket = con_list.get_socket();
11394 BOOST_CHECK(set_socket.first == con_end);
11395 BOOST_CHECK(set_socket.second == rs_map.begin()->second);
11398 // unit_test [5] constructer realserver socket set socket option check
11399 std::cerr << "[5] constructer realserver socket set socket option check" << std::endl;
11401 BOOST_CHECK_EQUAL(rs_map.begin()->second->opt_info.nodelay_opt , set_option.nodelay_opt);
11402 BOOST_CHECK_EQUAL(rs_map.begin()->second->opt_info.nodelay_val , set_option.nodelay_val);
11404 BOOST_CHECK_EQUAL(rs_map.begin()->second->opt_info.cork_opt , set_option.cork_opt);
11405 BOOST_CHECK_EQUAL(rs_map.begin()->second->opt_info.cork_val , set_option.cork_val);
11407 BOOST_CHECK_EQUAL(rs_map.begin()->second->opt_info.quickack_opt , set_option.quickack_opt);
11408 BOOST_CHECK_EQUAL(rs_map.begin()->second->opt_info.quickack_val , set_option.quickack_val);
11412 // unit_test [6] up_thread_realserver_connect up_thread_next_call_function update check
11413 std::cerr << "[6] up_thread_realserver_connect up_thread_next_call_function update check" << std::endl;
11414 test_obj.next_up_function_call();
11415 BOOST_CHECK(test_obj.up_thread_realserver_connect_event_call_check);
11417 l7vs::tcp_socket::is_connect = false;
11419 // unit_test [7] up_thread_realserver_connect duplication check
11420 std::cerr << "[7] up_thread_realserver_connect duplication check" << std::endl;
11421 l7vs::tcp_socket::connect_call_check = false;
11422 test_obj.test_call();
11423 BOOST_CHECK(!l7vs::tcp_socket::connect_call_check);
11424 test_obj.up_thread_realserver_connect_event_call_check = false;
11425 test_obj.next_up_function_call();
11426 BOOST_CHECK(test_obj.up_thread_realserver_connect_event_call_check);
11428 // unit_test [8] up_thread_realserver_connect connect fail check
11429 std::cerr << "[8] up_thread_realserver_connect connect fail check" << std::endl;
11432 l7vs::tcp_socket::connect_res = false;
11433 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
11434 l7vs::Logger::putLogError_id = 0;
11435 test_obj.test_call();
11436 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
11437 BOOST_CHECK_EQUAL(37,l7vs::Logger::putLogError_id);
11438 std::cerr << l7vs::Logger::putLogError_message << std::endl;
11439 BOOST_CHECK(rs_map.empty());
11440 BOOST_CHECK(con_list.empty());
11441 test_obj.up_thread_realserver_connection_fail_event_check = false;
11442 test_obj.next_up_function_call();
11443 BOOST_CHECK(test_obj.up_thread_realserver_connection_fail_event_check);
11445 l7vs::tcp_socket::connect_res = true;
11447 // unit_test [9] up_thread_realserver_connect set non blocking fail check
11448 std::cerr << "[9] up_thread_realserver_connect set non blocking fail check" << std::endl;
11451 l7vs::tcp_socket::set_non_blocking_mode_res = false;
11452 l7vs::tcp_socket::set_non_blocking_mode_ec = boost::asio::error::bad_descriptor;
11453 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
11454 l7vs::Logger::putLogError_id = 0;
11455 test_obj.up_thread_exit_call_check = false;
11456 test_obj.test_call();
11457 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
11458 BOOST_CHECK_EQUAL(34,l7vs::Logger::putLogError_id);
11459 std::cerr << l7vs::Logger::putLogError_message << std::endl;
11460 BOOST_CHECK(test_obj.up_thread_exit_call_check);
11461 l7vs::tcp_socket::set_non_blocking_mode_res = true;
11462 l7vs::tcp_socket::set_non_blocking_mode_ec.clear();
11464 // unit_test [10] up_thread_realserver_connect not fond function error check
11466 std::cerr << "[10] up_thread_realserver_connect not fond function error check" << std::endl;
11469 test_obj.up_thread_function_array_clear();
11470 test_obj.up_thread_exit_call_check = false;
11471 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
11472 l7vs::Logger::putLogError_id = 0;
11473 test_obj.test_call();
11474 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
11475 BOOST_CHECK_EQUAL(35,l7vs::Logger::putLogError_id);
11476 std::cerr << l7vs::Logger::putLogError_message << std::endl;
11477 BOOST_CHECK(test_obj.up_thread_exit_call_check);
11478 set_socket.second->get_socket().close();
11481 // tproxy implement test
11482 #ifndef IP_TRANSPARENT
11483 #define IP_TRANSPARENT 19
11485 boost::asio::ip::tcp::endpoint dummy1(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
11486 boost::asio::ip::tcp::endpoint dummy2(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT + 1);
11487 boost::asio::ip::tcp::endpoint dummyv6(boost::asio::ip::address::from_string(DUMMY_SERVER_IPV6), DUMMY_SERVER_PORT);
11488 l7vs::realserver_element real;
11489 l7vs::tcp_data set_data;
11491 // no realserver element (maybe not happen)
11492 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
11493 ::setsockopt_sock = 0;
11494 vs.my_element.realserver_vector.clear();
11495 test_obj.get_up_thread_send_realserver_socket_map().clear();
11496 test_obj.test_call();
11497 // will be no error and not called setsockopt
11498 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE, l7vs::Logger::putLogError_category);
11499 BOOST_CHECK_EQUAL(::setsockopt_sock, 0);
11501 // cannot find server_endpoint in realserver_vector (maybe not happen)
11502 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
11503 ::setsockopt_sock = 0;
11504 real.tcp_endpoint = dummy1;
11505 set_data.set_endpoint(dummy2);
11506 test_obj.set_up_thread_data_dest_side(set_data);
11507 vs.my_element.realserver_vector.clear();
11508 vs.my_element.realserver_vector.push_back(real);
11509 test_obj.get_up_thread_send_realserver_socket_map().clear();
11510 test_obj.test_call();
11511 // will be no error and not called setsockopt
11512 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE, l7vs::Logger::putLogError_category);
11513 BOOST_CHECK_EQUAL(::setsockopt_sock, 0);
11515 // server fwdmode is not FWD_TPROXY (FWD_MASQ)
11516 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
11517 ::setsockopt_sock = 0;
11518 real.tcp_endpoint = dummy1;
11519 real.fwdmode = l7vs::realserver_element::FWD_MASQ;
11520 set_data.set_endpoint(dummy1);
11521 test_obj.set_up_thread_data_dest_side(set_data);
11522 vs.my_element.realserver_vector.clear();
11523 vs.my_element.realserver_vector.push_back(real);
11524 test_obj.get_up_thread_send_realserver_socket_map().clear();
11525 test_obj.test_call();
11526 // will be no error and not called setsockopt
11527 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE, l7vs::Logger::putLogError_category);
11528 BOOST_CHECK_EQUAL(::setsockopt_sock, 0);
11530 // server fwdmode is not FWD_TPROXY (FWD_NONE) (never happen)
11531 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
11532 ::setsockopt_sock = 0;
11533 real.tcp_endpoint = dummy1;
11534 real.fwdmode = l7vs::realserver_element::FWD_NONE;
11535 set_data.set_endpoint(dummy1);
11536 test_obj.set_up_thread_data_dest_side(set_data);
11537 vs.my_element.realserver_vector.clear();
11538 vs.my_element.realserver_vector.push_back(real);
11539 test_obj.get_up_thread_send_realserver_socket_map().clear();
11540 test_obj.test_call();
11541 // will be no error and not called setsockopt
11542 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE, l7vs::Logger::putLogError_category);
11543 BOOST_CHECK_EQUAL(::setsockopt_sock, 0);
11545 // server fwdmode is FWD_TPROXY and client(IPv6), server(IPv4)
11546 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
11547 ::setsockopt_sock = 0;
11548 real.tcp_endpoint = dummy1;
11549 real.fwdmode = l7vs::realserver_element::FWD_TPROXY;
11550 set_data.set_endpoint(dummy1);
11551 test_obj.set_up_thread_data_dest_side(set_data);
11552 vs.my_element.realserver_vector.clear();
11553 vs.my_element.realserver_vector.push_back(real);
11554 test_obj.get_up_thread_send_realserver_socket_map().clear();
11555 test_obj.set_client_endpoint(dummyv6);
11556 test_obj.test_call();
11557 // will be no error and not called setsockopt
11558 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE, l7vs::Logger::putLogError_category);
11559 BOOST_CHECK_EQUAL(::setsockopt_sock, 0);
11561 // server fwdmode is FWD_TPROXY and client(IPv4), server(IPv6)
11562 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
11563 ::setsockopt_sock = 0;
11564 real.tcp_endpoint = dummyv6;
11565 real.fwdmode = l7vs::realserver_element::FWD_TPROXY;
11566 set_data.set_endpoint(dummyv6);
11567 test_obj.set_up_thread_data_dest_side(set_data);
11568 vs.my_element.realserver_vector.clear();
11569 vs.my_element.realserver_vector.push_back(real);
11570 test_obj.get_up_thread_send_realserver_socket_map().clear();
11571 test_obj.set_client_endpoint(dummy1);
11572 test_obj.test_call();
11573 // will be no error and not called setsockopt
11574 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE, l7vs::Logger::putLogError_category);
11575 BOOST_CHECK_EQUAL(::setsockopt_sock, 0);
11577 // server fwdmode is FWD_TPROXY and client(IPv4), server(IPv4), setsockopt error
11578 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
11579 ::setsockopt_sock = 0;
11580 real.tcp_endpoint = dummy1;
11581 real.fwdmode = l7vs::realserver_element::FWD_TPROXY;
11582 set_data.set_endpoint(dummy1);
11583 test_obj.set_up_thread_data_dest_side(set_data);
11584 vs.my_element.realserver_vector.clear();
11585 vs.my_element.realserver_vector.push_back(real);
11586 test_obj.get_up_thread_send_realserver_socket_map().clear();
11587 test_obj.set_client_endpoint(dummy2);
11588 setsockopt_ret = -1;
11589 setsockopt_level = -1;
11590 setsockopt_optname = 0;
11591 setsockopt_optval = NULL;
11592 setsockopt_optlen = 0;
11593 test_obj.test_call();
11594 // called setsockopt and will be session error
11595 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION, l7vs::Logger::putLogError_category);
11596 BOOST_CHECK_EQUAL(::setsockopt_level, SOL_IP);
11597 BOOST_CHECK_EQUAL(::setsockopt_optname, IP_TRANSPARENT);
11598 BOOST_CHECK_EQUAL(*((int*)::setsockopt_optval), 1);
11599 BOOST_CHECK_EQUAL(::setsockopt_optlen, sizeof(int));
11601 // server fwdmode is FWD_TPROXY and client(IPv6), server(IPv6), setsockopt error
11602 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
11603 ::setsockopt_sock = 0;
11604 real.tcp_endpoint = dummyv6;
11605 real.fwdmode = l7vs::realserver_element::FWD_TPROXY;
11606 set_data.set_endpoint(dummyv6);
11607 test_obj.set_up_thread_data_dest_side(set_data);
11608 vs.my_element.realserver_vector.clear();
11609 vs.my_element.realserver_vector.push_back(real);
11610 test_obj.get_up_thread_send_realserver_socket_map().clear();
11611 test_obj.set_client_endpoint(dummyv6);
11612 setsockopt_ret = -1;
11613 setsockopt_level = -1;
11614 setsockopt_optname = 0;
11615 setsockopt_optval = NULL;
11616 setsockopt_optlen = 0;
11617 test_obj.test_call();
11618 // called setsockopt and will be session error
11619 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION, l7vs::Logger::putLogError_category);
11620 BOOST_CHECK_EQUAL(::setsockopt_level, SOL_IPV6);
11621 BOOST_CHECK_EQUAL(::setsockopt_optname, IP_TRANSPARENT);
11622 BOOST_CHECK_EQUAL(*((int*)::setsockopt_optval), 1);
11623 BOOST_CHECK_EQUAL(::setsockopt_optlen, sizeof(int));
11625 // server fwdmode is FWD_TPROXY and client(IPv4), server(IPv4)
11626 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
11627 ::setsockopt_sock = 0;
11628 real.tcp_endpoint = dummy1;
11629 real.fwdmode = l7vs::realserver_element::FWD_TPROXY;
11630 set_data.set_endpoint(dummy1);
11631 test_obj.set_up_thread_data_dest_side(set_data);
11632 vs.my_element.realserver_vector.clear();
11633 vs.my_element.realserver_vector.push_back(real);
11634 test_obj.get_up_thread_send_realserver_socket_map().clear();
11635 test_obj.set_client_endpoint(dummy2);
11636 setsockopt_ret = 0;
11637 setsockopt_level = -1;
11638 setsockopt_optname = 0;
11639 setsockopt_optval = NULL;
11640 setsockopt_optlen = 0;
11641 test_obj.test_call();
11642 // called setsockopt and will be session error
11643 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE, l7vs::Logger::putLogError_category);
11644 BOOST_CHECK_EQUAL(::setsockopt_level, SOL_IP);
11645 BOOST_CHECK_EQUAL(::setsockopt_optname, IP_TRANSPARENT);
11646 BOOST_CHECK_EQUAL(*((int*)::setsockopt_optval), 1);
11647 BOOST_CHECK_EQUAL(::setsockopt_optlen, sizeof(int));
11649 // server fwdmode is FWD_TPROXY and client(IPv6), server(IPv6)
11650 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
11651 ::setsockopt_sock = 0;
11652 real.tcp_endpoint = dummyv6;
11653 real.fwdmode = l7vs::realserver_element::FWD_TPROXY;
11654 set_data.set_endpoint(dummyv6);
11655 test_obj.set_up_thread_data_dest_side(set_data);
11656 vs.my_element.realserver_vector.clear();
11657 vs.my_element.realserver_vector.push_back(real);
11658 test_obj.get_up_thread_send_realserver_socket_map().clear();
11659 test_obj.set_client_endpoint(dummyv6);
11660 setsockopt_ret = 0;
11661 setsockopt_level = -1;
11662 setsockopt_optname = 0;
11663 setsockopt_optval = NULL;
11664 setsockopt_optlen = 0;
11665 test_obj.test_call();
11666 // called setsockopt and will be session error
11667 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE, l7vs::Logger::putLogError_category);
11668 BOOST_CHECK_EQUAL(::setsockopt_level, SOL_IPV6);
11669 BOOST_CHECK_EQUAL(::setsockopt_optname, IP_TRANSPARENT);
11670 BOOST_CHECK_EQUAL(*((int*)::setsockopt_optval), 1);
11671 BOOST_CHECK_EQUAL(::setsockopt_optlen, sizeof(int));
11674 // dummy server stop
11675 test_server.breq_close_wait_flag = false;
11676 test_server.bstop_flag = true;
11677 server_thread.join();
11679 BOOST_MESSAGE( "----- up_thread_realserver_connect test end -----" );
11682 //up_thread_realserver_connect access log test
11683 //up_thread_realserver_connect access log class
11684 class up_thread_realserver_connect_access_log_test_class : public l7vs::tcp_session{
11686 up_thread_realserver_connect_access_log_test_class(
11687 l7vs::virtualservice_tcp& vs,
11688 boost::asio::io_service& session_io,
11689 l7vs::tcp_socket_option_info& set_socket_option,
11690 boost::asio::ip::tcp::endpoint listen_endpoint,
11692 boost::asio::ssl::context& set_ssl_context,
11693 bool set_ssl_cache_flag,
11694 int set_ssl_handshake_time_out,
11695 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
11701 set_ssl_cache_flag,
11702 set_ssl_handshake_time_out,
11703 set_access_logger){};
11705 ~up_thread_realserver_connect_access_log_test_class(){};
11708 l7vs::tcp_session::up_thread_realserver_connect(LOCAL_PROC);
11711 void set_protocol_module(l7vs::protocol_module_base* set_prot){
11712 protocol_module = set_prot;
11714 l7vs::tcp_data& get_up_thread_data_client_side(){
11715 return up_thread_data_client_side;
11717 l7vs::tcp_data& get_up_thread_data_dest_side(){
11718 return up_thread_data_dest_side;
11720 l7vs::tcp_data& get_down_thread_data_client_side(){
11721 return down_thread_data_client_side;
11723 l7vs::tcp_data& get_down_thread_data_dest_side(){
11724 return down_thread_data_dest_side;
11726 l7vs::tcp_socket& get_client_socket(){
11727 return client_socket;
11729 socket_element& get_sorryserver_socket(){
11730 return sorryserver_socket;
11732 std::list<socket_element>& get_down_thread_receive_realserver_socket_list(){
11733 return down_thread_receive_realserver_socket_list;
11735 std::map<endpoint,tcp_socket_ptr>& get_up_thread_send_realserver_socket_map(){
11736 return up_thread_send_realserver_socket_map;
11738 std::list<socket_element>::iterator& get_down_thread_current_receive_realserver_socket(){
11739 return down_thread_current_receive_realserver_socket;
11741 l7vs::tcp_realserver_connect_socket_list& get_down_thread_connect_socket_list(){
11742 return down_thread_connect_socket_list;
11746 void set_up_thread_id(boost::thread::id set_id){
11747 up_thread_id = set_id;
11749 void set_down_thread_id(boost::thread::id set_id){
11750 down_thread_id = set_id;
11753 void next_up_function_call(){
11754 up_thread_next_call_function.second(LOCAL_PROC);
11756 void next_down_function_call(){
11757 down_thread_next_call_function.second(LOCAL_PROC);
11760 void set_up_thread_next_function_call_exit(){
11761 up_thread_function_pair fun_it = up_thread_function_array[UP_FUNC_EXIT];
11762 up_thread_next_call_function = fun_it;
11765 void set_down_thread_next_function_call_exit(){
11766 down_thread_function_pair fun_it = down_thread_function_array[DOWN_FUNC_EXIT];
11767 down_thread_next_call_function = fun_it;
11770 // next call function check
11771 void up_thread_realserver_connect_event(const TCP_PROCESS_TYPE_TAG process_type){
11772 up_thread_realserver_connect_event_call_check = true;
11774 bool up_thread_realserver_connect_event_call_check;
11775 void up_thread_realserver_connection_fail_event(const TCP_PROCESS_TYPE_TAG process_type){
11776 up_thread_realserver_connection_fail_event_check = true;
11778 bool up_thread_realserver_connection_fail_event_check;
11780 void up_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
11781 up_thread_exit_call_check = true;
11783 bool up_thread_exit_call_check;
11785 void down_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
11786 down_thread_exit_call_check = true;
11788 bool down_thread_exit_call_check;
11791 void up_thread_function_array_clear(){
11792 for(int i = 0;i <= UP_FUNC_EXIT;i++){
11793 up_thread_function_array[i].second = NULL;
11796 void down_thread_function_array_clear(){
11797 for(int i = 0;i <= DOWN_FUNC_EXIT;i++){
11798 down_thread_function_array[i].second = NULL;
11802 void up_thread_module_event_map_clear(){
11803 up_thread_module_event_map.clear();
11806 void down_thread_module_event_map_clear(){
11807 down_thread_module_event_map.clear();
11811 void set_client_endpoint(boost::asio::ip::tcp::endpoint& set_endpoint){
11812 client_endpoint = set_endpoint;
11815 std::string get_test_string(boost::asio::ip::tcp::endpoint& set_endpoint){
11816 return endpoint_to_string(set_endpoint);
11819 void set_access_log_flag( bool set_flag ){
11820 access_log_flag = set_flag;
11824 void up_thread_realserver_connect_access_log_test(){
11825 BOOST_MESSAGE( "----- up_thread_realserver_connect access log test start -----" );
11827 boost::asio::io_service io;
11828 l7vs::virtualservice_tcp vs;
11830 std::string test_protocol_name("test protocol");
11831 l7vs::test_protocol_module proto_test(test_protocol_name);
11833 l7vs::tcp_socket_option_info set_option;
11834 //! TCP_NODELAY (false:not set,true:set option)
11835 set_option.nodelay_opt = false;
11836 //! TCP_NODELAY option value (false:off,true:on)
11837 set_option.nodelay_val = false;
11838 //! TCP_CORK (false:not set,true:set option)
11839 set_option.cork_opt = false;
11840 //! TCP_CORK option value (false:off,true:on)
11841 set_option.cork_val = false;
11842 //! TCP_QUICKACK (false:not set,true:set option)
11843 set_option.quickack_opt = false;
11844 //! TCP_QUICKACK option value (false:off,true:on)
11845 set_option.quickack_val = false;
11847 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string("192.168.0.1"), 8080);
11848 bool set_mode(false);
11849 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
11850 bool set_ssl_cache_flag(false);
11851 int set_ssl_handshake_time_out = 0;
11852 l7vs::logger_implement_access* plogger = new l7vs::logger_implement_access( "test.log" );
11854 up_thread_realserver_connect_access_log_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
11855 test_obj.set_access_log_flag(true);
11858 boost::asio::ip::tcp::endpoint client_src_endpoint(boost::asio::ip::address::from_string("192.168.10.20"), 54321);
11859 test_obj.set_client_endpoint(client_src_endpoint);
11861 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
11862 boost::thread::id proc_id = boost::this_thread::get_id();
11864 l7vs::tcp_data& con_data = test_obj.get_up_thread_data_dest_side();
11865 boost::asio::ip::tcp::endpoint con_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP),DUMMY_SERVER_PORT);
11867 //up_thread_data_dest_side set
11868 con_data.initialize();
11869 con_data.set_endpoint(con_end);
11871 test_obj.set_up_thread_id(boost::thread::id());
11872 test_obj.set_down_thread_id(proc_id);
11874 l7vs::tcp_socket::connect_res = true;
11875 l7vs::tcp_socket::connect_connect_endpoint = boost::asio::ip::tcp::endpoint();
11876 l7vs::tcp_socket::connect_ec = NULL;
11877 l7vs::tcp_socket::connect_call_check = false;
11878 l7vs::tcp_socket::is_connect = true;
11880 vs.connection_active_list.clear();
11882 std::map< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > >& rs_map = test_obj.get_up_thread_send_realserver_socket_map();
11884 // connection list set
11885 l7vs::tcp_realserver_connect_socket_list& con_list = test_obj.get_down_thread_connect_socket_list();
11888 test_obj.set_up_thread_next_function_call_exit();
11889 test_obj.up_thread_realserver_connect_event_call_check = false;
11892 test_mirror_server test_server;
11894 test_server.breq_acc_flag = true;
11896 test_server.breq_close_wait_flag = true;
11898 test_server.req_recv_cnt = 0;
11899 // test server start
11900 boost::thread server_thread(boost::bind(&test_mirror_server::run,&test_server));
11901 while( !test_server.brun_flag ){
11905 test_obj.test_call();
11907 BOOST_CHECK(con_end == l7vs::tcp_socket::connect_connect_endpoint);
11908 BOOST_CHECK(l7vs::tcp_socket::connect_ec != NULL);
11909 BOOST_CHECK(l7vs::tcp_socket::connect_call_check);
11911 BOOST_CHECK(!con_list.empty());
11912 std::pair<boost::asio::ip::tcp::endpoint,boost::shared_ptr<l7vs::tcp_socket> > set_socket = con_list.get_socket();
11913 BOOST_CHECK(set_socket.first == con_end);
11914 BOOST_CHECK(set_socket.second == rs_map.begin()->second);
11916 std::string cl_rm_end = test_obj.get_test_string( client_src_endpoint );
11917 std::string cl_lo_end = test_obj.get_test_string( listen_endpoint );
11918 boost::asio::ip::tcp::endpoint rs_local = set_socket.second->get_socket().local_endpoint();
11919 std::string rs_lo_end = test_obj.get_test_string( rs_local );
11920 std::string rs_rm_end = test_obj.get_test_string( con_end );
11922 // unit_test [1] up_thread_realserver_connect client endpoint string check
11923 std::cerr << "[1] up_thread_realserver_connect client endpoint string check" << std::endl;
11924 BOOST_CHECK_EQUAL( cl_rm_end , plogger->putLog_cl_con_org );
11925 // unit_test [2] up_thread_realserver_connect virtualservice endpoint string check
11926 std::cerr << "[2] up_thread_realserver_connect virtualservice endpoint string check" << std::endl;
11927 BOOST_CHECK_EQUAL( cl_lo_end , plogger->putLog_vsinfo );
11928 // unit_test [3] up_thread_realserver_connect realserver local endpoint string check
11929 std::cerr << "[3] up_thread_realserver_connect realserver local endpoint string check" << std::endl;
11930 BOOST_CHECK_EQUAL( rs_lo_end , plogger->putLog_rs_con_org );
11931 // unit_test [4] up_thread_realserver_connect realserver remote endpoint string check
11932 std::cerr << "[4] up_thread_realserver_connect realserver remote endpoint string check" << std::endl;
11933 BOOST_CHECK_EQUAL( rs_rm_end , plogger->putLog_rs_con_dest );
11934 // unit_test [5] up_thread_realserver_connect realserver local endpoint string check
11935 std::cerr << "[5] up_thread_realserver_connect realserver local endpoint string check" << std::endl;
11936 BOOST_CHECK_EQUAL( "" , plogger->putLog_msg );
11941 set_socket.second->get_socket().close();
11943 // dummy server stop
11944 test_server.breq_close_wait_flag = false;
11945 test_server.bstop_flag = true;
11946 server_thread.join();
11951 BOOST_MESSAGE( "----- up_thread_realserver_connect access log end -----" );
11954 //up_thread_sorryserver_connect test
11955 //up_thread_sorryserver_connect test class
11956 class up_thread_sorryserver_connect_test_class : public l7vs::tcp_session{
11958 // up_thread_sorryserver_connect_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){
11960 up_thread_sorryserver_connect_test_class(
11961 l7vs::virtualservice_tcp& vs,
11962 boost::asio::io_service& session_io,
11963 l7vs::tcp_socket_option_info& set_socket_option,
11964 boost::asio::ip::tcp::endpoint listen_endpoint,
11966 boost::asio::ssl::context& set_ssl_context,
11967 bool set_ssl_cache_flag,
11968 int set_ssl_handshake_time_out,
11969 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
11975 set_ssl_cache_flag,
11976 set_ssl_handshake_time_out,
11977 set_access_logger){};
11979 ~up_thread_sorryserver_connect_test_class(){};
11982 l7vs::tcp_session::up_thread_sorryserver_connect(LOCAL_PROC);
11985 void set_protocol_module(l7vs::protocol_module_base* set_prot){
11986 protocol_module = set_prot;
11988 void set_up_thread_data_dest_side(l7vs::tcp_data& set_data){
11989 up_thread_data_dest_side.set_size(set_data.get_size());
11990 up_thread_data_dest_side.set_send_size(set_data.get_send_size());
11991 up_thread_data_dest_side.set_data(set_data.get_data());
11992 up_thread_data_dest_side.set_endpoint(set_data.get_endpoint());
11994 l7vs::tcp_data& get_up_thread_data_client_side(){
11995 return up_thread_data_client_side;
11997 l7vs::tcp_data& get_up_thread_data_dest_side(){
11998 return up_thread_data_dest_side;
12000 l7vs::tcp_data& get_down_thread_data_client_side(){
12001 return down_thread_data_client_side;
12003 l7vs::tcp_data& get_down_thread_data_dest_side(){
12004 return down_thread_data_dest_side;
12006 l7vs::tcp_socket& get_client_socket(){
12007 return client_socket;
12009 socket_element& get_sorryserver_socket(){
12010 return sorryserver_socket;
12012 std::list<socket_element>& get_down_thread_receive_realserver_socket_list(){
12013 return down_thread_receive_realserver_socket_list;
12015 std::map<endpoint,tcp_socket_ptr>& get_up_thread_send_realserver_socket_map(){
12016 return up_thread_send_realserver_socket_map;
12018 std::list<socket_element>::iterator& get_down_thread_current_receive_realserver_socket(){
12019 return down_thread_current_receive_realserver_socket;
12021 l7vs::tcp_realserver_connect_socket_list& get_down_thread_connect_socket_list(){
12022 return down_thread_connect_socket_list;
12026 void set_up_thread_id(boost::thread::id set_id){
12027 up_thread_id = set_id;
12029 void set_down_thread_id(boost::thread::id set_id){
12030 down_thread_id = set_id;
12033 void set_client_endpoint(boost::asio::ip::tcp::endpoint& set_endpoint){
12034 client_endpoint = set_endpoint;
12036 void next_up_function_call(){
12037 up_thread_next_call_function.second(LOCAL_PROC);
12039 void next_down_function_call(){
12040 down_thread_next_call_function.second(LOCAL_PROC);
12043 void set_up_thread_next_function_call_exit(){
12044 up_thread_function_pair fun_it = up_thread_function_array[UP_FUNC_EXIT];
12045 up_thread_next_call_function = fun_it;
12048 void set_down_thread_next_function_call_exit(){
12049 down_thread_function_pair fun_it = down_thread_function_array[DOWN_FUNC_EXIT];
12050 down_thread_next_call_function = fun_it;
12053 // next call function check
12054 void up_thread_sorryserver_connect_event(const TCP_PROCESS_TYPE_TAG process_type){
12055 up_thread_sorryserver_connect_event_call_check = true;
12057 bool up_thread_sorryserver_connect_event_call_check;
12059 void up_thread_sorryserver_connection_fail_event(const TCP_PROCESS_TYPE_TAG process_type){
12060 up_thread_sorryserver_connection_fail_event_check = true;
12062 bool up_thread_sorryserver_connection_fail_event_check;
12064 void up_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
12065 up_thread_exit_call_check = true;
12067 bool up_thread_exit_call_check;
12069 void down_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
12070 down_thread_exit_call_check = true;
12072 bool down_thread_exit_call_check;
12075 void up_thread_function_array_clear(){
12076 for(int i = 0;i <= UP_FUNC_EXIT;i++){
12077 up_thread_function_array[i].second = NULL;
12080 void down_thread_function_map_clear(){
12081 for(int i = 0;i <= DOWN_FUNC_EXIT;i++){
12082 down_thread_function_array[i].second = NULL;
12086 void up_thread_module_event_map_clear(){
12087 up_thread_module_event_map.clear();
12090 void down_thread_module_event_map_clear(){
12091 down_thread_module_event_map.clear();
12095 void up_thread_sorryserver_connect_test(){
12096 BOOST_MESSAGE( "----- up_thread_sorryserver_connect test start -----" );
12097 l7vs::virtualservice_tcp vs;
12098 boost::asio::io_service io;
12099 l7vs::tcp_socket_option_info set_option;
12100 //! TCP_NODELAY (false:not set,true:set option)
12101 set_option.nodelay_opt = false;
12102 //! TCP_NODELAY option value (false:off,true:on)
12103 set_option.nodelay_val = false;
12104 //! TCP_CORK (false:not set,true:set option)
12105 set_option.cork_opt = false;
12106 //! TCP_CORK option value (false:off,true:on)
12107 set_option.cork_val = false;
12108 //! TCP_QUICKACK (false:not set,true:set option)
12109 set_option.quickack_opt = false;
12110 //! TCP_QUICKACK option value (false:off,true:on)
12111 set_option.quickack_val = false;
12113 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
12114 bool set_mode(false);
12115 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
12116 bool set_ssl_cache_flag(false);
12117 int set_ssl_handshake_time_out = 0;
12118 //std::string access_log_file_name = "test";
12119 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
12121 std::string test_protocol_name("test protocol");
12122 l7vs::test_protocol_module proto_test(test_protocol_name);
12123 // up_thread_sorryserver_send
12124 // up_thread_sorryserver_connect_test_class test_obj(vs,io);
12125 up_thread_sorryserver_connect_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
12127 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
12128 boost::thread::id proc_id = boost::this_thread::get_id();
12130 l7vs::tcp_data& con_data = test_obj.get_up_thread_data_dest_side();
12131 boost::asio::ip::tcp::endpoint con_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP),7000);
12133 //up_thread_data_dest_side set
12134 con_data.initialize();
12135 con_data.set_endpoint(con_end);
12137 test_obj.set_up_thread_id(boost::thread::id());
12138 test_obj.set_down_thread_id(proc_id);
12140 l7vs::tcp_socket::connect_res = true;
12141 l7vs::tcp_socket::connect_connect_endpoint = boost::asio::ip::tcp::endpoint();
12142 l7vs::tcp_socket::connect_ec = NULL;
12143 l7vs::tcp_socket::connect_call_check = false;
12145 test_obj.set_up_thread_next_function_call_exit();
12146 test_obj.up_thread_sorryserver_connect_event_call_check = false;
12148 test_obj.test_call();
12150 // unit_test [1] up_thread_sorryserver_connect socket connect call check
12151 std::cerr << "[1] up_thread_sorryserver_connect socket connect call check" << std::endl;
12152 BOOST_CHECK(con_end == l7vs::tcp_socket::connect_connect_endpoint);
12153 BOOST_CHECK(l7vs::tcp_socket::connect_ec != NULL);
12154 BOOST_CHECK(l7vs::tcp_socket::connect_call_check);
12156 // unit_test [2] up_thread_sorryserver_connect up_thread_next_call_function update check
12157 std::cerr << "[2] up_thread_sorryserver_connect up_thread_next_call_function update check" << std::endl;
12158 test_obj.next_up_function_call();
12159 BOOST_CHECK(test_obj.up_thread_sorryserver_connect_event_call_check);
12161 // unit_test [3] up_thread_sorryserver_connect connect fail check
12162 std::cerr << "[3] up_thread_sorryserver_connect connect fail check" << std::endl;
12163 l7vs::tcp_socket::connect_res = false;
12164 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
12165 l7vs::Logger::putLogError_id = 0;
12166 test_obj.test_call();
12167 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
12168 BOOST_CHECK_EQUAL(54,l7vs::Logger::putLogError_id);
12169 std::cerr << l7vs::Logger::putLogError_message << std::endl;
12170 test_obj.up_thread_sorryserver_connection_fail_event_check = false;
12171 test_obj.next_up_function_call();
12172 BOOST_CHECK(test_obj.up_thread_sorryserver_connection_fail_event_check);
12174 l7vs::tcp_socket::connect_res = true;
12176 // unit_test [4] up_thread_realserver_connect set non blocking fail check
12177 std::cerr << "[4] up_thread_realserver_connect set non blocking fail check" << std::endl;
12178 l7vs::tcp_socket::set_non_blocking_mode_res = false;
12179 l7vs::tcp_socket::set_non_blocking_mode_ec = boost::asio::error::bad_descriptor;
12180 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
12181 l7vs::Logger::putLogError_id = 0;
12182 test_obj.up_thread_exit_call_check = false;
12183 test_obj.test_call();
12184 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
12185 BOOST_CHECK_EQUAL(53,l7vs::Logger::putLogError_id);
12186 std::cerr << l7vs::Logger::putLogError_message << std::endl;
12187 BOOST_CHECK(test_obj.up_thread_exit_call_check);
12188 l7vs::tcp_socket::set_non_blocking_mode_res = true;
12189 l7vs::tcp_socket::set_non_blocking_mode_ec.clear();
12191 // unit_test [5] up_thread_sorryserver_connect not fond function error check
12193 std::cerr << "[5] up_thread_sorryserver_connect not fond function error check" << std::endl;
12194 test_obj.up_thread_function_array_clear();
12195 test_obj.up_thread_exit_call_check = false;
12196 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
12197 l7vs::Logger::putLogError_id = 0;
12198 test_obj.test_call();
12199 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
12200 BOOST_CHECK_EQUAL(55,l7vs::Logger::putLogError_id);
12201 std::cerr << l7vs::Logger::putLogError_message << std::endl;
12202 BOOST_CHECK(test_obj.up_thread_exit_call_check);
12205 // tproxy implement test
12206 #ifndef IP_TRANSPARENT
12207 #define IP_TRANSPARENT 19
12209 boost::asio::ip::tcp::endpoint dummy_v4_1(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
12210 boost::asio::ip::tcp::endpoint dummy_v4_2(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT + 1);
12211 boost::asio::ip::tcp::endpoint dummy_v6_1(boost::asio::ip::address::from_string(DUMMY_SERVER_IPV6), DUMMY_SERVER_PORT);
12212 boost::asio::ip::tcp::endpoint dummy_v6_2(boost::asio::ip::address::from_string(DUMMY_SERVER_IPV6), DUMMY_SERVER_PORT + 1);
12213 l7vs::tcp_data set_data;
12215 // server fwdmode is not FWD_TPROXY (FWD_MASQ)
12216 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
12217 ::setsockopt_sock = 0;
12218 vs.my_element.sorry_fwdmode = l7vs::virtualservice_element::FWD_MASQ;
12219 set_data.set_endpoint(dummy_v4_1);
12220 test_obj.set_up_thread_data_dest_side(set_data);
12221 if (test_obj.get_sorryserver_socket().second->get_socket().lowest_layer().is_open()) {
12222 test_obj.get_sorryserver_socket().second->get_socket().lowest_layer().close();
12224 test_obj.test_call();
12225 // will be no error and not called setsockopt
12226 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE, l7vs::Logger::putLogError_category);
12227 BOOST_CHECK_EQUAL(::setsockopt_sock, 0);
12229 // server fwdmode is not FWD_TPROXY (FWD_NONE) (never happen)
12230 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
12231 ::setsockopt_sock = 0;
12232 vs.my_element.sorry_fwdmode = l7vs::virtualservice_element::FWD_NONE;
12233 set_data.set_endpoint(dummy_v4_1);
12234 test_obj.set_up_thread_data_dest_side(set_data);
12235 if (test_obj.get_sorryserver_socket().second->get_socket().lowest_layer().is_open()) {
12236 test_obj.get_sorryserver_socket().second->get_socket().lowest_layer().close();
12238 test_obj.test_call();
12239 // will be no error and not called setsockopt
12240 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE, l7vs::Logger::putLogError_category);
12241 BOOST_CHECK_EQUAL(::setsockopt_sock, 0);
12243 // server fwdmode is FWD_TPROXY and client(IPv6), server(IPv4)
12244 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
12245 ::setsockopt_sock = 0;
12246 vs.my_element.sorry_fwdmode = l7vs::virtualservice_element::FWD_TPROXY;
12247 set_data.set_endpoint(dummy_v4_1);
12248 test_obj.set_up_thread_data_dest_side(set_data);
12249 test_obj.set_client_endpoint(dummy_v6_1);
12250 if (test_obj.get_sorryserver_socket().second->get_socket().lowest_layer().is_open()) {
12251 test_obj.get_sorryserver_socket().second->get_socket().lowest_layer().close();
12253 test_obj.test_call();
12254 // will be no error and not called setsockopt
12255 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE, l7vs::Logger::putLogError_category);
12256 BOOST_CHECK_EQUAL(::setsockopt_sock, 0);
12258 // server fwdmode is FWD_TPROXY and client(IPv4), server(IPv6)
12259 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
12260 ::setsockopt_sock = 0;
12261 vs.my_element.sorry_fwdmode = l7vs::virtualservice_element::FWD_TPROXY;
12262 set_data.set_endpoint(dummy_v6_1);
12263 test_obj.set_up_thread_data_dest_side(set_data);
12264 test_obj.set_client_endpoint(dummy_v4_1);
12265 if (test_obj.get_sorryserver_socket().second->get_socket().lowest_layer().is_open()) {
12266 test_obj.get_sorryserver_socket().second->get_socket().lowest_layer().close();
12268 test_obj.test_call();
12269 // will be no error and not called setsockopt
12270 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE, l7vs::Logger::putLogError_category);
12271 BOOST_CHECK_EQUAL(::setsockopt_sock, 0);
12273 // server fwdmode is FWD_TPROXY and client(IPv4), server(IPv4), setsockopt error
12274 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
12275 ::setsockopt_sock = 0;
12276 vs.my_element.sorry_fwdmode = l7vs::virtualservice_element::FWD_TPROXY;
12277 set_data.set_endpoint(dummy_v4_1);
12278 test_obj.set_up_thread_data_dest_side(set_data);
12279 test_obj.set_client_endpoint(dummy_v4_2);
12280 setsockopt_ret = -1;
12281 setsockopt_level = -1;
12282 setsockopt_optname = 0;
12283 setsockopt_optval = NULL;
12284 setsockopt_optlen = 0;
12285 if (test_obj.get_sorryserver_socket().second->get_socket().lowest_layer().is_open()) {
12286 test_obj.get_sorryserver_socket().second->get_socket().lowest_layer().close();
12288 test_obj.test_call();
12289 // called setsockopt and will be session error
12290 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION, l7vs::Logger::putLogError_category);
12291 BOOST_CHECK_EQUAL(::setsockopt_level, SOL_IP);
12292 BOOST_CHECK_EQUAL(::setsockopt_optname, IP_TRANSPARENT);
12293 BOOST_CHECK_EQUAL(*((int*)::setsockopt_optval), 1);
12294 BOOST_CHECK_EQUAL(::setsockopt_optlen, sizeof(int));
12296 // server fwdmode is FWD_TPROXY and client(IPv6), server(IPv6), setsockopt error
12297 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
12298 ::setsockopt_sock = 0;
12299 vs.my_element.sorry_fwdmode = l7vs::virtualservice_element::FWD_TPROXY;
12300 set_data.set_endpoint(dummy_v6_1);
12301 test_obj.set_up_thread_data_dest_side(set_data);
12302 test_obj.set_client_endpoint(dummy_v6_2);
12303 setsockopt_ret = -1;
12304 setsockopt_level = -1;
12305 setsockopt_optname = 0;
12306 setsockopt_optval = NULL;
12307 setsockopt_optlen = 0;
12308 if (test_obj.get_sorryserver_socket().second->get_socket().lowest_layer().is_open()) {
12309 test_obj.get_sorryserver_socket().second->get_socket().lowest_layer().close();
12311 test_obj.test_call();
12312 // called setsockopt and will be session error
12313 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION, l7vs::Logger::putLogError_category);
12314 BOOST_CHECK_EQUAL(::setsockopt_level, SOL_IPV6);
12315 BOOST_CHECK_EQUAL(::setsockopt_optname, IP_TRANSPARENT);
12316 BOOST_CHECK_EQUAL(*((int*)::setsockopt_optval), 1);
12317 BOOST_CHECK_EQUAL(::setsockopt_optlen, sizeof(int));
12319 // server fwdmode is FWD_TPROXY and client(IPv4), server(IPv4)
12320 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
12321 ::setsockopt_sock = 0;
12322 vs.my_element.sorry_fwdmode = l7vs::virtualservice_element::FWD_TPROXY;
12323 set_data.set_endpoint(dummy_v4_1);
12324 test_obj.set_up_thread_data_dest_side(set_data);
12325 test_obj.set_client_endpoint(dummy_v4_2);
12326 setsockopt_ret = 0;
12327 setsockopt_level = -1;
12328 setsockopt_optname = 0;
12329 setsockopt_optval = NULL;
12330 setsockopt_optlen = 0;
12331 if (test_obj.get_sorryserver_socket().second->get_socket().lowest_layer().is_open()) {
12332 test_obj.get_sorryserver_socket().second->get_socket().lowest_layer().close();
12334 test_obj.test_call();
12335 // called setsockopt and will be session error
12336 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE, l7vs::Logger::putLogError_category);
12337 BOOST_CHECK_EQUAL(::setsockopt_level, SOL_IP);
12338 BOOST_CHECK_EQUAL(::setsockopt_optname, IP_TRANSPARENT);
12339 BOOST_CHECK_EQUAL(*((int*)::setsockopt_optval), 1);
12340 BOOST_CHECK_EQUAL(::setsockopt_optlen, sizeof(int));
12342 // server fwdmode is FWD_TPROXY and client(IPv6), server(IPv6)
12343 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
12344 ::setsockopt_sock = 0;
12345 vs.my_element.sorry_fwdmode = l7vs::virtualservice_element::FWD_TPROXY;
12346 set_data.set_endpoint(dummy_v6_1);
12347 test_obj.set_up_thread_data_dest_side(set_data);
12348 test_obj.set_client_endpoint(dummy_v6_2);
12349 setsockopt_ret = 0;
12350 setsockopt_level = -1;
12351 setsockopt_optname = 0;
12352 setsockopt_optval = NULL;
12353 setsockopt_optlen = 0;
12354 if (test_obj.get_sorryserver_socket().second->get_socket().lowest_layer().is_open()) {
12355 test_obj.get_sorryserver_socket().second->get_socket().lowest_layer().close();
12357 test_obj.test_call();
12358 // called setsockopt and will be session error
12359 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_NONE, l7vs::Logger::putLogError_category);
12360 BOOST_CHECK_EQUAL(::setsockopt_level, SOL_IPV6);
12361 BOOST_CHECK_EQUAL(::setsockopt_optname, IP_TRANSPARENT);
12362 BOOST_CHECK_EQUAL(*((int*)::setsockopt_optval), 1);
12363 BOOST_CHECK_EQUAL(::setsockopt_optlen, sizeof(int));
12366 BOOST_MESSAGE( "----- up_thread_sorryserver_connect test end -----" );
12369 //realserver_disconnect test class
12370 class realserver_disconnect_test_class : public l7vs::tcp_session{
12372 // realserver_disconnect_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io) : l7vs::tcp_session(vs,session_io){
12374 realserver_disconnect_test_class(
12375 l7vs::virtualservice_tcp& vs,
12376 boost::asio::io_service& session_io,
12377 l7vs::tcp_socket_option_info& set_socket_option,
12378 boost::asio::ip::tcp::endpoint listen_endpoint,
12380 boost::asio::ssl::context& set_ssl_context,
12381 bool set_ssl_cache_flag,
12382 int set_ssl_handshake_time_out,
12383 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
12389 set_ssl_cache_flag,
12390 set_ssl_handshake_time_out,
12391 set_access_logger){};
12393 ~realserver_disconnect_test_class(){};
12396 void test_up_call(){
12397 l7vs::tcp_session::up_thread_realserver_disconnect(LOCAL_PROC);
12399 void test_down_call(){
12400 l7vs::tcp_session::down_thread_realserver_disconnect(LOCAL_PROC);
12403 void test_up_all_call(){
12404 l7vs::tcp_session::up_thread_all_realserver_disconnect(LOCAL_PROC);
12406 void test_down_all_call(){
12407 l7vs::tcp_session::down_thread_all_realserver_disconnect(LOCAL_PROC);
12410 module_function_realserver_disconnect_mutex.wrlock();
12412 void mutex_unlock(){
12413 module_function_realserver_disconnect_mutex.unlock();
12415 // bool mutex_trylock(){
12416 // return module_function_realserver_disconnect_mutex.try_lock();
12419 void set_protocol_module(l7vs::protocol_module_base* set_prot){
12420 protocol_module = set_prot;
12422 l7vs::tcp_data& get_up_thread_data_client_side(){
12423 return up_thread_data_client_side;
12425 l7vs::tcp_data& get_up_thread_data_dest_side(){
12426 return up_thread_data_dest_side;
12428 l7vs::tcp_data& get_down_thread_data_client_side(){
12429 return down_thread_data_client_side;
12431 l7vs::tcp_data& get_down_thread_data_dest_side(){
12432 return down_thread_data_dest_side;
12434 l7vs::tcp_socket& get_client_socket(){
12435 return client_socket;
12437 socket_element& get_sorryserver_socket(){
12438 return sorryserver_socket;
12440 std::list<socket_element>& get_down_thread_receive_realserver_socket_list(){
12441 return down_thread_receive_realserver_socket_list;
12443 std::map<endpoint,tcp_socket_ptr>& get_up_thread_send_realserver_socket_map(){
12444 return up_thread_send_realserver_socket_map;
12446 std::list<socket_element>::iterator& get_down_thread_current_receive_realserver_socket(){
12447 return down_thread_current_receive_realserver_socket;
12449 l7vs::tcp_realserver_connect_socket_list& get_down_thread_connect_socket_list(){
12450 return down_thread_connect_socket_list;
12452 l7vs::lockfree_queue<l7vs::tcp_thread_message>& get_down_thread_message_que(){
12453 return down_thread_message_que;
12455 l7vs::lockfree_queue<l7vs::tcp_thread_message>& get_up_thread_message_que(){
12456 return up_thread_message_que;
12459 void set_up_thread_id(boost::thread::id set_id){
12460 up_thread_id = set_id;
12462 void set_down_thread_id(boost::thread::id set_id){
12463 down_thread_id = set_id;
12466 void next_up_function_call(){
12467 up_thread_next_call_function.second(LOCAL_PROC);
12469 void next_down_function_call(){
12470 down_thread_next_call_function.second(LOCAL_PROC);
12473 void set_up_thread_next_function_call_exit(){
12474 up_thread_function_pair fun_it = up_thread_function_array[UP_FUNC_EXIT];
12475 up_thread_next_call_function = fun_it;
12478 void set_down_thread_next_function_call_exit(){
12479 down_thread_function_pair fun_it = down_thread_function_array[DOWN_FUNC_EXIT];
12480 down_thread_next_call_function = fun_it;
12483 // next call function check
12484 void up_thread_realserver_disconnect_event(const TCP_PROCESS_TYPE_TAG process_type){
12485 up_thread_realserver_disconnect_event_call_check = true;
12487 bool up_thread_realserver_disconnect_event_call_check;
12489 void down_thread_realserver_disconnect_event(const TCP_PROCESS_TYPE_TAG process_type){
12490 down_thread_realserver_disconnect_event_call_check = true;
12492 bool down_thread_realserver_disconnect_event_call_check;
12494 void up_thread_client_disconnect(const TCP_PROCESS_TYPE_TAG process_type){
12495 up_thread_client_disconnect_call_check = true;
12497 bool up_thread_client_disconnect_call_check;
12499 void down_thread_client_disconnect(const TCP_PROCESS_TYPE_TAG process_type){
12500 down_thread_client_disconnect_call_check = true;
12502 bool down_thread_client_disconnect_call_check;
12504 void up_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
12505 up_thread_exit_call_check = true;
12507 bool up_thread_exit_call_check;
12509 void down_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
12510 down_thread_exit_call_check = true;
12512 bool down_thread_exit_call_check;
12515 void up_thread_function_array_clear(){
12516 for(int i = 0;i <= UP_FUNC_EXIT;i++){
12517 up_thread_function_array[i].second = NULL;
12520 void down_thread_function_array_clear(){
12521 for(int i = 0;i <= DOWN_FUNC_EXIT;i++){
12522 down_thread_function_array[i].second = NULL;
12526 void up_thread_module_event_map_clear(){
12527 up_thread_module_event_map.clear();
12530 void down_thread_module_event_map_clear(){
12531 down_thread_module_event_map.clear();
12534 void up_thread_message_down_thread_function_map_clear(){
12535 up_thread_message_down_thread_function_map.clear();
12538 void down_thread_message_up_thread_function_map_clear(){
12539 down_thread_message_up_thread_function_map.clear();
12543 //up_thread_realserver_disconnect test
12544 void up_thread_realserver_disconnect_test(){
12545 BOOST_MESSAGE( "----- up_thread_realserver_disconnect test start -----" );
12547 boost::asio::io_service io;
12548 l7vs::virtualservice_tcp vs;
12549 l7vs::tcp_socket_option_info set_option;
12550 //! TCP_NODELAY (false:not set,true:set option)
12551 set_option.nodelay_opt = false;
12552 //! TCP_NODELAY option value (false:off,true:on)
12553 set_option.nodelay_val = false;
12554 //! TCP_CORK (false:not set,true:set option)
12555 set_option.cork_opt = false;
12556 //! TCP_CORK option value (false:off,true:on)
12557 set_option.cork_val = false;
12558 //! TCP_QUICKACK (false:not set,true:set option)
12559 set_option.quickack_opt = false;
12560 //! TCP_QUICKACK option value (false:off,true:on)
12561 set_option.quickack_val = false;
12563 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
12564 bool set_mode(false);
12565 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
12566 bool set_ssl_cache_flag(false);
12567 int set_ssl_handshake_time_out = 0;
12568 //std::string access_log_file_name = "test";
12569 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
12571 std::string test_protocol_name("test protocol");
12572 l7vs::test_protocol_module proto_test(test_protocol_name);
12573 // realserver_disconnect_test_class test_obj(vs,io);
12574 realserver_disconnect_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
12576 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
12577 boost::thread::id proc_id = boost::this_thread::get_id();
12579 l7vs::tcp_data& discon_data = test_obj.get_up_thread_data_dest_side();
12581 //up_thread_data_dest_side set
12582 boost::asio::ip::tcp::endpoint discon_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP),7001);
12583 discon_data.initialize();
12584 discon_data.set_endpoint(discon_end);
12586 test_obj.set_down_thread_id(boost::thread::id());
12587 test_obj.set_up_thread_id(proc_id);
12589 vs.connection_inactive_list.clear();
12591 // set realserver socket
12592 std::map<boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > >& rs_map = test_obj.get_up_thread_send_realserver_socket_map();
12593 std::map<boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > >::iterator rs_it;
12594 std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > push_pair;
12595 for(int i = 0 ; i < 3 ;i++){
12596 boost::shared_ptr< l7vs::tcp_socket > new_socket(new l7vs::tcp_socket(io));
12597 push_pair.first.address(boost::asio::ip::address::from_string(DUMMY_SERVER_IP));
12598 push_pair.first.port(7000+i);
12599 push_pair.second = new_socket;
12600 new_socket->close_res = true;
12601 new_socket->close_out_ec.clear();
12602 new_socket->close_call_check = false;
12603 rs_map.insert(push_pair);
12606 l7vs::lockfree_queue<l7vs::tcp_thread_message>& down_thread_message_que = test_obj.get_down_thread_message_que();
12607 l7vs::lockfree_queue<l7vs::tcp_thread_message>& up_thread_message_que = test_obj.get_up_thread_message_que();
12608 while( !down_thread_message_que.empty() ){
12609 l7vs::tcp_thread_message* tmp_ptr = down_thread_message_que.pop();
12612 while( !up_thread_message_que.empty() ){
12613 l7vs::tcp_thread_message* tmp_ptr = up_thread_message_que.pop();
12618 test_obj.set_up_thread_next_function_call_exit();
12619 test_obj.up_thread_realserver_disconnect_event_call_check = false;
12621 test_obj.test_up_call();
12623 rs_it = rs_map.find(discon_end);
12625 // unit_test [1] up_thread_realserver_disconnect socket close call check
12626 std::cerr << "[1] up_thread_realserver_disconnect socket close call check" << std::endl;
12627 BOOST_CHECK(rs_it != rs_map.end());
12628 BOOST_CHECK(rs_it->second->close_call_check);
12630 // unit_test [2] up_thread_realserver_disconnect virtualservice connection_inactive call check
12631 std::cerr << "[2] up_thread_realserver_disconnect virtualservice connection_inactive call check" << std::endl;
12632 BOOST_CHECK(!vs.connection_inactive_list.empty());
12633 BOOST_CHECK(*(vs.connection_inactive_list.begin()) == discon_end);
12635 // unit_test [3] up_thread_realserver_disconnect up thread message set check
12636 std::cerr << "[3] up_thread_realserver_disconnect up thread message set check" << std::endl;
12637 BOOST_CHECK(!up_thread_message_que.empty());
12638 l7vs::tcp_thread_message* up_msg = up_thread_message_que.pop();
12639 BOOST_CHECK(up_thread_message_que.empty());
12640 BOOST_CHECK(up_msg->endpoint_info == discon_end);
12641 test_obj.up_thread_realserver_disconnect_event_call_check = false;
12642 up_msg->message(l7vs::tcp_session::MESSAGE_PROC);
12643 BOOST_CHECK(test_obj.up_thread_realserver_disconnect_event_call_check);
12646 // unit_test [4] up_thread_realserver_disconnect down thread message set check
12647 std::cerr << "[4] up_thread_realserver_disconnect down thread message set check" << std::endl;
12648 BOOST_CHECK(!down_thread_message_que.empty());
12649 l7vs::tcp_thread_message* down_msg = down_thread_message_que.pop();
12650 BOOST_CHECK(down_thread_message_que.empty());
12651 BOOST_CHECK(down_msg->endpoint_info == discon_end);
12652 test_obj.down_thread_realserver_disconnect_event_call_check = false;
12653 down_msg->message(l7vs::tcp_session::MESSAGE_PROC);
12654 BOOST_CHECK(test_obj.down_thread_realserver_disconnect_event_call_check);
12657 // unit_test [5] up_thread_realserver_disconnect closed socket not set message check
12658 std::cerr << "[5] up_thread_realserver_disconnect closed socket not set message check" << std::endl;
12659 rs_it->second->close_res = false;
12660 test_obj.test_up_call();
12661 BOOST_CHECK(up_thread_message_que.empty());
12662 BOOST_CHECK(down_thread_message_que.empty());
12664 rs_it->second->close_res = true;
12666 // unit_test [6] up_thread_realserver_disconnect not fond down_thread_realserver_disconnect_event function error check
12667 std::cerr << "[6] up_thread_realserver_disconnect not fond down_thread_realserver_disconnect_event function error check" << std::endl;
12668 test_obj.up_thread_message_down_thread_function_map_clear();
12669 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
12670 l7vs::Logger::putLogError_id = 0;
12671 test_obj.up_thread_exit_call_check = false;
12672 test_obj.test_up_call();
12673 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
12674 BOOST_CHECK_EQUAL(44,l7vs::Logger::putLogError_id);
12675 std::cerr << l7vs::Logger::putLogError_message << std::endl;
12676 BOOST_CHECK(test_obj.up_thread_exit_call_check);
12678 // unit_test [7] up_thread_realserver_disconnect not fond up_thread_sorryserver_disconnect_event function error check
12679 std::cerr << "[7] up_thread_realserver_disconnect not fond up_thread_sorryserver_disconnect_event function error check" << std::endl;
12680 test_obj.up_thread_function_array_clear();
12681 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
12682 l7vs::Logger::putLogError_id = 0;
12683 test_obj.up_thread_exit_call_check = false;
12684 test_obj.test_up_call();
12685 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
12686 BOOST_CHECK_EQUAL(43,l7vs::Logger::putLogError_id);
12687 std::cerr << l7vs::Logger::putLogError_message << std::endl;
12688 BOOST_CHECK(test_obj.up_thread_exit_call_check);
12690 BOOST_MESSAGE( "----- up_thread_realserver_disconnect test end -----" );
12693 //down_thread_realserver_disconnect test
12694 void down_thread_realserver_disconnect_test(){
12695 BOOST_MESSAGE( "----- down_thread_realserver_disconnect test start -----" );
12697 boost::asio::io_service io;
12698 l7vs::virtualservice_tcp vs;
12699 l7vs::tcp_socket_option_info set_option;
12700 //! TCP_NODELAY (false:not set,true:set option)
12701 set_option.nodelay_opt = false;
12702 //! TCP_NODELAY option value (false:off,true:on)
12703 set_option.nodelay_val = false;
12704 //! TCP_CORK (false:not set,true:set option)
12705 set_option.cork_opt = false;
12706 //! TCP_CORK option value (false:off,true:on)
12707 set_option.cork_val = false;
12708 //! TCP_QUICKACK (false:not set,true:set option)
12709 set_option.quickack_opt = false;
12710 //! TCP_QUICKACK option value (false:off,true:on)
12711 set_option.quickack_val = false;
12713 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
12714 bool set_mode(false);
12715 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
12716 bool set_ssl_cache_flag(false);
12717 int set_ssl_handshake_time_out = 0;
12718 //std::string access_log_file_name = "test";
12719 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
12721 std::string test_protocol_name("test protocol");
12722 l7vs::test_protocol_module proto_test(test_protocol_name);
12723 // realserver_disconnect_test_class test_obj(vs,io);
12724 realserver_disconnect_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
12726 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
12727 boost::thread::id proc_id = boost::this_thread::get_id();
12729 l7vs::tcp_data& discon_data = test_obj.get_down_thread_data_dest_side();
12731 //up_thread_data_dest_side set
12732 boost::asio::ip::tcp::endpoint discon_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP),7001);
12733 discon_data.initialize();
12734 discon_data.set_endpoint(discon_end);
12736 test_obj.set_up_thread_id(boost::thread::id());
12737 test_obj.set_down_thread_id(proc_id);
12739 vs.connection_inactive_list.clear();
12741 // set realserver socket
12742 std::list< std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > >& rs_list = test_obj.get_down_thread_receive_realserver_socket_list();
12743 std::list< std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > >::iterator rs_it;
12744 std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > push_pair;
12745 for(int i = 0 ; i < 3 ;i++){
12746 boost::shared_ptr< l7vs::tcp_socket > new_socket(new l7vs::tcp_socket(io));
12747 push_pair.first.address(boost::asio::ip::address::from_string(DUMMY_SERVER_IP));
12748 push_pair.first.port(7000+i);
12749 push_pair.second = new_socket;
12750 new_socket->close_res = true;
12751 new_socket->close_out_ec.clear();
12752 new_socket->close_call_check = false;
12753 rs_list.push_back(push_pair);
12757 l7vs::lockfree_queue<l7vs::tcp_thread_message>& down_thread_message_que = test_obj.get_down_thread_message_que();
12758 l7vs::lockfree_queue<l7vs::tcp_thread_message>& up_thread_message_que = test_obj.get_up_thread_message_que();
12759 while( !down_thread_message_que.empty() ){
12760 l7vs::tcp_thread_message* tmp_ptr = down_thread_message_que.pop();
12763 while( !up_thread_message_que.empty() ){
12764 l7vs::tcp_thread_message* tmp_ptr = up_thread_message_que.pop();
12769 test_obj.set_down_thread_next_function_call_exit();
12770 test_obj.down_thread_realserver_disconnect_event_call_check = false;
12772 test_obj.test_down_call();
12774 rs_it = rs_list.begin();
12775 while(rs_it != rs_list.end()){
12776 if( rs_it->first == discon_end )
12781 // unit_test [1] down_thread_realserver_disconnect socket close call check
12782 std::cerr << "[1] down_thread_realserver_disconnect socket close call check" << std::endl;
12783 BOOST_CHECK(rs_it != rs_list.end());
12784 BOOST_CHECK(rs_it->second->close_call_check);
12786 // unit_test [2] down_thread_realserver_disconnect virtualservice connection_inactive call check
12787 std::cerr << "[2] down_thread_realserver_disconnect virtualservice connection_inactive call check" << std::endl;
12788 BOOST_CHECK(!vs.connection_inactive_list.empty());
12789 BOOST_CHECK(*(vs.connection_inactive_list.begin()) == discon_end);
12791 // unit_test [3] down_thread_realserver_disconnect up thread message set check
12792 std::cerr << "[3] down_thread_realserver_disconnect up thread message set check" << std::endl;
12793 BOOST_CHECK(!up_thread_message_que.empty());
12794 l7vs::tcp_thread_message* up_msg = up_thread_message_que.pop();
12795 BOOST_CHECK(up_thread_message_que.empty());
12796 BOOST_CHECK(up_msg->endpoint_info == discon_end);
12797 test_obj.up_thread_realserver_disconnect_event_call_check = false;
12798 up_msg->message(l7vs::tcp_session::MESSAGE_PROC);
12799 BOOST_CHECK(test_obj.up_thread_realserver_disconnect_event_call_check);
12802 // unit_test [4] up_thread_sorryserver_disconnect down thread message set check
12803 std::cerr << "[4] up_thread_sorryserver_disconnect down thread message set check" << std::endl;
12804 BOOST_CHECK(!down_thread_message_que.empty());
12805 l7vs::tcp_thread_message* down_msg = down_thread_message_que.pop();
12806 BOOST_CHECK(down_thread_message_que.empty());
12807 BOOST_CHECK(down_msg->endpoint_info == discon_end);
12808 test_obj.down_thread_realserver_disconnect_event_call_check = false;
12809 down_msg->message(l7vs::tcp_session::MESSAGE_PROC);
12810 BOOST_CHECK(test_obj.down_thread_realserver_disconnect_event_call_check);
12813 // unit_test [5] down_thread_realserver_disconnect closed socket not set message check
12814 std::cerr << "[5] down_thread_realserver_disconnect closed socket not set message check" << std::endl;
12815 rs_it->second->close_res = false;
12816 test_obj.test_down_call();
12817 BOOST_CHECK(up_thread_message_que.empty());
12818 BOOST_CHECK(down_thread_message_que.empty());
12820 rs_it->second->close_res = true;
12822 // unit_test [6] down_thread_realserver_disconnect not fond down_thread_realserver_disconnect_event function error check
12823 std::cerr << "[6] down_thread_realserver_disconnect not fond down_thread_realserver_disconnect_event function error check" << std::endl;
12824 test_obj.down_thread_message_up_thread_function_map_clear();
12825 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
12826 l7vs::Logger::putLogError_id = 0;
12827 test_obj.down_thread_exit_call_check = false;
12828 test_obj.test_down_call();
12829 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
12830 BOOST_CHECK_EQUAL(73,l7vs::Logger::putLogError_id);
12831 std::cerr << l7vs::Logger::putLogError_message << std::endl;
12832 BOOST_CHECK(test_obj.down_thread_exit_call_check);
12834 // unit_test [7] down_thread_realserver_disconnect not fond up_thread_sorryserver_disconnect_event function error check
12835 std::cerr << "[7] down_thread_realserver_disconnect not fond up_thread_sorryserver_disconnect_event function error check" << std::endl;
12836 test_obj.down_thread_function_array_clear();
12837 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
12838 l7vs::Logger::putLogError_id = 0;
12839 test_obj.down_thread_exit_call_check = false;
12840 test_obj.test_down_call();
12841 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
12842 BOOST_CHECK_EQUAL(72,l7vs::Logger::putLogError_id);
12843 std::cerr << l7vs::Logger::putLogError_message << std::endl;
12844 BOOST_CHECK(test_obj.down_thread_exit_call_check);
12846 BOOST_MESSAGE( "----- down_thread_realserver_disconnect test end -----" );
12850 //up_thread_all_realserver_disconnect test
12851 void up_thread_all_realserver_disconnect_test(){
12852 BOOST_MESSAGE( "----- up_thread_all_realserver_disconnect test start -----" );
12854 boost::asio::io_service io;
12855 l7vs::virtualservice_tcp vs;
12856 l7vs::tcp_socket_option_info set_option;
12857 //! TCP_NODELAY (false:not set,true:set option)
12858 set_option.nodelay_opt = false;
12859 //! TCP_NODELAY option value (false:off,true:on)
12860 set_option.nodelay_val = false;
12861 //! TCP_CORK (false:not set,true:set option)
12862 set_option.cork_opt = false;
12863 //! TCP_CORK option value (false:off,true:on)
12864 set_option.cork_val = false;
12865 //! TCP_QUICKACK (false:not set,true:set option)
12866 set_option.quickack_opt = false;
12867 //! TCP_QUICKACK option value (false:off,true:on)
12868 set_option.quickack_val = false;
12870 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
12871 bool set_mode(false);
12872 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
12873 bool set_ssl_cache_flag(false);
12874 int set_ssl_handshake_time_out = 0;
12875 //std::string access_log_file_name = "test";
12876 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
12878 std::string test_protocol_name("test protocol");
12879 l7vs::test_protocol_module proto_test(test_protocol_name);
12880 // realserver_disconnect_test_class test_obj(vs,io);
12881 realserver_disconnect_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
12882 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
12883 boost::thread::id proc_id = boost::this_thread::get_id();
12885 l7vs::tcp_data& discon_data = test_obj.get_up_thread_data_dest_side();
12887 //up_thread_data_dest_side set
12888 boost::asio::ip::tcp::endpoint discon_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP),7001);
12889 discon_data.initialize();
12890 discon_data.set_endpoint(discon_end);
12892 test_obj.set_down_thread_id(boost::thread::id());
12893 test_obj.set_up_thread_id(proc_id);
12895 vs.connection_inactive_list.clear();
12897 // set realserver socket
12898 std::map<boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > >& rs_map = test_obj.get_up_thread_send_realserver_socket_map();
12899 std::map<boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > >::iterator rs_it;
12900 std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > push_pair;
12901 std::list< std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > > ref_rs_list;
12902 std::list< std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > >::iterator ref_rs_it;
12903 for(int i = 0 ; i < 3 ;i++){
12904 boost::shared_ptr< l7vs::tcp_socket > new_socket(new l7vs::tcp_socket(io));
12905 push_pair.first.address(boost::asio::ip::address::from_string(DUMMY_SERVER_IP));
12906 push_pair.first.port(7000+i);
12907 push_pair.second = new_socket;
12908 new_socket->close_res = true;
12909 new_socket->close_out_ec.clear();
12910 new_socket->close_call_check = false;
12911 rs_map.insert(push_pair);
12912 ref_rs_list.push_back(push_pair);
12915 l7vs::lockfree_queue<l7vs::tcp_thread_message>& down_thread_message_que = test_obj.get_down_thread_message_que();
12916 l7vs::lockfree_queue<l7vs::tcp_thread_message>& up_thread_message_que = test_obj.get_up_thread_message_que();
12917 while( !down_thread_message_que.empty() ){
12918 l7vs::tcp_thread_message* tmp_ptr = down_thread_message_que.pop();
12921 while( !up_thread_message_que.empty() ){
12922 l7vs::tcp_thread_message* tmp_ptr = up_thread_message_que.pop();
12927 test_obj.set_up_thread_next_function_call_exit();
12928 test_obj.up_thread_client_disconnect_call_check = false;
12930 //protocol module set
12931 proto_test.handle_realserver_disconnect_res_tag = l7vs::protocol_module_base::CLIENT_DISCONNECT;
12932 proto_test.handle_realserver_disconnect_thread_id = boost::thread::id();
12933 proto_test.handle_realserver_disconnect_rs_endpoint_list.clear();
12935 test_obj.test_up_all_call();
12937 // unit_test [1] up_thread_all_realserver_disconnect socket close call check
12938 std::cerr << "[1] up_thread_all_realserver_disconnect socket close call check" << std::endl;
12939 ref_rs_it = ref_rs_list.begin();
12940 while(ref_rs_it != ref_rs_list.end()){
12941 BOOST_CHECK(ref_rs_it->second->close_call_check);
12945 // unit_test [2] up_thread_all_realserver_disconnect virtualservice connection_inactive call check
12946 std::cerr << "[2] up_thread_all_realserver_disconnect virtualservice connection_inactive call check" << std::endl;
12947 BOOST_CHECK(!vs.connection_inactive_list.empty());
12948 ref_rs_it = ref_rs_list.begin();
12949 while(ref_rs_it != ref_rs_list.end()){
12950 std::list<boost::asio::ip::tcp::endpoint>::iterator end_list_it = vs.connection_inactive_list.begin();
12951 while(end_list_it == vs.connection_inactive_list.end()){
12952 if(ref_rs_it->first == *end_list_it)
12956 BOOST_CHECK(end_list_it != vs.connection_inactive_list.end());
12960 // unit_test [3] up_thread_all_realserver_disconnect handle_realserver_disconnect call check
12961 std::cerr << "[3] up_thread_all_realserver_disconnect handle_realserver_disconnect call check" << std::endl;
12962 BOOST_CHECK(proto_test.handle_realserver_disconnect_thread_id == proc_id);
12963 BOOST_CHECK(!proto_test.handle_realserver_disconnect_rs_endpoint_list.empty());
12964 ref_rs_it = ref_rs_list.begin();
12965 while(ref_rs_it != ref_rs_list.end()){
12966 std::list<boost::asio::ip::tcp::endpoint>::iterator end_list_it = proto_test.handle_realserver_disconnect_rs_endpoint_list.begin();
12967 while(end_list_it == vs.connection_inactive_list.end()){
12968 if(ref_rs_it->first == *end_list_it)
12972 BOOST_CHECK(end_list_it != proto_test.handle_realserver_disconnect_rs_endpoint_list.end());
12976 // unit_test [4] up_thread_all_realserver_disconnect update up_thread_next_call_function check
12977 std::cerr << "[4] up_thread_all_realserver_disconnect update up_thread_next_call_function check" << std::endl;
12978 test_obj.next_up_function_call();
12979 BOOST_CHECK(test_obj.up_thread_client_disconnect_call_check);
12981 // unit_test [5] up_thread_all_realserver_disconnect realserver not fond check
12982 std::cerr << "[5] up_thread_all_realserver_disconnect realserver not fond check" << std::endl;
12983 proto_test.handle_realserver_disconnect_thread_id = boost::thread::id();
12984 proto_test.handle_realserver_disconnect_rs_endpoint_list.clear();
12985 test_obj.up_thread_client_disconnect_call_check = false;
12987 test_obj.test_up_all_call();
12989 BOOST_CHECK(proto_test.handle_realserver_disconnect_thread_id == proc_id);
12990 BOOST_CHECK(!proto_test.handle_realserver_disconnect_rs_endpoint_list.empty());
12991 BOOST_CHECK( *(proto_test.handle_realserver_disconnect_rs_endpoint_list.begin()) == boost::asio::ip::tcp::endpoint() );
12992 test_obj.next_up_function_call();
12993 BOOST_CHECK(test_obj.up_thread_client_disconnect_call_check);
12995 // unit_test [6] up_thread_all_realserver_disconnect handle_realserver_disconnect mutex lock check
12996 std::cerr << "[6] up_thread_all_realserver_disconnect handle_realserver_disconnect mutex lock check" << std::endl;
12997 ref_rs_it = ref_rs_list.begin();
12998 while(ref_rs_it != ref_rs_list.end()){
12999 rs_map.insert(*ref_rs_it);
13002 proto_test.handle_realserver_disconnect_thread_id = boost::thread::id();
13003 test_obj.mutex_lock();
13004 boost::thread test_thread(boost::bind(&realserver_disconnect_test_class::test_up_all_call,&test_obj));
13006 BOOST_CHECK(proto_test.handle_realserver_disconnect_thread_id == boost::thread::id());
13008 // unit_test [7] up_thread_all_realserver_disconnect handle_realserver_disconnect mutex unlock run check
13009 std::cerr << "[7] up_thread_all_realserver_disconnect handle_realserver_disconnect mutex unlock run check" << std::endl;
13010 boost::thread::id test_id = test_thread.get_id();
13011 test_obj.set_up_thread_id(test_id);
13012 test_obj.mutex_unlock();
13014 BOOST_CHECK(proto_test.handle_realserver_disconnect_thread_id == test_id);
13015 test_thread.join();
13017 // unit_test [8] up_thread_all_realserver_disconnect not fond function error check
13018 std::cerr << "[8] up_thread_all_realserver_disconnect not fond function error check" << std::endl;
13019 ref_rs_it = ref_rs_list.begin();
13020 while(ref_rs_it != ref_rs_list.end()){
13021 rs_map.insert(*ref_rs_it);
13024 test_obj.up_thread_function_array_clear();
13025 test_obj.up_thread_exit_call_check = false;
13026 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
13027 l7vs::Logger::putLogError_id = 0;
13028 test_obj.test_up_all_call();
13029 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
13030 BOOST_CHECK_EQUAL(48,l7vs::Logger::putLogError_id);
13031 std::cerr << l7vs::Logger::putLogError_message << std::endl;
13032 BOOST_CHECK(test_obj.up_thread_exit_call_check);
13034 // unit_test [9] up_thread_all_realserver_disconnect returnd illegal EVENT_TAG error check
13035 std::cerr << "[9] up_thread_all_realserver_disconnect returnd illegal EVENT_TAG error check" << std::endl;
13036 ref_rs_it = ref_rs_list.begin();
13037 while(ref_rs_it != ref_rs_list.end()){
13038 rs_map.insert(*ref_rs_it);
13041 test_obj.up_thread_module_event_map_clear();
13042 test_obj.up_thread_exit_call_check = false;
13043 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
13044 l7vs::Logger::putLogError_id = 0;
13045 test_obj.test_up_all_call();
13046 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
13047 BOOST_CHECK_EQUAL(47,l7vs::Logger::putLogError_id);
13048 std::cerr << l7vs::Logger::putLogError_message << std::endl;
13049 BOOST_CHECK(test_obj.up_thread_exit_call_check);
13051 BOOST_MESSAGE( "----- up_thread_all_realserver_disconnect test end -----" );
13054 //down_thread_all_realserver_disconnect test
13055 void down_thread_all_realserver_disconnect_test(){
13056 BOOST_MESSAGE( "----- down_thread_all_realserver_disconnect test start -----" );
13058 boost::asio::io_service io;
13059 l7vs::virtualservice_tcp vs;
13060 l7vs::tcp_socket_option_info set_option;
13061 //! TCP_NODELAY (false:not set,true:set option)
13062 set_option.nodelay_opt = false;
13063 //! TCP_NODELAY option value (false:off,true:on)
13064 set_option.nodelay_val = false;
13065 //! TCP_CORK (false:not set,true:set option)
13066 set_option.cork_opt = false;
13067 //! TCP_CORK option value (false:off,true:on)
13068 set_option.cork_val = false;
13069 //! TCP_QUICKACK (false:not set,true:set option)
13070 set_option.quickack_opt = false;
13071 //! TCP_QUICKACK option value (false:off,true:on)
13072 set_option.quickack_val = false;
13074 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
13075 bool set_mode(false);
13076 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
13077 bool set_ssl_cache_flag(false);
13078 int set_ssl_handshake_time_out = 0;
13079 //std::string access_log_file_name = "test";
13080 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
13082 std::string test_protocol_name("test protocol");
13083 l7vs::test_protocol_module proto_test(test_protocol_name);
13084 // realserver_disconnect_test_class test_obj(vs,io);
13085 realserver_disconnect_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
13086 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
13087 boost::thread::id proc_id = boost::this_thread::get_id();
13089 l7vs::tcp_data& discon_data = test_obj.get_down_thread_data_dest_side();
13091 //down_thread_data_dest_side set
13092 boost::asio::ip::tcp::endpoint discon_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP),7001);
13093 discon_data.initialize();
13094 discon_data.set_endpoint(discon_end);
13096 test_obj.set_up_thread_id(boost::thread::id());
13097 test_obj.set_down_thread_id(proc_id);
13099 vs.connection_inactive_list.clear();
13101 // set realserver socket
13102 std::list< std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > >& rs_list = test_obj.get_down_thread_receive_realserver_socket_list();
13103 std::list< std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > >::iterator rs_it;
13104 std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > push_pair;
13105 std::list< std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > > ref_rs_list;
13106 std::list< std::pair< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > > >::iterator ref_rs_it;
13107 for(int i = 0 ; i < 3 ;i++){
13108 boost::shared_ptr< l7vs::tcp_socket > new_socket(new l7vs::tcp_socket(io));
13109 push_pair.first.address(boost::asio::ip::address::from_string(DUMMY_SERVER_IP));
13110 push_pair.first.port(7000+i);
13111 push_pair.second = new_socket;
13112 new_socket->close_res = true;
13113 new_socket->close_out_ec.clear();
13114 new_socket->close_call_check = false;
13115 rs_list.push_back(push_pair);
13116 ref_rs_list.push_back(push_pair);
13119 l7vs::lockfree_queue<l7vs::tcp_thread_message>& down_thread_message_que = test_obj.get_down_thread_message_que();
13120 l7vs::lockfree_queue<l7vs::tcp_thread_message>& up_thread_message_que = test_obj.get_up_thread_message_que();
13121 while( !down_thread_message_que.empty() ){
13122 l7vs::tcp_thread_message* tmp_ptr = down_thread_message_que.pop();
13125 while( !up_thread_message_que.empty() ){
13126 l7vs::tcp_thread_message* tmp_ptr = up_thread_message_que.pop();
13131 test_obj.set_down_thread_next_function_call_exit();
13132 test_obj.down_thread_client_disconnect_call_check = false;
13134 //protocol module set
13135 proto_test.handle_realserver_disconnect_res_tag = l7vs::protocol_module_base::CLIENT_DISCONNECT;
13136 proto_test.handle_realserver_disconnect_thread_id = boost::thread::id();
13137 proto_test.handle_realserver_disconnect_rs_endpoint_list.clear();
13139 test_obj.test_down_all_call();
13141 // unit_test [1] down_thread_all_realserver_disconnect socket close call check
13142 std::cerr << "[1] down_thread_all_realserver_disconnect socket close call check" << std::endl;
13143 ref_rs_it = ref_rs_list.begin();
13144 while(ref_rs_it != ref_rs_list.end()){
13145 BOOST_CHECK(ref_rs_it->second->close_call_check);
13149 // unit_test [2] down_thread_all_realserver_disconnect virtualservice connection_inactive call check
13150 std::cerr << "[2] down_thread_all_realserver_disconnect virtualservice connection_inactive call check" << std::endl;
13151 BOOST_CHECK(!vs.connection_inactive_list.empty());
13152 ref_rs_it = ref_rs_list.begin();
13153 while(ref_rs_it != ref_rs_list.end()){
13154 std::list<boost::asio::ip::tcp::endpoint>::iterator end_list_it = vs.connection_inactive_list.begin();
13155 while(end_list_it == vs.connection_inactive_list.end()){
13156 if(ref_rs_it->first == *end_list_it)
13160 BOOST_CHECK(end_list_it != vs.connection_inactive_list.end());
13164 // unit_test [3] down_thread_all_realserver_disconnect handle_realserver_disconnect call check
13165 std::cerr << "[3] down_thread_all_realserver_disconnect handle_realserver_disconnect call check" << std::endl;
13166 BOOST_CHECK(proto_test.handle_realserver_disconnect_thread_id == proc_id);
13167 BOOST_CHECK(!proto_test.handle_realserver_disconnect_rs_endpoint_list.empty());
13168 ref_rs_it = ref_rs_list.begin();
13169 while(ref_rs_it != ref_rs_list.end()){
13170 std::list<boost::asio::ip::tcp::endpoint>::iterator end_list_it = proto_test.handle_realserver_disconnect_rs_endpoint_list.begin();
13171 while(end_list_it == vs.connection_inactive_list.end()){
13172 if(ref_rs_it->first == *end_list_it)
13176 BOOST_CHECK(end_list_it != proto_test.handle_realserver_disconnect_rs_endpoint_list.end());
13180 // unit_test [4] down_thread_all_realserver_disconnect update up_thread_next_call_function check
13181 std::cerr << "[4] down_thread_all_realserver_disconnect update up_thread_next_call_function check" << std::endl;
13182 test_obj.next_down_function_call();
13183 BOOST_CHECK(test_obj.down_thread_client_disconnect_call_check);
13185 // unit_test [5] down_thread_all_realserver_disconnect realserver not fond check
13186 std::cerr << "[5] down_thread_all_realserver_disconnect realserver not fond check" << std::endl;
13187 proto_test.handle_realserver_disconnect_thread_id = boost::thread::id();
13188 proto_test.handle_realserver_disconnect_rs_endpoint_list.clear();
13189 test_obj.down_thread_client_disconnect_call_check = false;
13191 test_obj.test_down_all_call();
13193 BOOST_CHECK(proto_test.handle_realserver_disconnect_thread_id == proc_id);
13194 BOOST_CHECK(!proto_test.handle_realserver_disconnect_rs_endpoint_list.empty());
13195 BOOST_CHECK( *(proto_test.handle_realserver_disconnect_rs_endpoint_list.begin()) == boost::asio::ip::tcp::endpoint() );
13196 test_obj.next_down_function_call();
13197 BOOST_CHECK(test_obj.down_thread_client_disconnect_call_check);
13199 // unit_test [6] down_thread_all_realserver_disconnect handle_realserver_disconnect mutex lock check
13200 std::cerr << "[6] down_thread_all_realserver_disconnect handle_realserver_disconnect mutex lock check" << std::endl;
13201 ref_rs_it = ref_rs_list.begin();
13202 while(ref_rs_it != ref_rs_list.end()){
13203 rs_list.push_back(*ref_rs_it);
13206 proto_test.handle_realserver_disconnect_thread_id = boost::thread::id();
13207 test_obj.mutex_lock();
13208 boost::thread test_thread(boost::bind(&realserver_disconnect_test_class::test_down_all_call,&test_obj));
13210 BOOST_CHECK(proto_test.handle_realserver_disconnect_thread_id == boost::thread::id());
13212 // unit_test [7] down_thread_all_realserver_disconnect handle_realserver_disconnect mutex unlock run check
13213 std::cerr << "[7] down_thread_all_realserver_disconnect handle_realserver_disconnect mutex unlock run check" << std::endl;
13214 boost::thread::id test_id = test_thread.get_id();
13215 test_obj.set_down_thread_id(test_id);
13216 test_obj.mutex_unlock();
13218 BOOST_CHECK(proto_test.handle_realserver_disconnect_thread_id == test_id);
13219 test_thread.join();
13221 // unit_test [8] down_thread_all_realserver_disconnect not fond function error check
13222 std::cerr << "[8] down_thread_all_realserver_disconnect not fond function error check" << std::endl;
13223 ref_rs_it = ref_rs_list.begin();
13224 while(ref_rs_it != ref_rs_list.end()){
13225 rs_list.push_back(*ref_rs_it);
13228 test_obj.down_thread_function_array_clear();
13229 test_obj.down_thread_exit_call_check = false;
13230 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
13231 l7vs::Logger::putLogError_id = 0;
13232 test_obj.test_down_all_call();
13233 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
13234 BOOST_CHECK_EQUAL(77,l7vs::Logger::putLogError_id);
13235 std::cerr << l7vs::Logger::putLogError_message << std::endl;
13236 BOOST_CHECK(test_obj.down_thread_exit_call_check);
13238 // unit_test [9] down_thread_all_realserver_disconnect returnd illegal EVENT_TAG error check
13239 std::cerr << "[9] down_thread_all_realserver_disconnect returnd illegal EVENT_TAG error check" << std::endl;
13240 ref_rs_it = ref_rs_list.begin();
13241 while(ref_rs_it != ref_rs_list.end()){
13242 rs_list.push_back(*ref_rs_it);
13245 test_obj.down_thread_module_event_map_clear();
13246 test_obj.down_thread_exit_call_check = false;
13247 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
13248 l7vs::Logger::putLogError_id = 0;
13249 test_obj.test_down_all_call();
13250 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
13251 BOOST_CHECK_EQUAL(76,l7vs::Logger::putLogError_id);
13252 std::cerr << l7vs::Logger::putLogError_message << std::endl;
13253 BOOST_CHECK(test_obj.down_thread_exit_call_check);
13255 BOOST_MESSAGE( "----- down_thread_all_realserver_disconnect test end -----" );
13263 // ssl_clear_keep_cache test class
13264 class ssl_clear_keep_cache_test_class : public l7vs::tcp_session{
13266 ssl_clear_keep_cache_test_class(
13267 l7vs::virtualservice_tcp& vs,
13268 boost::asio::io_service& session_io,
13269 l7vs::tcp_socket_option_info& set_socket_option,
13270 boost::asio::ip::tcp::endpoint listen_endpoint,
13272 boost::asio::ssl::context& set_ssl_context,
13273 bool set_ssl_cache_flag,
13274 int set_ssl_handshake_time_out,
13275 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
13281 set_ssl_cache_flag,
13282 set_ssl_handshake_time_out,
13283 set_access_logger){};
13286 ~ssl_clear_keep_cache_test_class(){};
13287 bool& get_exit_flag(){
13288 return (bool&)exit_flag;
13291 bool test_call(SSL *clear_ssl){
13292 return ssl_clear_keep_cache(clear_ssl);
13296 //ssl_clear_keep_cache_test test
13297 void ssl_clear_keep_cache_test(){
13298 BOOST_MESSAGE( "----- ssl_clear_keep_cache test start -----" );
13300 boost::asio::io_service io;
13301 boost::system::error_code ec;
13302 authority test_auth;
13305 boost::asio::ssl::context client_ctx(io,boost::asio::ssl::context::sslv23);
13306 client_ctx.set_verify_mode(boost::asio::ssl::context::verify_peer);
13307 client_ctx.load_verify_file(CLIENT_CTX_LOAD_VERIFY_FILE);
13310 boost::asio::ssl::context server_ctx(io,boost::asio::ssl::context::sslv23);
13311 server_ctx.set_options(
13312 boost::asio::ssl::context::default_workarounds
13313 | boost::asio::ssl::context::no_sslv2
13314 | boost::asio::ssl::context::single_dh_use);
13315 server_ctx.set_password_callback(boost::bind(&authority::get_password, &test_auth));
13316 server_ctx.use_certificate_chain_file(SERVER_CTX_CERTIFICATE_CHAIN_FILE);
13317 server_ctx.use_private_key_file(SERVER_CTX_PRIVATE_KEY_FILE, boost::asio::ssl::context::pem);
13318 server_ctx.use_tmp_dh_file(SERVER_CTX_TMP_DH_FILE);
13320 // Set session cache mode on the context.
13321 SSL_CTX_set_session_cache_mode(server_ctx.impl(), (SSL_SESS_CACHE_SERVER | SSL_SESS_CACHE_NO_AUTO_CLEAR));
13322 // Set session cache size on the context.
13323 SSL_CTX_sess_set_cache_size(server_ctx.impl(), 10);
13324 // Set session cache timeout on the context.
13325 SSL_CTX_set_timeout(server_ctx.impl(), 60);
13329 boost::asio::ssl::stream<boost::asio::ip::tcp::socket> test_sock(io,server_ctx);
13332 boost::asio::ip::tcp::endpoint listen_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
13333 boost::asio::ip::tcp::acceptor test_acceptor(io,listen_end,ec);
13336 test_client dummy_cl(io,client_ctx);
13337 dummy_cl.all_lock();
13340 boost::thread cl_thread(boost::bind(&test_client::handshake_test_run,&dummy_cl));
13343 dummy_cl.connect_mutex.unlock();
13344 test_acceptor.accept(test_sock.lowest_layer(),ec);
13346 std::cerr << "server side client connect ERROR" << std::endl;
13347 std::cerr << ec << std::endl;
13349 std::cerr << "server side client connect OK" << std::endl;
13354 dummy_cl.handshake_mutex.unlock();
13355 test_sock.handshake(boost::asio::ssl::stream_base::server,ec);
13357 std::cerr << "server side client handshake ERROR" << std::endl;
13358 std::cerr << ec << std::endl;
13360 std::cerr << "server side handshake OK" << std::endl;
13364 BOOST_CHECK( SSL_CTX_sess_number(server_ctx.impl()) == 1);
13368 dummy_cl.close_mutex.unlock();
13371 test_sock.lowest_layer().close();
13373 BOOST_CHECK(test_sock.impl()->ssl->method != NULL);
13374 BOOST_CHECK(!test_sock.impl()->ssl->new_session);
13375 // BOOST_CHECK(test_sock.impl()->ssl->init_buf != NULL);
13376 BOOST_CHECK(test_sock.impl()->ssl->enc_read_ctx != NULL);
13377 BOOST_CHECK(test_sock.impl()->ssl->enc_write_ctx != NULL);
13378 // BOOST_CHECK(test_sock.impl()->ssl->expand != NULL);
13379 // BOOST_CHECK(test_sock.impl()->ssl->compress != NULL);
13381 test_sock.impl()->ssl->first_packet = 1; //0
13382 test_sock.impl()->ssl->session = (SSL_SESSION*)99; //NULL;
13383 test_sock.impl()->ssl->type = 2; //0;
13384 test_sock.impl()->ssl->error = 3; //0;
13385 test_sock.impl()->ssl->hit = 4; //0;
13386 test_sock.impl()->ssl->shutdown = 5; //0;
13387 test_sock.impl()->ssl->version = 6; // clear_ssl->method->version;
13388 test_sock.impl()->ssl->client_version = 0;//clear_ssl->version;
13389 test_sock.impl()->ssl->rwstate = 0; //SSL_NOTHING;
13390 test_sock.impl()->ssl->rstate = 0; //SSL_ST_READ_HEADER;
13391 test_sock.impl()->ssl->state = 0; //SSL_ST_BEFORE | ( ( clear_ssl->server ) ? SSL_ST_ACCEPT : SSL_ST_CONNECT);
13393 // BOOST_CHECK( test_sock.impl()->ssl->in_handshake || ( test_sock.impl()->ssl->method == test_sock.impl()->ssl->ctx->method ));
13394 // if ( !clear_ssl->in_handshake && ( clear_ssl->method != clear_ssl->ctx->method ))
13396 l7vs::virtualservice_tcp vs;
13397 l7vs::tcp_socket_option_info set_option;
13398 //! TCP_NODELAY (false:not set,true:set option)
13399 set_option.nodelay_opt = true;
13400 //! TCP_NODELAY option value (false:off,true:on)
13401 set_option.nodelay_val = true;
13402 //! TCP_CORK (false:not set,true:set option)
13403 set_option.cork_opt = true;
13404 //! TCP_CORK option value (false:off,true:on)
13405 set_option.cork_val = true;
13406 //! TCP_QUICKACK (false:not set,true:set option)
13407 set_option.quickack_opt = true;
13408 //! TCP_QUICKACK option value (false:off,true:on)
13409 set_option.quickack_val = true;
13411 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
13412 bool set_mode(true);
13413 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
13414 bool set_ssl_cache_flag(true);
13415 int set_ssl_handshake_time_out = 111;
13416 std::string access_log_file_name = "test";
13417 l7vs::logger_implement_access* plogger = new l7vs::logger_implement_access(access_log_file_name);
13419 ssl_clear_keep_cache_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
13422 BOOST_CHECK( SSL_CTX_sess_number(server_ctx.impl()) == 1);
13424 bool bres = test_obj.test_call(test_sock.impl()->ssl);
13426 // unit_test [1] ssl_clear_keep_cache result check
13427 std::cerr << "[1] ssl_clear_keep_cache result check" << std::endl;
13428 BOOST_CHECK( bres == true);
13430 // unit_test [2] ssl_clear_keep_cache keep chach check
13431 std::cerr << "[2] ssl_clear_keep_cache keep chach check" << std::endl;
13432 BOOST_CHECK( SSL_CTX_sess_number(server_ctx.impl()) == 1);
13435 // unit_test [3] ssl_clear_keep_cache init_buf initialize check
13436 std::cerr << "[3] ssl_clear_keep_cache init_buf initialize check" << std::endl;
13437 BOOST_CHECK(test_sock.impl()->ssl->init_buf == NULL);
13438 // unit_test [4] ssl_clear_keep_cache enc_read_ctx initialize check
13439 std::cerr << "[4] ssl_clear_keep_cache enc_read_ctx initialize check" << std::endl;
13440 BOOST_CHECK(test_sock.impl()->ssl->enc_read_ctx == NULL);
13441 // unit_test [5] ssl_clear_keep_cache enc_write_ctx initialize check
13442 std::cerr << "[5] ssl_clear_keep_cache enc_write_ctx initialize check" << std::endl;
13443 BOOST_CHECK(test_sock.impl()->ssl->enc_write_ctx == NULL);
13444 // unit_test [6] ssl_clear_keep_cache expand initialize check
13445 std::cerr << "[6] ssl_clear_keep_cache expand initialize check" << std::endl;
13446 BOOST_CHECK(test_sock.impl()->ssl->expand == NULL);
13447 // unit_test [7] ssl_clear_keep_cache compress initialize check
13448 std::cerr << "[7] ssl_clear_keep_cache compress initialize check" << std::endl;
13449 BOOST_CHECK(test_sock.impl()->ssl->compress == NULL);
13451 // unit_test [8] ssl_clear_keep_cache first_packet initialize check
13452 std::cerr << "[8] ssl_clear_keep_cache first_packet initialize check" << std::endl;
13453 BOOST_CHECK(test_sock.impl()->ssl->first_packet == 0); //0
13454 // unit_test [9] ssl_clear_keep_cache session initialize check
13455 std::cerr << "[9] ssl_clear_keep_cache session initialize check" << std::endl;
13456 BOOST_CHECK(test_sock.impl()->ssl->session == NULL); //NULL;
13457 // unit_test [10] ssl_clear_keep_cache type initialize check
13458 std::cerr << "[10] ssl_clear_keep_cache type initialize check" << std::endl;
13459 BOOST_CHECK(test_sock.impl()->ssl->type == 0); //0;
13460 // unit_test [11] ssl_clear_keep_cache error initialize check
13461 std::cerr << "[11] ssl_clear_keep_cache error initialize check" << std::endl;
13462 BOOST_CHECK(test_sock.impl()->ssl->error == 0); //0;
13463 // unit_test [12] ssl_clear_keep_cache hit initialize check
13464 std::cerr << "[12] ssl_clear_keep_cache hit initialize check" << std::endl;
13465 BOOST_CHECK(test_sock.impl()->ssl->hit == 0); //0;
13466 // unit_test [13] ssl_clear_keep_cache shutdown initialize check
13467 std::cerr << "[13] ssl_clear_keep_cache shutdown initialize check" << std::endl;
13468 BOOST_CHECK(test_sock.impl()->ssl->shutdown == 0); //0;
13469 // unit_test [14] ssl_clear_keep_cache version initialize check
13470 std::cerr << "[14] ssl_clear_keep_cache version initialize check" << std::endl;
13471 BOOST_CHECK(test_sock.impl()->ssl->version == test_sock.impl()->ssl->method->version); // clear_ssl->method->version;
13472 // unit_test [15] ssl_clear_keep_cache client_version initialize check
13473 std::cerr << "[15] ssl_clear_keep_cache client_version initialize check" << std::endl;
13474 BOOST_CHECK(test_sock.impl()->ssl->client_version == test_sock.impl()->ssl->method->version); // clear_ssl->version;
13475 // unit_test [16] ssl_clear_keep_cache rwstate initialize check
13476 std::cerr << "[16] ssl_clear_keep_cache rwstate initialize check" << std::endl;
13477 BOOST_CHECK(test_sock.impl()->ssl->rwstate == SSL_NOTHING); // SSL_NOTHING;
13478 // unit_test [17] ssl_clear_keep_cache rstate initialize check
13479 std::cerr << "[17] ssl_clear_keep_cache rstate initialize check" << std::endl;
13480 BOOST_CHECK(test_sock.impl()->ssl->rstate == SSL_ST_READ_HEADER); // SSL_ST_READ_HEADER;
13481 // unit_test [18] ssl_clear_keep_cache state initialize check
13482 std::cerr << "[18] ssl_clear_keep_cache state initialize check" << std::endl;
13483 BOOST_CHECK(test_sock.impl()->ssl->state == (SSL_ST_BEFORE | SSL_ST_ACCEPT)); // SSL_ST_BEFORE | ( ( clear_ssl->server ) ? SSL_ST_ACCEPT : SSL_ST_CONNECT);
13487 test_acceptor.close();
13489 BOOST_MESSAGE( "----- ssl_clear_keep_cache test end -----" );
13492 // initialize_ssl_mode test
13493 // initialize_ssl_mode test class
13494 class initialize_ssl_mode_test_class : public l7vs::tcp_session{
13496 initialize_ssl_mode_test_class(
13497 l7vs::virtualservice_tcp& vs,
13498 boost::asio::io_service& session_io,
13499 l7vs::tcp_socket_option_info& set_socket_option,
13500 boost::asio::ip::tcp::endpoint listen_endpoint,
13502 boost::asio::ssl::context& set_ssl_context,
13503 bool set_ssl_cache_flag,
13504 int set_ssl_handshake_time_out,
13505 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
13511 set_ssl_cache_flag,
13512 set_ssl_handshake_time_out,
13513 set_access_logger){};
13514 ~initialize_ssl_mode_test_class(){};
13516 bool ssl_clear_keep_cache(SSL *clear_ssl){
13517 ssl_clear_keep_cache_call_chk = true;
13518 ssl_clear_keep_cache_set_clear_ssl = clear_ssl;
13519 return ssl_clear_keep_cache_res;
13521 bool ssl_clear_keep_cache_call_chk;
13522 SSL* ssl_clear_keep_cache_set_clear_ssl;
13523 bool ssl_clear_keep_cache_res;
13527 void initialize_ssl_mode_test(){
13528 BOOST_MESSAGE( "----- initialize_ssl_mode test start -----" );
13530 boost::asio::io_service io;
13531 boost::system::error_code ec;
13533 //vs set protocol module
13534 l7vs::virtualservice_tcp vs;
13535 std::string test_protocol_name("test protocol");
13536 l7vs::test_protocol_module proto_test(test_protocol_name);
13537 vs.get_protocol_module_res = &proto_test;
13540 l7vs::tcp_socket_option_info set_option;
13541 //! TCP_NODELAY (false:not set,true:set option)
13542 set_option.nodelay_opt = false;
13543 //! TCP_NODELAY option value (false:off,true:on)
13544 set_option.nodelay_val = false;
13545 //! TCP_CORK (false:not set,true:set option)
13546 set_option.cork_opt = false;
13547 //! TCP_CORK option value (false:off,true:on)
13548 set_option.cork_val = false;
13549 //! TCP_QUICKACK (false:not set,true:set option)
13550 set_option.quickack_opt = false;
13551 //! TCP_QUICKACK option value (false:off,true:on)
13552 set_option.quickack_val = false;
13554 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
13555 bool set_mode(true);
13556 int set_ssl_handshake_time_out = 0;
13557 //std::string access_log_file_name = "test";
13558 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
13560 //tset case 1 ssl_cache_flag on
13561 boost::asio::ssl::context set_context1(io,boost::asio::ssl::context::sslv23);
13562 bool set_ssl_cache_flag1(true);
13563 initialize_ssl_mode_test_class test_obj1(vs,io,set_option,listen_endpoint,set_mode,set_context1,set_ssl_cache_flag1,set_ssl_handshake_time_out,plogger);
13565 // ssl_clear_keep_cache call OK
13566 test_obj1.ssl_clear_keep_cache_call_chk = false;
13567 test_obj1.ssl_clear_keep_cache_set_clear_ssl = NULL;
13568 test_obj1.ssl_clear_keep_cache_res = true;
13571 l7vs::session_result_message msg = test_obj1.initialize();
13573 // unit_test [1] initialize ssl_clear_keep_cache call check
13574 std::cerr << "[1] initialize ssl_clear_keep_cache call check" << std::endl;
13575 BOOST_CHECK(test_obj1.ssl_clear_keep_cache_call_chk);
13576 BOOST_CHECK(test_obj1.ssl_clear_keep_cache_set_clear_ssl == test_obj1.get_client_ssl_socket().impl()->ssl);
13577 BOOST_CHECK(msg.flag == false);
13580 // ssl_clear_keep_cache call NG
13581 test_obj1.ssl_clear_keep_cache_call_chk = false;
13582 test_obj1.ssl_clear_keep_cache_set_clear_ssl = NULL;
13583 test_obj1.ssl_clear_keep_cache_res = false;
13586 msg = test_obj1.initialize();
13588 // unit_test [2] initialize ssl_clear_keep_cache call check Error case
13589 std::cerr << "[2] initialize ssl_clear_keep_cache call check Error case" << std::endl;
13590 BOOST_CHECK(test_obj1.ssl_clear_keep_cache_call_chk);
13591 BOOST_CHECK(test_obj1.ssl_clear_keep_cache_set_clear_ssl == test_obj1.get_client_ssl_socket().impl()->ssl);
13592 BOOST_CHECK(msg.flag == true);
13595 //tset case 2 ssl_cache_flag off
13596 boost::asio::ssl::context set_context2(io,boost::asio::ssl::context::sslv23);
13597 bool set_ssl_cache_flag2(false);
13598 initialize_ssl_mode_test_class test_obj2(vs,io,set_option,listen_endpoint,set_mode,set_context2,set_ssl_cache_flag2,set_ssl_handshake_time_out,plogger);
13600 SSL_METHOD* pRet = const_cast<SSL_METHOD*>(test_obj2.get_client_ssl_socket().impl()->ssl->method);
13601 test_obj2.get_client_ssl_socket().impl()->ssl->method = NULL;
13605 msg = test_obj2.initialize();
13607 // unit_test [3] initialize SSL_clear Error case
13608 std::cerr << "[3] initialize SSL_clear Error case" << std::endl;
13609 BOOST_CHECK(msg.flag == true);
13611 test_obj2.get_client_ssl_socket().impl()->ssl->method = pRet;
13614 boost::asio::ssl::context client_ctx(io,boost::asio::ssl::context::sslv23);
13615 client_ctx.set_verify_mode(boost::asio::ssl::context::verify_peer);
13616 client_ctx.load_verify_file(CLIENT_CTX_LOAD_VERIFY_FILE);
13619 authority test_auth;
13620 boost::asio::ssl::context server_ctx(io,boost::asio::ssl::context::sslv23);
13621 server_ctx.set_options(
13622 boost::asio::ssl::context::default_workarounds
13623 | boost::asio::ssl::context::no_sslv2
13624 | boost::asio::ssl::context::single_dh_use);
13625 server_ctx.set_password_callback(boost::bind(&authority::get_password, &test_auth));
13626 server_ctx.use_certificate_chain_file(SERVER_CTX_CERTIFICATE_CHAIN_FILE);
13627 server_ctx.use_private_key_file(SERVER_CTX_PRIVATE_KEY_FILE, boost::asio::ssl::context::pem);
13628 server_ctx.use_tmp_dh_file(SERVER_CTX_TMP_DH_FILE);
13630 // Set session cache mode on the context.
13631 SSL_CTX_set_session_cache_mode(server_ctx.impl(), (SSL_SESS_CACHE_SERVER | SSL_SESS_CACHE_NO_AUTO_CLEAR));
13632 // Set session cache size on the context.
13633 SSL_CTX_sess_set_cache_size(server_ctx.impl(), 10);
13634 // Set session cache timeout on the context.
13635 SSL_CTX_set_timeout(server_ctx.impl(), 60);
13638 bool set_ssl_cache_flag3(false);
13639 initialize_ssl_mode_test_class test_obj3(vs,io,set_option,listen_endpoint,set_mode,server_ctx,set_ssl_cache_flag3,set_ssl_handshake_time_out,plogger);
13643 boost::asio::ip::tcp::endpoint listen_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
13644 boost::asio::ip::tcp::acceptor test_acceptor(io,listen_end,ec);
13647 test_client dummy_cl(io,client_ctx);
13648 dummy_cl.all_lock();
13651 boost::thread cl_thread(boost::bind(&test_client::handshake_test_run,&dummy_cl));
13654 dummy_cl.connect_mutex.unlock();
13655 test_acceptor.accept(test_obj3.get_client_ssl_socket().lowest_layer(),ec);
13657 std::cerr << "server side client connect ERROR" << std::endl;
13658 std::cerr << ec << std::endl;
13660 std::cerr << "server side client connect OK" << std::endl;
13665 dummy_cl.handshake_mutex.unlock();
13666 test_obj3.get_client_ssl_socket().handshake(boost::asio::ssl::stream_base::server,ec);
13668 std::cerr << "server side client handshake ERROR" << std::endl;
13669 std::cerr << ec << std::endl;
13671 std::cerr << "server side handshake OK" << std::endl;
13676 dummy_cl.close_mutex.unlock();
13679 test_obj3.get_client_ssl_socket().lowest_layer().close();
13681 BOOST_CHECK( SSL_CTX_sess_number(server_ctx.impl()) == 1);
13684 msg = test_obj3.initialize();
13686 // unit_test [4] initialize SSL_clear call check
13687 std::cerr << "[4] initialize SSL_clear call check" << std::endl;
13689 BOOST_CHECK(msg.flag == false);
13690 BOOST_CHECK( SSL_CTX_sess_number(server_ctx.impl()) == 0);
13692 BOOST_MESSAGE( "----- initialize_ssl_mode test end -----" );
13695 // up_thread_client_accept test
13696 // up_thread_client_accept test class
13697 class up_thread_client_accept_test_class : public l7vs::tcp_session{
13699 up_thread_client_accept_test_class(
13700 l7vs::virtualservice_tcp& vs,
13701 boost::asio::io_service& session_io,
13702 l7vs::tcp_socket_option_info& set_socket_option,
13703 boost::asio::ip::tcp::endpoint listen_endpoint,
13705 boost::asio::ssl::context& set_ssl_context,
13706 bool set_ssl_cache_flag,
13707 int set_ssl_handshake_time_out,
13708 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
13714 set_ssl_cache_flag,
13715 set_ssl_handshake_time_out,
13716 set_access_logger){};
13717 ~up_thread_client_accept_test_class(){};
13720 up_thread_client_accept(LOCAL_PROC);
13723 void handle_ssl_handshake_timer(const boost::system::error_code&){
13724 handle_ssl_handshake_timer_call_chk = true;
13727 bool handle_ssl_handshake_timer_call_chk;
13729 up_thread_function_pair& get_up_thread_next_call_function(){
13730 return up_thread_next_call_function;
13733 bool& get_ssl_flag(){
13737 bool& get_ssl_handshake_timer_flag(){
13738 return ssl_handshake_timer_flag;
13741 int& get_ssl_handshake_time_out(){
13742 return ssl_handshake_time_out;
13745 bool& get_ssl_handshake_time_out_flag(){
13746 return ssl_handshake_time_out_flag;
13749 bool next_func_chk_accept_event(){
13750 return up_thread_next_call_function.first == UP_FUNC_CLIENT_ACCEPT_EVENT;
13752 bool next_func_chk_accept(){
13753 return up_thread_next_call_function.first == UP_FUNC_CLIENT_ACCEPT;
13755 bool next_func_chk_client_disconnect(){
13756 return up_thread_next_call_function.first == UP_FUNC_CLIENT_DISCONNECT;
13759 l7vs::tcp_ssl_socket& get_tcp_client_ssl_socket(){
13760 return client_ssl_socket;
13764 void up_thread_client_accept_test(){
13765 BOOST_MESSAGE( "----- up_thread_client_accept test start -----" );
13767 l7vs::virtualservice_tcp vs;
13768 boost::asio::io_service io;
13769 l7vs::tcp_socket_option_info set_option;
13770 //! TCP_NODELAY (false:not set,true:set option)
13771 set_option.nodelay_opt = false;
13772 //! TCP_NODELAY option value (false:off,true:on)
13773 set_option.nodelay_val = false;
13774 //! TCP_CORK (false:not set,true:set option)
13775 set_option.cork_opt = false;
13776 //! TCP_CORK option value (false:off,true:on)
13777 set_option.cork_val = false;
13778 //! TCP_QUICKACK (false:not set,true:set option)
13779 set_option.quickack_opt = false;
13780 //! TCP_QUICKACK option value (false:off,true:on)
13781 set_option.quickack_val = false;
13783 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
13784 bool set_mode(false);
13785 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
13786 bool set_ssl_cache_flag(false);
13787 int set_ssl_handshake_time_out = 0;
13788 //std::string access_log_file_name = "test";
13789 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
13791 up_thread_client_accept_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
13793 // test case 1 not ssl mode
13794 test_obj.test_call();
13796 // unit_test [1] up_thread_client_accept no ssl mode next func check
13797 std::cerr << "[1] up_thread_client_accept no ssl mode next func check" << std::endl;
13798 BOOST_CHECK( test_obj.next_func_chk_accept_event() );
13800 // tset case 2 ssl mode and handshaek time out
13801 test_obj.get_ssl_flag() = true; //SSL mode
13802 test_obj.get_ssl_handshake_time_out_flag() = true; //handshake time out
13804 test_obj.test_call();
13806 // unit_test [2] up_thread_client_accept ssl mode time out case next func check
13807 std::cerr << "[2] up_thread_client_accept ssl mode time out case next func check" << std::endl;
13808 BOOST_CHECK( test_obj.next_func_chk_client_disconnect() );
13811 // tset case 3 ssl mode and set timer snd handshake try_again error case check
13812 test_obj.get_ssl_flag() = true; //SSL mode
13813 test_obj.get_ssl_handshake_time_out_flag() = false; //handshake time out
13814 test_obj.get_ssl_handshake_timer_flag() = false; //timer not set
13815 test_obj.get_ssl_handshake_time_out() = 3; //timer set second
13816 test_obj.handle_ssl_handshake_timer_call_chk = false;
13817 test_obj.get_tcp_client_ssl_socket().handshake_call_check = false;
13818 test_obj.get_tcp_client_ssl_socket().handshake_res = false;
13819 test_obj.get_tcp_client_ssl_socket().handshake_set_ec = boost::asio::error::try_again;
13821 test_obj.test_call();
13823 // timer thread start
13824 boost::thread timer_thread(boost::bind(&boost::asio::io_service::run,&io));
13826 // unit_test [3] up_thread_client_accept set timer check
13827 std::cerr << "[3] up_thread_client_accept set timer check" << std::endl;
13828 BOOST_CHECK( test_obj.get_ssl_handshake_timer_flag() == true);
13831 std::cerr << "1 sec" << std::endl;
13832 BOOST_CHECK( test_obj.handle_ssl_handshake_timer_call_chk == false );
13835 std::cerr << "2 sec" << std::endl;
13836 BOOST_CHECK( test_obj.handle_ssl_handshake_timer_call_chk == false );
13839 std::cerr << "3 sec" << std::endl;
13840 BOOST_CHECK( test_obj.handle_ssl_handshake_timer_call_chk == true );
13842 timer_thread.join();
13844 // unit_test [4] up_thread_client_accept socket handshake call check
13845 std::cerr << "[4] up_thread_client_accept socket handshake call check" << std::endl;
13846 BOOST_CHECK( test_obj.get_tcp_client_ssl_socket().handshake_call_check == true );
13848 // unit_test [5] up_thread_client_accept socket handshake try_again error next func check
13849 std::cerr << "[5] up_thread_client_accept socket handshake try_again error next func check" << std::endl;
13850 BOOST_CHECK( test_obj.next_func_chk_accept() );
13853 // tset case 4 ssl mode and handshake ok case check
13854 test_obj.get_ssl_flag() = true; //SSL mode
13855 test_obj.get_ssl_handshake_time_out_flag() = false; //handshake time out
13856 test_obj.get_ssl_handshake_timer_flag() = true; //timer not set
13857 test_obj.get_ssl_handshake_time_out() = 3; //timer set second
13858 test_obj.handle_ssl_handshake_timer_call_chk = false;
13859 test_obj.get_tcp_client_ssl_socket().handshake_call_check = false;
13860 test_obj.get_tcp_client_ssl_socket().handshake_res = true;
13861 test_obj.get_tcp_client_ssl_socket().handshake_set_ec.clear();
13864 test_obj.test_call();
13866 // unit_test [6] up_thread_client_accept socket handshake no error next func check
13867 std::cerr << "[6] up_thread_client_accept socket handshake no error next func check" << std::endl;
13868 BOOST_CHECK( test_obj.next_func_chk_accept_event() );
13871 // tset case 5 ssl mode and handshake error case check
13872 test_obj.get_ssl_flag() = true; //SSL mode
13873 test_obj.get_ssl_handshake_time_out_flag() = false; //handshake time out
13874 test_obj.get_ssl_handshake_timer_flag() = true; //timer not set
13875 test_obj.get_ssl_handshake_time_out() = 3; //timer set second
13876 test_obj.handle_ssl_handshake_timer_call_chk = false;
13877 test_obj.get_tcp_client_ssl_socket().handshake_call_check = false;
13878 test_obj.get_tcp_client_ssl_socket().handshake_res = false;
13879 test_obj.get_tcp_client_ssl_socket().handshake_set_ec = boost::asio::error::eof;
13881 test_obj.test_call();
13883 // unit_test [7] up_thread_client_accept socket handshake no error next func check
13884 std::cerr << "[7] up_thread_client_accept socket handshake no error next func check" << std::endl;
13885 BOOST_CHECK( test_obj.next_func_chk_client_disconnect() );
13887 BOOST_MESSAGE( "----- up_thread_client_accept test end -----" );
13890 // up_thread_run ssl mode
13891 // up_thread_run ssl mode test class
13892 class up_thread_run_ssl_mode_test_class : public l7vs::tcp_session{
13894 up_thread_run_ssl_mode_test_class(
13895 l7vs::virtualservice_tcp& vs,
13896 boost::asio::io_service& session_io,
13897 l7vs::tcp_socket_option_info& set_socket_option,
13898 boost::asio::ip::tcp::endpoint listen_endpoint,
13900 boost::asio::ssl::context& set_ssl_context,
13901 bool set_ssl_cache_flag,
13902 int set_ssl_handshake_time_out,
13903 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
13909 set_ssl_cache_flag,
13910 set_ssl_handshake_time_out,
13911 set_access_logger){
13915 ~up_thread_run_ssl_mode_test_class(){};
13916 bool& get_exit_flag(){
13917 return (bool&)exit_flag;
13921 bool& get_session_pause_flag(){
13922 return session_pause_flag;
13927 std::bitset<TCP_SESSION_THREAD_STATE_BIT>& get_thread_state(){
13928 return thread_state;
13932 boost::mutex test_thread_wait;
13934 boost::mutex::scoped_lock scope_lock(test_thread_wait);
13936 std::cerr << "up_thread_run test call" << std::endl;
13939 while(test_wait){};
13945 void set_protocol_module(l7vs::protocol_module_base* set_proto){
13946 protocol_module = set_proto;
13949 boost::asio::ssl::stream<boost::asio::ip::tcp::socket>& get_client_socket(){
13950 return client_ssl_socket.get_socket();
13954 boost::thread::id& get_up_thread_id(){
13955 return up_thread_id;
13958 boost::thread::id& get_down_thread_id(){
13959 return down_thread_id;
13962 void up_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
13963 up_thread_exit_process_type = process_type;
13964 l7vs::tcp_session::up_thread_exit(process_type);
13965 up_thread_exit_call_check = true;
13967 TCP_PROCESS_TYPE_TAG up_thread_exit_process_type;
13968 bool up_thread_exit_call_check;
13970 void up_thread_all_socket_close(void){
13971 up_thread_all_socket_close_call_check = true;
13973 bool up_thread_all_socket_close_call_check;
13975 void test_message_set(boost::asio::ip::tcp::endpoint set_endpoint){
13976 l7vs::tcp_thread_message* chk_msg = new l7vs::tcp_thread_message;
13977 up_thread_message_que.push(chk_msg);
13978 chk_msg->endpoint_info = set_endpoint;
13979 up_thread_function_pair func = up_thread_function_array[UP_FUNC_EXIT];
13980 chk_msg->message = func.second;
13983 l7vs::tcp_data& get_up_thread_message_data(){
13984 return up_thread_message_data;
13987 void clear_function_array(){
13988 for(int i = 0;i <= UP_FUNC_EXIT;i++){
13989 up_thread_function_array[i].second = NULL;
13992 void clear_event_map(){
13993 up_thread_module_event_map.clear();
13996 void set_up_thread_next_call_function_client_disconnect(){
13997 up_thread_next_call_function = up_thread_function_array[UP_FUNC_CLIENT_DISCONNECT];
13999 void set_up_thread_next_call_function_exit(){
14000 up_thread_next_call_function = up_thread_function_array[UP_FUNC_EXIT];
14004 void up_thread_run_ssl_mode_test(){
14006 BOOST_MESSAGE( "----- up_thread_run ssl mode test start -----" );
14008 boost::asio::io_service io;
14009 l7vs::virtualservice_tcp vs;
14010 l7vs::tcp_socket_option_info set_option;
14011 //! TCP_NODELAY (false:not set,true:set option)
14012 set_option.nodelay_opt = false;
14013 //! TCP_NODELAY option value (false:off,true:on)
14014 set_option.nodelay_val = false;
14015 //! TCP_CORK (false:not set,true:set option)
14016 set_option.cork_opt = false;
14017 //! TCP_CORK option value (false:off,true:on)
14018 set_option.cork_val = false;
14019 //! TCP_QUICKACK (false:not set,true:set option)
14020 set_option.quickack_opt = false;
14021 //! TCP_QUICKACK option value (false:off,true:on)
14022 set_option.quickack_val = false;
14024 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
14025 bool set_mode(true);
14026 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
14027 bool set_ssl_cache_flag(false);
14028 int set_ssl_handshake_time_out = 0;
14029 //std::string access_log_file_name = "test";
14030 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
14032 boost::system::error_code ec;
14034 std::string test_protocol_name("test protocol");
14035 l7vs::test_protocol_module proto_test(test_protocol_name);
14037 up_thread_run_ssl_mode_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
14039 test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
14040 bool& exit_flag = test_obj.get_exit_flag();
14041 // bool& session_pause_flag = test_obj.get_session_pause_flag();
14042 boost::thread::id& up_thread_id = test_obj.get_up_thread_id();
14043 boost::thread::id& down_thread_id = test_obj.get_down_thread_id();
14046 // std::bitset<TCP_SESSION_THREAD_STATE_BIT>& thread_state = test_obj.get_thread_state();
14047 boost::asio::ssl::stream<boost::asio::ip::tcp::socket>& client_socket = test_obj.get_client_socket();
14049 test_mirror_server test_server;
14051 test_server.breq_acc_flag = true;
14053 test_server.breq_close_wait_flag = true;
14055 test_server.req_recv_cnt = 0;
14056 // test server start
14057 boost::thread server_thread(boost::bind(&test_mirror_server::run,&test_server));
14058 while( !test_server.brun_flag ){
14062 boost::asio::ip::tcp::endpoint connect_end(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
14063 client_socket.lowest_layer().connect(connect_end,ec);
14065 while(!test_server.bconnect_flag){
14069 test_obj.test_thread_wait.lock();
14071 thread_state[0] = 0; // UP_THREAD_ALIVE
14072 thread_state[1] = 0; // DOWN_THREAD_ALIVE
14073 thread_state[2] = 0; // UP_THREAD_ACTIVE
14074 thread_state[3] = 0; // DOWN_THREAD_ACTIVE
14075 thread_state[4] = 0; // UP_THREAD_LOCK
14076 thread_state[5] = 0; // DOWN_THREAD_LOCK
14078 up_thread_id = boost::thread::id();
14079 boost::thread test_thread(boost::bind(&up_thread_run_ssl_mode_test_class::test_run,&test_obj));
14081 boost::thread::id test_id = test_thread.get_id();
14082 boost::thread::id proc_id = boost::this_thread::get_id();
14085 BOOST_CHECK(!thread_state.test(0)); // UP_THREAD_ALIVE
14086 BOOST_CHECK(!thread_state.test(1)); // DOWN_THREAD_ALIVE
14087 BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
14088 BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
14089 BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
14090 BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
14092 BOOST_CHECK(up_thread_id != test_id);
14093 test_obj.test_thread_wait.unlock();
14096 // unit_test [1] up_thread_run ssl mode test thread id update check
14097 std::cerr << "[1] up_thread_run ssl mode test thread id update check" << std::endl;
14098 BOOST_CHECK(up_thread_id == test_id);
14100 // unit_test [2] up_thread_run ssl mode test down thread wait check
14101 std::cerr << "[2] up_thread_run ssl mode test down thread wait check" << std::endl;
14103 BOOST_CHECK(thread_state.test(0)); // UP_THREAD_ALIVE
14104 BOOST_CHECK(!thread_state.test(1)); // DOWN_THREAD_ALIVE
14105 BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
14106 BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
14107 BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
14108 BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
14111 proto_test.handle_session_initialize_res_tag = l7vs::protocol_module_base::FINALIZE;
14112 proto_test.handle_session_initialize_in_up_thread_id = boost::thread::id();
14113 proto_test.handle_session_initialize_in_down_thread_id = boost::thread::id();
14114 proto_test.handle_session_initialize_in_client_endpoint_tcp = boost::asio::ip::tcp::endpoint();
14115 proto_test.handle_session_initialize_in_client_endpoint_udp.address(boost::asio::ip::address::from_string("255.255.255.255"));
14116 proto_test.handle_session_initialize_in_client_endpoint_udp.port(65535);
14117 BOOST_CHECK(proto_test.handle_session_initialize_in_up_thread_id != test_id);
14118 BOOST_CHECK(proto_test.handle_session_initialize_in_down_thread_id != proc_id);
14119 BOOST_CHECK(proto_test.handle_session_initialize_in_client_endpoint_tcp != connect_end);
14120 BOOST_CHECK(proto_test.handle_session_initialize_in_client_endpoint_udp != boost::asio::ip::udp::endpoint());
14121 down_thread_id = proc_id;
14122 // session_pause_flag = true;
14124 // DOWN_THREAD_ALIVE
14125 // thread_state[1] = 1;
14128 // unit_test [3] up_thread_run ssl mode test handle_session_initialize call check
14129 std::cerr << "[3] up_thread_run ssl mode test handle_session_initialize call check" << std::endl;
14130 BOOST_CHECK(proto_test.handle_session_initialize_in_up_thread_id == test_id);
14131 BOOST_CHECK(proto_test.handle_session_initialize_in_down_thread_id == proc_id);
14132 BOOST_CHECK(proto_test.handle_session_initialize_in_client_endpoint_tcp == connect_end);
14133 BOOST_CHECK(proto_test.handle_session_initialize_in_client_endpoint_udp == boost::asio::ip::udp::endpoint());
14135 // unit_test [4] up_thread_run ssl mode test state update(UP_THREAD_ACTIVE) check
14136 std::cerr << "[4] up_thread_run ssl mode test state update(UP_THREAD_ACTIVE) check" << std::endl;
14137 // BOOST_CHECK(thread_state.test(2)); // UP_THREAD_ACTIVE
14139 // unit_test [5] up_thread_run ssl mode test pause check
14140 std::cerr << "[5] up_thread_run ssl mode test pause check" << std::endl;
14141 // BOOST_CHECK(thread_state.test(4)); // UP_THREAD_LOCK
14143 test_obj.up_thread_exit_process_type = l7vs::tcp_session::MESSAGE_PROC;
14144 test_obj.up_thread_exit_call_check = false;
14145 test_obj.up_thread_all_socket_close_call_check = false;
14147 // session_pause_flag = false;
14150 // unit_test [6] up_thread_run ssl mode test restart check
14151 std::cerr << "[6] up_thread_run ssl mode test restart check" << std::endl;
14152 // BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
14154 // unit_test [7] up_thread_run ssl mode test up_thread_next_call_function call (up_thread_exit) check
14155 std::cerr << "[7] up_thread_run ssl mode test up_thread_next_call_function call (up_thread_exit) check" << std::endl;
14156 BOOST_CHECK(test_obj.up_thread_exit_call_check);
14157 BOOST_CHECK(test_obj.up_thread_exit_process_type == l7vs::tcp_session::LOCAL_PROC);
14159 // unit_test [8] up_thread_run ssl mode test main loop exit check
14160 std::cerr << "[8] up_thread_run ssl mode test main loop exit check" << std::endl;
14161 BOOST_CHECK(exit_flag);
14162 // BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
14165 // unit_test [9] up_thread_run ssl mode test up_thread_all_socket_close_call_check call check
14166 std::cerr << "[9] up_thread_run ssl mode test up_thread_all_socket_close_call_check call check" << std::endl;
14167 BOOST_CHECK(test_obj.up_thread_all_socket_close_call_check);
14169 // unit_test [10] up_thread_run ssl mode test down thread end wait check
14170 std::cerr << "[10] up_thread_run ssl mode test down thread wait check" << std::endl;
14172 BOOST_CHECK(thread_state.test(0)); // UP_THREAD_ALIVE
14173 BOOST_CHECK(thread_state.test(1)); // DOWN_THREAD_ALIVE
14174 BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
14175 BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
14176 BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
14177 BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
14181 // proto_test.handle_session_finalize_in_up_thread_id = boost::thread::id();
14182 // proto_test.handle_session_finalize_in_down_thread_id = boost::thread::id();
14183 // BOOST_CHECK(proto_test.handle_session_finalize_in_up_thread_id != test_id);
14184 // BOOST_CHECK(proto_test.handle_session_finalize_in_down_thread_id != proc_id);
14185 // vs.release_session_ptr = NULL;
14186 // BOOST_CHECK(vs.release_session_ptr != test_id);
14188 // thread_state[1] = 0;
14191 // unit_test [11] up_thread_run ssl mode test handle_session_finalize call check
14192 std::cerr << "[11] up_thread_run ssl mode test handle_session_finalize call check" << std::endl;
14193 BOOST_CHECK(proto_test.handle_session_finalize_in_up_thread_id == test_id);
14194 BOOST_CHECK(proto_test.handle_session_finalize_in_down_thread_id == proc_id);
14196 // unit_test [12] up_thread_run ssl mode test release_session_id call check
14197 std::cerr << "[12] up_thread_run ssl mode test release_session_id call check" << std::endl;
14198 // BOOST_CHECK(vs.release_session_id == test_id);
14200 // unit_test [13] up_thread_run ssl mode test state update(UP_THREAD_ACTIVE) check
14201 std::cerr << "[13] up_thread_run state update(UP_THREAD_ACTIVE) check" << std::endl;
14202 // BOOST_CHECK(!thread_state.test(0)); // UP_THREAD_ACTIVE
14204 // message call test
14206 // session_pause_flag = false;
14207 l7vs::tcp_data& msg_data = test_obj.get_up_thread_message_data();
14208 test_obj.test_message_set(connect_end);
14210 thread_state[0] = 0; // UP_THREAD_ALIVE
14211 thread_state[1] = 1; // DOWN_THREAD_ALIVE
14212 thread_state[2] = 0; // UP_THREAD_ACTIVE
14213 thread_state[3] = 0; // DOWN_THREAD_ACTIVE
14214 thread_state[4] = 0; // UP_THREAD_LOCK
14215 thread_state[5] = 0; // DOWN_THREAD_LOCK
14217 msg_data.set_endpoint(boost::asio::ip::tcp::endpoint());
14218 test_obj.up_thread_exit_call_check = false;
14219 test_obj.up_thread_exit_process_type = l7vs::tcp_session::LOCAL_PROC;
14220 proto_test.handle_session_initialize_res_tag = l7vs::protocol_module_base::CLIENT_DISCONNECT;
14222 // test thread start
14223 test_obj.test_wait = false;
14226 BOOST_CHECK(thread_state.test(0)); // UP_THREAD_ALIVE
14227 BOOST_CHECK(thread_state.test(1)); // DOWN_THREAD_ALIVE
14228 BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
14229 BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
14230 BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
14231 BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
14234 // unit_test [14] up_thread_run ssl mode test message call check
14235 std::cerr << "[14] up_thread_run ssl mode test message call check" << std::endl;
14236 BOOST_CHECK(test_obj.up_thread_exit_call_check);
14237 BOOST_CHECK(test_obj.up_thread_exit_process_type == l7vs::tcp_session::MESSAGE_PROC);
14239 proto_test.handle_session_initialize_res_tag = l7vs::protocol_module_base::FINALIZE;
14240 // thread_state[1] = 0;
14243 // error test not find function map
14244 test_obj.clear_function_array();
14246 // session_pause_flag = false;
14247 // thread_state[1] = 1;
14249 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
14250 l7vs::Logger::putLogError_id = 0;
14252 test_obj.test_wait = false;
14255 // unit_test [15] up_thread_run ssl mode test not find function map error test
14256 std::cerr << "[15] up_thread_run ssl mode test not find function map error test" << std::endl;
14257 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
14258 BOOST_CHECK_EQUAL(15,l7vs::Logger::putLogError_id);
14259 std::cerr << l7vs::Logger::putLogError_message << std::endl;
14261 // thread_state[1] = 0;
14264 //error test protocol_module returnd illegal EVENT_TAG
14265 test_obj.clear_event_map();
14267 // session_pause_flag = false;
14268 // thread_state[1] = 1;
14270 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
14271 l7vs::Logger::putLogError_id = 0;
14273 test_obj.test_wait = false;
14276 // unit_test [16] up_thread_run ssl mode test protocol_module returnd illegal EVENT_TAG error test
14277 std::cerr << "[16] up_thread_run ssl mode test protocol_module returnd illegal EVENT_TAG error test" << std::endl;
14278 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
14279 BOOST_CHECK_EQUAL(14,l7vs::Logger::putLogError_id);
14280 std::cerr << l7vs::Logger::putLogError_message << std::endl;
14282 // thread_state[1] = 0;
14286 // unit_test [17] up_thread_run ssl mode test set non blocking fail check
14287 std::cerr << "[17] up_thread_run ssl mode test set non blocking fail check" << std::endl;
14289 // session_pause_flag = false;
14290 // thread_state[1] = 1;
14292 l7vs::tcp_socket::set_non_blocking_mode_res = false;
14293 l7vs::tcp_socket::set_non_blocking_mode_ec = boost::asio::error::bad_descriptor;
14294 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
14295 l7vs::Logger::putLogError_id = 0;
14297 test_obj.test_wait = false;
14300 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
14301 BOOST_CHECK_EQUAL(11,l7vs::Logger::putLogError_id);
14302 std::cerr << l7vs::Logger::putLogError_message << std::endl;
14303 l7vs::tcp_socket::set_non_blocking_mode_res = true;
14304 l7vs::tcp_socket::set_non_blocking_mode_ec.clear();
14306 // thread_state[1] = 0;
14309 //error test client endpoint get error
14310 client_socket.lowest_layer().close(ec);
14312 // session_pause_flag = false;
14313 // thread_state[1] = 1;
14315 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
14316 l7vs::Logger::putLogError_id = 0;
14318 test_obj.test_wait = false;
14321 // unit_test [18] up_thread_run ssl mode test client endpoint get error test
14322 std::cerr << "[18] up_thread_run ssl mode test client endpoint get error test" << std::endl;
14323 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
14324 BOOST_CHECK_EQUAL(9,l7vs::Logger::putLogError_id);
14325 std::cerr << l7vs::Logger::putLogError_message << std::endl;
14327 // thread_state[1] = 0;
14330 //error test protocol module null error
14331 test_obj.set_protocol_module(NULL);
14333 // session_pause_flag = false;
14334 // thread_state[1] = 1;
14336 l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
14337 l7vs::Logger::putLogError_id = 0;
14339 test_obj.test_wait = false;
14342 // unit_test [19] up_thread_run ssl mode test protocol module null error test
14343 std::cerr << "[19] up_thread_run ssl mode test protocol module null error test" << std::endl;
14344 BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
14345 BOOST_CHECK_EQUAL(8,l7vs::Logger::putLogError_id);
14346 std::cerr << l7vs::Logger::putLogError_message << std::endl;
14348 // thread_state[1] = 0;
14351 test_obj.test_end = true;
14352 test_obj.test_wait = false;
14353 std::cerr << "test_thread.join wait" << std::endl;
14354 test_thread.join();
14355 std::cerr << "test_thread.join ok" << std::endl;
14358 test_server.breq_close_wait_flag = false;
14359 test_server.bstop_flag = true;
14360 std::cerr << "server_thread.join wait" << std::endl;
14361 server_thread.join();
14362 std::cerr << "server_thread.join ok" << std::endl;
14365 BOOST_MESSAGE( "----- up_thread_run ssl mode test end -----" );
14368 // endpoint_to_string test
14369 // endpoint_to_string test class
14370 class endpoint_to_string_test_class : public l7vs::tcp_session{
14372 endpoint_to_string_test_class(
14373 l7vs::virtualservice_tcp& vs,
14374 boost::asio::io_service& session_io,
14375 l7vs::tcp_socket_option_info& set_socket_option,
14376 boost::asio::ip::tcp::endpoint listen_endpoint,
14378 boost::asio::ssl::context& set_ssl_context,
14379 bool set_ssl_cache_flag,
14380 int set_ssl_handshake_time_out,
14381 l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session( vs,
14387 set_ssl_cache_flag,
14388 set_ssl_handshake_time_out,
14389 set_access_logger){};
14390 ~endpoint_to_string_test_class(){};
14392 std::string test_call(boost::asio::ip::tcp::endpoint& test_endpoint){
14393 return endpoint_to_string(test_endpoint);
14397 void endpoint_to_string_test(){
14399 BOOST_MESSAGE( "----- endpoint_to_string test start -----" );
14401 boost::asio::io_service io;
14402 l7vs::virtualservice_tcp vs;
14403 l7vs::tcp_socket_option_info set_option;
14404 //! TCP_NODELAY (false:not set,true:set option)
14405 set_option.nodelay_opt = false;
14406 //! TCP_NODELAY option value (false:off,true:on)
14407 set_option.nodelay_val = false;
14408 //! TCP_CORK (false:not set,true:set option)
14409 set_option.cork_opt = false;
14410 //! TCP_CORK option value (false:off,true:on)
14411 set_option.cork_val = false;
14412 //! TCP_QUICKACK (false:not set,true:set option)
14413 set_option.quickack_opt = false;
14414 //! TCP_QUICKACK option value (false:off,true:on)
14415 set_option.quickack_val = false;
14417 boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMY_SERVER_IP), DUMMY_SERVER_PORT);
14418 bool set_mode(true);
14419 boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
14420 bool set_ssl_cache_flag(false);
14421 int set_ssl_handshake_time_out = 0;
14422 //std::string access_log_file_name = "test";
14423 l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
14425 boost::system::error_code ec;
14427 endpoint_to_string_test_class test_obj(vs,io,set_option,listen_endpoint,set_mode,set_context,set_ssl_cache_flag,set_ssl_handshake_time_out,plogger);
14429 // unit_test [1] endpoint_to_string test IPv4 Address case 1(192.168.0.1:8080) test
14430 std::cerr << "[1] endpoint_to_string test IPv4 Address case 1(192.168.0.1:8080) test" << std::endl;
14432 boost::asio::ip::tcp::endpoint test_endpoint(boost::asio::ip::address::from_string("192.168.0.1"), 8080);
14433 std::string ref("192.168.0.1:8080");
14434 std::string test_string = test_obj.test_call(test_endpoint);
14435 BOOST_CHECK_EQUAL(ref,test_string);
14437 // unit_test [2] endpoint_to_string test IPv4 Address case 2(0.0.0.0:0) test
14438 std::cerr << "[2] endpoint_to_string test IPv4 Address case 2(0.0.0.0:0) test" << std::endl;
14440 boost::asio::ip::tcp::endpoint test_endpoint(boost::asio::ip::address::from_string("0.0.0.0"), 0);
14441 std::string ref("0.0.0.0:0");
14442 std::string test_string = test_obj.test_call(test_endpoint);
14443 BOOST_CHECK_EQUAL(ref,test_string);
14445 // unit_test [3] endpoint_to_string test IPv4 Address case 3(255.255.255.255:65535) test
14446 std::cerr << "[3] endpoint_to_string test IPv4 Address case 3(255.255.255.255:65535) test" << std::endl;
14447 { boost::asio::ip::tcp::endpoint test_endpoint(boost::asio::ip::address::from_string("255.255.255.255"), 65535);
14448 std::string ref("255.255.255.255:65535");
14449 std::string test_string = test_obj.test_call(test_endpoint);
14450 BOOST_CHECK_EQUAL(ref,test_string);
14452 // unit_test [4] endpoint_to_string test IPv6 Address case 1([2031:130f:876a::156a]:8080) test
14453 std::cerr << "[4] endpoint_to_string test IPv6 Address case 1([2031:130f:876a::156a]:8080) test" << std::endl;
14455 boost::asio::ip::tcp::endpoint test_endpoint(boost::asio::ip::address::from_string("2031:130f:876a::156a"), 8080);
14456 std::string ref("[2031:130f:876a::156a]:8080");
14457 std::string test_string = test_obj.test_call(test_endpoint);
14458 BOOST_CHECK_EQUAL(ref,test_string);
14460 // unit_test [5] endpoint_to_string test IPv6 Address case 2([::]:0) test
14461 std::cerr << "[5] endpoint_to_string test IPv6 Address case 2([::]:0) test" << std::endl;
14463 boost::asio::ip::tcp::endpoint test_endpoint(boost::asio::ip::address::from_string("::"), 0);
14464 std::string ref("[::]:0");
14465 std::string test_string = test_obj.test_call(test_endpoint);
14466 BOOST_CHECK_EQUAL(ref,test_string);
14468 // unit_test [6] endpoint_to_string test IPv6 Address case 3([ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535) test
14469 std::cerr << "[6] endpoint_to_string test IPv6 Address case 3([ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535) test" << std::endl;
14471 boost::asio::ip::tcp::endpoint test_endpoint(boost::asio::ip::address::from_string("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"), 65535);
14472 std::string ref("[ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535");
14473 std::string test_string = test_obj.test_call(test_endpoint);
14474 BOOST_CHECK_EQUAL(ref,test_string);
14476 // unit_test [7] endpoint_to_string test IPv6 Address case 4([fe80::2%<1st ifname>]:8080) test
14477 std::cerr << "[7] endpoint_to_string test IPv6 Address case 4([fe80::2%<1st ifname>]:8080) test" << std::endl;
14479 boost::asio::ip::address_v6 v6addr(boost::asio::ip::address_v6::from_string("fe80::2"));
14480 v6addr.scope_id(1);
14481 boost::asio::ip::tcp::endpoint test_endpoint(v6addr, 8080);
14482 BOOST_CHECK( test_endpoint.address().to_v6().scope_id() == 1);
14483 BOOST_CHECK(test_endpoint.address().to_v6().is_link_local());
14484 char if_name[IF_NAMESIZE];
14485 memset(if_name,0,IF_NAMESIZE);
14486 if_indextoname(1,if_name);
14487 std::string set_if_name(if_name);
14488 std::string ref = "[fe80::2%" + set_if_name + "]:8080";
14489 std::string test_string = test_obj.test_call(test_endpoint);
14490 BOOST_CHECK_EQUAL(ref,test_string);
14492 // unit_test [8] endpoint_to_string test IPv6 Address case 5([::ffff:192.168.0.1]:8080) test
14493 std::cerr << "[8] endpoint_to_string test IPv6 Address case 5([::ffff:192.168.0.1]:8080) test" << std::endl;
14495 boost::asio::ip::tcp::endpoint test_endpoint(boost::asio::ip::address::from_string("::ffff:192.168.0.1"), 8080);
14496 std::string ref("[::ffff:192.168.0.1]:8080");
14497 std::string test_string = test_obj.test_call(test_endpoint);
14498 BOOST_CHECK_EQUAL(ref,test_string);
14501 BOOST_MESSAGE( "----- endpoint_to_string test end -----" );
14507 test_suite* init_unit_test_suite( int argc, char* argv[] ){
14509 test_suite* ts = BOOST_TEST_SUITE( "l7vs::tcp_socket class test" );
14511 // ts->add( BOOST_TEST_CASE( &constructer_test ) );
14512 // ts->add( BOOST_TEST_CASE( &initialize_test ) );
14513 // ts->add( BOOST_TEST_CASE( &initialize_ssl_mode_test ) );
14514 // ts->add( BOOST_TEST_CASE( &ssl_clear_keep_cache_test ) );
14515 // ts->add( BOOST_TEST_CASE( &get_client_socket_test) );
14516 // ts->add( BOOST_TEST_CASE( &handle_ssl_handshake_timer_test) );
14517 // ts->add( BOOST_TEST_CASE( &is_thread_wait_test) );
14518 // ts->add( BOOST_TEST_CASE( &set_virtual_service_message_test) );
14519 // ts->add( BOOST_TEST_CASE( &endpoint_to_string_test ));
14521 // ts->add( BOOST_TEST_CASE( &up_thread_run_test) );
14522 // ts->add( BOOST_TEST_CASE( &up_thread_run_ssl_mode_test ) );
14523 // ts->add( BOOST_TEST_CASE( &down_thread_run_test) );
14524 // ts->add( BOOST_TEST_CASE( &thread_state_update_test) );
14525 // ts->add( BOOST_TEST_CASE( &up_thread_client_respond_test) );
14526 // ts->add( BOOST_TEST_CASE( &up_thread_realserver_get_detination_event_test) );
14527 // ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_get_detination_event_test) );
14529 // ts->add( BOOST_TEST_CASE( &up_thread_all_socket_close_test) );
14530 // ts->add( BOOST_TEST_CASE( &down_thread_all_socket_close_test) );
14531 // ts->add( BOOST_TEST_CASE( &up_thread_client_disconnect_test) );
14532 // ts->add( BOOST_TEST_CASE( &down_thread_client_disconnect_test) );
14533 // ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_disconnect_test) );
14534 // ts->add( BOOST_TEST_CASE( &down_thread_sorryserver_disconnect_test) );
14535 // ts->add( BOOST_TEST_CASE( &up_thread_realserver_connect_event_test) );
14536 // ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_connect_event_test) );
14537 // ts->add( BOOST_TEST_CASE( &down_thread_client_connection_chk_event_test) );
14538 // ts->add( BOOST_TEST_CASE( &up_thread_realserver_connection_fail_event_test) );
14539 // ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_connection_fail_event_test) );
14541 // ts->add( BOOST_TEST_CASE( &up_thread_client_accept_test ) );
14542 // ts->add( BOOST_TEST_CASE( &up_thread_client_receive_test) );
14543 // ts->add( BOOST_TEST_CASE( &down_thread_realserver_receive_test) );
14544 // ts->add( BOOST_TEST_CASE( &down_thread_sorryserver_receive_test) );
14545 // ts->add( BOOST_TEST_CASE( &up_thread_realserver_send_test) );
14546 // ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_send_test) );
14547 // ts->add( BOOST_TEST_CASE( &down_thread_client_send_test) );
14548 ts->add( BOOST_TEST_CASE( &up_thread_realserver_connect_test) );
14549 // ts->add( BOOST_TEST_CASE( &up_thread_realserver_connect_access_log_test) );
14550 ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_connect_test) );
14551 // ts->add( BOOST_TEST_CASE( &up_thread_realserver_disconnect_test) );
14552 // ts->add( BOOST_TEST_CASE( &down_thread_realserver_disconnect_test) );
14553 // ts->add( BOOST_TEST_CASE( &up_thread_all_realserver_disconnect_test) );
14554 // ts->add( BOOST_TEST_CASE( &down_thread_all_realserver_disconnect_test) );
14556 // ts->add( BOOST_TEST_CASE( &up_thread_exit_test ) );
14557 // ts->add( BOOST_TEST_CASE( &down_thread_exit_test ) );
14558 // ts->add( BOOST_TEST_CASE( &up_thread_client_disconnect_event_test ) );
14559 // ts->add( BOOST_TEST_CASE( &down_thread_client_disconnect_event_test ) );
14560 // ts->add( BOOST_TEST_CASE( &up_thread_realserver_disconnect_event_test ) );
14561 // ts->add( BOOST_TEST_CASE( &down_thread_realserver_disconnect_event_test ) );
14562 // ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_disconnect_event_test ) );
14563 // ts->add( BOOST_TEST_CASE( &down_thread_sorryserver_disconnect_event_test ) );
14564 // ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_mod_disconnect_test ) );
14565 // ts->add( BOOST_TEST_CASE( &down_thread_sorryserver_mod_disconnect_test ) );
14567 // ts->add( BOOST_TEST_CASE( &up_thread_sorry_enable_event_test ) );
14568 // ts->add( BOOST_TEST_CASE( &up_thread_sorry_disable_event_test ) );
14569 // ts->add( BOOST_TEST_CASE( &down_thread_sorry_enable_event_test ) );
14570 // ts->add( BOOST_TEST_CASE( &down_thread_sorry_disable_event_test ) );
14571 // ts->add( BOOST_TEST_CASE( &up_thread_client_accept_event_test ) );
14572 // ts->add( BOOST_TEST_CASE( &up_thread_client_respond_event_test ) );
14573 // ts->add( BOOST_TEST_CASE( &down_thread_client_respond_event_test ) );
14575 framework::master_test_suite().add( ts );