OSDN Git Service

Add UT make file...
[ultramonkey-l7/ultramonkey-l7-v3.git] / l7vsd / unit_tests / session_test / tcp_session / tcp_session_test.cpp
index f014a14..2bcc424 100644 (file)
@@ -105,10 +105,12 @@ class mutex_lock_test : public l7vs::tcp_session{
             test();
         };
 
+/*
         //-------------is_thread_wait test---------------------------------
         void set_is_thread_wait_test(){
-            pTest_mutex = &thread_state_update_mutex;
-            test_func = boost::bind(&mutex_lock_test::down_thread_exit,this);
+            //pTest_mutex = &thread_state_update_mutex;
+            pTest_mutex2 = &downthread_status_mutex;
+            test_func = boost::bind(&mutex_lock_test::is_thread_wait,this);
         };
 
         void is_thread_wait(){
@@ -116,6 +118,7 @@ class mutex_lock_test : public l7vs::tcp_session{
             l7vs::tcp_session::is_thread_wait();
             after_thread_id = boost::this_thread::get_id();
         };
+*/
         
         //-------------down_thread_exit test---------------------------------
         void set_down_thread_exit_test(){
@@ -284,6 +287,7 @@ class mutex_lock_test : public l7vs::tcp_session{
             after_thread_id = boost::this_thread::get_id();
         };
         
+/*
         //-------------thread_state_update test---------------------------------
         void set_thread_state_update_test(){
             pTest_mutex = &thread_state_update_mutex;
@@ -295,6 +299,7 @@ class mutex_lock_test : public l7vs::tcp_session{
             l7vs::tcp_session::thread_state_update(UP_THREAD_ALIVE,true);
             after_thread_id = boost::this_thread::get_id();
         };
+*/
 
         //-------------handle_ssl_handshake_timer test---------------------------------
         void set_handle_ssl_handshake_timer_test(){
@@ -433,6 +438,183 @@ class test_mirror_server{
         };
 };
 
+// dummy client
+class test_client{
+    public:
+        // 
+        test_client(boost::asio::io_service& io_service, boost::asio::ssl::context& context) :
+            my_socket(io_service,context){
+        };
+
+        ~test_client(){
+        };
+        void all_lock(){
+
+            //! socket connect mutex
+            connect_mutex.wrlock();
+            //! socket handshake mutex
+            handshake_mutex.wrlock();
+            //! socket read mutex
+            read_mutex.wrlock();
+            //! socket write mutex
+            write_mutex.wrlock();
+            //! socket close mutex
+            close_mutex.wrlock();
+
+        }
+
+        void connect_close_only_test_run(){
+            // dummy client start
+
+            // connect
+            {
+                l7vs::rw_scoped_lock scope_lock(connect_mutex);
+
+                if(!connect_test()){
+                    return;
+                }
+            }
+
+            // close 
+            {
+                l7vs::rw_scoped_lock scope_lock(close_mutex);
+                close_test();
+            }
+        };
+
+        void handshake_test_run(){
+            // dummy client start
+
+            // connect
+            {
+                l7vs::rw_scoped_lock scope_lock(connect_mutex);
+
+                if(!connect_test()){
+                    return;
+                }
+            }
+
+            // handshake
+            {
+                l7vs::rw_scoped_lock scope_lock(handshake_mutex);
+
+                if(!handshake_test()){
+                    return;
+                }
+            }
+
+            // close 
+            {
+                l7vs::rw_scoped_lock scope_lock(close_mutex);
+                close_test();
+            }
+
+        };
+
+        bool connect_test(){
+            sleep(1);
+            boost::system::error_code ec;
+            std::cout << "dummy client connect try" << std::endl;
+            boost::asio::ip::tcp::endpoint connect_end(boost::asio::ip::address::from_string(DUMMI_SERVER_IP), DUMMI_SERVER_PORT);
+            my_socket.lowest_layer().connect(connect_end,ec);
+            if(ec){
+                //receive error
+                std::cout << "dummy client connect Error!" << std::endl;
+                std::cout << ec << std::endl;
+                return false;
+            }
+            std::cout << "dummy client connect OK" << std::endl;
+            return true;
+        };
+
+        bool handshake_test(){
+            boost::system::error_code ec;
+            std::cout << "dummy client handshake try" << std::endl;
+            my_socket.handshake(boost::asio::ssl::stream_base::client, ec);
+            if(ec){
+                //receive error
+                std::cout << "dummy client handshake Error!" << std::endl;
+                std::cout << ec << std::endl;
+                return false;
+            }
+            std::cout << "dummy client handshake OK" << std::endl;
+            return true;
+        };
+
+        bool send_test(){
+            sleep(1);
+            boost::system::error_code ec;
+            std::cout << "dummy client write try" << std::endl;
+            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);
+            if(ec){
+                //receive error
+                std::cout << "dummy client send Error!" << std::endl;
+                std::cout << ec << std::endl;
+                return false;
+            }
+            send_data_size += write_size;
+            std::cout << "dummy client send OK [" << send_data_size << "]" << std::endl;
+            return true;
+        };
+        bool receive_test(){
+            sleep(1);
+            boost::system::error_code ec;
+            std::cout << "dummy client read try" << std::endl;
+            std::size_t read_size = my_socket.read_some(boost::asio::buffer(data_buff.data() + receive_data_size,MAX_BUFFER_SIZE), ec);
+            if(ec){
+                //receive error
+                std::cout << "dummy client receive Error!" << std::endl;
+                std::cout << ec << std::endl;
+                return false;
+            }
+            receive_data_size += read_size;
+            std::cout << "dummy client receive OK [" << receive_data_size << "]" << std::endl;
+            return true;
+        };
+        void close_test(){
+            sleep(1);
+            boost::system::error_code ec;
+            std::cout << "dummy client close try" << std::endl;
+            my_socket.lowest_layer().close(ec);
+            if(ec){
+                //close error
+                std::cout << "dummy client close Error!" << std::endl;
+                std::cout << ec << std::endl;
+                return;
+            }
+            std::cout << "dummy client close OK" << std::endl;
+        };
+
+        boost::asio::ssl::stream<boost::asio::ip::tcp::socket> my_socket;
+        boost::array<char,MAX_BUFFER_SIZE> data_buff;
+        std::size_t receive_data_size;
+        std::size_t send_data_size;
+
+        //! socket connect mutex
+        l7vs::wr_mutex connect_mutex;
+        //! socket handshake mutex
+        l7vs::wr_mutex handshake_mutex;
+        //! socket read mutex
+        l7vs::wr_mutex read_mutex;
+        //! socket write mutex
+        l7vs::wr_mutex write_mutex;
+        //! socket close mutex
+        l7vs::wr_mutex close_mutex;
+};
+
+class authority{
+    public:
+        authority(){
+        };
+        ~authority(){
+        };
+        std::string get_password() const{
+            std::cout << "call get_password" << std::endl;
+            return "test";
+        };
+};
+
+
 // module event map test base class
 class module_event_map_test_base_class : public l7vs::tcp_session{
     public:
@@ -925,18 +1107,29 @@ class constructer_test_class : public l7vs::tcp_session{
             return parent_service;
         };
         bool get_exit_flag(){
-            return exit_flag;
+            return (bool)exit_flag;
         };
+/*
         std::bitset<TCP_SESSION_THREAD_STATE_BIT> get_thread_state(){
             return thread_state;
         };
+*/
+        l7vs::tcp_session::UPTHREAD_STATUS_TAG& get_up_status(){
+            return upthread_status;
+        };
+                
+        l7vs::tcp_session::DOWNTHREAD_STATUS_TAG& get_down_status(){
+            return downthread_status;
+        };
                 
         l7vs::protocol_module_base* get_protocol_module(){
             return protocol_module;
         };
+/*
         bool get_session_pause_flag(){
             return session_pause_flag;
         };
+*/
         l7vs::tcp_socket& get_client_socket(){
             return client_socket;
         };
@@ -1863,11 +2056,13 @@ void constructer_test(){
     BOOST_CHECK_EQUAL(&io , &test_obj.get_io());
     BOOST_CHECK_EQUAL(&vs,&test_obj.get_parent_service());
     BOOST_CHECK(!test_obj.get_exit_flag());
-    std::bitset<TCP_SESSION_THREAD_STATE_BIT> ref;
-    ref.reset();
-    BOOST_CHECK_EQUAL(ref,test_obj.get_thread_state());
+//    std::bitset<TCP_SESSION_THREAD_STATE_BIT> ref;
+//    ref.reset();
+//    BOOST_CHECK_EQUAL(ref,test_obj.get_thread_state());
+    BOOST_CHECK_EQUAL(0, test_obj.get_up_status());
+    BOOST_CHECK_EQUAL(0, test_obj.get_down_status());
     BOOST_CHECK_EQUAL((void*)NULL,test_obj.get_protocol_module());
-    BOOST_CHECK(!test_obj.get_session_pause_flag());
+//    BOOST_CHECK(!test_obj.get_session_pause_flag());
     BOOST_CHECK_EQUAL(&io , &(test_obj.get_client_socket().get_socket().get_io_service()));
     BOOST_CHECK_EQUAL(&io , &(test_obj.get_sorry_socket()->get_socket().get_io_service()));
     // unit_test [2] constructer set up_thread_module_event_map check
@@ -2015,7 +2210,7 @@ class initialize_test_class : public l7vs::tcp_session{
 
         ~initialize_test_class(){};
         bool& get_exit_flag(){
-            return exit_flag;
+            return (bool&)exit_flag;
         };
         boost::thread::id& get_up_thread_id(){
             return up_thread_id;
@@ -2023,16 +2218,58 @@ class initialize_test_class : public l7vs::tcp_session{
         boost::thread::id& get_down_thread_id(){
             return down_thread_id;
         };
+/*
         std::bitset<TCP_SESSION_THREAD_STATE_BIT>& get_thread_state(){
             return thread_state;
         };
+*/
+        l7vs::tcp_session::UPTHREAD_STATUS_TAG get_up_status(){
+            return upthread_status;
+        };
+        l7vs::tcp_session::DOWNTHREAD_STATUS_TAG get_down_status(){
+            return downthread_status;
+        };
+        void set_up_status(int s){
+            switch(s) {
+            case 0:
+                upthread_status = l7vs::tcp_session::UPTHREAD_SLEEP;
+                break;
+            case 1:
+                upthread_status = l7vs::tcp_session::UPTHREAD_ALIVE;
+                break;
+            case 2:
+                upthread_status = l7vs::tcp_session::UPTHREAD_ACTIVE;
+                break;
+            default:
+                upthread_status = l7vs::tcp_session::UPTHREAD_LOCK;
+                break;
+            }
+        };
+        void set_down_status(int s){
+            switch(s) {
+            case 0:
+                downthread_status = l7vs::tcp_session::DOWNTHREAD_SLEEP;
+                break;
+            case 1:
+                downthread_status = l7vs::tcp_session::DOWNTHREAD_ALIVE;
+                break;
+            case 2:
+                downthread_status = l7vs::tcp_session::DOWNTHREAD_ACTIVE;
+                break;
+            default:
+                downthread_status = l7vs::tcp_session::DOWNTHREAD_LOCK;
+                break;
+            }
+        };
                 
         l7vs::protocol_module_base* get_protocol_module(){
             return protocol_module;
         };
+/*
         bool& get_session_pause_flag(){
             return session_pause_flag;
         };
+*/
         l7vs::lockfree_queue<l7vs::tcp_thread_message>& get_up_thread_message_que(){
             return up_thread_message_que;
         };
@@ -2086,9 +2323,11 @@ void initialize_test(){
     test_obj.get_exit_flag() = true;
     test_obj.get_up_thread_id() = boost::this_thread::get_id();
     test_obj.get_down_thread_id() = boost::this_thread::get_id();
-    test_obj.get_thread_state().set();
+//    test_obj.get_thread_state().set();
+    test_obj.set_up_status(1);
+    test_obj.set_down_status(1);
     BOOST_CHECK(test_obj.get_protocol_module() != &proto_test);    
-    test_obj.get_session_pause_flag() = true;
+//    test_obj.get_session_pause_flag() = true;
     l7vs::tcp_thread_message*    test_msg_up    = new l7vs::tcp_thread_message;
     l7vs::tcp_thread_message*    test_msg_dw    = new l7vs::tcp_thread_message;
     test_obj.get_up_thread_message_que().push(test_msg_up);
@@ -2112,11 +2351,13 @@ void initialize_test(){
     
     // unit_test [4] initialize thread state check
     std::cout << "[4] initialize thread state check" << std::endl;
-    BOOST_CHECK(test_obj.get_thread_state().none());
+//    BOOST_CHECK(test_obj.get_thread_state().none());
+    BOOST_CHECK(test_obj.get_up_status() == 0);
+    BOOST_CHECK(test_obj.get_down_status() == 0);
     
     // unit_test [5] initialize session pause flag check
     std::cout << "[5] initialize session pause flag check" << std::endl;
-    BOOST_CHECK(!test_obj.get_session_pause_flag());
+//    BOOST_CHECK(!test_obj.get_session_pause_flag());
     
     // unit_test [6] initialize up thread message que check
     std::cout << "[6] initialize up thread message que check" << std::endl;
@@ -2370,6 +2611,7 @@ void handle_ssl_handshake_timer_test(){
 }
 
 
+/*
 // is_thread_wait test
 // is_thread_wait test class
 class is_thread_wait_test_class : public l7vs::tcp_session{
@@ -2402,6 +2644,12 @@ class is_thread_wait_test_class : public l7vs::tcp_session{
         std::bitset<TCP_SESSION_THREAD_STATE_BIT>& get_thread_state(){
             return thread_state;
         };
+        l7vs::tcp_session::UPTHREAD_STATUS_TAG get_up_status(){
+            return upthread_status;
+        };
+        l7vs::tcp_session::DOWNTHREAD_STATUS_TAG get_down_status(){
+            return downthread_status;
+        };
 };
 void is_thread_wait_test(){
     BOOST_MESSAGE( "----- is_thread_wait test start -----" );
@@ -2567,6 +2815,7 @@ void is_thread_wait_test(){
    
     BOOST_MESSAGE( "----- is_thread_wait test end -----" );    
 }
+*/
 
 // set_virtual_service_message test
 // set_virtual_service_message test class
@@ -2597,9 +2846,11 @@ class set_virtual_service_message_test_class : public l7vs::tcp_session{
 
         ~set_virtual_service_message_test_class(){};
         
+/*
         bool& get_session_pause_flag(){
             return session_pause_flag;
         }
+*/
 
        bool& get_access_log_flag(){
             return access_log_flag;
@@ -2684,7 +2935,7 @@ void set_virtual_service_message_test(){
     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);
  
    
-    bool& ref_pause_flag = test_obj.get_session_pause_flag();
+//    bool& ref_pause_flag = test_obj.get_session_pause_flag();
     bool& ref_access_log_flag = test_obj.get_access_log_flag();
     l7vs::lockfree_queue<l7vs::tcp_thread_message>&        ref_up_msg_que = test_obj.get_up_thread_message_que();
     l7vs::lockfree_queue<l7vs::tcp_thread_message>&        ref_dw_msg_que = test_obj.get_down_thread_message_que();
@@ -2791,15 +3042,15 @@ void set_virtual_service_message_test(){
 
     // unit_test [4] set_virtual_service_message SESSION_PAUSE_ON
     std::cout << "[4] set_virtual_service_message SESSION_PAUSE_ON" << std::endl;
-    ref_pause_flag = false;
+//    ref_pause_flag = false;
     test_obj.set_virtual_service_message(l7vs::tcp_session::SESSION_PAUSE_ON);
-    BOOST_CHECK(ref_pause_flag);
+//    BOOST_CHECK(ref_pause_flag);
     
     // unit_test [5] set_virtual_service_message SESSION_PAUSE_OFF
     std::cout << "[5] set_virtual_service_message SESSION_PAUSE_OFF" << std::endl;
-    ref_pause_flag = true;
+//    ref_pause_flag = true;
     test_obj.set_virtual_service_message(l7vs::tcp_session::SESSION_PAUSE_OFF);
-    BOOST_CHECK(!ref_pause_flag);
+//    BOOST_CHECK(!ref_pause_flag);
     
     // unit_test [6] set_virtual_service_message ACCESS_LOG_ON
     std::cout << "[6] set_virtual_service_message ACCESS_LOG__ON" << std::endl;
@@ -2891,16 +3142,58 @@ class up_thread_run_test_class : public l7vs::tcp_session{
         };
         ~up_thread_run_test_class(){};
         bool& get_exit_flag(){
-            return exit_flag;
+            return (bool&)exit_flag;
         };
         
+/*
         bool& get_session_pause_flag(){
             return session_pause_flag;
         };
+*/
         
+/*
         std::bitset<TCP_SESSION_THREAD_STATE_BIT>& get_thread_state(){
             return thread_state;
         };
+*/
+        l7vs::tcp_session::UPTHREAD_STATUS_TAG& get_up_status(){
+            return upthread_status;
+        };
+        l7vs::tcp_session::DOWNTHREAD_STATUS_TAG& get_down_status(){
+            return downthread_status;
+        };
+        void set_up_status(int s){
+            switch(s) {
+            case 0:
+                upthread_status = l7vs::tcp_session::UPTHREAD_SLEEP;
+                break;
+            case 1:
+                upthread_status = l7vs::tcp_session::UPTHREAD_ALIVE;
+                break;
+            case 2:
+                upthread_status = l7vs::tcp_session::UPTHREAD_ACTIVE;
+                break;
+            default:
+                upthread_status = l7vs::tcp_session::UPTHREAD_LOCK;
+                break;
+            }
+        };
+        void set_down_status(int s){
+            switch(s) {
+            case 0:
+                downthread_status = l7vs::tcp_session::DOWNTHREAD_SLEEP;
+                break;
+            case 1:
+                downthread_status = l7vs::tcp_session::DOWNTHREAD_ALIVE;
+                break;
+            case 2:
+                downthread_status = l7vs::tcp_session::DOWNTHREAD_ACTIVE;
+                break;
+            default:
+                downthread_status = l7vs::tcp_session::DOWNTHREAD_LOCK;
+                break;
+            }
+        };
         
         boost::mutex test_thread_wait;
         void test_run(){
@@ -3010,12 +3303,12 @@ void up_thread_run_test(){
 
     test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
     bool& exit_flag = test_obj.get_exit_flag();
-    bool& session_pause_flag = test_obj.get_session_pause_flag();
+//    bool& session_pause_flag = test_obj.get_session_pause_flag();
     boost::thread::id& up_thread_id = test_obj.get_up_thread_id();
     boost::thread::id& down_thread_id = test_obj.get_down_thread_id();
 
     
-    std::bitset<TCP_SESSION_THREAD_STATE_BIT>& thread_state = test_obj.get_thread_state();
+//    std::bitset<TCP_SESSION_THREAD_STATE_BIT>& thread_state = test_obj.get_thread_state();
     l7vs::tcp_socket& client_socket = test_obj.get_client_socket();
     
     test_mirror_server test_server;
@@ -3039,24 +3332,30 @@ void up_thread_run_test(){
     }
         
     test_obj.test_thread_wait.lock();
+/*
     thread_state[0] = 0;    // UP_THREAD_ALIVE
     thread_state[1] = 0;    // DOWN_THREAD_ALIVE
     thread_state[2] = 0;    // UP_THREAD_ACTIVE
     thread_state[3] = 0;    // DOWN_THREAD_ACTIVE
     thread_state[4] = 0;    // UP_THREAD_LOCK
     thread_state[5] = 0;    // DOWN_THREAD_LOCK
+*/
     up_thread_id = boost::thread::id();
     boost::thread test_thread(boost::bind(&up_thread_run_test_class::test_run,&test_obj));
     sleep(1);
     boost::thread::id test_id = test_thread.get_id();
     boost::thread::id proc_id = boost::this_thread::get_id();
     
+/*
     BOOST_CHECK(!thread_state.test(0));    // UP_THREAD_ALIVE
     BOOST_CHECK(!thread_state.test(1)); // DOWN_THREAD_ALIVE
     BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
     BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
     BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
     BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
+*/
+    BOOST_CHECK(test_obj.get_up_status() == 0);
+    BOOST_CHECK(test_obj.get_down_status() == 0);
     BOOST_CHECK(up_thread_id != test_id);
     test_obj.test_thread_wait.unlock();
     sleep(1);
@@ -3067,12 +3366,16 @@ void up_thread_run_test(){
     
     // unit_test [2] up_thread_run down thread wait check
     std::cout << "[2] up_thread_run down thread wait check" << std::endl;
+/*
     BOOST_CHECK(thread_state.test(0));    // UP_THREAD_ALIVE
     BOOST_CHECK(!thread_state.test(1)); // DOWN_THREAD_ALIVE
     BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
     BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
     BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
     BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
+*/
+    BOOST_CHECK(test_obj.get_up_status() == 1);
+    BOOST_CHECK(test_obj.get_down_status() == 0);
     
     proto_test.handle_session_initialize_res_tag = l7vs::protocol_module_base::FINALIZE;
     proto_test.handle_session_initialize_in_up_thread_id = boost::thread::id();
@@ -3085,10 +3388,11 @@ void up_thread_run_test(){
     BOOST_CHECK(proto_test.handle_session_initialize_in_client_endpoint_tcp != connect_end);
     BOOST_CHECK(proto_test.handle_session_initialize_in_client_endpoint_udp != boost::asio::ip::udp::endpoint());
     down_thread_id = proc_id;
-    session_pause_flag = true;
+//    session_pause_flag = true;
     
     // DOWN_THREAD_ALIVE
-    thread_state[1] = 1;
+//    thread_state[1] = 1;
+    test_obj.set_down_status(1);
     sleep(1);
     
     // unit_test [3] up_thread_run handle_session_initialize call check
@@ -3100,22 +3404,23 @@ void up_thread_run_test(){
     
     // unit_test [4] up_thread_run state update(UP_THREAD_ACTIVE) check
     std::cout << "[4] up_thread_run state update(UP_THREAD_ACTIVE) check" << std::endl;
-    BOOST_CHECK(thread_state.test(2)); // UP_THREAD_ACTIVE
+//    BOOST_CHECK(thread_state.test(2)); // UP_THREAD_ACTIVE
+    BOOST_CHECK(test_obj.get_up_status() == 2); // UP_THREAD_ACTIVE
     
     // unit_test [5] up_thread_run pause check
     std::cout << "[5] up_thread_run  pause check" << std::endl;
-    BOOST_CHECK(thread_state.test(4)); // UP_THREAD_LOCK
//   BOOST_CHECK(thread_state.test(4)); // UP_THREAD_LOCK
     
     test_obj.up_thread_exit_process_type = l7vs::tcp_session::MESSAGE_PROC;
     test_obj.up_thread_exit_call_check = false;
     test_obj.up_thread_all_socket_close_call_check = false;
     
-    session_pause_flag = false;
+//    session_pause_flag = false;
     sleep(1);
     
     // unit_test [6] up_thread_run restart check
     std::cout << "[6] up_thread_run  restart check" << std::endl;
-    BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
+//    BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
     
     // unit_test [7] up_thread_run up_thread_next_call_function call (up_thread_exit) check
     std::cout << "[7] up_thread_run up_thread_next_call_function call (up_thread_exit) check" << std::endl;
@@ -3125,7 +3430,7 @@ void up_thread_run_test(){
     // unit_test [8] up_thread_run main loop exit check
     std::cout << "[8] up_thread_run main loop exit check" << std::endl;
     BOOST_CHECK(exit_flag);
-    BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
+//    BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
     
     
     // unit_test [9] up_thread_run up_thread_all_socket_close_call_check call check
@@ -3134,13 +3439,17 @@ void up_thread_run_test(){
     
     // unit_test [10] up_thread_run down thread end wait check
     std::cout << "[10] up_thread_run down thread wait check" << std::endl;
+/*
     BOOST_CHECK(thread_state.test(0));    // UP_THREAD_ALIVE
     BOOST_CHECK(thread_state.test(1)); // DOWN_THREAD_ALIVE
     BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
     BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
     BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
     BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
+*/
     
+    BOOST_CHECK(test_obj.get_up_status() == 1); // UP_THREAD_ALIVE
+    BOOST_CHECK(test_obj.get_down_status() == 1); // DOWN_THREAD_ALIVE
     
 //     proto_test.handle_session_finalize_in_up_thread_id = boost::thread::id();
 //     proto_test.handle_session_finalize_in_down_thread_id = boost::thread::id();
@@ -3149,7 +3458,7 @@ void up_thread_run_test(){
 //     vs.release_session_ptr = NULL;
 //     BOOST_CHECK(vs.release_session_ptr != test_id);
     
-    thread_state[1] = 0;
+//    thread_state[1] = 0;
     sleep(1);
     
     // unit_test [11] up_thread_run handle_session_finalize call check
@@ -3163,19 +3472,21 @@ void up_thread_run_test(){
     
     // unit_test [13] up_thread_run state update(UP_THREAD_ACTIVE) check
     std::cout << "[13] up_thread_run state update(UP_THREAD_ACTIVE) check" << std::endl;
-    BOOST_CHECK(!thread_state.test(0)); // UP_THREAD_ACTIVE
+//    BOOST_CHECK(!thread_state.test(0)); // UP_THREAD_ACTIVE
     
     // message call test
     exit_flag = false;
-    session_pause_flag = false;
+//    session_pause_flag = false;
     l7vs::tcp_data& msg_data = test_obj.get_up_thread_message_data();
     test_obj.test_message_set(connect_end);
+/*
     thread_state[0] = 0;    // UP_THREAD_ALIVE
     thread_state[1] = 1;    // DOWN_THREAD_ALIVE
     thread_state[2] = 0;    // UP_THREAD_ACTIVE
     thread_state[3] = 0;    // DOWN_THREAD_ACTIVE
     thread_state[4] = 0;    // UP_THREAD_LOCK
     thread_state[5] = 0;    // DOWN_THREAD_LOCK
+*/
     msg_data.set_endpoint(boost::asio::ip::tcp::endpoint());
     test_obj.up_thread_exit_call_check = false;
     test_obj.up_thread_exit_process_type = l7vs::tcp_session::LOCAL_PROC;
@@ -3184,12 +3495,14 @@ void up_thread_run_test(){
     // test thread start
     test_obj.test_wait = false;
     sleep(1);
+/*
     BOOST_CHECK(thread_state.test(0));    // UP_THREAD_ALIVE
     BOOST_CHECK(thread_state.test(1)); // DOWN_THREAD_ALIVE
     BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
     BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
     BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
     BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
+*/
     
     // unit_test [14] up_thread_run message call check
     std::cout << "[14] up_thread_run message call check" << std::endl;
@@ -3197,14 +3510,14 @@ void up_thread_run_test(){
     BOOST_CHECK(test_obj.up_thread_exit_process_type == l7vs::tcp_session::MESSAGE_PROC);
     
     proto_test.handle_session_initialize_res_tag = l7vs::protocol_module_base::FINALIZE;
-    thread_state[1] = 0;
+//    thread_state[1] = 0;
     sleep(1);
     
     // error test not find function map 
     test_obj.clear_function_array();
     exit_flag = false;
-    session_pause_flag = false;
-    thread_state[1] = 1;
+//    session_pause_flag = false;
+//    thread_state[1] = 1;
     
     l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
     l7vs::Logger::putLogError_id = 0;
@@ -3218,14 +3531,14 @@ void up_thread_run_test(){
     BOOST_CHECK_EQUAL(15,l7vs::Logger::putLogError_id);
     std::cout << l7vs::Logger::putLogError_message << std::endl;
 
-    thread_state[1] = 0;
+//    thread_state[1] = 0;
     sleep(1);
     
     //error test protocol_module returnd illegal EVENT_TAG
     test_obj.clear_event_map();
     exit_flag = false;
-    session_pause_flag = false;
-    thread_state[1] = 1;
+//    session_pause_flag = false;
+//    thread_state[1] = 1;
     
     l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
     l7vs::Logger::putLogError_id = 0;
@@ -3239,15 +3552,15 @@ void up_thread_run_test(){
     BOOST_CHECK_EQUAL(14,l7vs::Logger::putLogError_id);
     std::cout << l7vs::Logger::putLogError_message << std::endl;
     
-    thread_state[1] = 0;
+//    thread_state[1] = 0;
     sleep(1);
     
     
     // unit_test [17] up_thread_run set non blocking fail check
     std::cout << "[17] up_thread_run set non blocking fail check" << std::endl;
     exit_flag = false;
-    session_pause_flag = false;
-    thread_state[1] = 1;
+//    session_pause_flag = false;
+//    thread_state[1] = 1;
     
     l7vs::tcp_socket::set_non_blocking_mode_res = false;
     l7vs::tcp_socket::set_non_blocking_mode_ec = boost::asio::error::bad_descriptor;
@@ -3263,14 +3576,14 @@ void up_thread_run_test(){
     l7vs::tcp_socket::set_non_blocking_mode_res = true;
     l7vs::tcp_socket::set_non_blocking_mode_ec.clear();
 
-    thread_state[1] = 0;
+//    thread_state[1] = 0;
     sleep(1);
     
     //error test client endpoint get error 
     client_socket.get_socket().close(ec);
     exit_flag = false;
-    session_pause_flag = false;
-    thread_state[1] = 1;
+//    session_pause_flag = false;
+//    thread_state[1] = 1;
     
     l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
     l7vs::Logger::putLogError_id = 0;
@@ -3284,14 +3597,14 @@ void up_thread_run_test(){
     BOOST_CHECK_EQUAL(9,l7vs::Logger::putLogError_id);
     std::cout << l7vs::Logger::putLogError_message << std::endl;
     
-    thread_state[1] = 0;
+//    thread_state[1] = 0;
     sleep(1);
     
     //error test protocol module null error 
     test_obj.set_protocol_module(NULL);
     exit_flag = false;
-    session_pause_flag = false;
-    thread_state[1] = 1;
+//    session_pause_flag = false;
+//    thread_state[1] = 1;
     
     l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
     l7vs::Logger::putLogError_id = 0;
@@ -3305,7 +3618,7 @@ void up_thread_run_test(){
     BOOST_CHECK_EQUAL(8,l7vs::Logger::putLogError_id);
     std::cout << l7vs::Logger::putLogError_message << std::endl;
     
-    thread_state[1] = 0;
+//    thread_state[1] = 0;
     sleep(1);
     
     test_obj.test_end = true;
@@ -3356,16 +3669,20 @@ class down_thread_run_test_class : public l7vs::tcp_session{
         };
         ~down_thread_run_test_class(){};
         bool& get_exit_flag(){
-            return exit_flag;
+            return (bool&)exit_flag;
         };
         
+/*
         bool& get_session_pause_flag(){
             return session_pause_flag;
         };
+*/
         
+/*
         std::bitset<TCP_SESSION_THREAD_STATE_BIT>& get_thread_state(){
             return thread_state;
         };
+*/
         
         boost::mutex test_thread_wait;
         void test_run(){
@@ -3504,32 +3821,36 @@ void down_thread_run_test(){
 
     test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
     bool& exit_flag = test_obj.get_exit_flag();
-    bool& session_pause_flag = test_obj.get_session_pause_flag();
+//    bool& session_pause_flag = test_obj.get_session_pause_flag();
     boost::thread::id& down_thread_id = test_obj.get_down_thread_id();
 
     
     boost::asio::ip::tcp::endpoint connect_end(boost::asio::ip::address::from_string(DUMMI_SERVER_IP), DUMMI_SERVER_PORT);
-    std::bitset<TCP_SESSION_THREAD_STATE_BIT>& thread_state = test_obj.get_thread_state();
+//    std::bitset<TCP_SESSION_THREAD_STATE_BIT>& thread_state = test_obj.get_thread_state();
         
     test_obj.test_thread_wait.lock();
+/*
     thread_state[0] = 1;    // UP_THREAD_ALIVE
     thread_state[1] = 0;    // DOWN_THREAD_ALIVE
     thread_state[2] = 0;    // UP_THREAD_ACTIVE
     thread_state[3] = 0;    // DOWN_THREAD_ACTIVE
     thread_state[4] = 0;    // UP_THREAD_LOCK
     thread_state[5] = 0;    // DOWN_THREAD_LOCK
+*/
     down_thread_id = boost::thread::id();
     boost::thread test_thread(boost::bind(&down_thread_run_test_class::test_run,&test_obj));
     sleep(1);
     boost::thread::id test_id = test_thread.get_id();
     boost::thread::id proc_id = boost::this_thread::get_id();
     
+/*
     BOOST_CHECK(thread_state.test(0));    // UP_THREAD_ALIVE
     BOOST_CHECK(!thread_state.test(1)); // DOWN_THREAD_ALIVE
     BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
     BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
     BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
     BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
+*/
     BOOST_CHECK(down_thread_id != test_id);
     test_obj.test_thread_wait.unlock();
     sleep(1);
@@ -3540,26 +3861,28 @@ void down_thread_run_test(){
     
     // unit_test [2] down_thread_run up thread active wait check
     std::cout << "[2] down_thread_run up thread active wait check" << std::endl;
+/*
     BOOST_CHECK(thread_state.test(0));    // UP_THREAD_ALIVE
     BOOST_CHECK(thread_state.test(1)); // DOWN_THREAD_ALIVE
     BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
     BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
     BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
     BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
+*/
         
-    session_pause_flag = true;
+//    session_pause_flag = true;
     
     // UP_THREAD_ACTIVE
-    thread_state[2] = 1;
+//    thread_state[2] = 1;
     sleep(1);
     
     // unit_test [3] down_thread_run state update(DOWN_THREAD_ACTIVE) check
     std::cout << "[3] down_thread_run state update(DOWN_THREAD_ACTIVE) check" << std::endl;
-    BOOST_CHECK(thread_state.test(3)); // DOWN_THREAD_ACTIVE
+//    BOOST_CHECK(thread_state.test(3)); // DOWN_THREAD_ACTIVE
     
     // unit_test [4] down_thread_run pause check
     std::cout << "[4] down_thread_run  pause check" << std::endl;
-    BOOST_CHECK(thread_state.test(5)); // DOWN_THREAD_LOCK
+//    BOOST_CHECK(thread_state.test(5)); // DOWN_THREAD_LOCK
     
     test_obj.down_thread_realserver_receive_call_check = false;
     test_obj.down_thread_realserver_receive_process_type = l7vs::tcp_session::MESSAGE_PROC;
@@ -3567,12 +3890,12 @@ void down_thread_run_test(){
     
     test_obj.set_down_thread_connect_socket_list();
     
-    session_pause_flag = false;
+//    session_pause_flag = false;
     sleep(1);
     
     // unit_test [5] down_thread_run restart check
     std::cout << "[5] down_thread_run  restart check" << std::endl;
-    BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
+//    BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
     
     
     // unit_test [6] down_thread_run connect realserver set receive list check
@@ -3587,7 +3910,7 @@ void down_thread_run_test(){
     // unit_test [8] down_thread_run main loop exit check
     std::cout << "[8] down_thread_run main loop exit check" << std::endl;
     BOOST_CHECK(exit_flag);
-    BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
+//    BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
     
     // unit_test [9] down_thread_run down_thread_all_socket_close_call_check call check
     std::cout << "[9] down_thread_run down_thread_all_socket_close_call_check call check" << std::endl;
@@ -3595,15 +3918,17 @@ void down_thread_run_test(){
     
     // unit_test [10] down_thread_run state update(DOWN_THREAD_ACTIVE) check
     std::cout << "[10] down_thread_run state update(DOWN_THREAD_ACTIVE) check" << std::endl;
-    BOOST_CHECK(!thread_state.test(1)); // DOWN_THREAD_ACTIVE
+//    BOOST_CHECK(!thread_state.test(1)); // DOWN_THREAD_ACTIVE
     
     // message call test
     exit_flag = false;
-    session_pause_flag = false;
+//    session_pause_flag = false;
     l7vs::tcp_data& msg_data = test_obj.get_down_thread_message_data();
     test_obj.test_message_set(connect_end);
+/*
     thread_state[0] = 1;    // UP_THREAD_ALIVE
     thread_state[2] = 1;    // UP_THREAD_ACTIVE
+*/
     msg_data.set_endpoint(boost::asio::ip::tcp::endpoint());
     test_obj.down_thread_exit_call_check = false;
     test_obj.down_thread_exit_process_type = l7vs::tcp_session::LOCAL_PROC;
@@ -3620,9 +3945,11 @@ void down_thread_run_test(){
     // error test not find function map 
     test_obj.clear_function_array();
     exit_flag = false;
-    session_pause_flag = true;
+//    session_pause_flag = true;
+/*
     thread_state[0] = 1;    // UP_THREAD_ALIVE
     thread_state[2] = 1;    // UP_THREAD_ACTIVE
+*/
     
     l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
     l7vs::Logger::putLogError_id = 0;
@@ -3647,6 +3974,7 @@ void down_thread_run_test(){
 }
 
 
+/*
 // thread_state_update test
 // thread_state_update test class
 class thread_state_update_test_class : public l7vs::tcp_session{
@@ -3873,7 +4201,7 @@ void thread_state_update_test(){
     BOOST_MESSAGE( "----- thread_state_update test end -----" );
     
 }
-
+*/
 
 
 // up_thread_exit test
@@ -3901,7 +4229,7 @@ class up_thread_exit_test_class : public l7vs::tcp_session{
                                                                                                    set_access_logger){};
         ~up_thread_exit_test_class(){};
         bool& get_exit_flag(){
-            return exit_flag;
+            return (bool&)exit_flag;
         };
         void test_call(){
             l7vs::tcp_session::up_thread_exit(LOCAL_PROC);
@@ -4026,7 +4354,7 @@ class down_thread_exit_test_class : public l7vs::tcp_session{
 
         ~down_thread_exit_test_class(){};
         bool& get_exit_flag(){
-            return exit_flag;
+            return (bool&)exit_flag;
         };
         void test_call(){
             l7vs::tcp_session::down_thread_exit(LOCAL_PROC);
@@ -10821,8 +11149,6 @@ void down_thread_client_send_test(){
 //up_thread_realserver_connect test class 
 class up_thread_realserver_connect_test_class : public l7vs::tcp_session{
     public:
-//        up_thread_realserver_connect_test_class(l7vs::virtualservice_tcp& vs,boost::asio::io_service& session_io,const l7vs::tcp_socket::tcp_socket_option_info set_option) : l7vs::tcp_session(vs,session_io,set_option){
-//        };
        up_thread_realserver_connect_test_class(
                                 l7vs::virtualservice_tcp& vs,
                                 boost::asio::io_service& session_io,
@@ -10977,11 +11303,8 @@ void up_thread_realserver_connect_test(){
     boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
     bool set_ssl_cache_flag(false);
     int set_ssl_handshake_time_out = 0;
-    //std::string access_log_file_name = "test";
-    l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
-    
-//    up_thread_realserver_connect_test_class test_obj(vs,io);
-//    up_thread_realserver_connect_test_class test_obj(vs,io,set_option);
+    l7vs::logger_implement_access* plogger = NULL;//  new l7vs::logger_implement_access(access_log_file_name);
+
     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);
 
     test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
@@ -11147,6 +11470,277 @@ void up_thread_realserver_connect_test(){
     BOOST_MESSAGE( "----- up_thread_realserver_connect test end -----" );
 }
 
+//up_thread_realserver_connect access log test
+//up_thread_realserver_connect  access log class 
+class up_thread_realserver_connect_access_log_test_class : public l7vs::tcp_session{
+    public:
+       up_thread_realserver_connect_access_log_test_class(
+                                l7vs::virtualservice_tcp& vs,
+                                boost::asio::io_service& session_io,
+                                l7vs::tcp_socket_option_info& set_socket_option,
+                                boost::asio::ip::tcp::endpoint listen_endpoint,
+                                bool ssl_mode,
+                                boost::asio::ssl::context& set_ssl_context,
+                                bool set_ssl_cache_flag,
+                                int set_ssl_handshake_time_out,
+                                l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session(   vs,
+                                                                                                   session_io,
+                                                                                                   set_socket_option,
+                                                                                                   listen_endpoint,
+                                                                                                   ssl_mode,
+                                                                                                   set_ssl_context,
+                                                                                                   set_ssl_cache_flag,
+                                                                                                   set_ssl_handshake_time_out,
+                                                                                                   set_access_logger){};
+
+        ~up_thread_realserver_connect_access_log_test_class(){};
+        
+        void test_call(){
+            l7vs::tcp_session::up_thread_realserver_connect(LOCAL_PROC);
+        };
+        
+        void set_protocol_module(l7vs::protocol_module_base* set_prot){
+            protocol_module = set_prot;
+        };
+        l7vs::tcp_data& get_up_thread_data_client_side(){
+            return up_thread_data_client_side;
+        };
+        l7vs::tcp_data& get_up_thread_data_dest_side(){
+            return up_thread_data_dest_side;
+        };
+        l7vs::tcp_data& get_down_thread_data_client_side(){
+            return down_thread_data_client_side;
+        };
+        l7vs::tcp_data& get_down_thread_data_dest_side(){
+            return down_thread_data_dest_side;
+        };
+        l7vs::tcp_socket& get_client_socket(){
+            return client_socket;
+        };
+        socket_element& get_sorryserver_socket(){
+            return sorryserver_socket;
+        };
+        std::list<socket_element>& get_down_thread_receive_realserver_socket_list(){
+            return down_thread_receive_realserver_socket_list;
+        };
+        std::map<endpoint,tcp_socket_ptr>& get_up_thread_send_realserver_socket_map(){
+            return up_thread_send_realserver_socket_map;
+        };
+        std::list<socket_element>::iterator& get_down_thread_current_receive_realserver_socket(){
+            return down_thread_current_receive_realserver_socket;
+        };
+        l7vs::tcp_realserver_connect_socket_list& get_down_thread_connect_socket_list(){
+            return down_thread_connect_socket_list;
+        };
+        
+        
+        void set_up_thread_id(boost::thread::id set_id){
+            up_thread_id = set_id;
+        }
+        void set_down_thread_id(boost::thread::id set_id){
+            down_thread_id = set_id;
+        }
+        
+        void next_up_function_call(){
+            up_thread_next_call_function.second(LOCAL_PROC);
+        }
+        void next_down_function_call(){
+            down_thread_next_call_function.second(LOCAL_PROC);
+        }
+        
+        void set_up_thread_next_function_call_exit(){
+            up_thread_function_pair fun_it = up_thread_function_array[UP_FUNC_EXIT];
+            up_thread_next_call_function = fun_it;
+        };
+        
+        void set_down_thread_next_function_call_exit(){
+            down_thread_function_pair fun_it = down_thread_function_array[DOWN_FUNC_EXIT];
+            down_thread_next_call_function = fun_it;
+        };
+        
+        // next call function check
+        void up_thread_realserver_connect_event(const TCP_PROCESS_TYPE_TAG process_type){
+            up_thread_realserver_connect_event_call_check = true;
+        };
+        bool up_thread_realserver_connect_event_call_check;
+        void up_thread_realserver_connection_fail_event(const TCP_PROCESS_TYPE_TAG process_type){
+            up_thread_realserver_connection_fail_event_check = true;
+        };
+        bool up_thread_realserver_connection_fail_event_check;
+        
+        void up_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
+            up_thread_exit_call_check = true;
+        }
+        bool up_thread_exit_call_check;
+        
+        void down_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
+            down_thread_exit_call_check = true;
+        }
+        bool down_thread_exit_call_check;
+        
+        // map clear
+        void up_thread_function_array_clear(){
+            for(int i = 0;i <= UP_FUNC_EXIT;i++){
+                up_thread_function_array[i].second = NULL;
+            }
+        };
+        void down_thread_function_array_clear(){
+            for(int i = 0;i <= DOWN_FUNC_EXIT;i++){
+                down_thread_function_array[i].second = NULL;
+            }
+        };
+        
+        void up_thread_module_event_map_clear(){
+            up_thread_module_event_map.clear();
+        };
+        
+        void down_thread_module_event_map_clear(){
+            down_thread_module_event_map.clear();
+        };
+
+
+        void set_client_endpoint(boost::asio::ip::tcp::endpoint& set_endpoint){
+            client_endpoint = set_endpoint;
+        };
+
+        std::string get_test_string(boost::asio::ip::tcp::endpoint& set_endpoint){
+            return endpoint_to_string(set_endpoint);
+        };
+
+        void set_access_log_flag( bool set_flag ){
+            access_log_flag = set_flag;
+        };
+};
+
+void up_thread_realserver_connect_access_log_test(){
+    BOOST_MESSAGE( "----- up_thread_realserver_connect access log test start -----" );
+
+    boost::asio::io_service io;
+    l7vs::virtualservice_tcp vs;
+
+    std::string test_protocol_name("test protocol");
+    l7vs::test_protocol_module proto_test(test_protocol_name);
+
+    l7vs::tcp_socket_option_info set_option;
+    //! TCP_NODELAY   (false:not set,true:set option)
+    set_option.nodelay_opt = false;
+    //! TCP_NODELAY option value  (false:off,true:on)
+    set_option.nodelay_val = false;
+    //! TCP_CORK      (false:not set,true:set option)
+    set_option.cork_opt = false;
+    //! TCP_CORK option value     (false:off,true:on)
+    set_option.cork_val = false;
+    //! TCP_QUICKACK  (false:not set,true:set option)
+    set_option.quickack_opt = false;
+    //! TCP_QUICKACK option value (false:off,true:on)
+    set_option.quickack_val = false;
+
+    boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string("192.168.0.1"), 8080);
+    bool set_mode(false);
+    boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
+    bool set_ssl_cache_flag(false);
+    int set_ssl_handshake_time_out = 0;
+    l7vs::logger_implement_access* plogger = new l7vs::logger_implement_access( "test.log" );
+
+    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);
+    test_obj.set_access_log_flag(true);
+
+
+    boost::asio::ip::tcp::endpoint client_src_endpoint(boost::asio::ip::address::from_string("192.168.10.20"), 54321);
+    test_obj.set_client_endpoint(client_src_endpoint);
+
+    test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
+    boost::thread::id proc_id = boost::this_thread::get_id();
+
+    l7vs::tcp_data& con_data = test_obj.get_up_thread_data_dest_side();
+    boost::asio::ip::tcp::endpoint con_end(boost::asio::ip::address::from_string(DUMMI_SERVER_IP),DUMMI_SERVER_PORT);
+
+    //up_thread_data_dest_side set
+    con_data.initialize();
+    con_data.set_endpoint(con_end);
+    // thread_id set
+    test_obj.set_up_thread_id(boost::thread::id());
+    test_obj.set_down_thread_id(proc_id);
+    // socket set
+    l7vs::tcp_socket::connect_res = true;
+    l7vs::tcp_socket::connect_connect_endpoint = boost::asio::ip::tcp::endpoint();
+    l7vs::tcp_socket::connect_ec = NULL;
+    l7vs::tcp_socket::connect_call_check = false;
+    l7vs::tcp_socket::is_connect = true;
+    // vs set
+    vs.connection_active_list.clear();
+    // map set
+    std::map< boost::asio::ip::tcp::endpoint, boost::shared_ptr< l7vs::tcp_socket > >& rs_map = test_obj.get_up_thread_send_realserver_socket_map();
+    rs_map.clear();
+    // connection list set
+    l7vs::tcp_realserver_connect_socket_list& con_list = test_obj.get_down_thread_connect_socket_list();
+    con_list.clear();
+    //tcp_session set
+    test_obj.set_up_thread_next_function_call_exit();
+    test_obj.up_thread_realserver_connect_event_call_check = false;
+
+    // dummy server 
+    test_mirror_server test_server;
+    // accept req
+    test_server.breq_acc_flag = true;
+    // close wait req
+    test_server.breq_close_wait_flag = true;
+    // recv cont
+    test_server.req_recv_cnt = 0;
+    // test server start
+    boost::thread server_thread(boost::bind(&test_mirror_server::run,&test_server));
+    while( !test_server.brun_flag ){
+        sleep(1);
+    }
+
+    test_obj.test_call();
+
+    BOOST_CHECK(con_end == l7vs::tcp_socket::connect_connect_endpoint);
+    BOOST_CHECK(l7vs::tcp_socket::connect_ec != NULL);
+    BOOST_CHECK(l7vs::tcp_socket::connect_call_check);
+
+    BOOST_CHECK(!con_list.empty());
+    std::pair<boost::asio::ip::tcp::endpoint,boost::shared_ptr<l7vs::tcp_socket> > set_socket = con_list.get_socket();
+    BOOST_CHECK(set_socket.first == con_end);
+    BOOST_CHECK(set_socket.second == rs_map.begin()->second);
+
+    std::string cl_rm_end = test_obj.get_test_string( client_src_endpoint );
+    std::string cl_lo_end = test_obj.get_test_string( listen_endpoint );
+    boost::asio::ip::tcp::endpoint rs_local = set_socket.second->get_socket().local_endpoint();
+    std::string rs_lo_end = test_obj.get_test_string( rs_local );
+    std::string rs_rm_end = test_obj.get_test_string( con_end );
+
+    // unit_test [1] up_thread_realserver_connect client endpoint string check
+    std::cout << "[1] up_thread_realserver_connect client endpoint string check" << std::endl;
+    BOOST_CHECK_EQUAL( cl_rm_end , plogger->putLog_cl_con_org );
+    // unit_test [2] up_thread_realserver_connect virtualservice endpoint string check
+    std::cout << "[2] up_thread_realserver_connect virtualservice endpoint string check" << std::endl;
+    BOOST_CHECK_EQUAL( cl_lo_end , plogger->putLog_vsinfo );
+    // unit_test [3] up_thread_realserver_connect realserver local endpoint string check
+    std::cout << "[3] up_thread_realserver_connect realserver local endpoint string check" << std::endl;
+    BOOST_CHECK_EQUAL( rs_lo_end , plogger->putLog_rs_con_org );
+    // unit_test [4] up_thread_realserver_connect realserver remote endpoint string check
+    std::cout << "[4] up_thread_realserver_connect realserver remote endpoint string check" << std::endl;
+    BOOST_CHECK_EQUAL( rs_rm_end , plogger->putLog_rs_con_dest );
+    // unit_test [5] up_thread_realserver_connect realserver local endpoint string check
+    std::cout << "[5] up_thread_realserver_connect realserver local endpoint string check" << std::endl;
+    BOOST_CHECK_EQUAL( "" , plogger->putLog_msg );
+
+    rs_map.clear();
+    con_list.clear();
+
+    set_socket.second->get_socket().close();
+
+    // dummy server stop
+    test_server.breq_close_wait_flag = false;   
+    test_server.bstop_flag = true;
+    server_thread.join();
+
+    delete plogger;
+    plogger = NULL;
+
+    BOOST_MESSAGE( "----- up_thread_realserver_connect access log end -----" );
+}
 
 //up_thread_sorryserver_connect test
 //up_thread_sorryserver_connect test class 
@@ -12283,162 +12877,6 @@ void down_thread_all_realserver_disconnect_test(){
 
 
 
-// dummy client
-class test_client{
-    public:
-        // 
-        test_client(boost::asio::io_service& io_service, boost::asio::ssl::context& context) :
-            my_socket(io_service,context){
-        };
-
-        ~test_client(){
-        };
-        void all_lock(){
-
-            //! socket connect mutex
-            connect_mutex.wrlock();
-            //! socket handshake mutex
-            handshake_mutex.wrlock();
-            //! socket read mutex
-            read_mutex.wrlock();
-            //! socket write mutex
-            write_mutex.wrlock();
-            //! socket close mutex
-            close_mutex.wrlock();
-
-        }
-
-        void handshake_test_run(){
-            // dummy client start
-
-            // connect
-            {
-                l7vs::rw_scoped_lock scope_lock(connect_mutex);
-
-                if(!connect_test()){
-                    return;
-                }
-            }
-
-            // handshake
-            {
-                l7vs::rw_scoped_lock scope_lock(handshake_mutex);
-
-                if(!handshake_test()){
-                    return;
-                }
-            }
-
-            // close 
-            {
-                l7vs::rw_scoped_lock scope_lock(close_mutex);
-                close_test();
-            }
-
-        };
-
-        bool connect_test(){
-            sleep(1);
-            boost::system::error_code ec;
-            std::cout << "dummy client connect try" << std::endl;
-            boost::asio::ip::tcp::endpoint connect_end(boost::asio::ip::address::from_string(DUMMI_SERVER_IP), DUMMI_SERVER_PORT);
-            my_socket.lowest_layer().connect(connect_end,ec);
-            if(ec){
-                //receive error
-                std::cout << "dummy client connect Error!" << std::endl;
-                std::cout << ec << std::endl;
-                return false;
-            }
-            std::cout << "dummy client connect OK" << std::endl;
-            return true;
-        };
-
-        bool handshake_test(){
-            boost::system::error_code ec;
-            std::cout << "dummy client handshake try" << std::endl;
-            my_socket.handshake(boost::asio::ssl::stream_base::client, ec);
-            if(ec){
-                //receive error
-                std::cout << "dummy client handshake Error!" << std::endl;
-                std::cout << ec << std::endl;
-                return false;
-            }
-            std::cout << "dummy client handshake OK" << std::endl;
-            return true;
-        };
-
-        bool send_test(){
-            sleep(1);
-            boost::system::error_code ec;
-            std::cout << "dummy client write try" << std::endl;
-            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);
-            if(ec){
-                //receive error
-                std::cout << "dummy client send Error!" << std::endl;
-                std::cout << ec << std::endl;
-                return false;
-            }
-            send_data_size += write_size;
-            std::cout << "dummy client send OK [" << send_data_size << "]" << std::endl;
-            return true;
-        };
-        bool receive_test(){
-            sleep(1);
-            boost::system::error_code ec;
-            std::cout << "dummy client read try" << std::endl;
-            std::size_t read_size = my_socket.read_some(boost::asio::buffer(data_buff.data() + receive_data_size,MAX_BUFFER_SIZE), ec);
-            if(ec){
-                //receive error
-                std::cout << "dummy client receive Error!" << std::endl;
-                std::cout << ec << std::endl;
-                return false;
-            }
-            receive_data_size += read_size;
-            std::cout << "dummy client receive OK [" << receive_data_size << "]" << std::endl;
-            return true;
-        };
-        void close_test(){
-            sleep(1);
-            boost::system::error_code ec;
-            std::cout << "dummy client close try" << std::endl;
-            my_socket.lowest_layer().close(ec);
-            if(ec){
-                //close error
-                std::cout << "dummy client close Error!" << std::endl;
-                std::cout << ec << std::endl;
-                return;
-            }
-            std::cout << "dummy client close OK" << std::endl;
-        };
-
-        boost::asio::ssl::stream<boost::asio::ip::tcp::socket> my_socket;
-        boost::array<char,MAX_BUFFER_SIZE> data_buff;
-        std::size_t receive_data_size;
-        std::size_t send_data_size;
-
-        //! socket connect mutex
-        l7vs::wr_mutex connect_mutex;
-        //! socket handshake mutex
-        l7vs::wr_mutex handshake_mutex;
-        //! socket read mutex
-        l7vs::wr_mutex read_mutex;
-        //! socket write mutex
-        l7vs::wr_mutex write_mutex;
-        //! socket close mutex
-        l7vs::wr_mutex close_mutex;
-};
-
-class authority{
-    public:
-        authority(){
-        };
-        ~authority(){
-        };
-        std::string get_password() const{
-            std::cout << "call get_password" << std::endl;
-            return "test";
-        };
-};
 
 
 // ssl_clear_keep_cache test class
@@ -12466,7 +12904,7 @@ class ssl_clear_keep_cache_test_class : public l7vs::tcp_session{
 
         ~ssl_clear_keep_cache_test_class(){};
         bool& get_exit_flag(){
-            return exit_flag;
+            return (bool&)exit_flag;
         };
 
         bool test_call(SSL *clear_ssl){
@@ -12661,7 +13099,7 @@ void ssl_clear_keep_cache_test(){
     BOOST_CHECK(test_sock.impl()->ssl->rstate == SSL_ST_READ_HEADER);  // SSL_ST_READ_HEADER;
     // unit_test [18] ssl_clear_keep_cache state initialize check
     std::cout << "[18] ssl_clear_keep_cache state initialize check" << std::endl;
-    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);
+    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);
 
 
     // accepter close
@@ -12903,11 +13341,9 @@ class up_thread_client_accept_test_class : public l7vs::tcp_session{
 
         void handle_ssl_handshake_timer(const boost::system::error_code&){
             handle_ssl_handshake_timer_call_chk = true;
-            return handle_ssl_handshake_timer_res;
         };
 
         bool handle_ssl_handshake_timer_call_chk;
-        bool handle_ssl_handshake_timer_res;
 
         up_thread_function_pair& get_up_thread_next_call_function(){
             return up_thread_next_call_function;
@@ -12917,10 +13353,32 @@ class up_thread_client_accept_test_class : public l7vs::tcp_session{
             return ssl_flag;
         };
 
+        bool& get_ssl_handshake_timer_flag(){
+            return ssl_handshake_timer_flag;
+        };
+
+        int& get_ssl_handshake_time_out(){
+            return ssl_handshake_time_out;
+        };
+
         bool& get_ssl_handshake_time_out_flag(){
             return ssl_handshake_time_out_flag;
         };
 
+        bool next_func_chk_accept_event(){
+            return up_thread_next_call_function.first == UP_FUNC_CLIENT_ACCEPT_EVENT;
+        };
+        bool next_func_chk_accept(){
+            return up_thread_next_call_function.first == UP_FUNC_CLIENT_ACCEPT;
+        };
+        bool next_func_chk_client_disconnect(){
+            return up_thread_next_call_function.first == UP_FUNC_CLIENT_DISCONNECT;
+        };
+
+        l7vs::tcp_ssl_socket& get_tcp_client_ssl_socket(){
+            return client_ssl_socket;
+        };
+
 };
 void up_thread_client_accept_test(){
     BOOST_MESSAGE( "----- up_thread_client_accept test start -----" );
@@ -12954,84 +13412,784 @@ void up_thread_client_accept_test(){
     // test case 1 not ssl mode
     test_obj.test_call();
 
-    BOOST_CHECK( test_obj.get_up_thread_next_call_function().first == l7vs::tcp_session::UP_FUNC_CLIENT_ACCEPT_EVENT);
+    // unit_test [1] up_thread_client_accept no ssl mode next func check
+    std::cout << "[1] up_thread_client_accept no ssl mode next func check" << std::endl;
+    BOOST_CHECK( test_obj.next_func_chk_accept_event() );
+
+    // tset case 2 ssl mode and handshaek time out
+    test_obj.get_ssl_flag() = true;                     //SSL mode
+    test_obj.get_ssl_handshake_time_out_flag() = true;    //handshake time out
+
+    test_obj.test_call();
+
+    // unit_test [2] up_thread_client_accept ssl mode time out case next func check
+    std::cout << "[2] up_thread_client_accept ssl mode time out case next func check" << std::endl;
+    BOOST_CHECK( test_obj.next_func_chk_client_disconnect() );
+
+
+    // tset case 3 ssl mode and set timer snd handshake try_again error case check
+    test_obj.get_ssl_flag() = true;                      //SSL mode
+    test_obj.get_ssl_handshake_time_out_flag() = false;  //handshake time out
+    test_obj.get_ssl_handshake_timer_flag() = false;     //timer not set
+    test_obj.get_ssl_handshake_time_out() = 3;          //timer set second
+    test_obj.handle_ssl_handshake_timer_call_chk = false;
+    test_obj.get_tcp_client_ssl_socket().handshake_call_check = false;
+    test_obj.get_tcp_client_ssl_socket().handshake_res = false;
+    test_obj.get_tcp_client_ssl_socket().handshake_set_ec = boost::asio::error::try_again;
 
+    test_obj.test_call();
     
+    // timer thread start
+    boost::thread timer_thread(boost::bind(&boost::asio::io_service::run,&io));
 
+    // unit_test [3] up_thread_client_accept set timer check
+    std::cout << "[3] up_thread_client_accept set timer check" << std::endl;
+    BOOST_CHECK( test_obj.get_ssl_handshake_timer_flag() == true);
+    // after 1 second
+    sleep(1);
+    std::cout << "1 sec" << std::endl;
+    BOOST_CHECK( test_obj.handle_ssl_handshake_timer_call_chk == false );
+    // after 2 second
+    sleep(1);
+    std::cout << "2 sec" << std::endl;
+    BOOST_CHECK( test_obj.handle_ssl_handshake_timer_call_chk == false );
+    // after 3 second
+    sleep(1);
+    std::cout << "3 sec" << std::endl;
+    BOOST_CHECK( test_obj.handle_ssl_handshake_timer_call_chk == true );
 
+    timer_thread.join();
 
+    // unit_test [4] up_thread_client_accept socket handshake call check
+    std::cout << "[4] up_thread_client_accept socket handshake call check" << std::endl;
+    BOOST_CHECK( test_obj.get_tcp_client_ssl_socket().handshake_call_check == true );
 
-    BOOST_MESSAGE( "----- up_thread_client_accept test end -----" );
-}
+    // unit_test [5] up_thread_client_accept socket handshake try_again error next func check
+    std::cout << "[5] up_thread_client_accept socket handshake try_again error next func check" << std::endl;
+    BOOST_CHECK( test_obj.next_func_chk_accept() );
 
-test_suite*    init_unit_test_suite( int argc, char* argv[] ){
 
-    test_suite* ts = BOOST_TEST_SUITE( "l7vs::tcp_socket class test" );
-/*
-    ts->add( BOOST_TEST_CASE( &constructer_test ) );
-    ts->add( BOOST_TEST_CASE( &initialize_test ) );
-    ts->add( BOOST_TEST_CASE( &initialize_ssl_mode_test ) );
-    ts->add( BOOST_TEST_CASE( &ssl_clear_keep_cache_test ) );
-    ts->add( BOOST_TEST_CASE( &get_client_socket_test) );
-    ts->add( BOOST_TEST_CASE( &handle_ssl_handshake_timer_test) );
-    ts->add( BOOST_TEST_CASE( &is_thread_wait_test) );
-    ts->add( BOOST_TEST_CASE( &set_virtual_service_message_test) );
+    // tset case 4 ssl mode and handshake ok case check
+    test_obj.get_ssl_flag() = true;                      //SSL mode
+    test_obj.get_ssl_handshake_time_out_flag() = false;  //handshake time out
+    test_obj.get_ssl_handshake_timer_flag() = true;     //timer not set
+    test_obj.get_ssl_handshake_time_out() = 3;          //timer set second
+    test_obj.handle_ssl_handshake_timer_call_chk = false;
+    test_obj.get_tcp_client_ssl_socket().handshake_call_check = false;
+    test_obj.get_tcp_client_ssl_socket().handshake_res = true;
+    test_obj.get_tcp_client_ssl_socket().handshake_set_ec.clear();
 
-    ts->add( BOOST_TEST_CASE( &up_thread_run_test) );
-    ts->add( BOOST_TEST_CASE( &down_thread_run_test) );
-    ts->add( BOOST_TEST_CASE( &thread_state_update_test) );
-    ts->add( BOOST_TEST_CASE( &up_thread_client_respond_test) );
-    ts->add( BOOST_TEST_CASE( &up_thread_realserver_get_detination_event_test) );
-    ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_get_detination_event_test) );
 
-    ts->add( BOOST_TEST_CASE( &up_thread_all_socket_close_test) );
-    ts->add( BOOST_TEST_CASE( &down_thread_all_socket_close_test) );
-    ts->add( BOOST_TEST_CASE( &up_thread_client_disconnect_test) );
-    ts->add( BOOST_TEST_CASE( &down_thread_client_disconnect_test) );
-    ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_disconnect_test) );
-    ts->add( BOOST_TEST_CASE( &down_thread_sorryserver_disconnect_test) );
-    ts->add( BOOST_TEST_CASE( &up_thread_realserver_connect_event_test) );
-    ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_connect_event_test) );
-    ts->add( BOOST_TEST_CASE( &down_thread_client_connection_chk_event_test) );
-    ts->add( BOOST_TEST_CASE( &up_thread_realserver_connection_fail_event_test) );
-    ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_connection_fail_event_test) );
+    test_obj.test_call();
 
-    ts->add( BOOST_TEST_CASE( &up_thread_client_receive_test) );
-    ts->add( BOOST_TEST_CASE( &down_thread_realserver_receive_test) );
-    ts->add( BOOST_TEST_CASE( &down_thread_sorryserver_receive_test) );
-    ts->add( BOOST_TEST_CASE( &up_thread_realserver_send_test) );
-    ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_send_test) );
-    ts->add( BOOST_TEST_CASE( &down_thread_client_send_test) );
-    ts->add( BOOST_TEST_CASE( &up_thread_realserver_connect_test) );
-    ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_connect_test) );
-    ts->add( BOOST_TEST_CASE( &up_thread_realserver_disconnect_test) );
-    ts->add( BOOST_TEST_CASE( &down_thread_realserver_disconnect_test) );
-    ts->add( BOOST_TEST_CASE( &up_thread_all_realserver_disconnect_test) );
-    ts->add( BOOST_TEST_CASE( &down_thread_all_realserver_disconnect_test) );
+    // unit_test [6] up_thread_client_accept socket handshake no error next func check
+    std::cout << "[6] up_thread_client_accept socket handshake no error next func check" << std::endl;
+    BOOST_CHECK( test_obj.next_func_chk_accept_event() );
 
-    ts->add( BOOST_TEST_CASE( &up_thread_exit_test ) );
-    ts->add( BOOST_TEST_CASE( &down_thread_exit_test ) );
-    ts->add( BOOST_TEST_CASE( &up_thread_client_disconnect_event_test ) );
-    ts->add( BOOST_TEST_CASE( &down_thread_client_disconnect_event_test ) );
-    ts->add( BOOST_TEST_CASE( &up_thread_realserver_disconnect_event_test ) );
-    ts->add( BOOST_TEST_CASE( &down_thread_realserver_disconnect_event_test ) );
-    ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_disconnect_event_test ) );
-    ts->add( BOOST_TEST_CASE( &down_thread_sorryserver_disconnect_event_test ) );
-    ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_mod_disconnect_test ) );
-    ts->add( BOOST_TEST_CASE( &down_thread_sorryserver_mod_disconnect_test ) );
 
-    ts->add( BOOST_TEST_CASE( &up_thread_sorry_enable_event_test ) );
-    ts->add( BOOST_TEST_CASE( &up_thread_sorry_disable_event_test ) );
-    ts->add( BOOST_TEST_CASE( &down_thread_sorry_enable_event_test ) );
-    ts->add( BOOST_TEST_CASE( &down_thread_sorry_disable_event_test ) );
-    ts->add( BOOST_TEST_CASE( &up_thread_client_accept_event_test ) );
-    ts->add( BOOST_TEST_CASE( &up_thread_client_respond_event_test ) );
-    ts->add( BOOST_TEST_CASE( &down_thread_client_respond_event_test ) );
-*/
+    // tset case 5 ssl mode and handshake error case check
+    test_obj.get_ssl_flag() = true;                      //SSL mode
+    test_obj.get_ssl_handshake_time_out_flag() = false;  //handshake time out
+    test_obj.get_ssl_handshake_timer_flag() = true;     //timer not set
+    test_obj.get_ssl_handshake_time_out() = 3;          //timer set second
+    test_obj.handle_ssl_handshake_timer_call_chk = false;
+    test_obj.get_tcp_client_ssl_socket().handshake_call_check = false;
+    test_obj.get_tcp_client_ssl_socket().handshake_res = false;
+    test_obj.get_tcp_client_ssl_socket().handshake_set_ec =  boost::asio::error::eof;
 
-    ts->add( BOOST_TEST_CASE( &up_thread_client_accept_test ) );
-//    ts->add( BOOST_TEST_CASE( &up_thread_run_ssl_mode_test) );
+    test_obj.test_call();
+
+    // unit_test [7] up_thread_client_accept socket handshake no error next func check
+    std::cout << "[7] up_thread_client_accept socket handshake no error next func check" << std::endl;
+    BOOST_CHECK( test_obj.next_func_chk_client_disconnect() );
+
+    BOOST_MESSAGE( "----- up_thread_client_accept test end -----" );
+}
 
+// up_thread_run ssl mode
+// up_thread_run ssl mode test class
+class up_thread_run_ssl_mode_test_class : public l7vs::tcp_session{
+    public:
+       up_thread_run_ssl_mode_test_class(
+                                l7vs::virtualservice_tcp& vs,
+                                boost::asio::io_service& session_io,
+                                l7vs::tcp_socket_option_info& set_socket_option,
+                                boost::asio::ip::tcp::endpoint listen_endpoint,
+                                bool ssl_mode,
+                                boost::asio::ssl::context& set_ssl_context,
+                                bool set_ssl_cache_flag,
+                                int set_ssl_handshake_time_out,
+                                l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session(   vs,
+                                                                                                   session_io,
+                                                                                                   set_socket_option,
+                                                                                                   listen_endpoint,
+                                                                                                   ssl_mode,
+                                                                                                   set_ssl_context,
+                                                                                                   set_ssl_cache_flag,
+                                                                                                   set_ssl_handshake_time_out,
+                                                                                                   set_access_logger){
+            test_end = false;
+            test_wait = true;
+        };
+        ~up_thread_run_ssl_mode_test_class(){};
+        bool& get_exit_flag(){
+            return (bool&)exit_flag;
+        };
+        
+/*
+        bool& get_session_pause_flag(){
+            return session_pause_flag;
+        };
+*/
+        
+/*
+        std::bitset<TCP_SESSION_THREAD_STATE_BIT>& get_thread_state(){
+            return thread_state;
+        };
+*/
+        
+        boost::mutex test_thread_wait;
+        void test_run(){
+            boost::mutex::scoped_lock scope_lock(test_thread_wait);
+            while(!test_end){
+                std::cout << "up_thread_run test call" << std::endl;
+                test_wait = true;
+                up_thread_run();
+                while(test_wait){};
+            }
+        };
+        bool test_end;
+        bool test_wait;
+                
+        void set_protocol_module(l7vs::protocol_module_base* set_proto){
+            protocol_module = set_proto;
+        };
+
+        boost::asio::ssl::stream<boost::asio::ip::tcp::socket>& get_client_socket(){
+            return client_ssl_socket.get_socket();
+        };
+
+        
+        boost::thread::id& get_up_thread_id(){
+            return up_thread_id;
+        };
+        
+        boost::thread::id& get_down_thread_id(){
+            return down_thread_id;
+        };
+        
+        void up_thread_exit(const TCP_PROCESS_TYPE_TAG process_type){
+            up_thread_exit_process_type = process_type;
+            l7vs::tcp_session::up_thread_exit(process_type);
+            up_thread_exit_call_check = true;
+        };
+        TCP_PROCESS_TYPE_TAG up_thread_exit_process_type;
+        bool up_thread_exit_call_check;
+        
+        void up_thread_all_socket_close(void){
+            up_thread_all_socket_close_call_check = true;
+        };
+        bool up_thread_all_socket_close_call_check;
+        
+        void test_message_set(boost::asio::ip::tcp::endpoint set_endpoint){
+            l7vs::tcp_thread_message*    chk_msg    = new l7vs::tcp_thread_message;
+            up_thread_message_que.push(chk_msg);
+            chk_msg->endpoint_info = set_endpoint;
+            up_thread_function_pair func = up_thread_function_array[UP_FUNC_EXIT];
+            chk_msg->message = func.second;
+        };
+        
+        l7vs::tcp_data& get_up_thread_message_data(){
+            return up_thread_message_data;
+        };
+        
+        void clear_function_array(){
+            for(int i = 0;i <= UP_FUNC_EXIT;i++){
+                up_thread_function_array[i].second = NULL;
+            }
+        };
+        void clear_event_map(){
+            up_thread_module_event_map.clear();
+        };
+        
+        void set_up_thread_next_call_function_client_disconnect(){
+            up_thread_next_call_function = up_thread_function_array[UP_FUNC_CLIENT_DISCONNECT];
+        };
+        void set_up_thread_next_call_function_exit(){
+            up_thread_next_call_function = up_thread_function_array[UP_FUNC_EXIT];
+        };
+        
+};
+void up_thread_run_ssl_mode_test(){
+    
+    BOOST_MESSAGE( "----- up_thread_run ssl mode test start -----" );
+    boost::asio::io_service io;
+    l7vs::virtualservice_tcp vs;
+    l7vs::tcp_socket_option_info set_option;
+    //! TCP_NODELAY   (false:not set,true:set option)
+    set_option.nodelay_opt = false;
+    //! TCP_NODELAY option value  (false:off,true:on)
+    set_option.nodelay_val = false;
+    //! TCP_CORK      (false:not set,true:set option)
+    set_option.cork_opt = false;
+    //! TCP_CORK option value     (false:off,true:on)
+    set_option.cork_val = false;
+    //! TCP_QUICKACK  (false:not set,true:set option)
+    set_option.quickack_opt = false;
+    //! TCP_QUICKACK option value (false:off,true:on)
+    set_option.quickack_val = false;
+    //
+    boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMI_SERVER_IP), DUMMI_SERVER_PORT);
+    bool set_mode(true);
+    boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
+    bool set_ssl_cache_flag(false);
+    int set_ssl_handshake_time_out = 0;
+    //std::string access_log_file_name = "test";
+    l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
+
+    boost::system::error_code ec;
+    std::string test_protocol_name("test protocol");
+    l7vs::test_protocol_module proto_test(test_protocol_name);
+
+    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);
+
+    test_obj.set_protocol_module((l7vs::protocol_module_base*)&proto_test);
+    bool& exit_flag = test_obj.get_exit_flag();
+//    bool& session_pause_flag = test_obj.get_session_pause_flag();
+    boost::thread::id& up_thread_id = test_obj.get_up_thread_id();
+    boost::thread::id& down_thread_id = test_obj.get_down_thread_id();
+
+    
+//    std::bitset<TCP_SESSION_THREAD_STATE_BIT>& thread_state = test_obj.get_thread_state();
+    boost::asio::ssl::stream<boost::asio::ip::tcp::socket>& client_socket = test_obj.get_client_socket();
+    
+    test_mirror_server test_server;
+    // accept req
+    test_server.breq_acc_flag = true;
+    // close wait req
+    test_server.breq_close_wait_flag = true;
+    // recv cont
+    test_server.req_recv_cnt = 0;
+    // test server start
+    boost::thread server_thread(boost::bind(&test_mirror_server::run,&test_server));
+    while( !test_server.brun_flag ){
+        sleep(1);
+    }
+    
+    boost::asio::ip::tcp::endpoint connect_end(boost::asio::ip::address::from_string(DUMMI_SERVER_IP), DUMMI_SERVER_PORT);
+    client_socket.lowest_layer().connect(connect_end,ec);
+    BOOST_CHECK(!ec);
+    while(!test_server.bconnect_flag){
+        sleep(1);
+    }
+
+    test_obj.test_thread_wait.lock();
+/*
+    thread_state[0] = 0;    // UP_THREAD_ALIVE
+    thread_state[1] = 0;    // DOWN_THREAD_ALIVE
+    thread_state[2] = 0;    // UP_THREAD_ACTIVE
+    thread_state[3] = 0;    // DOWN_THREAD_ACTIVE
+    thread_state[4] = 0;    // UP_THREAD_LOCK
+    thread_state[5] = 0;    // DOWN_THREAD_LOCK
+*/
+    up_thread_id = boost::thread::id();
+    boost::thread test_thread(boost::bind(&up_thread_run_ssl_mode_test_class::test_run,&test_obj));
+    sleep(1);
+    boost::thread::id test_id = test_thread.get_id();
+    boost::thread::id proc_id = boost::this_thread::get_id();
+    
+/*
+    BOOST_CHECK(!thread_state.test(0));    // UP_THREAD_ALIVE
+    BOOST_CHECK(!thread_state.test(1)); // DOWN_THREAD_ALIVE
+    BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
+    BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
+    BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
+    BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
+*/
+    BOOST_CHECK(up_thread_id != test_id);
+    test_obj.test_thread_wait.unlock();
+    sleep(1);
+   
+    // unit_test [1] up_thread_run ssl mode test thread id update check
+    std::cout << "[1] up_thread_run ssl mode test thread id update check" << std::endl;
+    BOOST_CHECK(up_thread_id == test_id);
+    
+    // unit_test [2] up_thread_run ssl mode test down thread wait check
+    std::cout << "[2] up_thread_run ssl mode test down thread wait check" << std::endl;
+/*
+    BOOST_CHECK(thread_state.test(0));    // UP_THREAD_ALIVE
+    BOOST_CHECK(!thread_state.test(1)); // DOWN_THREAD_ALIVE
+    BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
+    BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
+    BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
+    BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
+*/
+    
+    proto_test.handle_session_initialize_res_tag = l7vs::protocol_module_base::FINALIZE;
+    proto_test.handle_session_initialize_in_up_thread_id = boost::thread::id();
+    proto_test.handle_session_initialize_in_down_thread_id = boost::thread::id();
+    proto_test.handle_session_initialize_in_client_endpoint_tcp = boost::asio::ip::tcp::endpoint();
+    proto_test.handle_session_initialize_in_client_endpoint_udp.address(boost::asio::ip::address::from_string("255.255.255.255"));
+    proto_test.handle_session_initialize_in_client_endpoint_udp.port(65535);
+    BOOST_CHECK(proto_test.handle_session_initialize_in_up_thread_id != test_id);
+    BOOST_CHECK(proto_test.handle_session_initialize_in_down_thread_id != proc_id);
+    BOOST_CHECK(proto_test.handle_session_initialize_in_client_endpoint_tcp != connect_end);
+    BOOST_CHECK(proto_test.handle_session_initialize_in_client_endpoint_udp != boost::asio::ip::udp::endpoint());
+    down_thread_id = proc_id;
+//    session_pause_flag = true;
+    
+    // DOWN_THREAD_ALIVE
+//    thread_state[1] = 1;
+    sleep(1);
+    
+    // unit_test [3] up_thread_run ssl mode test handle_session_initialize call check
+    std::cout << "[3] up_thread_run ssl mode test handle_session_initialize call check" << std::endl;
+    BOOST_CHECK(proto_test.handle_session_initialize_in_up_thread_id == test_id);
+    BOOST_CHECK(proto_test.handle_session_initialize_in_down_thread_id == proc_id);
+    BOOST_CHECK(proto_test.handle_session_initialize_in_client_endpoint_tcp == connect_end);
+    BOOST_CHECK(proto_test.handle_session_initialize_in_client_endpoint_udp == boost::asio::ip::udp::endpoint());
+    
+    // unit_test [4] up_thread_run ssl mode test state update(UP_THREAD_ACTIVE) check
+    std::cout << "[4] up_thread_run ssl mode test state update(UP_THREAD_ACTIVE) check" << std::endl;
+//    BOOST_CHECK(thread_state.test(2)); // UP_THREAD_ACTIVE
+    
+    // unit_test [5] up_thread_run ssl mode test pause check
+    std::cout << "[5] up_thread_run ssl mode test  pause check" << std::endl;
+//    BOOST_CHECK(thread_state.test(4)); // UP_THREAD_LOCK
+    
+    test_obj.up_thread_exit_process_type = l7vs::tcp_session::MESSAGE_PROC;
+    test_obj.up_thread_exit_call_check = false;
+    test_obj.up_thread_all_socket_close_call_check = false;
+    
+//    session_pause_flag = false;
+    sleep(1);
+    
+    // unit_test [6] up_thread_run ssl mode test restart check
+    std::cout << "[6] up_thread_run ssl mode test  restart check" << std::endl;
+//    BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
+    
+    // unit_test [7] up_thread_run ssl mode test up_thread_next_call_function call (up_thread_exit) check
+    std::cout << "[7] up_thread_run ssl mode test up_thread_next_call_function call (up_thread_exit) check" << std::endl;
+    BOOST_CHECK(test_obj.up_thread_exit_call_check);
+    BOOST_CHECK(test_obj.up_thread_exit_process_type == l7vs::tcp_session::LOCAL_PROC);
+    
+    // unit_test [8] up_thread_run ssl mode test main loop exit check
+    std::cout << "[8] up_thread_run ssl mode test main loop exit check" << std::endl;
+    BOOST_CHECK(exit_flag);
+//    BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
+    
+    
+    // unit_test [9] up_thread_run ssl mode test up_thread_all_socket_close_call_check call check
+    std::cout << "[9] up_thread_run ssl mode test up_thread_all_socket_close_call_check call check" << std::endl;
+    BOOST_CHECK(test_obj.up_thread_all_socket_close_call_check);
+    
+    // unit_test [10] up_thread_run ssl mode test down thread end wait check
+    std::cout << "[10] up_thread_run ssl mode test down thread wait check" << std::endl;
+/*
+    BOOST_CHECK(thread_state.test(0));    // UP_THREAD_ALIVE
+    BOOST_CHECK(thread_state.test(1)); // DOWN_THREAD_ALIVE
+    BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
+    BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
+    BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
+    BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
+*/
+    
+    
+//     proto_test.handle_session_finalize_in_up_thread_id = boost::thread::id();
+//     proto_test.handle_session_finalize_in_down_thread_id = boost::thread::id();
+//     BOOST_CHECK(proto_test.handle_session_finalize_in_up_thread_id != test_id);
+//     BOOST_CHECK(proto_test.handle_session_finalize_in_down_thread_id != proc_id);
+//     vs.release_session_ptr = NULL;
+//     BOOST_CHECK(vs.release_session_ptr != test_id);
+    
+//    thread_state[1] = 0;
+    sleep(1);
+    
+    // unit_test [11] up_thread_run ssl mode test handle_session_finalize call check
+    std::cout << "[11] up_thread_run ssl mode test handle_session_finalize call check" << std::endl;
+    BOOST_CHECK(proto_test.handle_session_finalize_in_up_thread_id == test_id);
+    BOOST_CHECK(proto_test.handle_session_finalize_in_down_thread_id == proc_id);
+    
+    // unit_test [12] up_thread_run ssl mode test release_session_id call check
+    std::cout << "[12] up_thread_run ssl mode test release_session_id call check" << std::endl;
+//     BOOST_CHECK(vs.release_session_id == test_id);
+    
+    // unit_test [13] up_thread_run ssl mode test state update(UP_THREAD_ACTIVE) check
+    std::cout << "[13] up_thread_run state update(UP_THREAD_ACTIVE) check" << std::endl;
+//    BOOST_CHECK(!thread_state.test(0)); // UP_THREAD_ACTIVE
+    
+    // message call test
+    exit_flag = false;
+//    session_pause_flag = false;
+    l7vs::tcp_data& msg_data = test_obj.get_up_thread_message_data();
+    test_obj.test_message_set(connect_end);
+/*
+    thread_state[0] = 0;    // UP_THREAD_ALIVE
+    thread_state[1] = 1;    // DOWN_THREAD_ALIVE
+    thread_state[2] = 0;    // UP_THREAD_ACTIVE
+    thread_state[3] = 0;    // DOWN_THREAD_ACTIVE
+    thread_state[4] = 0;    // UP_THREAD_LOCK
+    thread_state[5] = 0;    // DOWN_THREAD_LOCK
+*/
+    msg_data.set_endpoint(boost::asio::ip::tcp::endpoint());
+    test_obj.up_thread_exit_call_check = false;
+    test_obj.up_thread_exit_process_type = l7vs::tcp_session::LOCAL_PROC;
+    proto_test.handle_session_initialize_res_tag = l7vs::protocol_module_base::CLIENT_DISCONNECT;
+    
+    // test thread start
+    test_obj.test_wait = false;
+    sleep(1);
+/*
+    BOOST_CHECK(thread_state.test(0));    // UP_THREAD_ALIVE
+    BOOST_CHECK(thread_state.test(1)); // DOWN_THREAD_ALIVE
+    BOOST_CHECK(!thread_state.test(2)); // UP_THREAD_ACTIVE
+    BOOST_CHECK(!thread_state.test(3)); // DOWN_THREAD_ACTIVE
+    BOOST_CHECK(!thread_state.test(4)); // UP_THREAD_LOCK
+    BOOST_CHECK(!thread_state.test(5)); // DOWN_THREAD_LOCK
+*/
+    
+    // unit_test [14] up_thread_run ssl mode test message call check
+    std::cout << "[14] up_thread_run ssl mode test message call check" << std::endl;
+    BOOST_CHECK(test_obj.up_thread_exit_call_check);
+    BOOST_CHECK(test_obj.up_thread_exit_process_type == l7vs::tcp_session::MESSAGE_PROC);
+    
+    proto_test.handle_session_initialize_res_tag = l7vs::protocol_module_base::FINALIZE;
+//    thread_state[1] = 0;
+    sleep(1);
+    
+    // error test not find function map 
+    test_obj.clear_function_array();
+    exit_flag = false;
+//    session_pause_flag = false;
+//    thread_state[1] = 1;
+    
+    l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
+    l7vs::Logger::putLogError_id = 0;
+    
+    test_obj.test_wait = false;
+    sleep(1);
+    
+    // unit_test [15] up_thread_run ssl mode test not find function map error test
+    std::cout << "[15] up_thread_run ssl mode test not find function map error test" << std::endl;
+    BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
+    BOOST_CHECK_EQUAL(15,l7vs::Logger::putLogError_id);
+    std::cout << l7vs::Logger::putLogError_message << std::endl;
+
+//    thread_state[1] = 0;
+    sleep(1);
+    
+    //error test protocol_module returnd illegal EVENT_TAG
+    test_obj.clear_event_map();
+    exit_flag = false;
+//    session_pause_flag = false;
+//    thread_state[1] = 1;
+    
+    l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
+    l7vs::Logger::putLogError_id = 0;
+    
+    test_obj.test_wait = false;
+    sleep(1);
+    
+    // unit_test [16] up_thread_run ssl mode test protocol_module returnd illegal EVENT_TAG error test
+    std::cout << "[16] up_thread_run ssl mode test protocol_module returnd illegal EVENT_TAG error test" << std::endl;
+    BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
+    BOOST_CHECK_EQUAL(14,l7vs::Logger::putLogError_id);
+    std::cout << l7vs::Logger::putLogError_message << std::endl;
+    
+//    thread_state[1] = 0;
+    sleep(1);
+    
+    
+    // unit_test [17] up_thread_run ssl mode test set non blocking fail check
+    std::cout << "[17] up_thread_run ssl mode test set non blocking fail check" << std::endl;
+    exit_flag = false;
+//    session_pause_flag = false;
+//    thread_state[1] = 1;
+    
+    l7vs::tcp_socket::set_non_blocking_mode_res = false;
+    l7vs::tcp_socket::set_non_blocking_mode_ec = boost::asio::error::bad_descriptor;
+    l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
+    l7vs::Logger::putLogError_id = 0;
+    
+    test_obj.test_wait = false;
+    sleep(1);
+    
+    BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
+    BOOST_CHECK_EQUAL(11,l7vs::Logger::putLogError_id);
+    std::cout << l7vs::Logger::putLogError_message << std::endl;
+    l7vs::tcp_socket::set_non_blocking_mode_res = true;
+    l7vs::tcp_socket::set_non_blocking_mode_ec.clear();
+
+//    thread_state[1] = 0;
+    sleep(1);
+    
+    //error test client endpoint get error 
+    client_socket.lowest_layer().close(ec);
+    exit_flag = false;
+//    session_pause_flag = false;
+//    thread_state[1] = 1;
+    
+    l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
+    l7vs::Logger::putLogError_id = 0;
+    
+    test_obj.test_wait = false;
+    sleep(1);
+    
+    // unit_test [18] up_thread_run ssl mode test client endpoint get error test
+    std::cout << "[18] up_thread_run ssl mode test client endpoint get error test" << std::endl;
+    BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
+    BOOST_CHECK_EQUAL(9,l7vs::Logger::putLogError_id);
+    std::cout << l7vs::Logger::putLogError_message << std::endl;
+    
+//    thread_state[1] = 0;
+    sleep(1);
+    
+    //error test protocol module null error 
+    test_obj.set_protocol_module(NULL);
+    exit_flag = false;
+//    session_pause_flag = false;
+//    thread_state[1] = 1;
+    
+    l7vs::Logger::putLogError_category = l7vs::LOG_CAT_NONE;
+    l7vs::Logger::putLogError_id = 0;
+    
+    test_obj.test_wait = false;
+    sleep(1);
+    
+    // unit_test [19] up_thread_run ssl mode test protocol module null error test
+    std::cout << "[19] up_thread_run ssl mode test protocol module null error test" << std::endl;
+    BOOST_CHECK_EQUAL(l7vs::LOG_CAT_L7VSD_SESSION,l7vs::Logger::putLogError_category);
+    BOOST_CHECK_EQUAL(8,l7vs::Logger::putLogError_id);
+    std::cout << l7vs::Logger::putLogError_message << std::endl;
+    
+//    thread_state[1] = 0;
+    sleep(1);
+    
+    test_obj.test_end = true;
+    test_obj.test_wait = false;
+    std::cout << "test_thread.join wait" << std::endl;
+    test_thread.join();
+    std::cout << "test_thread.join ok" << std::endl;
+    
+    
+    test_server.breq_close_wait_flag = false;    
+    test_server.bstop_flag = true;
+    std::cout << "server_thread.join wait" << std::endl;
+    server_thread.join();
+    std::cout << "server_thread.join ok" << std::endl;
+    
+  
+    BOOST_MESSAGE( "----- up_thread_run ssl mode test end -----" );
+    
+}
+// endpoint_to_string test
+// endpoint_to_string test class
+class endpoint_to_string_test_class : public l7vs::tcp_session{
+    public:
+       endpoint_to_string_test_class(
+                                l7vs::virtualservice_tcp& vs,
+                                boost::asio::io_service& session_io,
+                                l7vs::tcp_socket_option_info& set_socket_option,
+                                boost::asio::ip::tcp::endpoint listen_endpoint,
+                                bool ssl_mode,
+                                boost::asio::ssl::context& set_ssl_context,
+                                bool set_ssl_cache_flag,
+                                int set_ssl_handshake_time_out,
+                                l7vs::logger_implement_access* set_access_logger) : l7vs::tcp_session(   vs,
+                                                                                                   session_io,
+                                                                                                   set_socket_option,
+                                                                                                   listen_endpoint,
+                                                                                                   ssl_mode,
+                                                                                                   set_ssl_context,
+                                                                                                   set_ssl_cache_flag,
+                                                                                                   set_ssl_handshake_time_out,
+                                                                                                   set_access_logger){};
+        ~endpoint_to_string_test_class(){};
+
+        std::string test_call(boost::asio::ip::tcp::endpoint& test_endpoint){
+            return endpoint_to_string(test_endpoint);
+        };
+
+};
+void endpoint_to_string_test(){
+
+    BOOST_MESSAGE( "----- endpoint_to_string test start -----" );
+
+    boost::asio::io_service io;
+    l7vs::virtualservice_tcp vs;
+    l7vs::tcp_socket_option_info set_option;
+    //! TCP_NODELAY   (false:not set,true:set option)
+    set_option.nodelay_opt = false;
+    //! TCP_NODELAY option value  (false:off,true:on)
+    set_option.nodelay_val = false;
+    //! TCP_CORK      (false:not set,true:set option)
+    set_option.cork_opt = false;
+    //! TCP_CORK option value     (false:off,true:on)
+    set_option.cork_val = false;
+    //! TCP_QUICKACK  (false:not set,true:set option)
+    set_option.quickack_opt = false;
+    //! TCP_QUICKACK option value (false:off,true:on)
+    set_option.quickack_val = false;
+    //
+    boost::asio::ip::tcp::endpoint listen_endpoint(boost::asio::ip::address::from_string(DUMMI_SERVER_IP), DUMMI_SERVER_PORT);
+    bool set_mode(true);
+    boost::asio::ssl::context set_context(io,boost::asio::ssl::context::sslv23);
+    bool set_ssl_cache_flag(false);
+    int set_ssl_handshake_time_out = 0;
+    //std::string access_log_file_name = "test";
+    l7vs::logger_implement_access* plogger = NULL;//new l7vs::logger_implement_access(access_log_file_name);
+
+    boost::system::error_code ec;
+
+    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);
+
+    // unit_test [1] endpoint_to_string test IPv4 Address case 1(192.168.0.1:8080) test
+    std::cout << "[1] endpoint_to_string test IPv4 Address case 1(192.168.0.1:8080) test" << std::endl;
+    {
+        boost::asio::ip::tcp::endpoint test_endpoint(boost::asio::ip::address::from_string("192.168.0.1"), 8080);
+        std::string ref("192.168.0.1:8080");
+        std::string test_string = test_obj.test_call(test_endpoint);
+        BOOST_CHECK_EQUAL(ref,test_string);
+    }
+    // unit_test [2] endpoint_to_string test IPv4 Address case 2(0.0.0.0:0) test
+    std::cout << "[2] endpoint_to_string test IPv4 Address case 2(0.0.0.0:0) test" << std::endl;
+    {
+        boost::asio::ip::tcp::endpoint test_endpoint(boost::asio::ip::address::from_string("0.0.0.0"), 0);
+        std::string ref("0.0.0.0:0");
+        std::string test_string = test_obj.test_call(test_endpoint);
+        BOOST_CHECK_EQUAL(ref,test_string);
+    }
+    // unit_test [3] endpoint_to_string test IPv4 Address case 3(255.255.255.255:65535) test
+    std::cout << "[3] endpoint_to_string test IPv4 Address case 3(255.255.255.255:65535) test" << std::endl;
+    {        boost::asio::ip::tcp::endpoint test_endpoint(boost::asio::ip::address::from_string("255.255.255.255"), 65535);
+        std::string ref("255.255.255.255:65535");
+        std::string test_string = test_obj.test_call(test_endpoint);
+        BOOST_CHECK_EQUAL(ref,test_string);
+    }
+    // unit_test [4] endpoint_to_string test IPv6 Address case 1([2031:130f:876a::156a]:8080) test
+    std::cout << "[4] endpoint_to_string test IPv6 Address case 1([2031:130f:876a::156a]:8080) test" << std::endl;
+    {
+        boost::asio::ip::tcp::endpoint test_endpoint(boost::asio::ip::address::from_string("2031:130f:876a::156a"), 8080);
+        std::string ref("[2031:130f:876a::156a]:8080");
+        std::string test_string = test_obj.test_call(test_endpoint);
+        BOOST_CHECK_EQUAL(ref,test_string);
+    }
+    // unit_test [5] endpoint_to_string test IPv6 Address case 2([::]:0) test
+    std::cout << "[5] endpoint_to_string test IPv6 Address case 2([::]:0) test" << std::endl;
+    {
+        boost::asio::ip::tcp::endpoint test_endpoint(boost::asio::ip::address::from_string("::"), 0);
+        std::string ref("[::]:0");
+        std::string test_string = test_obj.test_call(test_endpoint);
+        BOOST_CHECK_EQUAL(ref,test_string);
+    }
+    // unit_test [6] endpoint_to_string test IPv6 Address case 3([ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535) test
+    std::cout << "[6] endpoint_to_string test IPv6 Address case 3([ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535) test" << std::endl;
+    {
+        boost::asio::ip::tcp::endpoint test_endpoint(boost::asio::ip::address::from_string("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"), 65535);
+        std::string ref("[ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535");
+        std::string test_string = test_obj.test_call(test_endpoint);
+        BOOST_CHECK_EQUAL(ref,test_string);
+    }
+    // unit_test [7] endpoint_to_string test IPv6 Address case 4([fe80::2%<1st ifname>]:8080) test
+    std::cout << "[7] endpoint_to_string test IPv6 Address case 4([fe80::2%<1st ifname>]:8080) test" << std::endl;
+    {
+        boost::asio::ip::address_v6 v6addr(boost::asio::ip::address_v6::from_string("fe80::2"));
+        v6addr.scope_id(1);
+        boost::asio::ip::tcp::endpoint test_endpoint(v6addr, 8080);
+        BOOST_CHECK( test_endpoint.address().to_v6().scope_id() == 1);
+       BOOST_CHECK(test_endpoint.address().to_v6().is_link_local());
+        char if_name[IF_NAMESIZE];
+        memset(if_name,0,IF_NAMESIZE);
+        if_indextoname(1,if_name);
+        std::string set_if_name(if_name);
+        std::string ref = "[fe80::2%" + set_if_name  + "]:8080";
+        std::string test_string = test_obj.test_call(test_endpoint);
+        BOOST_CHECK_EQUAL(ref,test_string);
+    }
+    // unit_test [8] endpoint_to_string test IPv6 Address case 5([::ffff:192.168.0.1]:8080) test
+    std::cout << "[8] endpoint_to_string test IPv6 Address case 5([::ffff:192.168.0.1]:8080) test" << std::endl;
+    {
+        boost::asio::ip::tcp::endpoint test_endpoint(boost::asio::ip::address::from_string("::ffff:192.168.0.1"), 8080);
+        std::string ref("[::ffff:192.168.0.1]:8080");
+        std::string test_string = test_obj.test_call(test_endpoint);
+        BOOST_CHECK_EQUAL(ref,test_string);
+    }
+
+    BOOST_MESSAGE( "----- endpoint_to_string test end -----" );
+}
+
+
+
+
+test_suite*    init_unit_test_suite( int argc, char* argv[] ){
+
+    test_suite* ts = BOOST_TEST_SUITE( "l7vs::tcp_socket class test" );
+
+    ts->add( BOOST_TEST_CASE( &constructer_test ) );
+    ts->add( BOOST_TEST_CASE( &initialize_test ) );
+    ts->add( BOOST_TEST_CASE( &initialize_ssl_mode_test ) );
+    ts->add( BOOST_TEST_CASE( &ssl_clear_keep_cache_test ) );
+    ts->add( BOOST_TEST_CASE( &get_client_socket_test) );
+    ts->add( BOOST_TEST_CASE( &handle_ssl_handshake_timer_test) );
+//    ts->add( BOOST_TEST_CASE( &is_thread_wait_test) );
+    ts->add( BOOST_TEST_CASE( &set_virtual_service_message_test) );
+    ts->add( BOOST_TEST_CASE( &endpoint_to_string_test ));
+
+    ts->add( BOOST_TEST_CASE( &up_thread_run_test) );
+    ts->add( BOOST_TEST_CASE( &up_thread_run_ssl_mode_test ) );
+    ts->add( BOOST_TEST_CASE( &down_thread_run_test) );
+//    ts->add( BOOST_TEST_CASE( &thread_state_update_test) );
+    ts->add( BOOST_TEST_CASE( &up_thread_client_respond_test) );
+    ts->add( BOOST_TEST_CASE( &up_thread_realserver_get_detination_event_test) );
+    ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_get_detination_event_test) );
+
+    ts->add( BOOST_TEST_CASE( &up_thread_all_socket_close_test) );
+    ts->add( BOOST_TEST_CASE( &down_thread_all_socket_close_test) );
+    ts->add( BOOST_TEST_CASE( &up_thread_client_disconnect_test) );
+    ts->add( BOOST_TEST_CASE( &down_thread_client_disconnect_test) );
+    ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_disconnect_test) );
+    ts->add( BOOST_TEST_CASE( &down_thread_sorryserver_disconnect_test) );
+    ts->add( BOOST_TEST_CASE( &up_thread_realserver_connect_event_test) );
+    ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_connect_event_test) );
+    ts->add( BOOST_TEST_CASE( &down_thread_client_connection_chk_event_test) );
+    ts->add( BOOST_TEST_CASE( &up_thread_realserver_connection_fail_event_test) );
+    ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_connection_fail_event_test) );
+
+    ts->add( BOOST_TEST_CASE( &up_thread_client_accept_test ) );
+    ts->add( BOOST_TEST_CASE( &up_thread_client_receive_test) );
+    ts->add( BOOST_TEST_CASE( &down_thread_realserver_receive_test) );
+    ts->add( BOOST_TEST_CASE( &down_thread_sorryserver_receive_test) );
+    ts->add( BOOST_TEST_CASE( &up_thread_realserver_send_test) );
+    ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_send_test) );
+    ts->add( BOOST_TEST_CASE( &down_thread_client_send_test) );
+    ts->add( BOOST_TEST_CASE( &up_thread_realserver_connect_test) );
+    ts->add( BOOST_TEST_CASE( &up_thread_realserver_connect_access_log_test) );
+    ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_connect_test) );
+    ts->add( BOOST_TEST_CASE( &up_thread_realserver_disconnect_test) );
+    ts->add( BOOST_TEST_CASE( &down_thread_realserver_disconnect_test) );
+    ts->add( BOOST_TEST_CASE( &up_thread_all_realserver_disconnect_test) );
+    ts->add( BOOST_TEST_CASE( &down_thread_all_realserver_disconnect_test) );
+
+    ts->add( BOOST_TEST_CASE( &up_thread_exit_test ) );
+    ts->add( BOOST_TEST_CASE( &down_thread_exit_test ) );
+    ts->add( BOOST_TEST_CASE( &up_thread_client_disconnect_event_test ) );
+    ts->add( BOOST_TEST_CASE( &down_thread_client_disconnect_event_test ) );
+    ts->add( BOOST_TEST_CASE( &up_thread_realserver_disconnect_event_test ) );
+    ts->add( BOOST_TEST_CASE( &down_thread_realserver_disconnect_event_test ) );
+    ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_disconnect_event_test ) );
+    ts->add( BOOST_TEST_CASE( &down_thread_sorryserver_disconnect_event_test ) );
+    ts->add( BOOST_TEST_CASE( &up_thread_sorryserver_mod_disconnect_test ) );
+    ts->add( BOOST_TEST_CASE( &down_thread_sorryserver_mod_disconnect_test ) );
+
+    ts->add( BOOST_TEST_CASE( &up_thread_sorry_enable_event_test ) );
+    ts->add( BOOST_TEST_CASE( &up_thread_sorry_disable_event_test ) );
+    ts->add( BOOST_TEST_CASE( &down_thread_sorry_enable_event_test ) );
+    ts->add( BOOST_TEST_CASE( &down_thread_sorry_disable_event_test ) );
+    ts->add( BOOST_TEST_CASE( &up_thread_client_accept_event_test ) );
+    ts->add( BOOST_TEST_CASE( &up_thread_client_respond_event_test ) );
+    ts->add( BOOST_TEST_CASE( &down_thread_client_respond_event_test ) );
 
     framework::master_test_suite().add( ts );