Feature: performance test case
This commit is contained in:
@@ -11,10 +11,6 @@ extern "C"
|
||||
|
||||
#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,
|
||||
then publish the transaction's DNS_MESSAGE_QUERY/DNS_MESSAGE_RESPONSE,
|
||||
@@ -29,8 +25,6 @@ enum dns_message_type
|
||||
DNS_MESSAGE_MAX
|
||||
};
|
||||
|
||||
enum dns_message_type dns_message_type_get(struct dns_message *msg);
|
||||
|
||||
struct dns_flag
|
||||
{
|
||||
uint8_t qr:1;
|
||||
@@ -43,6 +37,12 @@ struct dns_flag
|
||||
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_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_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);
|
||||
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);
|
||||
|
||||
const char *dns_resource_record_json_exporter(struct dns_resource_record *rr_array, uint16_t n_rr);
|
||||
int dns_message_resource_record_is_dnssec(struct dns_message *msg);
|
||||
const char *dns_message_resource_record_json_exporter(struct dns_message *msg);
|
||||
const char *dns_message_resource_record_cname_json_exporter(struct dns_message *msg);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
Binary file not shown.
@@ -217,3 +217,8 @@ struct dns_query_question
|
||||
size_t qname_sz;
|
||||
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);
|
||||
@@ -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)
|
||||
{
|
||||
@@ -222,9 +222,149 @@ const char *dns_resource_record_json_exporter(struct dns_resource_record *rr_arr
|
||||
|
||||
cJSON_AddItemToArray(dns_rr_array, one_rr_object);
|
||||
}
|
||||
|
||||
return dns_rr_array;
|
||||
}
|
||||
|
||||
char *json_str=cJSON_PrintUnformatted(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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
@@ -13,8 +13,10 @@ global:
|
||||
*dns_message_answer_resource_record_get0*;
|
||||
*dns_message_authority_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_resource_record_is_dnssec*;
|
||||
*dns_message_resource_record_cname_json_exporter*;
|
||||
*GIT*;
|
||||
};
|
||||
local: *;
|
||||
|
||||
@@ -21,7 +21,9 @@ set(TEST_MAIN ${TEST_RUN_DIR}/plugin_test_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
|
||||
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")
|
||||
|
||||
@@ -841,7 +841,6 @@
|
||||
"dns_qr": 1,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 1,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_19"
|
||||
},
|
||||
{
|
||||
@@ -1222,7 +1221,6 @@
|
||||
"dns_qr": 1,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 1,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_26"
|
||||
},
|
||||
{
|
||||
@@ -1363,7 +1361,6 @@
|
||||
"dns_qr": 1,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 1,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_32"
|
||||
},
|
||||
{
|
||||
@@ -2187,7 +2184,6 @@
|
||||
"dns_qr": 1,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 1,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_55"
|
||||
},
|
||||
{
|
||||
@@ -2325,7 +2321,6 @@
|
||||
"dns_qr": 1,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 1,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_61"
|
||||
},
|
||||
{
|
||||
@@ -2613,7 +2608,6 @@
|
||||
"dns_qr": 1,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 1,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_72"
|
||||
},
|
||||
{
|
||||
@@ -2699,7 +2693,6 @@
|
||||
"dns_qr": 1,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 1,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_76"
|
||||
},
|
||||
{
|
||||
@@ -2937,7 +2930,6 @@
|
||||
"dns_qr": 1,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 1,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_84"
|
||||
},
|
||||
{
|
||||
@@ -3139,7 +3131,6 @@
|
||||
"dns_qr": 1,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 1,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_90"
|
||||
},
|
||||
{
|
||||
@@ -3150,7 +3141,6 @@
|
||||
"dns_qr": 1,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 1,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_91"
|
||||
},
|
||||
{
|
||||
@@ -3161,7 +3151,6 @@
|
||||
"dns_qr": 1,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 1,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_92"
|
||||
},
|
||||
{
|
||||
@@ -3380,7 +3369,6 @@
|
||||
"dns_qr": 1,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 1,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_101"
|
||||
},
|
||||
{
|
||||
|
||||
@@ -342,7 +342,6 @@
|
||||
"dns_qr": 1,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 1,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_4"
|
||||
},
|
||||
{
|
||||
@@ -2581,7 +2580,6 @@
|
||||
"dns_qr": 1,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 1,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_66"
|
||||
},
|
||||
{
|
||||
@@ -2592,7 +2590,6 @@
|
||||
"dns_qr": 1,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 1,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_67"
|
||||
},
|
||||
{
|
||||
@@ -3403,7 +3400,6 @@
|
||||
"dns_qr": 1,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 1,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_87"
|
||||
}
|
||||
]
|
||||
@@ -69,7 +69,6 @@
|
||||
"dns_qr": 0,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 1,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_3"
|
||||
},
|
||||
{
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
"dns_qr": 0,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 1,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_1"
|
||||
},
|
||||
{
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
"dns_qr": 0,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 0,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_2"
|
||||
},
|
||||
{
|
||||
@@ -64,7 +63,6 @@
|
||||
"dns_qr": 0,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 0,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_4"
|
||||
},
|
||||
{
|
||||
@@ -121,7 +119,6 @@
|
||||
"dns_qr": 0,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 0,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_7"
|
||||
},
|
||||
{
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
"dns_qr": 0,
|
||||
"dns_opcode": 0,
|
||||
"dns_rd": 1,
|
||||
"rr": {},
|
||||
"name": "DNS_RESULT_1"
|
||||
}
|
||||
]
|
||||
@@ -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)
|
||||
{
|
||||
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();
|
||||
//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)
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
uint16_t n_answer_rr=0;
|
||||
struct dns_resource_record *answer_rr=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)
|
||||
const char *resource_record_str=dns_message_resource_record_json_exporter(dns_msg);
|
||||
if(resource_record_str!=NULL)
|
||||
{
|
||||
cJSON *rr_object=cJSON_Parse(answer);
|
||||
cJSON_AddItemToObject(rr_array, "answer", rr_object);
|
||||
free((void *)answer);
|
||||
cJSON *rr_array=cJSON_Parse(resource_record_str);
|
||||
cJSON_AddItemToObject(real_result, "rr", rr_array);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
char *real_result_str=cJSON_Print(real_result);
|
||||
|
||||
Reference in New Issue
Block a user