This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
tango-maat/test/maat_framework_gtest.cpp

180 lines
6.7 KiB
C++
Raw Normal View History

2022-11-25 16:32:29 +08:00
#include <gtest/gtest.h>
#include "maat/maat.h"
#include "maat_rule.h"
2022-11-29 14:12:40 +08:00
#include "maat_utils.h"
2022-11-25 16:32:29 +08:00
#include "maat_table_schema.h"
#include "maat_table_runtime.h"
struct maat *g_maat_instance = NULL;
2022-11-29 14:12:40 +08:00
const char *table_info_path = "./table_info.conf";
const char *rule_full_path = "./rule/full/index";
const char *rule_inc_path = "./rule/inc/index";
2022-11-25 16:32:29 +08:00
2022-11-29 14:12:40 +08:00
TEST(maat_scan_string, hit_one_expr) {
2022-11-25 16:32:29 +08:00
struct table_schema_manager *table_schema_mgr = g_maat_instance->table_schema_mgr;
int table_id = table_schema_manager_get_table_id(table_schema_mgr, "HTTP_URL");
2022-11-29 14:12:40 +08:00
char data[64] = "";
2022-11-25 16:32:29 +08:00
int result_array[5] = {0};
size_t n_result_array = 0;
int ret = maat_scan_string(g_maat_instance, table_id, 0, data, strlen(data), result_array, &n_result_array, NULL);
2022-11-29 14:12:40 +08:00
EXPECT_EQ(ret, -1);
char data1[64] = "baidu.com";
ret = maat_scan_string(g_maat_instance, table_id, 0, data1, strlen(data1), result_array, &n_result_array, NULL);
EXPECT_EQ(ret, 0);
EXPECT_EQ(n_result_array, 0);
char data2[64] = "hello";
ret = maat_scan_string(g_maat_instance, table_id, 0, data2, strlen(data2), result_array, &n_result_array, NULL);
2022-11-25 16:32:29 +08:00
EXPECT_EQ(ret, 0);
EXPECT_EQ(n_result_array, 1);
EXPECT_EQ(result_array[0], 101);
2022-11-29 14:12:40 +08:00
memset(result_array, 0, sizeof(result_array));
char data3[64] = "maat";
ret = maat_scan_string(g_maat_instance, table_id, 0, data3, strlen(data3), result_array, &n_result_array, NULL);
EXPECT_EQ(ret, 0);
EXPECT_EQ(n_result_array, 1);
EXPECT_EQ(result_array[0], 102);
memset(result_array, 0, sizeof(result_array));
char data4[64] = "world";
ret = maat_scan_string(g_maat_instance, table_id, 0, data4, strlen(data4), result_array, &n_result_array, NULL);
EXPECT_EQ(n_result_array, 1);
EXPECT_EQ(result_array[0], 103);
}
TEST(maat_scan_string, hit_two_expr) {
struct table_schema_manager *table_schema_mgr = g_maat_instance->table_schema_mgr;
int table_id = table_schema_manager_get_table_id(table_schema_mgr, "HTTP_URL");
char data[64] = "hello maat";
int result_array[5] = {0};
size_t n_result_array = 0;
int ret = maat_scan_string(g_maat_instance, table_id, 0, data, strlen(data), result_array, &n_result_array, NULL);
EXPECT_EQ(ret, 0);
EXPECT_EQ(n_result_array, 2);
EXPECT_EQ(result_array[0], 102);
EXPECT_EQ(result_array[1], 101);
memset(result_array, 0, sizeof(result_array));
char data1[64] = "maat world";
ret = maat_scan_string(g_maat_instance, table_id, 0, data1, strlen(data1), result_array, &n_result_array, NULL);
EXPECT_EQ(ret, 0);
EXPECT_EQ(n_result_array, 2);
EXPECT_EQ(result_array[0], 103);
EXPECT_EQ(result_array[1], 102);
}
TEST(maat_scan_string, hit_three_expr) {
struct table_schema_manager *table_schema_mgr = g_maat_instance->table_schema_mgr;
int table_id = table_schema_manager_get_table_id(table_schema_mgr, "HTTP_URL");
char data[64] = "hello world";
int result_array[5] = {0};
size_t n_result_array = 0;
int ret = maat_scan_string(g_maat_instance, table_id, 0, data, strlen(data), result_array, &n_result_array, NULL);
EXPECT_EQ(ret, 0);
EXPECT_EQ(n_result_array, 3);
EXPECT_EQ(result_array[0], 104);
EXPECT_EQ(result_array[1], 103);
EXPECT_EQ(result_array[2], 101);
}
TEST(maat_scan_string, hit_four_expr) {
struct table_schema_manager *table_schema_mgr = g_maat_instance->table_schema_mgr;
int table_id = table_schema_manager_get_table_id(table_schema_mgr, "HTTP_URL");
char data[64] = "9hello world";
int result_array[5] = {0};
size_t n_result_array = 0;
int ret = maat_scan_string(g_maat_instance, table_id, 0, data, strlen(data), result_array, &n_result_array, NULL);
EXPECT_EQ(ret, 0);
EXPECT_EQ(n_result_array, 4);
EXPECT_EQ(result_array[0], 105);
EXPECT_EQ(result_array[1], 104);
EXPECT_EQ(result_array[2], 103);
EXPECT_EQ(result_array[3], 101);
}
TEST(maat_scan_string, hit_five_expr) {
struct table_schema_manager *table_schema_mgr = g_maat_instance->table_schema_mgr;
int table_id = table_schema_manager_get_table_id(table_schema_mgr, "HTTP_URL");
char data[64] = "9hello 8world";
int result_array[5] = {0};
size_t n_result_array = 0;
int ret = maat_scan_string(g_maat_instance, table_id, 0, data, strlen(data), result_array, &n_result_array, NULL);
EXPECT_EQ(ret, 0);
EXPECT_EQ(n_result_array, 5);
EXPECT_EQ(result_array[0], 106);
EXPECT_EQ(result_array[1], 105);
EXPECT_EQ(result_array[2], 104);
EXPECT_EQ(result_array[3], 103);
EXPECT_EQ(result_array[4], 101);
}
TEST(maat_scan_string, config_dynamic_update) {
struct table_schema_manager *table_schema_mgr = g_maat_instance->table_schema_mgr;
int table_id = table_schema_manager_get_table_id(table_schema_mgr, "HTTP_URL");
char data[128] = "www.baidu.com";
int result_array[5] = {0};
size_t n_result_array = 0;
int ret = maat_scan_string(g_maat_instance, table_id, 0, data, strlen(data), result_array, &n_result_array, NULL);
EXPECT_EQ(ret, 0);
EXPECT_EQ(n_result_array, 0);
/* generate inc update config */
system_cmd_mkdir("./rule/inc/index");
char new_rule[128] = "207 7 baidu 0 0 0 1";
FILE *fp = fopen("./rule/inc/HTTP_URL.000002", "w+");
EXPECT_NE(fp, nullptr);
fprintf(fp, "%s\n", "0000000001");
fprintf(fp, "%s\n", new_rule);
fclose(fp);
char new_rule_idx[128] = "HTTP_URL 1 ./rule/inc/HTTP_URL.000002";
fp = fopen("./rule/inc/index/inc_config_index.000002", "w+");
EXPECT_NE(fp, nullptr);
fprintf(fp, "%s\n", new_rule_idx);
fclose(fp);
/* if updated rule already valid */
memset(result_array, 0, sizeof(result_array));
sleep(2);
ret = maat_scan_string(g_maat_instance, table_id, 0, data, strlen(data), result_array, &n_result_array, NULL);
EXPECT_EQ(ret, 0);
EXPECT_EQ(n_result_array, 1);
EXPECT_EQ(result_array[0], 207);
/* if the old rules are still valid */
memset(result_array, 0, sizeof(result_array));
char data1[64] = "9hello 8world";
ret = maat_scan_string(g_maat_instance, table_id, 0, data1, strlen(data1), result_array, &n_result_array, NULL);
EXPECT_EQ(ret, 0);
EXPECT_EQ(n_result_array, 5);
EXPECT_EQ(result_array[0], 106);
EXPECT_EQ(result_array[1], 105);
EXPECT_EQ(result_array[2], 104);
EXPECT_EQ(result_array[3], 103);
EXPECT_EQ(result_array[4], 101);
2022-11-25 16:32:29 +08:00
}
int main(int argc, char ** argv)
{
int ret=0;
::testing::InitGoogleTest(&argc, argv);
struct maat_options *opts = maat_options_new();
2022-11-29 14:12:40 +08:00
maat_options_set_iris_full_dir(opts, rule_full_path);
maat_options_set_iris_inc_dir(opts, rule_inc_path);
2022-11-25 16:32:29 +08:00
g_maat_instance = maat_new(opts, table_info_path);
EXPECT_NE(g_maat_instance, nullptr);
ret=RUN_ALL_TESTS();
maat_free(g_maat_instance);
g_maat_instance = NULL;
return ret;
}