diff --git a/infra/plugin_manager/plugin_manager.c b/infra/plugin_manager/plugin_manager.c index 05e72f1..4fd9318 100644 --- a/infra/plugin_manager/plugin_manager.c +++ b/infra/plugin_manager/plugin_manager.c @@ -149,14 +149,14 @@ void plugin_manager_exit(struct plugin_manager_schema *plug_mgr) } if(plug_mgr->stellar_exdata_schema_array)utarray_free(plug_mgr->stellar_exdata_schema_array); if(plug_mgr->registered_polling_plugin_array)utarray_free(plug_mgr->registered_polling_plugin_array); - if(plug_mgr->registered_plugin_array) + if(plug_mgr->registered_packet_plugin_array) { struct registered_plugin_schema *s = NULL; - while ((s = (struct registered_plugin_schema *)utarray_next(plug_mgr->registered_plugin_array, s))) + while ((s = (struct registered_plugin_schema *)utarray_next(plug_mgr->registered_packet_plugin_array, s))) { if(s->registed_mq_subscriber_info)utarray_free(s->registed_mq_subscriber_info); } - utarray_free(plug_mgr->registered_plugin_array); + utarray_free(plug_mgr->registered_packet_plugin_array); } plugin_manager_per_thread_data_free(plug_mgr->per_thread_data, plug_mgr->st); FREE(plug_mgr); @@ -428,7 +428,7 @@ static void stellar_mq_dispatch_one_message(struct stellar_message *mq_elt) if (sub_elt->plugin_msg_cb) { plugin_schema = (struct registered_plugin_schema *)utarray_eltptr( - plug_mgr->registered_plugin_array, (unsigned int)sub_elt->plugin_idx); + plug_mgr->registered_packet_plugin_array, (unsigned int)sub_elt->plugin_idx); if (plugin_schema) { //TODO: maybe need pub_plugin_env as dispatch_cb parameter @@ -489,9 +489,9 @@ int stellar_mq_subscribe(struct stellar *st, int topic_id, on_msg_cb_func *plugi int plugin_idx=plugin_id; struct plugin_manager_schema *plug_mgr = stellar_get_plugin_manager(st); - if(plug_mgr == NULL || plug_mgr->registered_plugin_array == NULL)return -1; + if(plug_mgr == NULL || plug_mgr->registered_packet_plugin_array == NULL)return -1; - struct registered_plugin_schema *plugin_schema = (struct registered_plugin_schema *)utarray_eltptr(plug_mgr->registered_plugin_array, (unsigned)plugin_idx); + struct registered_plugin_schema *plugin_schema = (struct registered_plugin_schema *)utarray_eltptr(plug_mgr->registered_packet_plugin_array, (unsigned)plugin_idx); if(plugin_schema==NULL)return -1; unsigned int len = utarray_len(plug_mgr->stellar_mq_schema_array); @@ -572,9 +572,10 @@ int stellar_mq_publish_message(struct stellar *st, int topic_id, void *data) /******************************* * PLUGIN MANAGER SESSION RUNTIME * *******************************/ -struct stellar_exdata *session_exdata_runtime_new(struct plugin_manager_schema *plug_mgr) +struct stellar_exdata *session_exdata_runtime_new(struct stellar *st) { struct stellar_exdata *exdata_rt = NULL; + struct plugin_manager_schema *plug_mgr=stellar_get_plugin_manager(st); if(plug_mgr->stellar_exdata_schema_array==NULL)return NULL; unsigned int len = utarray_len(plug_mgr->stellar_exdata_schema_array); if(len > 0) @@ -615,9 +616,9 @@ UT_icd registered_plugin_array_icd = {sizeof(struct registered_plugin_schema), N int stellar_plugin_register(struct stellar *st, unsigned char ip_proto, plugin_on_packet_func on_packet_input, plugin_on_packet_func on_packet_output, void *plugin_env) { struct plugin_manager_schema *plug_mgr = stellar_get_plugin_manager(st); - if(plug_mgr->registered_plugin_array == NULL) + if(plug_mgr->registered_packet_plugin_array == NULL) { - utarray_new(plug_mgr->registered_plugin_array, ®istered_plugin_array_icd); + utarray_new(plug_mgr->registered_packet_plugin_array, ®istered_plugin_array_icd); } struct registered_plugin_schema packet_plugin_schema; memset(&packet_plugin_schema, 0, sizeof(packet_plugin_schema)); @@ -625,13 +626,13 @@ int stellar_plugin_register(struct stellar *st, unsigned char ip_proto, plugin_o packet_plugin_schema.on_packet[PACKET_STAGE_INPUT] = on_packet_input; packet_plugin_schema.on_packet[PACKET_STAGE_OUTPUT] = on_packet_output; packet_plugin_schema.plugin_env = plugin_env; - utarray_push_back(plug_mgr->registered_plugin_array, &packet_plugin_schema); - return (utarray_len(plug_mgr->registered_plugin_array)-1);// return packet plugin_id, equals to packet plugin arrary index + utarray_push_back(plug_mgr->registered_packet_plugin_array, &packet_plugin_schema); + return (utarray_len(plug_mgr->registered_packet_plugin_array)-1);// return packet plugin_id, equals to packet plugin arrary index } static void plugin_manager_on_packet(struct plugin_manager_schema *plug_mgr, struct packet *pkt, enum packet_stage in_out) { - if(plug_mgr==NULL || plug_mgr->registered_plugin_array == NULL || pkt == NULL)return; + if(plug_mgr==NULL || plug_mgr->registered_packet_plugin_array == NULL || pkt == NULL)return; struct registered_plugin_schema *p=NULL; //TODO: get innermost layer ip protocol by packet api @@ -642,7 +643,7 @@ static void plugin_manager_on_packet(struct plugin_manager_schema *plug_mgr, str int tid=stellar_get_current_thread_index(); //TODO : provide public api to reset pub_msg_cnt plug_mgr->per_thread_data[tid].pub_packet_msg_cnt=0;//reset pub_msg_cnt - while ((p = (struct registered_plugin_schema *)utarray_next(plug_mgr->registered_plugin_array, p))) + while ((p = (struct registered_plugin_schema *)utarray_next(plug_mgr->registered_packet_plugin_array, p))) { if(p->ip_protocol == ip_proto && p->on_packet[in_out]) { @@ -660,7 +661,7 @@ void plugin_manager_on_packet_input(struct plugin_manager_schema *plug_mgr, stru void plugin_manager_on_packet_output(struct plugin_manager_schema *plug_mgr, struct packet *pkt) { - if(plug_mgr == NULL || plug_mgr->registered_plugin_array == NULL || pkt == NULL)return; + if(plug_mgr == NULL || plug_mgr->registered_packet_plugin_array == NULL || pkt == NULL)return; plugin_manager_on_packet(plug_mgr, pkt, PACKET_STAGE_OUTPUT); int tid=stellar_get_current_thread_index(); plug_mgr->per_thread_data[tid].pub_packet_msg_cnt=-1;//disable packet message publish diff --git a/infra/plugin_manager/plugin_manager.h b/infra/plugin_manager/plugin_manager.h index 5730b1b..7b66e05 100644 --- a/infra/plugin_manager/plugin_manager.h +++ b/infra/plugin_manager/plugin_manager.h @@ -19,7 +19,7 @@ void plugin_manager_on_packet_output(struct plugin_manager_schema *plug_mgr, str int plugin_manager_on_polling(struct plugin_manager_schema *plug_mgr); struct stellar_exdata; -struct stellar_exdata *session_exdata_runtime_new(struct plugin_manager_schema *plug_mgr); +struct stellar_exdata *session_exdata_runtime_new(struct stellar *st); void session_exdata_runtime_free(struct stellar_exdata *exdata_rt); #ifdef __cplusplus diff --git a/infra/plugin_manager/plugin_manager_interna.h b/infra/plugin_manager/plugin_manager_interna.h index 7dc224e..7085936 100644 --- a/infra/plugin_manager/plugin_manager_interna.h +++ b/infra/plugin_manager/plugin_manager_interna.h @@ -27,7 +27,7 @@ struct plugin_manager_per_thread_data struct stellar_message *priority_mq[STELLAR_MQ_PRIORITY_MAX];// message list struct stellar_message *dealth_letter_queue;// dlq list long long pub_packet_msg_cnt; - struct session *thread_scratch_session; + long long pub_polling_msg_cnt;//TODO }; @@ -37,7 +37,7 @@ struct plugin_manager_schema UT_array *plugin_load_specs_array; UT_array *stellar_exdata_schema_array; UT_array *stellar_mq_schema_array; - UT_array *registered_plugin_array; + UT_array *registered_packet_plugin_array; UT_array *registered_polling_plugin_array; int stellar_mq_topic_num; int mq_topic_subscriber_num; diff --git a/infra/plugin_manager/test/plugin_manager_gtest_main.cpp b/infra/plugin_manager/test/plugin_manager_gtest_main.cpp index 2b8436c..fc8554f 100644 --- a/infra/plugin_manager/test/plugin_manager_gtest_main.cpp +++ b/infra/plugin_manager/test/plugin_manager_gtest_main.cpp @@ -27,7 +27,7 @@ void whitebox_test_plugin_manager_intrisic_metadata(struct stellar *st, struct p //registered plugin array null EXPECT_TRUE(plug_mgr->registered_polling_plugin_array==NULL); - EXPECT_TRUE(plug_mgr->registered_plugin_array==NULL); + EXPECT_TRUE(plug_mgr->registered_packet_plugin_array==NULL); EXPECT_TRUE(plug_mgr->per_thread_data!=NULL); int thread_num=stellar_get_worker_thread_num(st); @@ -93,7 +93,7 @@ TEST(plugin_manager_init, packet_exdata_new_index_overwrite) { void test_mock_packet_msg_free(void *msg, void *msg_free_arg){} void test_mock_overwrite_packet_msg_free(void *msg, void *msg_free_arg){} -TEST(plugin_manager_init, packet_mq_topic_create_and_update) { +TEST(plugin_manager_init, stellar_mq_topic_create_and_update) { struct stellar st={0}; struct plugin_manager_schema *plug_mgr = plugin_manager_init(&st, NULL); whitebox_test_plugin_manager_intrisic_metadata(&st, plug_mgr); @@ -154,10 +154,9 @@ TEST(plugin_manager_init, packet_mq_topic_create_and_update) { } void test_mock_on_packet_msg(int topic_id, const void *msg, void *plugin_env){} - void test_mock_overwrite_on_packet_msg(int topic_id, const void *msg, void *plugin_env){} -TEST(plugin_manager_init, packet_mq_subscribe) { +TEST(plugin_manager_init, stellar_mq_subscribe) { struct stellar st={0}; struct plugin_manager_schema *plug_mgr = plugin_manager_init(&st, NULL); @@ -194,6 +193,107 @@ TEST(plugin_manager_init, packet_mq_subscribe) { } +static void test_mock_session_exdata_free(int idx, void *ex_ptr, void *arg){} +static void test_mock_overwrite_session_exdata_free(int idx, void *ex_ptr, void *arg){} + +TEST(plugin_manager_init, session_exdata_new_index_overwrite) { + struct stellar st={0}; + struct plugin_manager_schema *plug_mgr = plugin_manager_init(&st, NULL); + whitebox_test_plugin_manager_intrisic_metadata(&st, plug_mgr); + + const char *exdata_name="SESSION_EXDATA"; + int exdata_idx=stellar_exdata_new_index(&st,exdata_name, test_mock_session_exdata_free, &st); + EXPECT_GE(exdata_idx, 0); + int overwrite_idx=stellar_exdata_new_index(&st,exdata_name, test_mock_overwrite_session_exdata_free, plug_mgr); + EXPECT_GE(overwrite_idx, 0); + EXPECT_EQ(overwrite_idx, exdata_idx); + + { + SCOPED_TRACE("White-box test, check stellar internal schema"); + struct stellar_exdata_schema *exdata_schema = (struct stellar_exdata_schema *)utarray_eltptr( + plug_mgr->stellar_exdata_schema_array, (unsigned int)exdata_idx); + EXPECT_EQ(exdata_schema->free_func, (void *)test_mock_overwrite_session_exdata_free); + EXPECT_EQ(exdata_schema->free_arg, plug_mgr); + EXPECT_EQ(exdata_schema->idx, exdata_idx); + EXPECT_STREQ(exdata_schema->name, exdata_name); + + int exdata_num = utarray_len(plug_mgr->stellar_exdata_schema_array); + EXPECT_EQ(exdata_num, 1); + } + plugin_manager_exit(plug_mgr); +} + +void test_mock_session_msg_free(void *msg, void *msg_free_arg){} + +void test_mock_on_session_msg(int topic_id, const void *msg,void *plugin_env){} +void test_mock_overwrite_on_session_msg(int topic_id, const void *msg, void *plugin_env){} + + +TEST(plugin_manager_init, stellar_mq_subscribe_overwrite) { + + struct stellar st={0}; + struct plugin_manager_schema *plug_mgr = plugin_manager_init(&st, NULL); + whitebox_test_plugin_manager_intrisic_metadata(&st, plug_mgr); + + const char *topic_name="SESSION_TOPIC"; + + int topic_id=stellar_mq_create_topic(&st, topic_name, NULL, test_mock_session_msg_free, &st); + EXPECT_GE(topic_id, 0); + + EXPECT_EQ(stellar_mq_subscribe(&st, topic_id, test_mock_on_session_msg, 10),-1);//illgeal plugin_id + EXPECT_EQ(stellar_mq_subscribe(&st, 10, test_mock_on_session_msg, 10),-1);//illgeal topic_id & plugin_id + + int plugin_id=stellar_plugin_register(&st, 0, NULL, NULL, NULL); + EXPECT_GE(plugin_id, 0); + + EXPECT_EQ(stellar_mq_subscribe(&st, topic_id, test_mock_on_session_msg, plugin_id),0); + EXPECT_EQ(stellar_mq_subscribe(&st, topic_id, test_mock_overwrite_on_session_msg, plugin_id),0);//duplicate subscribe, return 0, won't overwrite + + struct stellar_mq_topic_schema *topic_schema; + { + SCOPED_TRACE("White-box test, check stellar internal schema"); + topic_schema = (struct stellar_mq_topic_schema *)utarray_eltptr(plug_mgr->stellar_mq_schema_array,(unsigned int)topic_id); + EXPECT_EQ(topic_schema->free_cb, (void *)test_mock_session_msg_free); + EXPECT_EQ(topic_schema->free_cb_arg, &st); + EXPECT_EQ(topic_schema->topic_id, topic_id); + EXPECT_STREQ(topic_schema->topic_name, topic_name); + } + + EXPECT_EQ(topic_schema->subscriber_cnt, 1); + EXPECT_EQ(topic_schema->subscribers->plugin_msg_cb, (void *)test_mock_overwrite_on_session_msg); + + plugin_manager_exit(plug_mgr); +} + +/********************************************** + * TEST PLUGIN MANAGER ON POLLING PLUGIN INIT * + **********************************************/ + +int test_plugin_on_polling_func(void *plugin_env) +{ + return 1; +} + +TEST(plugin_manager_init, polling_plugin_register) { + struct stellar st={0}; + struct plugin_manager_schema *plug_mgr = plugin_manager_init(&st, NULL); + st.plug_mgr=plug_mgr; + whitebox_test_plugin_manager_intrisic_metadata(&st, plug_mgr); + + int plugin_id = stellar_polling_plugin_register(&st, test_plugin_on_polling_func, &st); + { + SCOPED_TRACE("White-box test, check stellar internal schema"); + EXPECT_TRUE(plugin_id>=0); + struct registered_polling_plugin_schema *schema = (struct registered_polling_plugin_schema *)utarray_eltptr( + plug_mgr->registered_polling_plugin_array, (unsigned int)(plugin_id)); + EXPECT_EQ(schema->on_polling, (void *)test_plugin_on_polling_func); + EXPECT_EQ(schema->plugin_env, &st); + EXPECT_EQ(utarray_len(plug_mgr->registered_polling_plugin_array), 1); + } + + plugin_manager_exit(plug_mgr); +} + /******************************************* * TEST PLUGIN MANAGER PACKET PLUGIN RUNTIME* *******************************************/ @@ -246,7 +346,7 @@ TEST(plugin_manager, packet_plugin_illegal_exdata) { { SCOPED_TRACE("White-box test, check stellar internal schema"); - int packet_plugin_num = utarray_len(plug_mgr->registered_plugin_array); + int packet_plugin_num = utarray_len(plug_mgr->registered_packet_plugin_array); EXPECT_EQ(packet_plugin_num, 1); } @@ -292,7 +392,7 @@ TEST(plugin_manager, packet_plugins_with_proto_filter) { { SCOPED_TRACE("White-box test, check stellar internal schema"); - EXPECT_EQ(utarray_len(plug_mgr->registered_plugin_array), proto_filter_plugin_num); + EXPECT_EQ(utarray_len(plug_mgr->registered_packet_plugin_array), proto_filter_plugin_num); } struct packet pkt={&st, IPv4, 0}; @@ -420,7 +520,7 @@ TEST(plugin_manager, packet_plugins_share_exdata) { { SCOPED_TRACE("White-box test, check stellar internal schema"); - EXPECT_EQ(utarray_len(plug_mgr->registered_plugin_array), 2); // Fix plugin number + EXPECT_EQ(utarray_len(plug_mgr->registered_packet_plugin_array), 2); // Fix plugin number } struct packet pkt={&st, IPv4, ip_proto}; @@ -525,7 +625,7 @@ TEST(plugin_manager, packet_plugins_mq_pub_sub) { { SCOPED_TRACE("White-box test, check stellar internal schema"); - EXPECT_EQ(utarray_len(plug_mgr->registered_plugin_array), topic_sub_num+1); + EXPECT_EQ(utarray_len(plug_mgr->registered_packet_plugin_array), topic_sub_num+1); } struct packet pkt={&st, IPv4, ip_proto}; @@ -642,7 +742,7 @@ TEST(plugin_manager, packet_plugins_pub_overlimit) { { SCOPED_TRACE("White-box test, check stellar internal schema"); - EXPECT_EQ(utarray_len(plug_mgr->registered_plugin_array), topic_sub_num+1); + EXPECT_EQ(utarray_len(plug_mgr->registered_packet_plugin_array), topic_sub_num+1); } struct packet pkt={&st, IPv4, ip_proto}; @@ -730,166 +830,30 @@ TEST(plugin_manager, packet_plugin_exdata_free_pub_msg) { EXPECT_EQ(env.exdata_free_called[0], 1); } + /********************************************** - * TEST PLUGIN MANAGER ON SESSION PLUGIN INIT * + * PESUDO SESSION MANAGER PLUGIN API * **********************************************/ -static void test_mock_session_exdata_free(int idx, void *ex_ptr, void *arg){} -static void test_mock_overwrite_session_exdata_free(int idx, void *ex_ptr, void *arg){} - -TEST(plugin_manager_init, session_exdata_new_index_overwrite) { - struct stellar st={0}; - struct plugin_manager_schema *plug_mgr = plugin_manager_init(&st, NULL); - whitebox_test_plugin_manager_intrisic_metadata(&st, plug_mgr); - - const char *exdata_name="SESSION_EXDATA"; - int exdata_idx=stellar_exdata_new_index(&st,exdata_name, test_mock_session_exdata_free, &st); - EXPECT_GE(exdata_idx, 0); - int overwrite_idx=stellar_exdata_new_index(&st,exdata_name, test_mock_overwrite_session_exdata_free, plug_mgr); - EXPECT_GE(overwrite_idx, 0); - EXPECT_EQ(overwrite_idx, exdata_idx); - - { - SCOPED_TRACE("White-box test, check stellar internal schema"); - struct stellar_exdata_schema *exdata_schema = (struct stellar_exdata_schema *)utarray_eltptr( - plug_mgr->stellar_exdata_schema_array, (unsigned int)exdata_idx); - EXPECT_EQ(exdata_schema->free_func, (void *)test_mock_overwrite_session_exdata_free); - EXPECT_EQ(exdata_schema->free_arg, plug_mgr); - EXPECT_EQ(exdata_schema->idx, exdata_idx); - EXPECT_STREQ(exdata_schema->name, exdata_name); - - int exdata_num = utarray_len(plug_mgr->stellar_exdata_schema_array); - EXPECT_EQ(exdata_num, 1); - } - plugin_manager_exit(plug_mgr); -} - -void test_mock_session_msg_free(void *msg, void *msg_free_arg){} -void test_mock_overwrite_session_msg_free(void *msg, void *msg_free_arg){} - -TEST(plugin_manager_init, session_mq_topic_create_and_update) { - struct stellar st={0}; - struct plugin_manager_schema *plug_mgr = plugin_manager_init(&st, NULL); - whitebox_test_plugin_manager_intrisic_metadata(&st, plug_mgr); - - const char *topic_name="SESSION_TOPIC"; - - EXPECT_EQ(stellar_mq_get_topic_id(&st, topic_name), -1);// illegal topic_name - - int topic_id=stellar_mq_create_topic(&st, topic_name, NULL, test_mock_session_msg_free, &st); - EXPECT_GE(topic_id, 0); - struct stellar_mq_topic_schema *topic_schema; - { - SCOPED_TRACE("White-box test, check stellar internal schema"); - topic_schema = - (struct stellar_mq_topic_schema *)utarray_eltptr(plug_mgr->stellar_mq_schema_array, (unsigned int)topic_id); - EXPECT_EQ(topic_schema->free_cb, (void *)test_mock_session_msg_free); - EXPECT_EQ(topic_schema->free_cb_arg, &st); - EXPECT_EQ(topic_schema->topic_id, topic_id); - EXPECT_STREQ(topic_schema->topic_name, topic_name); - } - - EXPECT_EQ(stellar_mq_get_topic_id(&st, topic_name), topic_id); - EXPECT_EQ(stellar_mq_create_topic(&st, topic_name, NULL, test_mock_overwrite_session_msg_free, plug_mgr), -1); // duplicate create, return error - - { - SCOPED_TRACE("White-box test, check stellar internal schema"); - topic_schema = - (struct stellar_mq_topic_schema *)utarray_eltptr(plug_mgr->stellar_mq_schema_array, (unsigned int)topic_id); - EXPECT_EQ(topic_schema->free_cb, (void *)test_mock_session_msg_free); - EXPECT_EQ(topic_schema->free_cb_arg, &st); - EXPECT_EQ(topic_schema->topic_id, topic_id); - EXPECT_STREQ(topic_schema->topic_name, topic_name); - } - - EXPECT_EQ(stellar_mq_update_topic(&st, topic_id, NULL, test_mock_overwrite_session_msg_free, plug_mgr), 0); - - { - SCOPED_TRACE("White-box test, check stellar internal schema"); - topic_schema = - (struct stellar_mq_topic_schema *)utarray_eltptr(plug_mgr->stellar_mq_schema_array, (unsigned int)topic_id); - EXPECT_EQ(topic_schema->free_cb, (void *)test_mock_overwrite_session_msg_free); - EXPECT_EQ(topic_schema->free_cb_arg, plug_mgr); - EXPECT_EQ(topic_schema->topic_id, topic_id); - EXPECT_STREQ(topic_schema->topic_name, topic_name); - - EXPECT_EQ(utarray_len(plug_mgr->stellar_mq_schema_array), STELLAR_INTRINSIC_TOPIC_NUM+1); // 5 intrinsic topic + 1 created topic - } - - EXPECT_EQ(stellar_mq_destroy_topic(&st, 10), -1);// illgeal session topic_id - - EXPECT_EQ(stellar_mq_destroy_topic(&st, topic_id), 1); - EXPECT_EQ(stellar_mq_destroy_topic(&st, topic_id), 0);//duplicate destroy, return 0; - - { - SCOPED_TRACE("White-box test, check stellar internal schema"); - EXPECT_EQ(utarray_len(plug_mgr->stellar_mq_schema_array), STELLAR_INTRINSIC_TOPIC_NUM+1);//destory won't delete the topic schema - } - EXPECT_EQ(plug_mgr->stellar_mq_topic_num, STELLAR_INTRINSIC_TOPIC_NUM);//intrinsic topic number - - plugin_manager_exit(plug_mgr); -} - -void test_mock_on_session_msg(int topic_id, const void *msg,void *plugin_env){} -void test_mock_overwrite_on_session_msg(int topic_id, const void *msg, void *plugin_env){} - - -TEST(plugin_manager_init, session_mq_subscribe_overwrite) { - - struct stellar st={0}; - struct plugin_manager_schema *plug_mgr = plugin_manager_init(&st, NULL); - whitebox_test_plugin_manager_intrisic_metadata(&st, plug_mgr); - - const char *topic_name="SESSION_TOPIC"; - - int topic_id=stellar_mq_create_topic(&st, topic_name, NULL, test_mock_session_msg_free, &st); - EXPECT_GE(topic_id, 0); - - EXPECT_EQ(stellar_mq_subscribe(&st, topic_id, test_mock_on_session_msg, 10),-1);//illgeal plugin_id - EXPECT_EQ(stellar_mq_subscribe(&st, 10, test_mock_on_session_msg, 10),-1);//illgeal topic_id & plugin_id - - int plugin_id=stellar_plugin_register(&st, 0, NULL, NULL, NULL); - EXPECT_GE(plugin_id, 0); - - EXPECT_EQ(stellar_mq_subscribe(&st, topic_id, test_mock_on_session_msg, plugin_id),0); - EXPECT_EQ(stellar_mq_subscribe(&st, topic_id, test_mock_overwrite_on_session_msg, plugin_id),0);//duplicate subscribe, return 0, won't overwrite - - struct stellar_mq_topic_schema *topic_schema; - { - SCOPED_TRACE("White-box test, check stellar internal schema"); - topic_schema = (struct stellar_mq_topic_schema *)utarray_eltptr(plug_mgr->stellar_mq_schema_array,(unsigned int)topic_id); - EXPECT_EQ(topic_schema->free_cb, (void *)test_mock_session_msg_free); - EXPECT_EQ(topic_schema->free_cb_arg, &st); - EXPECT_EQ(topic_schema->topic_id, topic_id); - EXPECT_STREQ(topic_schema->topic_name, topic_name); - } - - EXPECT_EQ(topic_schema->subscriber_cnt, 1); - EXPECT_EQ(topic_schema->subscribers->plugin_msg_cb, (void *)test_mock_overwrite_on_session_msg); - - plugin_manager_exit(plug_mgr); -} -/********************************************** - * TEST PLUGIN MANAGER ON SESSION PLUGIN RUNTIME * - **********************************************/ - -#define TOPIC_TCP_INPUT "TCP_INPUT" //topic message: session -#define TOPIC_UDP_INPUT "UDP_INPUT" //topic message: session - -#define TOPIC_TCP_OUTPUT "TCP_OUTPUT" //topic message: session -#define TOPIC_UDP_OUTPUT "UDP_OUTPUT" //topic message: session - -struct session_plugin_env +struct session_manager_plugin_env { - struct plugin_manager_schema *plug_mgr; + struct stellar *st; int N_session; int N_per_session_pkt_cnt; - int intrinsc_tcp_topic_id; - int intrinsc_egress_topic_id; + struct session sess[1024]; + + int session_manager_plugin_id; + + int intrinsc_tcp_input_topic_id; + int intrinsc_tcp_output_topic_id; + int intrinsc_tcp_stream_topic_id; + + int intrinsc_udp_input_topic_id; + int intrinsc_udp_output_topic_id; + int basic_exdata_idx; int basic_exdata_free_called; - int basic_on_session_ingress_called; - int basic_on_session_egress_called; + int basic_on_tcp_called; int basic_ctx_new_called; int basic_ctx_free_called; int test_mq_pub_plugin_id; @@ -906,6 +870,68 @@ struct session_plugin_env int exdata_ctx_2_id; }; +typedef void on_session_msg_cb_func(int topic_id, struct session *sess, void *plugin_env); + +static void pesudo_on_msg_dispatch(int topic_id, const void *msg, on_msg_cb_func* on_msg_cb, void *sub_plugin_env) +{ + on_session_msg_cb_func *session_cb = (on_session_msg_cb_func *)on_msg_cb; + struct session *sess=(struct session *)msg; + session_cb(topic_id, sess, sub_plugin_env); +} +static void pesudo_on_packet_input(struct packet *pkt, unsigned char ip_protocol, void *plugin_env) +{ + struct session_manager_plugin_env *env=(struct session_manager_plugin_env *)plugin_env; + for (int i = 0; i < env->N_session; i++) + { + stellar_mq_publish_message(env->st, env->intrinsc_tcp_input_topic_id, &env->sess[i]); + } +} + +static void pesudo_on_packet_output(struct packet *pkt, unsigned char ip_protocol, void *plugin_env) +{ + struct session_manager_plugin_env *env=(struct session_manager_plugin_env *)plugin_env; + for (int i = 0; i < env->N_session; i++) + { + stellar_mq_publish_message(env->st, env->intrinsc_tcp_output_topic_id, &env->sess[i]); + } +} + +static void pesudo_session_load(struct stellar *st, struct session_manager_plugin_env *env) +{ + env->st=st; + for(int i=0; i N_session; i++) + { + env->sess[i].session_exdat_rt=session_exdata_runtime_new(st); + env->sess[i].type=SESSION_TYPE_TCP; + } + env->intrinsc_tcp_input_topic_id=stellar_mq_create_topic(st, TOPIC_TCP, pesudo_on_msg_dispatch, NULL, env); + + env->session_manager_plugin_id=stellar_plugin_register(st, 6, pesudo_on_packet_input, pesudo_on_packet_output, env); +} + +void pesudo_session_unload(struct stellar *st, struct session_manager_plugin_env *env) +{ + for(int i=0; i N_session; i++) + { + session_exdata_runtime_free(env->sess[i].session_exdat_rt); + } +} + +static int pesudo_tcp_session_subscribe(struct stellar *st, on_session_msg_cb_func *on_session_cb, int plugin_id) +{ + int topic_id=stellar_mq_get_topic_id(st, TOPIC_TCP); + if(topic_id<0) + { + topic_id=stellar_mq_create_topic(st, TOPIC_TCP, pesudo_on_msg_dispatch, NULL, NULL); + } + return stellar_mq_subscribe(st, topic_id, (on_msg_cb_func *)on_session_cb, plugin_id); +} + +/********************************************** + * SESSION MANAGER PLUGIN RUNTIME * + **********************************************/ + + TEST(plugin_manager, no_plugin_register_runtime) { struct stellar st={0}; @@ -914,27 +940,18 @@ TEST(plugin_manager, no_plugin_register_runtime) { struct plugin_manager_schema *plug_mgr = plugin_manager_init(&st, NULL); whitebox_test_plugin_manager_intrisic_metadata(&st, plug_mgr); -// init plugin // prepare packet and session - struct session_plugin_env env; - memset(&env, 0, sizeof(struct session_plugin_env)); - env.plug_mgr=plug_mgr; + struct session_manager_plugin_env env; + memset(&env, 0, sizeof(struct session_manager_plugin_env)); env.N_per_session_pkt_cnt=10; env.N_session=10; struct packet pkt={&st, TCP, 6}; - struct session sess[env.N_session]; - memset(&sess, 0, sizeof(sess)); - -// pesudo running stage - for(int i=0; i < env.N_session; i++) - { - sess[i].session_exdat_rt=session_exdata_runtime_new(plug_mgr); - sess[i].type=SESSION_TYPE_TCP; - } +// load session manager plugin + pesudo_session_load(&st, &env); for (int j = 0; j < env.N_per_session_pkt_cnt; j++) { @@ -944,237 +961,79 @@ TEST(plugin_manager, no_plugin_register_runtime) { } - for(int i=0; i < env.N_session; i++) - { - session_exdata_runtime_free(sess[i].session_exdat_rt); - } +// unload session manager plugin + pesudo_session_unload(&st, &env); //exit stage plugin_manager_exit(plug_mgr); } -struct test_basic_ctx +static void test_basic_on_tcp_session(int topic_id, struct session *sess, void *plugin_env) { - int called; -}; - - -static void test_basic_on_session_ingress(int topic_id, const void *msg, void *plugin_env) -{ - struct session *sess=(struct session *)msg; - struct session_plugin_env *env = (struct session_plugin_env *)plugin_env; + struct session_manager_plugin_env *env = (struct session_manager_plugin_env *)plugin_env; EXPECT_TRUE(env!=NULL); - if(msg) + if(sess) { EXPECT_EQ(session_exdata_set(sess, 2, sess), -1);// illegal set EXPECT_EQ(session_exdata_get(sess, 2), nullptr);// illegal get - EXPECT_EQ(session_exdata_set(sess, env->basic_exdata_idx, sess), 0); - env->basic_on_session_ingress_called+=1; + long long called = (long long )session_exdata_get(sess, env->basic_exdata_idx); + EXPECT_EQ(session_exdata_set(sess, env->basic_exdata_idx, (void *)(called+1)), 0); + env->basic_on_tcp_called+=1; } return; } -static void test_basic_on_session_egress(int topic_id, const void *msg, void *plugin_env) -{ - struct session *sess=(struct session *)msg; - struct session_plugin_env *env = (struct session_plugin_env *)plugin_env; - EXPECT_TRUE(env!=NULL); - - EXPECT_EQ(session_exdata_set(sess, 2, sess), -1); // illegal set - EXPECT_EQ(session_exdata_get(sess, 2), nullptr); // illegal get - env->basic_on_session_egress_called += 1; - - EXPECT_EQ(session_exdata_get(sess, env->basic_exdata_idx), sess); - return; -} - static void test_basic_session_exdata_free(int idx, void *ex_ptr, void *arg) { - struct session_plugin_env *env = (struct session_plugin_env *)arg; + struct session_manager_plugin_env *env = (struct session_manager_plugin_env *)arg; EXPECT_EQ(env->basic_exdata_idx, idx); - EXPECT_EQ(session_exdata_get((struct session *)ex_ptr, idx), nullptr);// illegal get in exdata_free callback - EXPECT_EQ(session_exdata_set((struct session *)ex_ptr, idx, arg), -1);// illegal set in exdata_free callback + EXPECT_EQ((long long )ex_ptr, env->N_per_session_pkt_cnt); + env->basic_exdata_free_called+=1; } -TEST(plugin_manager, session_plugin_on_intrinsic_ingress_egress) { +TEST(plugin_manager, session_plugin_on_tcp) { struct stellar st={0}; struct plugin_manager_schema *plug_mgr = plugin_manager_init(&st, NULL); whitebox_test_plugin_manager_intrisic_metadata(&st, plug_mgr); unsigned char ip_proto=6; - struct session_plugin_env env; - memset(&env, 0, sizeof(struct session_plugin_env)); - env.plug_mgr=plug_mgr; + struct session_manager_plugin_env env; + memset(&env, 0, sizeof(env)); env.N_per_session_pkt_cnt=10; env.N_session=1; int plugin_id=stellar_plugin_register(&st, 0, NULL, NULL, &env); EXPECT_GE(plugin_id, 0); - env.intrinsc_tcp_topic_id=stellar_mq_create_topic(&st, TOPIC_TCP_INPUT, NULL, NULL, NULL); - EXPECT_GE(env.intrinsc_tcp_topic_id, 0); - EXPECT_EQ(stellar_mq_subscribe(&st, env.intrinsc_tcp_topic_id, test_basic_on_session_ingress, plugin_id), 0); - - env.intrinsc_egress_topic_id=stellar_mq_create_topic(&st, TOPIC_TCP_OUTPUT, NULL, NULL, NULL); - EXPECT_GE(env.intrinsc_egress_topic_id, 0); - EXPECT_EQ(stellar_mq_subscribe(&st, env.intrinsc_egress_topic_id, test_basic_on_session_ingress, plugin_id), 0);// Intentional error - - EXPECT_EQ(stellar_mq_subscribe(&st, env.intrinsc_egress_topic_id, test_basic_on_session_egress, plugin_id), 0); + EXPECT_EQ(pesudo_tcp_session_subscribe(&st, test_basic_on_tcp_session, plugin_id), 0); env.basic_exdata_idx=stellar_exdata_new_index(&st, "SESSION_EXDATA", test_basic_session_exdata_free,&env); EXPECT_GE(env.basic_exdata_idx, 0); struct packet pkt={&st, TCP, ip_proto}; - - struct session sess[env.N_session]; - - for(int i=0; i < env.N_session; i++) - { - sess[i].session_exdat_rt=session_exdata_runtime_new(plug_mgr); - sess[i].type=SESSION_TYPE_TCP; - } + pesudo_session_load(&st, &env); for (int j = 0; j < env.N_per_session_pkt_cnt; j++) { plugin_manager_on_packet_input(plug_mgr, &pkt); - - for (int i = 0; i < env.N_session; i++) - { - stellar_mq_publish_message(&st, env.intrinsc_tcp_topic_id, &sess[i]); - stellar_mq_publish_message(&st, env.intrinsc_egress_topic_id, &sess[i]); - } - plugin_manager_on_packet_output(plug_mgr, &pkt); + plugin_manager_on_polling(plug_mgr); } - for(int i=0; i < env.N_session; i++) - { - session_exdata_runtime_free(sess[i].session_exdat_rt); - } + pesudo_session_unload(&st, &env); plugin_manager_exit(plug_mgr); - EXPECT_EQ(env.basic_on_session_ingress_called, env.basic_on_session_egress_called); - EXPECT_EQ(env.basic_on_session_ingress_called, env.N_session*env.N_per_session_pkt_cnt); + EXPECT_EQ(env.basic_on_tcp_called, env.N_session*env.N_per_session_pkt_cnt); EXPECT_EQ(env.basic_exdata_free_called, env.N_session); } - -static void test_mq_pub_on_session(int topic_id, const void *msg, void *plugin_env) -{ - struct session_plugin_env *env = (struct session_plugin_env *)plugin_env; - struct test_basic_ctx *ctx=(struct test_basic_ctx *)msg; - EXPECT_TRUE(env!=NULL); - EXPECT_TRUE(ctx!=NULL); - if (msg) - { - env->test_mq_pub_called += 1; - ctx->called += 1; - int *pub_msg = (int *)CALLOC(int, 1); - *pub_msg = env->test_mq_pub_called; - EXPECT_EQ(stellar_mq_publish_message(env->plug_mgr->st, env->test_mq_topic_id, pub_msg), 0); - } - return; -} - -static void test_mq_on_sub_msg(int topic_id, const void *msg,void *plugin_env) -{ - struct session_plugin_env *env = (struct session_plugin_env *)plugin_env; - struct test_basic_ctx *ctx=(struct test_basic_ctx *)msg; - EXPECT_TRUE(env!=NULL); - EXPECT_TRUE(ctx!=NULL); - EXPECT_EQ(*(int *)msg, env->test_mq_pub_called); - env->test_mq_sub_called+=1; - ctx->called+=1; - return; -} - -static void test_session_msg_free(void *msg, void *msg_free_arg) -{ - struct session_plugin_env *env = (struct session_plugin_env *)msg_free_arg; - if(msg) - { - EXPECT_EQ(env->test_mq_pub_called, *(int *)msg); - env->test_mq_free_called+=1; - FREE(msg); - } - return; -} - -TEST(plugin_manager, DISABLED_session_plugin_ignore_on_ctx_new_sub_other_msg) { - - struct stellar st={0}; - struct plugin_manager_schema *plug_mgr = plugin_manager_init(&st, NULL); - whitebox_test_plugin_manager_intrisic_metadata(&st, plug_mgr); - - unsigned char ip_proto=6; - struct session_plugin_env env; - memset(&env, 0, sizeof(struct session_plugin_env)); - env.plug_mgr=plug_mgr; - env.N_per_session_pkt_cnt=10; - env.N_session=10; - - env.test_mq_pub_plugin_id=stellar_plugin_register(&st, 0, NULL, NULL,&env); - EXPECT_GE(env.test_mq_pub_plugin_id, 0); - - env.intrinsc_tcp_topic_id=stellar_mq_create_topic(&st, TOPIC_TCP_INPUT, NULL, NULL, NULL); - EXPECT_GE(env.intrinsc_tcp_topic_id, 0); - EXPECT_EQ(stellar_mq_subscribe(&st, env.intrinsc_tcp_topic_id, test_mq_pub_on_session, env.test_mq_pub_plugin_id), 0); - - env.test_mq_topic_id=stellar_mq_create_topic(&st, "SESSION_MQ_TOPIC", NULL, test_session_msg_free, &env); - EXPECT_GE(env.test_mq_topic_id, 0); - - env.test_mq_sub_plugin_id=stellar_plugin_register(&st, 0, NULL, NULL, &env); - EXPECT_GE(env.test_mq_sub_plugin_id, 0); - EXPECT_EQ(stellar_mq_subscribe(&st, env.test_mq_topic_id, test_mq_on_sub_msg, env.test_mq_sub_plugin_id), 0); - - struct packet pkt={&st, TCP, ip_proto}; - - - struct session sess[env.N_session]; - - for(int i=0; i < env.N_session; i++) - { - sess[i].session_exdat_rt=session_exdata_runtime_new(plug_mgr); - sess[i].type=SESSION_TYPE_TCP; - } - - for (int j = 0; j < env.N_per_session_pkt_cnt; j++) - { - plugin_manager_on_packet_input(plug_mgr, &pkt); - - for (int i = 0; i < env.N_session; i++) - { - stellar_mq_publish_message(&st, env.intrinsc_tcp_topic_id, &sess[i]); - } - - plugin_manager_on_packet_output(plug_mgr, &pkt); - - } - - for(int i=0; i < env.N_session; i++) - { - session_exdata_runtime_free(sess[i].session_exdat_rt); - } - - plugin_manager_exit(plug_mgr); - - EXPECT_EQ(env.test_mq_free_called, env.test_mq_pub_called); - EXPECT_EQ(env.test_mq_sub_called, env.N_session*env.N_per_session_pkt_cnt); -} - -struct test_overlimit_session_mq_ctx -{ - int pkt_cnt; - int pub_cnt; - int sub_cnt; -}; - +// TODO: message pub overlimit test case #if 0 static void *test_overlimit_pub_session_ctx_new(struct session *sess, void *plugin_env) { @@ -1205,7 +1064,6 @@ static void test_overlimit_sub_session_ctx_free(struct session *sess, void *sess FREE(ctx); return; } -#endif struct test_overlimit_msg { @@ -1216,7 +1074,7 @@ struct test_overlimit_msg static void test_overlimit_pub_on_session(int topic_id, const void *msg, void *plugin_env) { struct session *sess=(struct session *)msg; - struct session_plugin_env *env = (struct session_plugin_env *)plugin_env; + struct session_manager_plugin_env *env = (struct session_manager_plugin_env *)plugin_env; struct test_overlimit_session_mq_ctx *ctx=(struct test_overlimit_session_mq_ctx *)msg; EXPECT_TRUE(env!=NULL); EXPECT_TRUE(ctx!=NULL); @@ -1247,7 +1105,7 @@ static void test_overlimit_pub_on_session(int topic_id, const void *msg, void *p static void test_overlimit_on_sub_msg(int topic_id, const void *msg, void *plugin_env) { - struct session_plugin_env *env = (struct session_plugin_env *)plugin_env; + struct session_manager_plugin_env *env = (struct session_manager_plugin_env *)plugin_env; struct test_overlimit_msg *recv_msg=(struct test_overlimit_msg *)msg; struct test_overlimit_session_mq_ctx *ctx=(struct test_overlimit_session_mq_ctx *)msg; EXPECT_TRUE(env!=NULL); @@ -1260,7 +1118,7 @@ static void test_overlimit_on_sub_msg(int topic_id, const void *msg, void *plugi static void test_overlimit_session_msg_free(void *msg, void *msg_free_arg) { - struct session_plugin_env *env = (struct session_plugin_env *)msg_free_arg; + struct session_manager_plugin_env *env = (struct session_manager_plugin_env *)msg_free_arg; struct test_overlimit_msg *recv_msg=(struct test_overlimit_msg *)msg; if(recv_msg) { @@ -1279,8 +1137,8 @@ TEST(plugin_manager,DISABLED_session_plugin_pub_msg_overlimt) { whitebox_test_plugin_manager_intrisic_metadata(&st, plug_mgr); unsigned char ip_proto=6; - struct session_plugin_env env; - memset(&env, 0, sizeof(struct session_plugin_env)); + struct session_manager_plugin_env env; + memset(&env, 0, sizeof(struct session_manager_plugin_env)); env.plug_mgr=plug_mgr; env.N_per_session_pkt_cnt=10; env.N_session=10; @@ -1288,9 +1146,9 @@ TEST(plugin_manager,DISABLED_session_plugin_pub_msg_overlimt) { env.test_mq_pub_plugin_id=stellar_plugin_register(&st, 0, NULL, NULL, &env); EXPECT_GE(env.test_mq_pub_plugin_id, 0); - env.intrinsc_tcp_topic_id=stellar_mq_create_topic(&st, TOPIC_TCP_INPUT, NULL, NULL, NULL); - EXPECT_GE(env.intrinsc_tcp_topic_id, 0); - EXPECT_EQ(stellar_mq_subscribe(&st, env.intrinsc_tcp_topic_id, test_overlimit_pub_on_session, env.test_mq_pub_plugin_id), 0); + env.intrinsc_tcp_input_topic_id=stellar_mq_create_topic(&st, TOPIC_TCP_INPUT, NULL, NULL, NULL); + EXPECT_GE(env.intrinsc_tcp_input_topic_id, 0); + EXPECT_EQ(stellar_mq_subscribe(&st, env.intrinsc_tcp_input_topic_id, test_overlimit_pub_on_session, env.test_mq_pub_plugin_id), 0); env.test_mq_topic_id=stellar_mq_create_topic(&st, "SESSION_MQ_TOPIC", NULL, test_overlimit_session_msg_free, &env); EXPECT_GE(env.test_mq_topic_id, 0); @@ -1316,7 +1174,7 @@ TEST(plugin_manager,DISABLED_session_plugin_pub_msg_overlimt) { for (int i = 0; i < env.N_session; i++) { - stellar_mq_publish_message(&st, env.intrinsc_tcp_topic_id, &sess[i]); + stellar_mq_publish_message(&st, env.intrinsc_tcp_input_topic_id, &sess[i]); } plugin_manager_on_packet_output(plug_mgr, &pkt); @@ -1334,209 +1192,11 @@ TEST(plugin_manager,DISABLED_session_plugin_pub_msg_overlimt) { EXPECT_EQ(env.test_mq_sub_called, env.N_session*env.N_per_session_pkt_cnt*(MAX_MSG_PER_DISPATCH-1)); } - - -static void test_dettach_msg_free(void *msg, void *msg_free_arg) -{ - struct session_plugin_env *env = (struct session_plugin_env *)msg_free_arg; - env->test_mq_free_called+=1; - return; -} - -#if 0 -static void *test_dettach_session_ctx_new(struct session *sess, void *plugin_env) -{ - struct test_basic_ctx *ctx=CALLOC(struct test_basic_ctx, 1); - struct session_plugin_env *env = (struct session_plugin_env *)plugin_env; - - EXPECT_EQ(stellar_mq_publish_message(env->plug_mgr->st, env->test_mq_topic_id, plugin_env), 0);// publish success, but won't be delivered to currnet plugin - - ctx->called+=1; - - EXPECT_EQ(stellar_mq_publish_message(env->plug_mgr->st, env->test_mq_topic_id, plugin_env), 0);// publish success, but won't be delivered to currnet plugin - - return ctx; -} - -static void test_dettach_session_ctx_free(struct session *sess, void *session_ctx, void *plugin_env) -{ - struct session_plugin_env *env = (struct session_plugin_env *)plugin_env; - env->basic_ctx_free_called+=1; - struct test_basic_ctx *ctx=(struct test_basic_ctx *)session_ctx; - EXPECT_EQ(sess->sess_pkt_cnt, 1);// first packet ingress, call ctx_free immediately - EXPECT_EQ(ctx->called, 1); - - EXPECT_EQ(stellar_mq_publish_message(env->plug_mgr->st, env->test_mq_topic_id, plugin_env), 0);// publish success, but won't be delivered to currnet plugin - - FREE(ctx); -} #endif -static void test_dettach_on_session(int topic_id, const void *msg, void *plugin_env) -{ - struct test_basic_ctx *ctx=(struct test_basic_ctx *)msg; - struct session_plugin_env *env = (struct session_plugin_env *)plugin_env; - - EXPECT_EQ(topic_id, env->intrinsc_tcp_topic_id); - - ctx->called+=1; -} - -TEST(plugin_manager, DISABLED_session_plugin_on_ctx_new_then_dettach) { - - struct stellar st={0}; - struct plugin_manager_schema *plug_mgr = plugin_manager_init(&st, NULL); - whitebox_test_plugin_manager_intrisic_metadata(&st, plug_mgr); - - unsigned char ip_proto=6; - struct session_plugin_env env; - memset(&env, 0, sizeof(struct session_plugin_env)); - env.plug_mgr=plug_mgr; - env.N_per_session_pkt_cnt=10; - env.N_session=10; - - - int plugin_id=stellar_plugin_register(&st, 0, NULL, NULL, &env); - EXPECT_GE(plugin_id,0); - - env.intrinsc_tcp_topic_id=stellar_mq_create_topic(&st, TOPIC_TCP_INPUT, NULL, NULL, NULL); - EXPECT_GE(env.intrinsc_tcp_topic_id, 0); - EXPECT_EQ(stellar_mq_subscribe(&st, env.intrinsc_tcp_topic_id, test_dettach_on_session, plugin_id), 0); - - env.test_mq_topic_id=stellar_mq_create_topic(&st, "SESSION_MQ_TOPIC", NULL, test_dettach_msg_free, &env); - EXPECT_GE(env.test_mq_topic_id, 0); - - EXPECT_EQ(stellar_mq_subscribe(&st, env.test_mq_topic_id, test_dettach_on_session, plugin_id), 0); - - struct packet pkt={&st, TCP, ip_proto}; - - - struct session sess[env.N_session]; - memset(&sess, 0, sizeof(sess)); - - for(int i=0; i < env.N_session; i++) - { - sess[i].session_exdat_rt=session_exdata_runtime_new(plug_mgr); - sess[i].type=SESSION_TYPE_TCP; - } - - for (int j = 0; j < env.N_per_session_pkt_cnt; j++) - { - plugin_manager_on_packet_input(plug_mgr, &pkt); - - for (int i = 0; i < env.N_session; i++) - { - sess[i].sess_pkt_cnt+=1; - stellar_mq_publish_message(&st, env.intrinsc_tcp_topic_id, &sess[i]); - } - - plugin_manager_on_packet_output(plug_mgr, &pkt); - } - - for(int i=0; i < env.N_session; i++) - { - session_exdata_runtime_free(sess[i].session_exdat_rt); - } - - plugin_manager_exit(plug_mgr); - - EXPECT_EQ(env.basic_ctx_free_called,env.N_session); - EXPECT_EQ(env.test_mq_free_called,env.N_session*3); -} +//TODO: test case, publish msg on session closed #if 0 - -static void *test_invalid_pub_msg_session_ctx_new(struct session *sess, void *plugin_env) -{ - struct test_basic_ctx *ctx=CALLOC(struct test_basic_ctx, 1); - return ctx; -} - -static void test_invalid_pub_msg_session_ctx_free(struct session *sess, void *session_ctx, void *plugin_env) -{ - struct session_plugin_env *env = (struct session_plugin_env *)plugin_env; - env->basic_ctx_free_called+=1; - struct test_basic_ctx *ctx=(struct test_basic_ctx *)session_ctx; - EXPECT_EQ(ctx->called,(env->N_per_session_pkt_cnt)); - - EXPECT_EQ(stellar_mq_publish_message(env->plug_mgr->st, env->test_mq_topic_id, ctx), -1);// illegal publish when session closing - - FREE(ctx); -} - -#endif - -static void test_invalid_pub_msg_on_session(int topic_id, const void *msg, void *plugin_env) -{ - struct test_basic_ctx *ctx=(struct test_basic_ctx *)msg; - ctx->called+=1; -} - -TEST(plugin_manager, DISABLED_session_plugin_pub_on_ctx_free) { - - struct stellar st={0}; - struct session_plugin_env env; - -// pesudo init stage - struct plugin_manager_schema *plug_mgr = plugin_manager_init(&st, NULL); - whitebox_test_plugin_manager_intrisic_metadata(&st, plug_mgr); - -// plugin manager register plugin - - int plugin_id=stellar_plugin_register(&st, 0, NULL, NULL, &env); - EXPECT_GE(plugin_id,0); - - env.intrinsc_tcp_topic_id=stellar_mq_create_topic(&st, TOPIC_TCP_INPUT, NULL, NULL, NULL); - EXPECT_GE(env.intrinsc_tcp_topic_id, 0); - EXPECT_EQ(stellar_mq_subscribe(&st, env.intrinsc_tcp_topic_id, test_invalid_pub_msg_on_session, plugin_id), 0); - - env.test_mq_topic_id=stellar_mq_create_topic(&st, "SESSION_MQ_TOPIC", NULL, NULL, &env); - EXPECT_GE(env.test_mq_topic_id, 0); - -// pesudo packet and session - - memset(&env, 0, sizeof(struct session_plugin_env)); - env.plug_mgr=plug_mgr; - env.N_per_session_pkt_cnt=10; - env.N_session=10; - - struct packet pkt={&st, TCP, 6}; - - struct session sess[env.N_session]; - memset(&sess, 0, sizeof(sess)); - -// pesudo running stage - for(int i=0; i < env.N_session; i++) - { - sess[i].session_exdat_rt=session_exdata_runtime_new(plug_mgr); - sess[i].type=SESSION_TYPE_TCP; - } - - for (int j = 0; j < env.N_per_session_pkt_cnt; j++) - { - plugin_manager_on_packet_input(plug_mgr, &pkt); - - for (int i = 0; i < env.N_session; i++) - { - sess[i].sess_pkt_cnt+=1; - stellar_mq_publish_message(&st, env.intrinsc_tcp_topic_id, &sess[i]); - } - - plugin_manager_on_packet_output(plug_mgr, &pkt); - } - - for(int i=0; i < env.N_session; i++) - { - session_exdata_runtime_free(sess[i].session_exdat_rt); - } - -// pesudo exit stage - plugin_manager_exit(plug_mgr); - - EXPECT_EQ(env.basic_ctx_free_called,env.N_session); -} - - struct test_session_closing_ctx { int pkt_called; @@ -1544,7 +1204,6 @@ struct test_session_closing_ctx int userdefine_on_msg_called; }; -#if 0 static void *test_session_closing_ctx_new(struct session *sess, void *plugin_env) { struct test_session_closing_ctx *ctx=CALLOC(struct test_session_closing_ctx, 1); @@ -1576,7 +1235,6 @@ static void test_session_closing_on_session_free(struct session *sess, void *per } } -#endif static void test_session_closing_on_intrisic_msg( int topic_id, const void *msg, void *plugin_env) { @@ -1587,7 +1245,7 @@ static void test_session_closing_on_intrisic_msg( int topic_id, const void *msg, static void test_session_closing_on_userdefine_msg(int topic_id, const void *msg, void *plugin_env) { struct test_session_closing_ctx *ctx=(struct test_session_closing_ctx *)msg; - struct session_plugin_env *env = (struct session_plugin_env *)plugin_env; + struct session_manager_plugin_env *env = (struct session_manager_plugin_env *)plugin_env; ctx->userdefine_on_msg_called+=1; EXPECT_EQ(msg, plugin_env); env->test_mq_sub_called+=1; @@ -1596,8 +1254,8 @@ static void test_session_closing_on_userdefine_msg(int topic_id, const void *msg TEST(plugin_manager, DISABLED_session_plugin_pub_msg_on_closing) { struct stellar st={0}; - struct session_plugin_env env; - memset(&env, 0, sizeof(struct session_plugin_env)); + struct session_manager_plugin_env env; + memset(&env, 0, sizeof(struct session_manager_plugin_env)); // pesudo init stage struct plugin_manager_schema *plug_mgr = plugin_manager_init(&st, NULL); @@ -1608,9 +1266,9 @@ TEST(plugin_manager, DISABLED_session_plugin_pub_msg_on_closing) { int plugin_id=stellar_plugin_register(&st, 0, NULL, NULL, &env); EXPECT_GE(plugin_id,0); - env.intrinsc_tcp_topic_id=stellar_mq_create_topic(&st, TOPIC_TCP_INPUT, NULL, NULL, NULL); - EXPECT_GE(env.intrinsc_tcp_topic_id, 0); - EXPECT_EQ(stellar_mq_subscribe(&st, env.intrinsc_tcp_topic_id, test_session_closing_on_intrisic_msg, plugin_id), 0); + env.intrinsc_tcp_input_topic_id=stellar_mq_create_topic(&st, TOPIC_TCP_INPUT, NULL, NULL, NULL); + EXPECT_GE(env.intrinsc_tcp_input_topic_id, 0); + EXPECT_EQ(stellar_mq_subscribe(&st, env.intrinsc_tcp_input_topic_id, test_session_closing_on_intrisic_msg, plugin_id), 0); env.test_mq_topic_id=stellar_mq_create_topic(&st, "SESSION_CLOSING_TOPIC", NULL, NULL, &env); EXPECT_GE(env.test_mq_topic_id, 0); @@ -1643,7 +1301,7 @@ TEST(plugin_manager, DISABLED_session_plugin_pub_msg_on_closing) { { sess[i].sess_pkt_cnt+=1; sess[i].state=SESSION_STATE_ACTIVE; - stellar_mq_publish_message(&st, env.intrinsc_tcp_topic_id, &sess[i]); + stellar_mq_publish_message(&st, env.intrinsc_tcp_input_topic_id, &sess[i]); } plugin_manager_on_packet_output(plug_mgr, &pkt); @@ -1664,222 +1322,10 @@ TEST(plugin_manager, DISABLED_session_plugin_pub_msg_on_closing) { //EXPECT_EQ(env.test_mq_sub_called,env.N_session); } -struct test_session_called_ctx -{ - int called; -}; - -#if 0 -static void *test_session_called_ctx_new(struct session *sess, void *plugin_env) -{ - struct test_session_called_ctx *ctx=CALLOC(struct test_session_called_ctx, 1); - return ctx; -} - -static void test_session_called_ctx_free(struct session *sess, void *session_ctx, void *plugin_env) -{ - FREE(session_ctx); -} #endif -//test session topic is active -static void test_session_mq_topic_is_active_plugin_1_on_msg(int topic_id, const void *msg, void *plugin_env) -{ - struct session_plugin_env *env = (struct session_plugin_env *)plugin_env; - struct test_session_called_ctx *ctx=(struct test_session_called_ctx *)msg; - env->plugin_id_1_called+=1; - ctx->called+=1; - EXPECT_EQ(env->intrinsc_tcp_topic_id, topic_id); - - return; -} - -static void test_session_mq_topic_is_active_plugin_2_on_msg(int topic_id, const void *msg, void *plugin_env) -{ - struct session_plugin_env *env = (struct session_plugin_env *)plugin_env; - struct test_session_called_ctx *ctx=(struct test_session_called_ctx *)msg; - env->plugin_id_2_called+=1; - ctx->called+=1; - EXPECT_EQ(env->intrinsc_tcp_topic_id, topic_id); - if(ctx->called > env->N_per_session_pkt_cnt/2) - { - } - return; -} - -TEST(plugin_manager, DISABLED_test_session_mq_topic_is_active) { - - struct stellar st={0}; - struct session_plugin_env env; - memset(&env, 0, sizeof(struct session_plugin_env)); - -// pesudo init stage - struct plugin_manager_schema *plug_mgr = plugin_manager_init(&st, NULL); - whitebox_test_plugin_manager_intrisic_metadata(&st, plug_mgr); - -// plugin manager register plugin - - int plugin_id_1=stellar_plugin_register(&st, 0, NULL, NULL, &env); - EXPECT_GE(plugin_id_1,0); - - int plugin_id_2=stellar_plugin_register(&st, 0, NULL, NULL, &env); - EXPECT_GE(plugin_id_2,0); - - env.plugin_id_1=plugin_id_1; - env.plugin_id_2=plugin_id_2; - - env.intrinsc_tcp_topic_id=stellar_mq_create_topic(&st, TOPIC_TCP_INPUT, NULL, NULL, NULL); - EXPECT_GE(env.intrinsc_tcp_topic_id, 0); - EXPECT_EQ(stellar_mq_subscribe(&st, env.intrinsc_tcp_topic_id, test_session_mq_topic_is_active_plugin_1_on_msg, plugin_id_1), 0); - EXPECT_EQ(stellar_mq_subscribe(&st, env.intrinsc_tcp_topic_id, test_session_mq_topic_is_active_plugin_2_on_msg, plugin_id_2), 0); - -// pesudo packet and session - - env.plug_mgr=plug_mgr; - env.N_per_session_pkt_cnt=10; - env.N_session=10; - - struct packet pkt={&st, TCP, 6}; - - struct session sess[env.N_session]; - memset(&sess, 0, sizeof(sess)); - -// pesudo running stage - for(int i=0; i < env.N_session; i++) - { - sess[i].state=SESSION_STATE_OPENING; - sess[i].session_exdat_rt=session_exdata_runtime_new(plug_mgr); - sess[i].type=SESSION_TYPE_TCP; - } - - for (int j = 0; j < env.N_per_session_pkt_cnt; j++) - { - plugin_manager_on_packet_input(plug_mgr, &pkt); - - for (int i = 0; i < env.N_session; i++) - { - sess[i].sess_pkt_cnt+=1; - sess[i].state=SESSION_STATE_ACTIVE; - stellar_mq_publish_message(&st, env.intrinsc_tcp_topic_id, &sess[i]); - } - - plugin_manager_on_packet_output(plug_mgr, &pkt); - } - - for(int i=0; i < env.N_session; i++) - { - sess[i].state=SESSION_STATE_CLOSING; - session_exdata_runtime_free(sess[i].session_exdat_rt); - } - -// pesudo exit stage - plugin_manager_exit(plug_mgr); - - EXPECT_EQ(env.plugin_id_1_called,env.N_session*1);// per session called once, then ignore - EXPECT_EQ(env.plugin_id_2_called,env.N_session*(env.N_per_session_pkt_cnt/2+1));// per session called one half, then ignore -} - -//test dettach session -static void test_session_dettach_plugin_1_on_msg(int topic_id, const void *msg, void *plugin_env) -{ - struct session_plugin_env *env = (struct session_plugin_env *)plugin_env; - struct test_session_called_ctx *ctx=(struct test_session_called_ctx *)msg; - env->plugin_id_1_called+=1; - ctx->called+=1; - EXPECT_EQ(env->intrinsc_tcp_topic_id, topic_id); - return; -} - -static void test_session_dettach_plugin_2_on_msg(int topic_id, const void *msg, void *plugin_env) -{ - struct session_plugin_env *env = (struct session_plugin_env *)plugin_env; - struct test_session_called_ctx *ctx=(struct test_session_called_ctx *)msg; - env->plugin_id_2_called+=1; - ctx->called+=1; - EXPECT_EQ(env->intrinsc_tcp_topic_id, topic_id); - - - if(ctx->called > env->N_per_session_pkt_cnt/2) - { - } - - return; -} - -TEST(plugin_manager, DISABLED_test_session_dettach) { - - struct stellar st={0}; - struct session_plugin_env env; - memset(&env, 0, sizeof(struct session_plugin_env)); - -// pesudo init stage - struct plugin_manager_schema *plug_mgr = plugin_manager_init(&st, NULL); - whitebox_test_plugin_manager_intrisic_metadata(&st, plug_mgr); - -// plugin manager register plugin - - int plugin_id_1=stellar_plugin_register(&st, 0, NULL, NULL, &env); - EXPECT_GE(plugin_id_1,0); - - int plugin_id_2=stellar_plugin_register(&st, 0, NULL, NULL, &env); - EXPECT_GE(plugin_id_2,0); - - env.plugin_id_1=plugin_id_1; - env.plugin_id_2=plugin_id_2; - - env.intrinsc_tcp_topic_id=stellar_mq_create_topic(&st, TOPIC_TCP_INPUT, NULL, NULL, NULL); - EXPECT_GE(env.intrinsc_tcp_topic_id, 0); - EXPECT_EQ(stellar_mq_subscribe(&st, env.intrinsc_tcp_topic_id, test_session_dettach_plugin_1_on_msg, plugin_id_1), 0); - EXPECT_EQ(stellar_mq_subscribe(&st, env.intrinsc_tcp_topic_id, test_session_dettach_plugin_2_on_msg, plugin_id_2), 0); - -// pesudo packet and session - - env.plug_mgr=plug_mgr; - env.N_per_session_pkt_cnt=10; - env.N_session=10; - - struct packet pkt={&st, TCP, 6}; - - struct session sess[env.N_session]; - memset(&sess, 0, sizeof(sess)); - -// pesudo running stage - for(int i=0; i < env.N_session; i++) - { - sess[i].state=SESSION_STATE_OPENING; - sess[i].session_exdat_rt=session_exdata_runtime_new(plug_mgr); - sess[i].type=SESSION_TYPE_TCP; - } - - for (int j = 0; j < env.N_per_session_pkt_cnt; j++) - { - plugin_manager_on_packet_input(plug_mgr, &pkt); - - for (int i = 0; i < env.N_session; i++) - { - sess[i].sess_pkt_cnt+=1; - sess[i].state=SESSION_STATE_ACTIVE; - stellar_mq_publish_message(&st, env.intrinsc_tcp_topic_id, &sess[i]); - } - - plugin_manager_on_packet_output(plug_mgr, &pkt); - } - - for(int i=0; i < env.N_session; i++) - { - sess[i].state=SESSION_STATE_CLOSING; - session_exdata_runtime_free(sess[i].session_exdat_rt); - } - -// pesudo exit stage - plugin_manager_exit(plug_mgr); - - EXPECT_EQ(env.plugin_id_1_called,env.N_session*1);// per session called once, then ignore - EXPECT_EQ(env.plugin_id_2_called,env.N_session*(env.N_per_session_pkt_cnt/2+1));// per session called one half, then ignore - -} - +//TODO: test case, mq priority #if 0 //test dettach session @@ -2034,17 +1480,20 @@ TEST(plugin_manager, test_session_mq_priority) { #endif +// TODO: test case, session_exdata_free_pub_msg +#if 0 + void test_session_exdata_free_pub_msg_exdata_free(int idx, void *ex_ptr, void *arg) { - struct session_plugin_env *env = (struct session_plugin_env *)arg; - EXPECT_EQ(stellar_mq_publish_message(env->plug_mgr->st, env->intrinsc_tcp_topic_id, arg), -1); + struct session_manager_plugin_env *env = (struct session_manager_plugin_env *)arg; + EXPECT_EQ(stellar_mq_publish_message(env->plug_mgr->st, env->intrinsc_tcp_input_topic_id, arg), -1); env->basic_exdata_free_called+=1; } static void test_session_exdata_free_pub_msg_on_session(int topic_id, const void *msg, void *plugin_env) { struct session *sess=(struct session *)msg; - struct session_plugin_env *env = (struct session_plugin_env *)plugin_env; + struct session_manager_plugin_env *env = (struct session_manager_plugin_env *)plugin_env; EXPECT_EQ(session_exdata_set(sess, env->basic_exdata_idx, sess), 0); if(msg)env->plugin_id_1_called+=1; } @@ -2052,7 +1501,7 @@ static void test_session_exdata_free_pub_msg_on_session(int topic_id, const void TEST(plugin_manager, session_exdata_free_pub_msg) { struct stellar st={0}; - struct session_plugin_env env; + struct session_manager_plugin_env env; // pesudo init stage struct plugin_manager_schema *plug_mgr = plugin_manager_init(&st, NULL); @@ -2063,16 +1512,16 @@ TEST(plugin_manager, session_exdata_free_pub_msg) { env.plugin_id_1=stellar_plugin_register(&st, 0, NULL, NULL, &env); EXPECT_GE(env.plugin_id_1,0); - env.intrinsc_tcp_topic_id=stellar_mq_create_topic(&st, TOPIC_TCP_INPUT, NULL, NULL, NULL); - EXPECT_GE(env.intrinsc_tcp_topic_id, 0); - EXPECT_EQ(stellar_mq_subscribe(&st, env.intrinsc_tcp_topic_id, test_session_exdata_free_pub_msg_on_session, env.plugin_id_1), 0); + env.intrinsc_tcp_input_topic_id=stellar_mq_create_topic(&st, TOPIC_TCP_INPUT, NULL, NULL, NULL); + EXPECT_GE(env.intrinsc_tcp_input_topic_id, 0); + EXPECT_EQ(stellar_mq_subscribe(&st, env.intrinsc_tcp_input_topic_id, test_session_exdata_free_pub_msg_on_session, env.plugin_id_1), 0); env.basic_exdata_idx=stellar_exdata_new_index(&st, "BASIC_EXDATA", test_session_exdata_free_pub_msg_exdata_free, &env) ; EXPECT_GE(env.basic_exdata_idx, 0); // pesudo packet and session - memset(&env, 0, sizeof(struct session_plugin_env)); + memset(&env, 0, sizeof(struct session_manager_plugin_env)); env.plug_mgr=plug_mgr; env.N_per_session_pkt_cnt=10; env.N_session=10; @@ -2096,7 +1545,7 @@ TEST(plugin_manager, session_exdata_free_pub_msg) { for (int i = 0; i < env.N_session; i++) { sess[i].sess_pkt_cnt+=1; - stellar_mq_publish_message(&st, env.intrinsc_tcp_topic_id, &sess[i]); + stellar_mq_publish_message(&st, env.intrinsc_tcp_input_topic_id, &sess[i]); } plugin_manager_on_packet_output(plug_mgr, &pkt); @@ -2115,34 +1564,7 @@ TEST(plugin_manager, session_exdata_free_pub_msg) { } -/********************************************** - * TEST PLUGIN MANAGER ON POLLING PLUGIN INIT * - **********************************************/ - -int test_plugin_on_polling_func(void *plugin_env) -{ - return 1; -} - -TEST(plugin_manager_init, polling_plugin_register) { - struct stellar st={0}; - struct plugin_manager_schema *plug_mgr = plugin_manager_init(&st, NULL); - st.plug_mgr=plug_mgr; - whitebox_test_plugin_manager_intrisic_metadata(&st, plug_mgr); - - int plugin_id = stellar_polling_plugin_register(&st, test_plugin_on_polling_func, &st); - { - SCOPED_TRACE("White-box test, check stellar internal schema"); - EXPECT_TRUE(plugin_id>=0); - struct registered_polling_plugin_schema *schema = (struct registered_polling_plugin_schema *)utarray_eltptr( - plug_mgr->registered_polling_plugin_array, (unsigned int)(plugin_id)); - EXPECT_EQ(schema->on_polling, (void *)test_plugin_on_polling_func); - EXPECT_EQ(schema->plugin_env, &st); - EXPECT_EQ(utarray_len(plug_mgr->registered_polling_plugin_array), 1); - } - - plugin_manager_exit(plug_mgr); -} +#endif /********************************************** * TEST PLUGIN MANAGER ON POLLING PLUGIN RUNTIME *