summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliuxueli <[email protected]>2024-06-20 02:33:35 +0000
committerliuxueli <[email protected]>2024-06-20 02:33:35 +0000
commit5496804914e7adee6a64e9267f34040865611dc2 (patch)
tree37ac9f57e8a728d58d86bbb1949af5ef383d438c
parentcae0281c2fbd77c27e12cbd6e497e44ab1f37f94 (diff)
Feature: performance test case
-rw-r--r--include/dns_decoder.h20
-rwxr-xr-xperf/byte_to_hex_highly_optimizedbin22064 -> 0 bytes
-rw-r--r--src/dns_resource_record.h5
-rw-r--r--src/dns_resource_record_exporter.cpp146
-rw-r--r--src/version.map4
-rw-r--r--test/CMakeLists.txt4
-rw-r--r--test/case/cernet1/cernet1_result.json12
-rw-r--r--test/case/cernet2/cernet2_result.json4
-rw-r--r--test/case/https/https_result.json1
-rw-r--r--test/case/multi_pkt_trans_2bytes/multi_pkt_trans_2bytes_result.json1
-rw-r--r--test/case/query/query_result.json3
-rw-r--r--test/case/srv/srv_result.json1
-rw-r--r--test/dns_decoder_perf_main.cpp11
-rw-r--r--test/dns_decoder_test.cpp41
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
deleted file mode 100755
index 253ef7a..0000000
--- a/perf/byte_to_hex_highly_optimized
+++ /dev/null
Binary files differ
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);