Feature: performance test case

This commit is contained in:
liuxueli
2024-06-20 02:33:35 +00:00
parent cae0281c2f
commit 5496804914
14 changed files with 167 additions and 84 deletions

View File

@@ -11,10 +11,6 @@ extern "C"
#define DNS_MESSAGE_TOPIC "TOPIC_DNS_MESSAGE" #define DNS_MESSAGE_TOPIC "TOPIC_DNS_MESSAGE"
struct dns_message;
struct dns_query_question;
struct dns_resource_record;
/*. /*.
First call DNS_MESSAGE_TRANSACTION_BEGIN to create the transaction, First call DNS_MESSAGE_TRANSACTION_BEGIN to create the transaction,
then publish the transaction's DNS_MESSAGE_QUERY/DNS_MESSAGE_RESPONSE, then publish the transaction's DNS_MESSAGE_QUERY/DNS_MESSAGE_RESPONSE,
@@ -29,8 +25,6 @@ enum dns_message_type
DNS_MESSAGE_MAX DNS_MESSAGE_MAX
}; };
enum dns_message_type dns_message_type_get(struct dns_message *msg);
struct dns_flag struct dns_flag
{ {
uint8_t qr:1; uint8_t qr:1;
@@ -43,6 +37,12 @@ struct dns_flag
uint8_t rcode:4; uint8_t rcode:4;
}; };
struct dns_message;
struct dns_query_question;
struct dns_resource_record;
enum dns_message_type dns_message_type_get(struct dns_message *msg);
int32_t dns_message_transaction_index_get(struct dns_message *msg); int32_t dns_message_transaction_index_get(struct dns_message *msg);
int32_t dns_message_header_id_get(struct dns_message *msg); int32_t dns_message_header_id_get(struct dns_message *msg);
@@ -53,11 +53,9 @@ const char *dns_query_question_qname_get0(struct dns_query_question *question);
int32_t dns_query_question_qtype_get0(struct dns_query_question *question); int32_t dns_query_question_qtype_get0(struct dns_query_question *question);
int32_t dns_query_question_qclass_get0(struct dns_query_question *question); int32_t dns_query_question_qclass_get0(struct dns_query_question *question);
void dns_message_answer_resource_record_get0(struct dns_message *msg, struct dns_resource_record **answer_rr, uint16_t *n_answer_rr); int dns_message_resource_record_is_dnssec(struct dns_message *msg);
void dns_message_authority_resource_record_get0(struct dns_message *msg, struct dns_resource_record **authority_rr, uint16_t *n_authority_rr); const char *dns_message_resource_record_json_exporter(struct dns_message *msg);
void dns_message_additional_resource_record_get0(struct dns_message *msg, struct dns_resource_record **additional_rr, uint16_t *n_additional_rr); const char *dns_message_resource_record_cname_json_exporter(struct dns_message *msg);
const char *dns_resource_record_json_exporter(struct dns_resource_record *rr_array, uint16_t n_rr);
#ifdef __cplusplus #ifdef __cplusplus
} }

Binary file not shown.

View File

@@ -217,3 +217,8 @@ struct dns_query_question
size_t qname_sz; size_t qname_sz;
uint8_t qname[DNS_NAME_MAX]; uint8_t qname[DNS_NAME_MAX];
}; };
int32_t dns_message_contains_resource_record(struct dns_message *msg);
void dns_message_answer_resource_record_get0(struct dns_message *msg, struct dns_resource_record **answer_rr, uint16_t *n_answer_rr);
void dns_message_authority_resource_record_get0(struct dns_message *msg, struct dns_resource_record **authority_rr, uint16_t *n_authority_rr);
void dns_message_additional_resource_record_get0(struct dns_message *msg, struct dns_resource_record **additional_rr, uint16_t *n_additional_rr);

View File

@@ -41,7 +41,7 @@ void dns_resource_record_dstring_append(cJSON *one_rr_object, struct dstring *ds
} }
} }
const char *dns_resource_record_json_exporter(struct dns_resource_record *rr_array, uint16_t n_rr) cJSON *dns_resource_record_json_create(struct dns_resource_record *rr_array, uint16_t n_rr)
{ {
if(rr_array==NULL || n_rr==0) if(rr_array==NULL || n_rr==0)
{ {
@@ -223,8 +223,148 @@ const char *dns_resource_record_json_exporter(struct dns_resource_record *rr_arr
cJSON_AddItemToArray(dns_rr_array, one_rr_object); cJSON_AddItemToArray(dns_rr_array, one_rr_object);
} }
char *json_str=cJSON_PrintUnformatted(dns_rr_array); return dns_rr_array;
cJSON_Delete(dns_rr_array); }
const char *dns_message_resource_record_json_exporter(struct dns_message *msg)
{
uint16_t n_answer_rr=0;
struct dns_resource_record *answer_rr=NULL;
dns_message_answer_resource_record_get0(msg, &answer_rr, &n_answer_rr);
uint16_t n_authority_rr=0;
struct dns_resource_record *authority_rr=NULL;
dns_message_authority_resource_record_get0(msg, &authority_rr, &n_authority_rr);
uint16_t n_additional_rr=0;
struct dns_resource_record *additional_rr=NULL;
dns_message_additional_resource_record_get0(msg, &additional_rr, &n_additional_rr);
if(n_answer_rr==0 && n_authority_rr==0 && n_additional_rr==0)
{
return NULL;
}
cJSON *answer=dns_resource_record_json_create(answer_rr, n_answer_rr);
cJSON *authority=dns_resource_record_json_create(authority_rr, n_authority_rr);
cJSON *additional=dns_resource_record_json_create(additional_rr, n_additional_rr);
cJSON *rr_array=cJSON_CreateObject();
if(answer!=NULL)
{
cJSON_AddItemToObject(rr_array, "answer", answer);
}
if(authority!=NULL)
{
cJSON_AddItemToObject(rr_array, "authority", authority);
}
if(additional!=NULL)
{
cJSON_AddItemToObject(rr_array, "additional", additional);
}
char *json_str=cJSON_PrintUnformatted(rr_array);
cJSON_Delete(rr_array);
return json_str; return json_str;
} }
int dns_resource_record_is_dnssec(struct dns_resource_record *rr_array, uint16_t n_rr)
{
for(uint16_t i=0; i<n_rr; i++)
{
switch(rr_array[i].type)
{
case DNS_RR_TYPE_DS:
case DNS_RR_TYPE_RRSIG:
case DNS_RR_TYPE_NSEC:
case DNS_RR_TYPE_DNSKEY:
case DNS_RR_TYPE_NSEC3:
case DNS_RR_TYPE_NSEC3PARAM:
return 1;
default:
break;
}
}
return 0;
}
int dns_message_resource_record_is_dnssec(struct dns_message *msg)
{
uint16_t n_answer_rr=0;
struct dns_resource_record *answer_rr=NULL;
dns_message_answer_resource_record_get0(msg, &answer_rr, &n_answer_rr);
if(dns_resource_record_is_dnssec(answer_rr, n_answer_rr)==1)
{
return 1;
}
uint16_t n_authority_rr=0;
struct dns_resource_record *authority_rr=NULL;
dns_message_authority_resource_record_get0(msg, &authority_rr, &n_authority_rr);
if(dns_resource_record_is_dnssec(authority_rr, n_authority_rr)==1)
{
return 1;
}
uint16_t n_additional_rr=0;
struct dns_resource_record *additional_rr=NULL;
dns_message_additional_resource_record_get0(msg, &additional_rr, &n_additional_rr);
if(dns_resource_record_is_dnssec(additional_rr, n_additional_rr)==1)
{
return 1;
}
return 0;
}
void dns_resource_record_cname_get(cJSON *cname_array, struct dns_resource_record *rr, uint16_t n_rr)
{
for(uint16_t i=0; i<n_rr; i++)
{
if(rr[i].type!=DNS_RR_TYPE_CNAME)
{
continue;
}
if(rr[i].rdata.cname.value_sz==0)
{
continue;
}
cJSON *cname=cJSON_CreateString((char *)(rr[i].rdata.cname.value));
cJSON_AddItemToArray(cname_array, cname);
}
}
const char *dns_message_resource_record_cname_json_exporter(struct dns_message *msg)
{
uint16_t n_answer_rr=0;
struct dns_resource_record *answer_rr=NULL;
dns_message_answer_resource_record_get0(msg, &answer_rr, &n_answer_rr);
uint16_t n_authority_rr=0;
struct dns_resource_record *authority_rr=NULL;
dns_message_authority_resource_record_get0(msg, &authority_rr, &n_authority_rr);
uint16_t n_additional_rr=0;
struct dns_resource_record *additional_rr=NULL;
dns_message_additional_resource_record_get0(msg, &additional_rr, &n_additional_rr);
if(n_answer_rr==0 && n_authority_rr==0 && n_additional_rr==0)
{
return NULL;
}
cJSON *cname_object=cJSON_CreateArray();
dns_resource_record_cname_get(cname_object, answer_rr, n_answer_rr);
dns_resource_record_cname_get(cname_object, authority_rr, n_authority_rr);
dns_resource_record_cname_get(cname_object, additional_rr, n_additional_rr);
char *json_str=cJSON_PrintUnformatted(cname_object);
cJSON_Delete(cname_object);
return json_str;
}

View File

@@ -13,8 +13,10 @@ global:
*dns_message_answer_resource_record_get0*; *dns_message_answer_resource_record_get0*;
*dns_message_authority_resource_record_get0*; *dns_message_authority_resource_record_get0*;
*dns_message_additional_resource_record_get0*; *dns_message_additional_resource_record_get0*;
*dns_resource_record_json_exporter*; *dns_message_resource_record_json_exporter*;
*dns_message_transaction_index_get*; *dns_message_transaction_index_get*;
*dns_message_resource_record_is_dnssec*;
*dns_message_resource_record_cname_json_exporter*;
*GIT*; *GIT*;
}; };
local: *; local: *;

View File

@@ -21,7 +21,9 @@ set(TEST_MAIN ${TEST_RUN_DIR}/plugin_test_main)
# copy perf main # copy perf main
add_test(NAME COPY_PERF_TEST_MAIN COMMAND sh -c "cp ${CMAKE_BINARY_DIR}/test/dns_decoder_perf_test ${TEST_RUN_DIR}/dns_decoder_perf_test") add_test(NAME MKDIR_PERF COMMAND sh -c "mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/perf/ ${CMAKE_CURRENT_BINARY_DIR}/perf/etc/dns/")
add_test(NAME COPY_PERF_TEST_MAIN COMMAND sh -c "cp ${CMAKE_BINARY_DIR}/test/dns_decoder_perf_test ${CMAKE_CURRENT_BINARY_DIR}/perf")
add_test(NAME COPY_PERF_TEST_CONF COMMAND sh -c "cp ${PROJECT_SOURCE_DIR}/bin/${PROJECT_NAME}.toml ${CMAKE_CURRENT_BINARY_DIR}/etc/dns/${PROJECT_NAME}.toml")
# assemble test env # assemble test env
add_test(NAME INSTALL_TEST_MAIN COMMAND sh -c "rpm -i ${CMAKE_CURRENT_SOURCE_DIR}/env/sapp-4.3.57.16ea514-1.el8.x86_64.rpm --prefix=${CMAKE_CURRENT_BINARY_DIR}/sapp --force --nodeps") add_test(NAME INSTALL_TEST_MAIN COMMAND sh -c "rpm -i ${CMAKE_CURRENT_SOURCE_DIR}/env/sapp-4.3.57.16ea514-1.el8.x86_64.rpm --prefix=${CMAKE_CURRENT_BINARY_DIR}/sapp --force --nodeps")

View File

@@ -841,7 +841,6 @@
"dns_qr": 1, "dns_qr": 1,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 1, "dns_rd": 1,
"rr": {},
"name": "DNS_RESULT_19" "name": "DNS_RESULT_19"
}, },
{ {
@@ -1222,7 +1221,6 @@
"dns_qr": 1, "dns_qr": 1,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 1, "dns_rd": 1,
"rr": {},
"name": "DNS_RESULT_26" "name": "DNS_RESULT_26"
}, },
{ {
@@ -1363,7 +1361,6 @@
"dns_qr": 1, "dns_qr": 1,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 1, "dns_rd": 1,
"rr": {},
"name": "DNS_RESULT_32" "name": "DNS_RESULT_32"
}, },
{ {
@@ -2187,7 +2184,6 @@
"dns_qr": 1, "dns_qr": 1,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 1, "dns_rd": 1,
"rr": {},
"name": "DNS_RESULT_55" "name": "DNS_RESULT_55"
}, },
{ {
@@ -2325,7 +2321,6 @@
"dns_qr": 1, "dns_qr": 1,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 1, "dns_rd": 1,
"rr": {},
"name": "DNS_RESULT_61" "name": "DNS_RESULT_61"
}, },
{ {
@@ -2613,7 +2608,6 @@
"dns_qr": 1, "dns_qr": 1,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 1, "dns_rd": 1,
"rr": {},
"name": "DNS_RESULT_72" "name": "DNS_RESULT_72"
}, },
{ {
@@ -2699,7 +2693,6 @@
"dns_qr": 1, "dns_qr": 1,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 1, "dns_rd": 1,
"rr": {},
"name": "DNS_RESULT_76" "name": "DNS_RESULT_76"
}, },
{ {
@@ -2937,7 +2930,6 @@
"dns_qr": 1, "dns_qr": 1,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 1, "dns_rd": 1,
"rr": {},
"name": "DNS_RESULT_84" "name": "DNS_RESULT_84"
}, },
{ {
@@ -3139,7 +3131,6 @@
"dns_qr": 1, "dns_qr": 1,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 1, "dns_rd": 1,
"rr": {},
"name": "DNS_RESULT_90" "name": "DNS_RESULT_90"
}, },
{ {
@@ -3150,7 +3141,6 @@
"dns_qr": 1, "dns_qr": 1,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 1, "dns_rd": 1,
"rr": {},
"name": "DNS_RESULT_91" "name": "DNS_RESULT_91"
}, },
{ {
@@ -3161,7 +3151,6 @@
"dns_qr": 1, "dns_qr": 1,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 1, "dns_rd": 1,
"rr": {},
"name": "DNS_RESULT_92" "name": "DNS_RESULT_92"
}, },
{ {
@@ -3380,7 +3369,6 @@
"dns_qr": 1, "dns_qr": 1,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 1, "dns_rd": 1,
"rr": {},
"name": "DNS_RESULT_101" "name": "DNS_RESULT_101"
}, },
{ {

View File

@@ -342,7 +342,6 @@
"dns_qr": 1, "dns_qr": 1,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 1, "dns_rd": 1,
"rr": {},
"name": "DNS_RESULT_4" "name": "DNS_RESULT_4"
}, },
{ {
@@ -2581,7 +2580,6 @@
"dns_qr": 1, "dns_qr": 1,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 1, "dns_rd": 1,
"rr": {},
"name": "DNS_RESULT_66" "name": "DNS_RESULT_66"
}, },
{ {
@@ -2592,7 +2590,6 @@
"dns_qr": 1, "dns_qr": 1,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 1, "dns_rd": 1,
"rr": {},
"name": "DNS_RESULT_67" "name": "DNS_RESULT_67"
}, },
{ {
@@ -3403,7 +3400,6 @@
"dns_qr": 1, "dns_qr": 1,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 1, "dns_rd": 1,
"rr": {},
"name": "DNS_RESULT_87" "name": "DNS_RESULT_87"
} }
] ]

View File

@@ -69,7 +69,6 @@
"dns_qr": 0, "dns_qr": 0,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 1, "dns_rd": 1,
"rr": {},
"name": "DNS_RESULT_3" "name": "DNS_RESULT_3"
}, },
{ {

View File

@@ -7,7 +7,6 @@
"dns_qr": 0, "dns_qr": 0,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 1, "dns_rd": 1,
"rr": {},
"name": "DNS_RESULT_1" "name": "DNS_RESULT_1"
}, },
{ {

View File

@@ -30,7 +30,6 @@
"dns_qr": 0, "dns_qr": 0,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 0, "dns_rd": 0,
"rr": {},
"name": "DNS_RESULT_2" "name": "DNS_RESULT_2"
}, },
{ {
@@ -64,7 +63,6 @@
"dns_qr": 0, "dns_qr": 0,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 0, "dns_rd": 0,
"rr": {},
"name": "DNS_RESULT_4" "name": "DNS_RESULT_4"
}, },
{ {
@@ -121,7 +119,6 @@
"dns_qr": 0, "dns_qr": 0,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 0, "dns_rd": 0,
"rr": {},
"name": "DNS_RESULT_7" "name": "DNS_RESULT_7"
}, },
{ {

View File

@@ -7,7 +7,6 @@
"dns_qr": 0, "dns_qr": 0,
"dns_opcode": 0, "dns_opcode": 0,
"dns_rd": 1, "dns_rd": 1,
"rr": {},
"name": "DNS_RESULT_1" "name": "DNS_RESULT_1"
} }
] ]

View File

@@ -103,16 +103,7 @@ extern "C" int commit_test_result_json(cJSON *node, const char *name)
void perf_resource_record_decode(struct dns_message *dns_msg) void perf_resource_record_decode(struct dns_message *dns_msg)
{ {
TIME_START(); TIME_START();
uint16_t n_answer_rr=0;
uint16_t n_additional_rr=0;
uint16_t n_authority_rr=0;
struct dns_resource_record *answer_rr=NULL;
struct dns_resource_record *additional_rr=NULL;
struct dns_resource_record *authority_rr=NULL;
dns_message_answer_resource_record_get0(dns_msg, &answer_rr, &n_answer_rr);
dns_message_authority_resource_record_get0(dns_msg, &authority_rr, &n_authority_rr);
dns_message_additional_resource_record_get0(dns_msg, &additional_rr, &n_additional_rr);
TIME_DIFF(); TIME_DIFF();
//fieldstat_easy_histogram_record(main_env->fse.handle, tid, main_env->fse.id[PERF_TAG_QUESTION], &(main_env->fse.tag[PERF_TAG_QUESTION]), 1, time_diff_ns) //fieldstat_easy_histogram_record(main_env->fse.handle, tid, main_env->fse.id[PERF_TAG_QUESTION], &(main_env->fse.tag[PERF_TAG_QUESTION]), 1, time_diff_ns)
} }

View File

@@ -85,46 +85,13 @@ void dns_decoder_test_message_cb(struct session *ss, int topic_id, const void *m
cJSON_AddNumberToObject(real_result, "dns_rd", (double)(flag->rd)); cJSON_AddNumberToObject(real_result, "dns_rd", (double)(flag->rd));
} }
uint16_t n_answer_rr=0; const char *resource_record_str=dns_message_resource_record_json_exporter(dns_msg);
struct dns_resource_record *answer_rr=NULL; if(resource_record_str!=NULL)
dns_message_answer_resource_record_get0(dns_msg, &answer_rr, &n_answer_rr);
uint16_t n_authority_rr=0;
struct dns_resource_record *authority_rr=NULL;
dns_message_authority_resource_record_get0(dns_msg, &authority_rr, &n_authority_rr);
uint16_t n_additional_rr=0;
struct dns_resource_record *additional_rr=NULL;
dns_message_additional_resource_record_get0(dns_msg, &additional_rr, &n_additional_rr);
const char *answer=dns_resource_record_json_exporter(answer_rr, n_answer_rr);
const char *authority=dns_resource_record_json_exporter(authority_rr, n_authority_rr);
const char *additional=dns_resource_record_json_exporter(additional_rr, n_additional_rr);
cJSON *rr_array=cJSON_CreateObject();
if(answer!=NULL)
{ {
cJSON *rr_object=cJSON_Parse(answer); cJSON *rr_array=cJSON_Parse(resource_record_str);
cJSON_AddItemToObject(rr_array, "answer", rr_object); cJSON_AddItemToObject(real_result, "rr", rr_array);
free((void *)answer);
} }
if(authority!=NULL)
{
cJSON *rr_object=cJSON_Parse(authority);
cJSON_AddItemToObject(rr_array, "authority", rr_object);
free((void *)authority);
}
if(additional!=NULL)
{
cJSON *rr_object=cJSON_Parse(additional);
cJSON_AddItemToObject(rr_array, "additional", rr_object);
free((void *)additional);
}
cJSON_AddItemToObject(real_result, "rr", rr_array);
if(plugin_env->write_result_enable==1) if(plugin_env->write_result_enable==1)
{ {
char *real_result_str=cJSON_Print(real_result); char *real_result_str=cJSON_Print(real_result);