OSDN Git Service

#313
authorokada <okada@1ed66053-1c2d-0410-8867-f7571e6e31d3>
Tue, 24 Feb 2009 11:38:25 +0000 (11:38 +0000)
committerokada <okada@1ed66053-1c2d-0410-8867-f7571e6e31d3>
Tue, 24 Feb 2009 11:38:25 +0000 (11:38 +0000)
UT項目追加

git-svn-id: http://10.144.169.20/repos/um/branches/l7vsd-3.x-shamshel-IT@7238 1ed66053-1c2d-0410-8867-f7571e6e31d3

unit_tests/virtualservice_test/vs_tcp_it_ut.cpp [new file with mode: 0644]

diff --git a/unit_tests/virtualservice_test/vs_tcp_it_ut.cpp b/unit_tests/virtualservice_test/vs_tcp_it_ut.cpp
new file mode 100644 (file)
index 0000000..1169e2e
--- /dev/null
@@ -0,0 +1,318 @@
+
+#include <iostream>
+#include <sstream>
+#include <boost/test/included/unit_test.hpp>
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
+
+#include "stub.h"
+#include "virtualservice.h"
+#include "vs_tcp.h"
+
+#include "protocol_module_test1.h"
+#include "schedule_module_test1.h"
+
+using namespace boost::unit_test;
+
+typedef        boost::asio::ip::tcp::endpoint  tcp_ep_type;
+typedef        boost::asio::ip::udp::endpoint  udp_ep_type;
+
+
+void   virtualservice_tcp_test1(){
+       debugg_flug_struct::getInstance().pmcontrol_err_flag()  = false;
+       debugg_flug_struct::getInstance().smcontrol_err_flag()  = false;
+       debugg_flug_struct::getInstance().param_exist_flag() = false;
+
+       l7vs::l7vsd                                     vsd;
+       boost::asio::io_service         dispatcher;
+       l7vs::replication                       rep;
+       l7vs::virtualservice_element    elem1;
+       //set element value
+       elem1.udpmode                                   = false;
+       elem1.tcp_accept_endpoint               = tcp_ep_type( boost::asio::ip::address_v4::loopback(), (60000) );
+       elem1.udp_recv_endpoint         = udp_ep_type( boost::asio::ip::address::from_string( "10.144.169.20" ), (50000) );
+       elem1.realserver_vector.clear();
+       elem1.protocol_module_name      = "PMtest1";
+       elem1.schedule_module_name      = "SMtest1";
+       elem1.protocol_args.clear();
+       elem1.protocol_args.push_back( "testarg" );
+       elem1.protocol_args.push_back( "testarg2" );
+       elem1.sorry_maxconnection               = LLONG_MAX;
+       elem1.sorry_endpoint                    = tcp_ep_type( boost::asio::ip::address::from_string( "10.144.169.87" ), (8080) );
+       elem1.sorry_flag                                = INT_MAX;
+       elem1.qos_upstream                      = 65535ULL;
+       elem1.qos_downstream                    = 32767ULL;
+
+       l7vs::vs_tcp*   vs = new l7vs::vs_tcp( vsd, rep, elem1 );
+
+       BOOST_CHECK_EQUAL( &vsd, &(vs->get_vsd()) );
+       BOOST_CHECK_EQUAL( &rep, &(vs->get_rep()) );
+       l7vs::error_code        vs_err;
+       BOOST_CHECK( NULL == vs->get_protocol_module() );
+       BOOST_CHECK( NULL == vs->get_schedule_module() );
+
+       // unit_test[1]  sorry_flag = INT_MAXでVSを作成した場合、sorry_flagが0に設定されること
+       // unit_test[2]  sorry_maxconnection = LLONG_MAXでVSを作成した場合、sorry_maxconnectionが0LLに設定されること
+       BOOST_MESSAGE( "-------1" );
+       BOOST_CHECK( vs->get_element().sorry_maxconnection == 0LL );
+       BOOST_MESSAGE( vs->get_element().sorry_maxconnection );
+       BOOST_MESSAGE( "-------2" );
+       BOOST_CHECK( vs->get_element().sorry_flag == 0 );
+       BOOST_MESSAGE( vs->get_element().sorry_flag );
+
+       vs->initialize( vs_err );
+       BOOST_CHECK( vs_err == false );
+       BOOST_MESSAGE( vs_err.get_message() );
+
+       // unit_test[3]  初期化(不正なIPアドレス指定でエラーが返ること)
+       {
+       BOOST_MESSAGE( "-------3" );
+       l7vs::virtualservice_element    elem2;
+       //set element value
+       elem2.udpmode                                   = false;
+       elem2.tcp_accept_endpoint               = tcp_ep_type( boost::asio::ip::address::from_string( "10.144.169.20" ), (60000) );
+       elem2.realserver_vector.clear();
+       elem2.protocol_module_name      = "PMtest1";
+       elem2.schedule_module_name      = "SMtest1";
+       elem2.protocol_args.clear();
+       l7vs::vs_tcp*   vs2 = new l7vs::vs_tcp( vsd, rep, elem2 );
+       vs2->initialize( vs_err );
+       BOOST_CHECK( vs_err == true );
+       BOOST_MESSAGE( vs_err.get_message() );
+
+       vs2->finalize( vs_err );
+       delete vs2;
+       }
+       BOOST_MESSAGE( "-------" );
+
+       // unit_test[4]  初期化(重複IPアドレス指定でエラーが返ること)
+       {
+       BOOST_MESSAGE( "-------4" );
+       l7vs::virtualservice_element    elem2;
+       //set element value
+       elem2.udpmode                                   = false;
+       elem1.tcp_accept_endpoint               = tcp_ep_type( boost::asio::ip::address_v4::loopback(), (60000) );
+       elem2.realserver_vector.clear();
+       elem2.protocol_module_name      = "PMtest1";
+       elem2.schedule_module_name      = "SMtest1";
+       elem2.protocol_args.clear();
+       l7vs::vs_tcp*   vs2 = new l7vs::vs_tcp( vsd, rep, elem2 );
+       vs->initialize( vs_err );
+       BOOST_CHECK( vs_err == true );
+       BOOST_MESSAGE( vs_err.get_message() );
+
+       vs2->finalize( vs_err );
+       delete vs2;
+       }
+
+       vs->finalize( vs_err );
+
+       delete vs;
+       BOOST_MESSAGE( "-------" );
+
+}
+
+void   virtualservice_tcp_test2(){
+       l7vs::error_code        vs_err;
+       boost::system::error_code       test_err;
+
+       debugg_flug_struct::getInstance().pmcontrol_err_flag()  = false;
+       debugg_flug_struct::getInstance().smcontrol_err_flag()  = false;
+       debugg_flug_struct::getInstance().param_exist_flag() = false;
+       //まず、stubのレプリケーションエリア作成をする
+       debugg_flug_struct::getInstance().create_rep_area();
+
+       std::stringstream       tmp_tcp_ep;
+       std::stringstream       tmp_udp_ep;
+       std::stringstream       tmp_sorry_ep;
+
+       l7vs::l7vsd                                     vsd;
+       boost::asio::io_service         dispatcher;
+       l7vs::replication                       rep;
+       l7vs::virtualservice_element    elem1;
+       //set element value
+       elem1.udpmode                                   = false;
+       elem1.tcp_accept_endpoint               = tcp_ep_type( boost::asio::ip::address_v4::loopback(), (60000) );
+       elem1.udp_recv_endpoint                 = udp_ep_type( boost::asio::ip::address::from_string( "10.144.169.20" ), (50000) );
+       elem1.realserver_vector.clear();
+       elem1.protocol_module_name              = "PMtest1";
+       elem1.schedule_module_name              = "SMtest1";
+       elem1.protocol_args.clear();
+       elem1.protocol_args.push_back( "testarg" );
+       elem1.protocol_args.push_back( "testarg2" );
+       elem1.sorry_maxconnection               = 1234LL;
+       elem1.sorry_endpoint                    = tcp_ep_type( boost::asio::ip::address::from_string( "10.144.169.87" ), (8080) );
+       elem1.sorry_flag                                = true;
+       elem1.qos_upstream                              = 65535ULL;
+       elem1.qos_downstream                    = 32767ULL;
+
+       l7vs::vs_tcp*   vs = new l7vs::vs_tcp( vsd, rep, elem1 );
+
+       vs->initialize( vs_err );
+       usleep( 1000 );
+
+       boost::thread   vs_main( &l7vs::vs_tcp::run, vs );
+       usleep( 1000 );
+
+       boost::system::error_code       b_err;
+
+       // unit_test[5]  sorry_flagがINT_MAXの場合、接続時にsorry通知を行わないことを確認する
+       BOOST_MESSAGE( "-------5" );
+       vs->get_element().sorry_flag = INT_MAX;
+
+       boost::asio::io_service client_dispatcher;
+       boost::asio::ip::tcp::socket    sock( client_dispatcher );
+       std::cout << "connect" << std::endl;
+       sock.connect( tcp_ep_type( boost::asio::ip::address_v4::loopback(), (60000) ) );
+       usleep( 1000 );
+       BOOST_CHECK( vs->get_element().sorry_flag == INT_MAX );
+
+
+       // unit_test[6]  replicationデータ作成のテスト
+       BOOST_MESSAGE( "-------6" );
+       vs->get_element().sorry_flag = true;
+       vs->call_handle_replication_interrupt( test_err );
+       l7vs::virtualservice_base::replication_header*  rep_head =
+               reinterpret_cast<l7vs::virtualservice_base::replication_header*>( debugg_flug_struct::getInstance().get_rep_area() );
+       //data_numが0になってることを確認
+       BOOST_CHECK( rep_head->data_num == 1 );
+       l7vs::virtualservice_base::replication_data*    rep_data =
+               reinterpret_cast<l7vs::virtualservice_base::replication_data*>( ++rep_head );
+       //udpmode
+       BOOST_CHECK( rep_data->udpmode == false );
+       //tcp_endpoint
+       tmp_tcp_ep << elem1.tcp_accept_endpoint;
+       BOOST_CHECK( 0 == strncmp( rep_data->tcp_endpoint, tmp_tcp_ep.str().c_str(), 47 ) );
+       //udp_endpoint
+       tmp_udp_ep << elem1.udp_recv_endpoint;
+       BOOST_CHECK( 0 == strncmp( rep_data->udp_endpoint, tmp_udp_ep.str().c_str(), 47 ) );
+       //sorry_maxconnection
+       BOOST_CHECK( rep_data->sorry_maxconnection == 1234LL );
+       //sorry_endpoint
+       tmp_sorry_ep << elem1.sorry_endpoint;
+       BOOST_CHECK( 0 == strncmp( rep_data->sorry_endpoint, tmp_sorry_ep.str().c_str(), 47 ) );
+       //sorry_flag
+       BOOST_CHECK( rep_data->sorry_flag == true );
+       //qos_up
+       BOOST_CHECK( rep_data->qos_up == elem1.qos_upstream );
+       //qos_down
+       BOOST_CHECK( rep_data->qos_down == elem1.qos_downstream );
+       BOOST_MESSAGE( "-------" );
+
+       // unit_test[7]  sorry_flagのクリア
+       // unit_test[8]  sorry_maxconnectionのクリア
+       l7vs::virtualservice_element    elem2;
+       //set element value
+       elem2.udpmode                                   = false;
+       elem2.tcp_accept_endpoint               = tcp_ep_type( boost::asio::ip::address_v4::loopback(), (60000) );
+       elem2.udp_recv_endpoint                 = udp_ep_type( boost::asio::ip::address::from_string( "10.144.169.20" ), (50000) );
+       elem2.realserver_vector.clear();
+       elem2.protocol_module_name              = "PMtest1";
+       elem2.schedule_module_name              = "SMtest1";
+       elem2.protocol_args.clear();
+       elem2.protocol_args.push_back( "testarg" );
+       elem2.protocol_args.push_back( "testarg2" );
+       elem2.sorry_maxconnection               = LLONG_MAX;
+       elem2.sorry_endpoint                    = tcp_ep_type();
+       elem2.sorry_flag                                = INT_MAX;
+       elem2.qos_upstream                              = 0ULL;
+       elem2.qos_downstream                    = 0ULL;
+
+       BOOST_MESSAGE( "-------7" );
+       vs->edit_virtualservice( elem2, vs_err );
+       BOOST_CHECK( vs_err == false );
+       BOOST_MESSAGE( vs_err.get_message() );
+
+       BOOST_CHECK( vs->get_element().sorry_maxconnection == 0LL );
+       BOOST_MESSAGE( vs->get_element().sorry_maxconnection );
+       BOOST_MESSAGE( "-------8" );
+       BOOST_CHECK( vs->get_element().sorry_flag == 0 );
+       BOOST_MESSAGE( vs->get_element().sorry_flag );
+       BOOST_MESSAGE( "-------" );
+
+       //設定をもとにもどす
+       vs->edit_virtualservice( elem1, vs_err );
+
+       // unit_test[9]  sorry_serverのクリア
+       elem2.sorry_maxconnection               = 1234LL;
+       elem2.sorry_endpoint                    = tcp_ep_type( boost::asio::ip::address::from_string( "255.255.255.255" ), (0) );
+       elem2.sorry_flag                                = true;
+       BOOST_MESSAGE( "-------9" );
+       vs->edit_virtualservice( elem2, vs_err );
+       BOOST_CHECK( vs->get_element().sorry_endpoint == tcp_ep_type( boost::asio::ip::address::from_string( "0.0.0.0" ), (0) ) );
+       BOOST_MESSAGE( vs->get_element().sorry_endpoint );
+       BOOST_CHECK( vs->get_element().sorry_maxconnection == 0LL );
+       BOOST_MESSAGE( vs->get_element().sorry_maxconnection );
+       BOOST_CHECK( vs->get_element().sorry_flag == 0 );
+       BOOST_MESSAGE( vs->get_element().sorry_flag );
+       BOOST_MESSAGE( "-------" );
+
+       //設定をもとにもどす
+       vs->edit_virtualservice( elem1, vs_err );
+
+       // unit_test[10]  sorry_endpointを変更しない
+       // unit_test[11]  sorry_flagを変更しない
+       // unit_test[12]  sorry_maxconnectionを変更しない
+       elem2.sorry_maxconnection               = 0LL;
+       elem2.sorry_endpoint                    = tcp_ep_type();
+       elem2.sorry_flag                                = 0;
+       BOOST_MESSAGE( "-------10" );
+       vs->edit_virtualservice( elem2, vs_err );
+       BOOST_CHECK( vs->get_element().sorry_endpoint == elem1.sorry_endpoint );
+       BOOST_MESSAGE( vs->get_element().sorry_endpoint );
+       BOOST_MESSAGE( "-------11" );
+       BOOST_CHECK( vs->get_element().sorry_maxconnection == elem1.sorry_maxconnection );
+       BOOST_MESSAGE( vs->get_element().sorry_maxconnection );
+       BOOST_MESSAGE( "-------12" );
+       BOOST_CHECK( vs->get_element().sorry_flag == elem1.sorry_flag );
+       BOOST_MESSAGE( vs->get_element().sorry_flag );
+       BOOST_MESSAGE( "-------" );
+
+       //設定をもとにもどす
+       vs->edit_virtualservice( elem1, vs_err );
+
+       // unit_test[13]  普通に値が変わるか
+       elem2.sorry_maxconnection               = 2468LL;
+       elem2.sorry_endpoint                    = tcp_ep_type( boost::asio::ip::address::from_string( "192.168.0.101" ), (43210) );
+       elem2.qos_upstream                              = 32767ULL;
+       elem2.qos_downstream                    = 65535ULL;
+       BOOST_MESSAGE( "-------13" );
+       vs->edit_virtualservice( elem2, vs_err );
+       BOOST_CHECK( vs->get_element().sorry_endpoint == elem2.sorry_endpoint );
+       BOOST_MESSAGE( vs->get_element().sorry_endpoint );
+       BOOST_CHECK( vs->get_element().sorry_maxconnection == elem2.sorry_maxconnection );
+       BOOST_MESSAGE( vs->get_element().sorry_maxconnection );
+       BOOST_CHECK( vs->get_element().qos_upstream == elem2.qos_upstream );
+       BOOST_MESSAGE( vs->get_element().qos_upstream );
+       BOOST_CHECK( vs->get_element().qos_downstream == elem2.qos_downstream );
+       BOOST_MESSAGE( vs->get_element().qos_downstream );
+       BOOST_MESSAGE( "-------" );
+
+
+//     BOOST_MESSAGE( "-------14" );
+       sock.close();
+
+       vs->stop();
+       usleep( 1000 );
+
+       vs->finalize( vs_err );
+
+       delete vs;
+
+       //テストが終わったらStubのレプリケーションエリアを削除
+       debugg_flug_struct::getInstance().create_rep_area();
+}
+
+test_suite*    init_unit_test_suite( int argc, char* argv[] ){
+
+       // create unit test suite
+       test_suite* ts = BOOST_TEST_SUITE( "virtualservice_tcp_test(UT for IT-bug)" );
+
+       // add test case to test suite
+       ts->add( BOOST_TEST_CASE( &virtualservice_tcp_test1 ) );
+       ts->add( BOOST_TEST_CASE( &virtualservice_tcp_test2 ) );
+
+       framework::master_test_suite().add( ts );
+
+       return 0;
+}