1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
#include <gtest/gtest.h>
#include "fieldstat.h"
#include "utils.hpp"
#include "serializer.h"
TEST(unit_test_serialize, serialize_and_deserialize_fieldstat_instance_comprehensive)
{
struct fieldstat *instance = fieldstat_new();
int cube_id = fieldstat_register_cube(instance, &TEST_SHARED_TAG, 1, SAMPLING_MODE_COMPREHENSIVE, 10);
int metric_id = fieldstat_register_counter(instance, cube_id, "czz_test counter metric", COUNTER_MERGE_BY_MAX);
int cell_id1 = fieldstat_cube_add(instance, cube_id, &TEST_TAG_STRING, 1, 1);
int cell_id2 = fieldstat_cube_add(instance, cube_id, &TEST_TAG_STRING_collided, 1, 1);
fieldstat_counter_incrby(instance, cube_id, metric_id, cell_id1, 10086);
fieldstat_counter_incrby(instance, cube_id, metric_id, cell_id2, 123);
char *blob;
size_t blob_size;
fieldstat_serialize(instance, &blob, &blob_size);
struct fieldstat *instance2 = fieldstat_deserialize(blob, blob_size);
free(blob);
int *ret_cube_id_arr = NULL;
int n_cube = 0;
fieldstat_get_cubes(instance2, &ret_cube_id_arr, &n_cube);
int ret_cell_id = ret_cube_id_arr[0];
free(ret_cube_id_arr);
EXPECT_EQ(ret_cell_id, 0);
int ret_metric_id = fieldstat_get_max_metric_id(instance2, ret_cell_id);
EXPECT_EQ(ret_metric_id, 0);
long long measure = fieldstat_counter_get(instance2, cube_id, metric_id, cell_id1);
EXPECT_EQ(measure, 10086);
const char *name = fieldstat_get_metric_name(instance2, cube_id, metric_id);
EXPECT_STREQ(name, "czz_test counter metric");
int *ret_cell_ids = NULL;
struct fieldstat_tag_list *tag_list = NULL;
size_t n_cell = 0;
fieldstat_get_cells(instance2, cube_id, metric_id, &ret_cell_ids, &tag_list, &n_cell);
EXPECT_EQ(n_cell, 2);
EXPECT_EQ(ret_cell_ids[0], cell_id1);
EXPECT_EQ(ret_cell_ids[1], cell_id2);
EXPECT_EQ(tag_list[0].n_tag, 1);
EXPECT_EQ(tag_list[1].n_tag, 1);
EXPECT_STREQ(tag_list[0].tag[0].key, TEST_TAG_STRING.key);
EXPECT_STREQ(tag_list[1].tag[0].key, TEST_TAG_STRING_collided.key);
fieldstat_free(instance);
fieldstat_free(instance2);
free(ret_cell_ids);
fieldstat_tag_list_arr_free(tag_list, n_cell);
}
TEST(unit_test_serialize, serialize_and_deserialize_fieldstat_instance_topk)
{
struct fieldstat *instance = fieldstat_new();
int cube_id = fieldstat_register_cube(instance, &TEST_SHARED_TAG, 1, SAMPLING_MODE_TOPK, 10);
int metric_id = fieldstat_register_counter(instance, cube_id, "czz_test counter metric", COUNTER_MERGE_BY_MAX);
int cell_id1 = fieldstat_cube_add(instance, cube_id, &TEST_TAG_STRING, 1, 1);
int cell_id2 = fieldstat_cube_add(instance, cube_id, &TEST_TAG_STRING_collided, 1, 1);
fieldstat_counter_incrby(instance, cube_id, metric_id, cell_id1, 10086);
fieldstat_counter_incrby(instance, cube_id, metric_id, cell_id2, 123);
char *blob;
size_t blob_size;
fieldstat_serialize(instance, &blob, &blob_size);
struct fieldstat *instance2 = fieldstat_deserialize(blob, blob_size);
free(blob);
int *ret_cube_id_arr = NULL;
int n_cube = 0;
fieldstat_get_cubes(instance2, &ret_cube_id_arr, &n_cube);
int ret_cell_id = ret_cube_id_arr[0];
free(ret_cube_id_arr);
EXPECT_EQ(ret_cell_id, 0);
int ret_metric_id = fieldstat_get_max_metric_id(instance2, ret_cell_id);
EXPECT_EQ(ret_metric_id, 0);
long long measure = fieldstat_counter_get(instance2, cube_id, metric_id, cell_id1);
EXPECT_EQ(measure, 10086);
const char *name = fieldstat_get_metric_name(instance2, cube_id, metric_id);
EXPECT_STREQ(name, "czz_test counter metric");
int *ret_cell_ids = NULL;
struct fieldstat_tag_list *tag_list = NULL;
size_t n_cell = 0;
fieldstat_get_cells(instance2, cube_id, metric_id, &ret_cell_ids, &tag_list, &n_cell);
EXPECT_EQ(n_cell, 2);
EXPECT_EQ(ret_cell_ids[0], cell_id1);
EXPECT_EQ(ret_cell_ids[1], cell_id2);
EXPECT_EQ(tag_list[0].n_tag, 1);
EXPECT_EQ(tag_list[1].n_tag, 1);
EXPECT_STREQ(tag_list[0].tag[0].key, TEST_TAG_STRING.key);
EXPECT_STREQ(tag_list[1].tag[0].key, TEST_TAG_STRING_collided.key);
fieldstat_free(instance);
fieldstat_free(instance2);
free(ret_cell_ids);
fieldstat_tag_list_arr_free(tag_list, n_cell);
}
int main(int argc, char *argv[])
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
|