summaryrefslogtreecommitdiff
path: root/test/test_metric_counter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_metric_counter.cpp')
-rw-r--r--test/test_metric_counter.cpp220
1 files changed, 68 insertions, 152 deletions
diff --git a/test/test_metric_counter.cpp b/test/test_metric_counter.cpp
index de0f42b..98b52dd 100644
--- a/test/test_metric_counter.cpp
+++ b/test/test_metric_counter.cpp
@@ -7,22 +7,33 @@
using namespace std;
+
struct fieldstat *test_init_standard_instance()
{
struct fieldstat *instance = fieldstat_new();
- int cube_id = fieldstat_create_cube(instance, &TEST_SHARED_TAG, 1, SAMPLING_MODE_COMPREHENSIVE, 10);
+ int cube_id = fieldstat_cube_create(instance, &TEST_SHARED_TAG, 1);
EXPECT_EQ(cube_id, 0);
- int metric_id = fieldstat_register_counter(instance, "czz_test counter metric");
+ int metric_id = fieldstat_register_counter(instance, cube_id, "czz_test counter metric");
EXPECT_EQ(metric_id, 0);
+ fieldstat_cube_set_sampling(instance, cube_id, SAMPLING_MODE_COMPREHENSIVE, 10, 0);
+
return instance;
}
-long long my_fieldstat_counter_get(const struct fieldstat *instance, int cube_id, int metric_id, const struct fieldstat_tag_list *tag_list = &TEST_TAG_LIST_INT)
+long long my_fieldstat_counter_get(const struct fieldstat *instance, int cube_id, int metric_id, const struct field_list *tag_list = &TEST_FIELD_LIST_INT)
{
long long ret = 0;
- fieldstat_counter_get(instance, cube_id, metric_id, tag_list, &ret);
+ fieldstat_counter_get(instance, cube_id, tag_list, metric_id, &ret);
+ return ret;
+}
+
+int test_fieldstat_cube_create(struct fieldstat *instance, const struct field *dimensions, size_t n_dimensions, enum sampling_mode mode, int k, int primary_metric_id=0)
+{
+ assert(mode == SAMPLING_MODE_COMPREHENSIVE);
+ int ret = fieldstat_cube_create(instance, dimensions, n_dimensions);
+ fieldstat_cube_set_sampling(instance, ret, mode, k, primary_metric_id);
return ret;
}
@@ -35,25 +46,32 @@ void test_assert_standard_instance(const struct fieldstat *instance)
int ret_cell_id = ret_cube_id_arr[0];
free(ret_cube_id_arr);
EXPECT_EQ(ret_cell_id, 0);
- const char *name = fieldstat_get_metric_name(instance, 0);
+ const char *name = fieldstat_get_metric_name(instance, ret_cell_id, 0);
EXPECT_STREQ(name, "czz_test counter metric");
- struct fieldstat_tag_list *tag_list = NULL;
+ struct field_list *tag_list = NULL;
size_t n_cell = 0;
- fieldstat_get_cells_used_by_metric(instance, 0, 0, &tag_list, &n_cell);
+ fieldstat_cube_get_cells(instance, 0, &tag_list, &n_cell);
EXPECT_EQ(n_cell, 1);
- EXPECT_EQ(tag_list->n_tag, 1);
- EXPECT_STREQ(tag_list->tag[0].key, TEST_TAG_INT.key);
+ EXPECT_EQ(tag_list->n_field, 1);
+ EXPECT_STREQ(tag_list->field[0].key, TEST_FIELD_INT.key);
- fieldstat_tag_list_arr_free(tag_list, n_cell);
+ int *metric_id = NULL;
+ size_t n_metric = 0;
+ fieldstat_get_metric_in_cell(instance, 0, &tag_list[0], &metric_id, &n_metric);
+ EXPECT_EQ(n_metric, 1);
+ EXPECT_EQ(metric_id[0], 0);
+ free(metric_id);
+
+ fieldstat_field_list_arr_free(tag_list, n_cell);
}
TEST(metric_test_counter, simple_register_and_query_counter)
{
struct fieldstat *instance = test_init_standard_instance();
- fieldstat_counter_incrby(instance, 0, 0, &TEST_TAG_INT, 1, 10000);
- fieldstat_counter_incrby(instance, 0, 0, &TEST_TAG_INT, 1, 86);
+ fieldstat_counter_incrby(instance, 0, 0, &TEST_FIELD_INT, 1, 10000);
+ fieldstat_counter_incrby(instance, 0, 0, &TEST_FIELD_INT, 1, 86);
test_assert_standard_instance(instance);
EXPECT_EQ(my_fieldstat_counter_get(instance, 0, 0), 10086);
@@ -64,8 +82,8 @@ TEST(metric_test_counter, simple_register_and_query_counter)
TEST(metric_test_counter, merge_counter)
{
struct fieldstat *instance = test_init_standard_instance();
- fieldstat_counter_incrby(instance, 0, 0, &TEST_TAG_INT, 1, 100);
- fieldstat_counter_incrby(instance, 0, 0, &TEST_TAG_INT, 1, -10000);
+ fieldstat_counter_incrby(instance, 0, 0, &TEST_FIELD_INT, 1, 100);
+ fieldstat_counter_incrby(instance, 0, 0, &TEST_FIELD_INT, 1, -10000);
struct fieldstat *instance_total = fieldstat_new();
fieldstat_merge(instance_total, instance);
@@ -80,16 +98,16 @@ TEST(metric_test_counter, merge_counter)
fieldstat_free(instance_total);
}
-TEST(metric_test_counter, serialization_and_merge_counter_twice_with_reset)
+TEST(metric_test_counter, merge_counter_twice_with_reset)
{
struct fieldstat *instance = test_init_standard_instance();
- fieldstat_counter_incrby(instance, 0, 0, &TEST_TAG_INT, 1, 10086);
+ fieldstat_counter_incrby(instance, 0, 0, &TEST_FIELD_INT, 1, 10086);
struct fieldstat *instance_total = fieldstat_new();
fieldstat_merge(instance_total, instance);
fieldstat_reset(instance);
- fieldstat_counter_incrby(instance, 0, 0, &TEST_TAG_INT, 1, 4);
+ fieldstat_counter_incrby(instance, 0, 0, &TEST_FIELD_INT, 1, 4);
fieldstat_merge(instance_total, instance);
test_assert_standard_instance(instance_total);
@@ -103,11 +121,12 @@ TEST(metric_test_counter, serialization_and_merge_counter_twice_with_reset)
TEST(metric_test_counter, topk_add_and_test_accuracy)
{
struct fieldstat *instance = fieldstat_new();
- fieldstat_create_cube(instance, &TEST_TAG_INT_collided, 1, SAMPLING_MODE_TOPK, 10);
- fieldstat_register_counter(instance, "test");
+ fieldstat_cube_create(instance, &TEST_FIELD_INT_2, 1);
+ fieldstat_register_counter(instance, 0, "test");
+ fieldstat_cube_set_sampling(instance, 0, SAMPLING_MODE_TOPK, 10, 0);
int tag_list_num = 10000;
- Fieldstat_tag_list_wrapper *tags[tag_list_num];
+ Fieldstat_tag_list_wrapper *fields[tag_list_num];
map<string, int> flow_cnt;
for (int i = 0; i < tag_list_num; i++)
{
@@ -120,18 +139,18 @@ TEST(metric_test_counter, topk_add_and_test_accuracy)
flow_k = "mouse";
flow_v = std::to_string(rand() % 1000);
}
- tags[i] = new Fieldstat_tag_list_wrapper(flow_k, flow_v.c_str());
+ fields[i] = new Fieldstat_tag_list_wrapper(flow_k, flow_v.c_str());
flow_cnt[flow_k + flow_v]++;
}
for (int i = 0; i < tag_list_num; i++) {
- fieldstat_counter_incrby(instance, 0, 0, tags[i]->get_tag(), tags[i]->get_tag_count(), 1);
+ fieldstat_counter_incrby(instance, 0, 0, fields[i]->get_tag(), fields[i]->get_tag_count(), 1);
}
- struct fieldstat_tag_list *tag_list = NULL;
+ struct field_list *tag_list = NULL;
size_t n_cell = 0;
- fieldstat_get_cells_used_by_metric(instance, 0, 0, &tag_list, &n_cell);
+ fieldstat_cube_get_cells(instance, 0, &tag_list, &n_cell);
EXPECT_EQ(n_cell, 10);
long long error = 0;
for (size_t i = 0; i < n_cell; i++) {
@@ -148,49 +167,21 @@ TEST(metric_test_counter, topk_add_and_test_accuracy)
printf("topk_add_and_test_accuracy Mean ratio e: %lld\n", error);
EXPECT_LT(error, tag_list_num * 0.005);
- fieldstat_tag_list_arr_free(tag_list, n_cell);
+ fieldstat_field_list_arr_free(tag_list, n_cell);
fieldstat_free(instance);
for (int i = 0; i < tag_list_num; i++)
- delete tags[i];
-}
-
-TEST(metric_test_counter, topk_add_with_monotonically_increasing_flow_expecting_add_fail)
-{
- struct fieldstat *instance = fieldstat_new();
- fieldstat_create_cube(instance, &TEST_TAG_INT_collided, 1, SAMPLING_MODE_TOPK, 10);
- fieldstat_register_counter(instance, "test");
-
- const int end_cell_id = 10 * 8;
- const int tag_list_num = 100;
- Fieldstat_tag_list_wrapper *tags[tag_list_num];
- for (int i = 0; i < tag_list_num; i++)
- {
- tags[i] = new Fieldstat_tag_list_wrapper("elephant", std::to_string(i).c_str());
- }
-
- for (int i = 0; i < tag_list_num; i++) {
- int ret = fieldstat_counter_incrby(instance, 0, 0, tags[i]->get_tag(), tags[i]->get_tag_count(), i + 1);
- if (ret < 0) {
- EXPECT_EQ(i, end_cell_id);
- EXPECT_EQ(ret, FS_ERR_TOO_MANY_CELLS);
- break;
- }
- }
-
- fieldstat_free(instance);
- for (int i = 0; i < tag_list_num; i++)
- delete tags[i];
+ delete fields[i];
}
TEST(metric_test_counter, add_with_wrong_cube_id_expecting_fail)
{
struct fieldstat *instance = fieldstat_new();
- int cube_id = fieldstat_create_cube(instance, &TEST_TAG_INT_collided, 1, SAMPLING_MODE_TOPK, 10);
+ int cube_id = test_fieldstat_cube_create(instance, &TEST_FIELD_INT_2, 1, SAMPLING_MODE_COMPREHENSIVE, 10);
- int ret = fieldstat_counter_incrby(instance, cube_id + 1, 0, &TEST_TAG_INT, 1, 1);
+ int ret = fieldstat_counter_incrby(instance, cube_id + 1, 0, &TEST_FIELD_INT, 1, 1);
EXPECT_EQ(ret, FS_ERR_INVALID_CUBE_ID);
- ret = fieldstat_counter_incrby(instance, -1, 0, &TEST_TAG_INT, 1, 1);
+ ret = fieldstat_counter_incrby(instance, -1, 0, &TEST_FIELD_INT, 1, 1);
EXPECT_EQ(ret, FS_ERR_INVALID_CUBE_ID);
fieldstat_free(instance);
@@ -199,12 +190,12 @@ TEST(metric_test_counter, add_with_wrong_cube_id_expecting_fail)
TEST(metric_test_counter, add_with_wrong_metric_id_expecting_fail)
{
struct fieldstat *instance = fieldstat_new();
- int cube_id = fieldstat_create_cube(instance, &TEST_TAG_INT_collided, 1, SAMPLING_MODE_TOPK, 10);
- int metric_id = fieldstat_register_counter(instance, "test");
+ int cube_id = test_fieldstat_cube_create(instance, &TEST_FIELD_INT_2, 1, SAMPLING_MODE_COMPREHENSIVE, 10);
+ int metric_id = fieldstat_register_counter(instance, 0, "test");
- int ret = fieldstat_counter_incrby(instance, cube_id, metric_id + 1, &TEST_TAG_INT, 1, 1);
+ int ret = fieldstat_counter_incrby(instance, cube_id, metric_id + 1, &TEST_FIELD_INT, 1, 1);
EXPECT_EQ(ret, FS_ERR_INVALID_METRIC_ID);
- ret = fieldstat_counter_incrby(instance, cube_id, -1, &TEST_TAG_INT, 1, 1);
+ ret = fieldstat_counter_incrby(instance, cube_id, -1, &TEST_FIELD_INT, 1, 1);
EXPECT_EQ(ret, FS_ERR_INVALID_METRIC_ID);
fieldstat_free(instance);
@@ -213,57 +204,16 @@ TEST(metric_test_counter, add_with_wrong_metric_id_expecting_fail)
TEST(metric_test_counter, add_and_query_on_dummy_cell_of_topk)
{
struct fieldstat *instance = fieldstat_new();
- int cube_id = fieldstat_create_cube(instance, &TEST_SHARED_TAG, 1, SAMPLING_MODE_TOPK, 10);
- fieldstat_register_counter(instance, "primary"); // also the dummy one
- int metric_id = fieldstat_register_counter(instance, "using");
+ int cube_id = fieldstat_cube_create(instance, &TEST_SHARED_TAG, 1);
+ fieldstat_register_counter(instance, cube_id, "primary"); // also the dummy one
+ int metric_id = fieldstat_register_counter(instance, cube_id, "using");
+ fieldstat_cube_set_sampling(instance, cube_id, SAMPLING_MODE_TOPK, 10, 0);
- fieldstat_counter_incrby(instance, cube_id, metric_id, &TEST_TAG_INT, 1, 1);
+ fieldstat_counter_incrby(instance, cube_id, metric_id, &TEST_FIELD_INT, 1, 1);
// add success
long long measure = my_fieldstat_counter_get(instance, cube_id, metric_id);
EXPECT_EQ(measure, 1);
- // cannot query dummy
- int *metric_ids = NULL;
- size_t n_metric = 0;
- fieldstat_get_metrics_used_by_cube(instance, cube_id, &metric_ids, &n_metric);
- EXPECT_EQ(n_metric, 1);
- EXPECT_EQ(metric_ids[0], 1);
- free(metric_ids);
-
- struct fieldstat_tag_list *tag_list = NULL;
- size_t n_cell;
- fieldstat_get_cells_used_by_metric(instance, cube_id, 0, &tag_list, &n_cell);
- EXPECT_EQ(n_cell, 0);
-
- fieldstat_free(instance);
-}
-
-TEST(metric_test_counter, set_on_primary_metric_going_smaller)
-{
- struct fieldstat *instance = fieldstat_new();
- int cube_id = fieldstat_create_cube(instance, &TEST_SHARED_TAG, 1, SAMPLING_MODE_TOPK, 10);
- int metric_id = fieldstat_register_counter(instance, "primary");
-
- int ret = fieldstat_counter_set(instance, cube_id, metric_id, &TEST_TAG_INT, 1, 10);
- EXPECT_EQ(ret, FS_OK);
- ret = fieldstat_counter_set(instance, cube_id, metric_id, &TEST_TAG_INT, 1, 2);
- EXPECT_EQ(ret, FS_ERR_INVALID_PARAM);
-
- fieldstat_free(instance);
-}
-
-TEST(metric_test_counter, set_on_primary_metric_going_bigger)
-{
- struct fieldstat *instance = fieldstat_new();
- int cube_id = fieldstat_create_cube(instance, &TEST_SHARED_TAG, 1, SAMPLING_MODE_TOPK, 10);
- int metric_id = fieldstat_register_counter(instance, "primary");
-
- int ret = fieldstat_counter_set(instance, cube_id, metric_id, &TEST_TAG_INT, 1, 10);
- EXPECT_EQ(ret, FS_OK);
- ret = fieldstat_counter_set(instance, cube_id, metric_id, &TEST_TAG_INT, 1, 20);
- EXPECT_EQ(ret, FS_OK);
-
- EXPECT_EQ(my_fieldstat_counter_get(instance, cube_id, metric_id), 20);
fieldstat_free(instance);
}
@@ -271,68 +221,34 @@ TEST(metric_test_counter, set_on_primary_metric_going_bigger)
TEST(metric_test_counter, primary_counter_add_after_first)
{
struct fieldstat *instance = fieldstat_new();
- int cube_id = fieldstat_create_cube(instance, &TEST_SHARED_TAG, 1, SAMPLING_MODE_TOPK, 10);
- int metric_id_primary = fieldstat_register_counter(instance, "primary");
- int metric_id2 = fieldstat_register_counter(instance, "using");
- fieldstat_cube_set_primary_metric(instance, cube_id, metric_id_primary);
-
+ int cube_id = fieldstat_cube_create(instance, &TEST_SHARED_TAG, 1);
+ int metric_id_primary = fieldstat_register_counter(instance, cube_id, "primary");
+ int metric_id2 = fieldstat_register_counter(instance, cube_id, "using");
+ fieldstat_cube_set_sampling(instance, cube_id, SAMPLING_MODE_TOPK, 10, metric_id_primary);
- int ret = fieldstat_counter_incrby(instance, cube_id, metric_id2, &TEST_TAG_INT, 1, 10);
+ int ret = fieldstat_counter_incrby(instance, cube_id, metric_id2, &TEST_FIELD_INT, 1, 10);
EXPECT_EQ(ret, FS_OK);
- ret = fieldstat_counter_incrby(instance, cube_id, metric_id_primary, &TEST_TAG_INT, 1, 20);
+ ret = fieldstat_counter_incrby(instance, cube_id, metric_id_primary, &TEST_FIELD_INT, 1, 20);
EXPECT_EQ(ret, FS_OK);
EXPECT_EQ(my_fieldstat_counter_get(instance, cube_id, metric_id_primary), 20);
EXPECT_EQ(my_fieldstat_counter_get(instance, cube_id, metric_id2), 10);
// TOPK functions well
- struct fieldstat_tag tag = TEST_TAG_INT;
+ struct field field = TEST_FIELD_INT;
for (int i = 0; i < 9; i++) {
- tag.value_longlong = i + 123;
- ret = fieldstat_counter_incrby(instance, cube_id, metric_id_primary, &tag, 1, 1 + i);
+ field.value_longlong = i + 123;
+ ret = fieldstat_counter_incrby(instance, cube_id, metric_id_primary, &field, 1, 1 + i);
EXPECT_EQ(ret, FS_OK);
}
// now the TOPK is full, add a new one
- tag.value_longlong = 321;
- ret = fieldstat_counter_incrby(instance, cube_id, metric_id_primary, &tag, 1, 1);
+ field.value_longlong = 321;
+ ret = fieldstat_counter_incrby(instance, cube_id, metric_id_primary, &field, 1, 1);
EXPECT_EQ(ret, FS_ERR_TOO_MANY_CELLS);
fieldstat_free(instance);
}
-TEST(metric_test_counter, topk_set_and_test_accuracy)
-{
- struct fieldstat *instance = fieldstat_new();
- fieldstat_create_cube(instance, &TEST_TAG_INT_collided, 1, SAMPLING_MODE_TOPK, 6);
- fieldstat_register_counter(instance, "test");
-
- struct fieldstat_tag tag = TEST_TAG_INT;
- // tag : [0, 1, 2, 3, 4 ,5]
- // value: [0, 1, 2, 3, 4 ,5]
- for (int i = 0; i < 6; i++) {
- tag.value_longlong = i;
- EXPECT_EQ(fieldstat_counter_set(instance, 0, 0, &tag, 1, i), FS_OK);
- }
- // tag : [0, 1, 2, 3, 4 ,5, 6, 7, 8]
- // value: [0, 1, 2, 100, 100, 100, 100, 100, 100]
- for (int i = 0; i < 6; i++) {
- tag.value_longlong = i + 3;
- EXPECT_EQ(fieldstat_counter_set(instance, 0, 0, &tag, 1, 100), FS_OK);
- }
-
- struct fieldstat_tag_list *tag_list = NULL;
- size_t n_cell = 0;
- fieldstat_get_cells_used_by_metric(instance, 0, 0, &tag_list, &n_cell);
- EXPECT_EQ(n_cell, 6);
- for (size_t i = 0; i < n_cell; i++) {
- EXPECT_EQ(tag_list[i].tag[0].value_longlong, i + 3);
- EXPECT_EQ(my_fieldstat_counter_get(instance, 0, 0, &tag_list[i]), 100);
- }
-
- fieldstat_tag_list_arr_free(tag_list, n_cell);
- fieldstat_free(instance);
-}
-
int main(int argc, char *argv[])
{
testing::InitGoogleTest(&argc, argv);