diff options
| author | liuxueli <[email protected]> | 2024-06-20 02:33:35 +0000 |
|---|---|---|
| committer | liuxueli <[email protected]> | 2024-06-20 02:33:35 +0000 |
| commit | 5496804914e7adee6a64e9267f34040865611dc2 (patch) | |
| tree | 37ac9f57e8a728d58d86bbb1949af5ef383d438c | |
| parent | cae0281c2fbd77c27e12cbd6e497e44ab1f37f94 (diff) | |
Feature: performance test case
| -rw-r--r-- | include/dns_decoder.h | 20 | ||||
| -rwxr-xr-x | perf/byte_to_hex_highly_optimized | bin | 22064 -> 0 bytes | |||
| -rw-r--r-- | src/dns_resource_record.h | 5 | ||||
| -rw-r--r-- | src/dns_resource_record_exporter.cpp | 146 | ||||
| -rw-r--r-- | src/version.map | 4 | ||||
| -rw-r--r-- | test/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | test/case/cernet1/cernet1_result.json | 12 | ||||
| -rw-r--r-- | test/case/cernet2/cernet2_result.json | 4 | ||||
| -rw-r--r-- | test/case/https/https_result.json | 1 | ||||
| -rw-r--r-- | test/case/multi_pkt_trans_2bytes/multi_pkt_trans_2bytes_result.json | 1 | ||||
| -rw-r--r-- | test/case/query/query_result.json | 3 | ||||
| -rw-r--r-- | test/case/srv/srv_result.json | 1 | ||||
| -rw-r--r-- | test/dns_decoder_perf_main.cpp | 11 | ||||
| -rw-r--r-- | test/dns_decoder_test.cpp | 41 |
14 files changed, 168 insertions, 85 deletions
diff --git a/include/dns_decoder.h b/include/dns_decoder.h index b41f7b9..074ab92 100644 --- a/include/dns_decoder.h +++ b/include/dns_decoder.h @@ -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 } diff --git a/perf/byte_to_hex_highly_optimized b/perf/byte_to_hex_highly_optimized Binary files differdeleted file mode 100755 index 253ef7a..0000000 --- a/perf/byte_to_hex_highly_optimized +++ /dev/null diff --git a/src/dns_resource_record.h b/src/dns_resource_record.h index 6070b20..54998ac 100644 --- a/src/dns_resource_record.h +++ b/src/dns_resource_record.h @@ -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);
\ No newline at end of file diff --git a/src/dns_resource_record_exporter.cpp b/src/dns_resource_record_exporter.cpp index 7dd5900..4a0e38e 100644 --- a/src/dns_resource_record_exporter.cpp +++ b/src/dns_resource_record_exporter.cpp @@ -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; +} + +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); + } - char *json_str=cJSON_PrintUnformatted(dns_rr_array); - cJSON_Delete(dns_rr_array); + 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; }
\ No newline at end of file diff --git a/src/version.map b/src/version.map index dbead6a..753f47e 100644 --- a/src/version.map +++ b/src/version.map @@ -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: *; diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index b878303..0d66ba6 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -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") diff --git a/test/case/cernet1/cernet1_result.json b/test/case/cernet1/cernet1_result.json index 6f3d0d2..a5ea365 100644 --- a/test/case/cernet1/cernet1_result.json +++ b/test/case/cernet1/cernet1_result.json @@ -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" }, { diff --git a/test/case/cernet2/cernet2_result.json b/test/case/cernet2/cernet2_result.json index eb50633..8c97e60 100644 --- a/test/case/cernet2/cernet2_result.json +++ b/test/case/cernet2/cernet2_result.json @@ -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" } ]
\ No newline at end of file diff --git a/test/case/https/https_result.json b/test/case/https/https_result.json index 41ce0b4..8c43d46 100644 --- a/test/case/https/https_result.json +++ b/test/case/https/https_result.json @@ -69,7 +69,6 @@ "dns_qr": 0, "dns_opcode": 0, "dns_rd": 1, - "rr": {}, "name": "DNS_RESULT_3" }, { diff --git a/test/case/multi_pkt_trans_2bytes/multi_pkt_trans_2bytes_result.json b/test/case/multi_pkt_trans_2bytes/multi_pkt_trans_2bytes_result.json index 420ef7f..41fdf57 100644 --- a/test/case/multi_pkt_trans_2bytes/multi_pkt_trans_2bytes_result.json +++ b/test/case/multi_pkt_trans_2bytes/multi_pkt_trans_2bytes_result.json @@ -7,7 +7,6 @@ "dns_qr": 0, "dns_opcode": 0, "dns_rd": 1, - "rr": {}, "name": "DNS_RESULT_1" }, { diff --git a/test/case/query/query_result.json b/test/case/query/query_result.json index 6666fb8..362892c 100644 --- a/test/case/query/query_result.json +++ b/test/case/query/query_result.json @@ -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" }, { diff --git a/test/case/srv/srv_result.json b/test/case/srv/srv_result.json index c520cfc..25a97da 100644 --- a/test/case/srv/srv_result.json +++ b/test/case/srv/srv_result.json @@ -7,7 +7,6 @@ "dns_qr": 0, "dns_opcode": 0, "dns_rd": 1, - "rr": {}, "name": "DNS_RESULT_1" } ]
\ No newline at end of file diff --git a/test/dns_decoder_perf_main.cpp b/test/dns_decoder_perf_main.cpp index 078e560..3e81287 100644 --- a/test/dns_decoder_perf_main.cpp +++ b/test/dns_decoder_perf_main.cpp @@ -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) } diff --git a/test/dns_decoder_test.cpp b/test/dns_decoder_test.cpp index 44931e5..0472ad5 100644 --- a/test/dns_decoder_test.cpp +++ b/test/dns_decoder_test.cpp @@ -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); |
