summaryrefslogtreecommitdiff
path: root/test/http_test_plug.cpp
diff options
context:
space:
mode:
author李佳 <[email protected]>2024-03-20 08:21:06 +0000
committer杨威 <[email protected]>2024-03-20 08:21:06 +0000
commit0ddf0cd934dd0ad9ec742790e6aeb4980bcdb64e (patch)
tree43695f82e325e78e8cba43198bb5c4231f1b494e /test/http_test_plug.cpp
parent0571d0bc63c240d4c0adccaa40869a76cfe6013b (diff)
Add unit testHEADmaster
Diffstat (limited to 'test/http_test_plug.cpp')
-rw-r--r--test/http_test_plug.cpp85
1 files changed, 70 insertions, 15 deletions
diff --git a/test/http_test_plug.cpp b/test/http_test_plug.cpp
index 9d3a3d8..3e1435e 100644
--- a/test/http_test_plug.cpp
+++ b/test/http_test_plug.cpp
@@ -7,11 +7,20 @@
#include "http.h"
#include "MESA_prof_load.h"
#include <MESA/stream.h>
+#include "md5.h"
extern "C" int commit_test_result_json(cJSON *node, const char *name);
+static int g_dump_unzip_payload = 0; // make manual check result simpler
static int g_result_count = 1;
+struct http_test_ctx
+{
+ cJSON *json_ctx;
+ char *unzip_payload_data;
+ long unzip_payload_datalen;
+};
+
int check_field(char *src, int src_len, char *dst, int dst_len)
{
if(src==NULL || dst==NULL || src_len==0 || dst_len==0 || src_len!=dst_len)
@@ -37,23 +46,60 @@ int http_field_add_to_json(cJSON *object, const char *name, char *value, char le
return 0;
}
-
+
+static void http_test_plug_append_payload(struct http_test_ctx *hplug_ctx, stSessionInfo *session_info)
+{
+ int append_datalen = hplug_ctx->unzip_payload_datalen + session_info->buflen;
+ hplug_ctx->unzip_payload_data = (char *)realloc(hplug_ctx->unzip_payload_data, append_datalen);
+ memcpy(hplug_ctx->unzip_payload_data + hplug_ctx->unzip_payload_datalen, session_info->buf, session_info->buflen);
+ hplug_ctx->unzip_payload_datalen = append_datalen;
+}
+
+static void http_test_plug_commit_payload_md5(struct http_test_ctx *hplug_ctx)
+{
+ char payload_md5str[33] = {};
+ char payload_lenstr[32] = {};
+
+ if ((hplug_ctx->unzip_payload_data != NULL) && (hplug_ctx->unzip_payload_datalen > 0))
+ {
+ snprintf(payload_lenstr, sizeof(payload_lenstr), "%ld", hplug_ctx->unzip_payload_datalen);
+ http_field_add_to_json(hplug_ctx->json_ctx, "unzip_payload_len", payload_lenstr, strlen(payload_lenstr));
+
+ MESA_MD5_sum_str((unsigned char *)hplug_ctx->unzip_payload_data, (unsigned int)hplug_ctx->unzip_payload_datalen, payload_md5str);
+ http_field_add_to_json(hplug_ctx->json_ctx, "unzip_payload_md5", payload_md5str, strlen(payload_md5str));
+
+ if (g_dump_unzip_payload)
+ {
+ FILE *fp = fopen(payload_md5str, "w+");
+ if (fp)
+ {
+ fwrite(hplug_ctx->unzip_payload_data, hplug_ctx->unzip_payload_datalen, 1, fp);
+ fclose(fp);
+ }
+ }
+ }
+}
+
extern "C" unsigned char HTTP_TEST_PLUG_ENTRY(stSessionInfo *session_info, void **pme, int thread_seq, struct streaminfo *a_tcp, void *a_packet)
{
- assert(NULL != session_info || pme != NULL);
+ assert(NULL != session_info || pme != NULL);
- cJSON *ctx = (cJSON *)*pme;
+ struct http_test_ctx *hplug_ctx;
if (session_info->session_state & SESSION_STATE_PENDING)
{
if (*pme == NULL)
{
- ctx = cJSON_CreateObject();
- *pme = (void *)ctx;
- cJSON_AddStringToObject(ctx, "Tuple4", printaddr(&a_tcp->addr, a_tcp->threadnum));
+ hplug_ctx = (struct http_test_ctx *)calloc(1, sizeof(struct http_test_ctx));
+ hplug_ctx->json_ctx = cJSON_CreateObject( );
+ cJSON_AddStringToObject(hplug_ctx->json_ctx, "Tuple4", printaddr(&a_tcp->addr, a_tcp->threadnum));
+ *pme = (void *)hplug_ctx;
}
}
+ hplug_ctx = (struct http_test_ctx *)(*pme);
+ cJSON *ctx = hplug_ctx->json_ctx;
+
int length=0;
char *url=NULL, *host=NULL;
void *parser_result=NULL;
@@ -82,19 +128,28 @@ extern "C" unsigned char HTTP_TEST_PLUG_ENTRY(stSessionInfo *session_info, void
http_field_add_to_json(ctx, "http_url", url, length);
http_free_filed_result(parser_result);
break;
- default:
- break;
- }
+ case HTTP_UNGZIP_CONTENT:
+ http_test_plug_append_payload(hplug_ctx, session_info);
+ break;
+ default:
+ break;
+ }
if(session_info->session_state&SESSION_STATE_CLOSE)
{
- if(ctx)
+ if(hplug_ctx)
{
- char result_name[16]="";
- sprintf(result_name,"HTTP_RESULT_%d", g_result_count);
- commit_test_result_json(ctx, result_name);
- g_result_count+=1;
- }
+ http_test_plug_commit_payload_md5(hplug_ctx);
+ char result_name[16] = "";
+ sprintf(result_name, "HTTP_RESULT_%d", g_result_count);
+ commit_test_result_json(hplug_ctx->json_ctx, result_name);
+ g_result_count += 1;
+ if (hplug_ctx->unzip_payload_data)
+ {
+ free(hplug_ctx->unzip_payload_data);
+ }
+ free(hplug_ctx);
+ }
*pme = NULL;
return PROT_STATE_DROPME;