summaryrefslogtreecommitdiff
path: root/test/test_metric_histogram.cpp
diff options
context:
space:
mode:
authorchenzizhan <[email protected]>2023-07-14 15:36:13 +0800
committerchenzizhan <[email protected]>2023-07-14 15:36:13 +0800
commit8c4474d60acea3bc8847b6b7ffed2c325e3a7af8 (patch)
treeb49dab2c3fa581c21a6648d8176a23948e5b2c0a /test/test_metric_histogram.cpp
parent0cac9757bc63e3ec485acf46eab2e3eec48c1350 (diff)
test metrics; design test
Diffstat (limited to 'test/test_metric_histogram.cpp')
-rw-r--r--test/test_metric_histogram.cpp127
1 files changed, 127 insertions, 0 deletions
diff --git a/test/test_metric_histogram.cpp b/test/test_metric_histogram.cpp
new file mode 100644
index 0000000..14bf4af
--- /dev/null
+++ b/test/test_metric_histogram.cpp
@@ -0,0 +1,127 @@
+
+#include <gtest/gtest.h>
+#include "fieldstat.h"
+#include "utils.hpp"
+
+struct fieldstat *test_init_standard_instance_one_cube_one_metric_one_cell_hdr()
+{
+ struct fieldstat *instance = fieldstat_new();
+ int cube_id = fieldstat_register_cube(instance, &TEST_SHARED_TAG, 1, SAMPLING_MODE_COMPREHENSIVE, 10);
+ EXPECT_EQ(cube_id, 0);
+
+ int metric_id = fieldstat_register_histogram(instance, cube_id, "czz_test hdr metric", 1, 600000, 3);
+ EXPECT_EQ(metric_id, 0);
+
+ int cell_id = fieldstat_cube_add(instance, cube_id, &TEST_TAG_STRING, 1, 1);
+ EXPECT_EQ(cell_id, 0);
+
+ return instance;
+}
+
+void test_assert_standard_instance(struct fieldstat *instance)
+{
+ int *ret_cube_id_arr = NULL;
+ size_t n_cube = 0;
+ fieldstat_get_cubes(instance, &ret_cube_id_arr, &n_cube);
+ EXPECT_EQ(n_cube, 1);
+ 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(instance, ret_cell_id);
+ EXPECT_EQ(ret_metric_id, 0);
+ const char *name = fieldstat_get_metric_name(instance, 0, 0);
+ EXPECT_STREQ(name, "czz_test hdr metric");
+
+ int *ret_cell_ids = NULL;
+ struct fieldstat_tag_list *tag_list = NULL;
+ size_t n_cell = 0;
+ fieldstat_get_cells(instance, 0, 0, &ret_cell_ids, &tag_list, &n_cell);
+ EXPECT_EQ(n_cell, 1);
+ EXPECT_EQ(ret_cell_ids[0], 0);
+ EXPECT_EQ(tag_list->n_tag, 1);
+ EXPECT_STREQ(tag_list->tag[0].key, TEST_TAG_STRING.key);
+
+ free(ret_cell_ids);
+ fieldstat_tag_list_arr_free(tag_list, n_cell);
+}
+
+TEST(metric_test_histogram, simple_register_and_query)
+{
+ struct fieldstat *instance = test_init_standard_instance_one_cube_one_metric_one_cell_hdr();
+
+ fieldstat_histogram_record(instance, 0, 0, 0, 1234);
+ fieldstat_histogram_record(instance, 0, 0, 0, 1234);
+ fieldstat_histogram_record(instance, 0, 0, 0, 123);
+
+ test_assert_standard_instance(instance);
+ EXPECT_EQ(fieldstat_histogram_value_at_percentile(instance, 0, 0, 0, 50.0), 1234);
+ EXPECT_EQ(fieldstat_histogram_count_le_value(instance, 0, 0, 0, 1000), 1);
+
+ fieldstat_free(instance);
+}
+
+TEST(metric_test_histogram, serialize_and_merge)
+{
+ struct fieldstat *instance = test_init_standard_instance_one_cube_one_metric_one_cell_hdr();
+ fieldstat_histogram_record(instance, 0, 0, 0, 1234);
+ fieldstat_histogram_record(instance, 0, 0, 0, 1234);
+ fieldstat_histogram_record(instance, 0, 0, 0, 123);
+
+ char *blob = NULL;
+ size_t blob_len = 0;
+ fieldstat_serialize(instance, &blob, &blob_len);
+ struct fieldstat *instance_from_blob = fieldstat_deserialize(blob, blob_len);
+ free(blob);
+ struct fieldstat *instance_total = fieldstat_new();
+ fieldstat_merge(instance_total, instance_from_blob);
+
+ // query
+ test_assert_standard_instance(instance_total);
+
+ EXPECT_EQ(fieldstat_histogram_value_at_percentile(instance_total, 0, 0, 0, 50.0), 1234);
+ EXPECT_EQ(fieldstat_histogram_count_le_value(instance, 0, 0, 0, 1000), 1);
+
+ fieldstat_free(instance);
+ fieldstat_free(instance_from_blob);
+ fieldstat_free(instance_total);
+}
+
+TEST(metric_test_histogram, serialization_and_merge_twice_with_reset)
+{
+ struct fieldstat *instance = test_init_standard_instance_one_cube_one_metric_one_cell_hdr();
+ fieldstat_histogram_record(instance, 0, 0, 0, 1234);
+ fieldstat_histogram_record(instance, 0, 0, 0, 123);
+
+ char *blob = NULL;
+ size_t blob_len = 0;
+ fieldstat_serialize(instance, &blob, &blob_len);
+ struct fieldstat *instance_from_blob = fieldstat_deserialize(blob, blob_len);
+ free(blob);
+ struct fieldstat *instance_total = fieldstat_new();
+ fieldstat_merge(instance_total, instance_from_blob);
+
+ fieldstat_free(instance_from_blob);
+ fieldstat_reset(instance);
+ int cell_id = fieldstat_cube_add(instance, 0, &TEST_TAG_STRING, 1, 1);
+ EXPECT_EQ(cell_id, 0);
+ fieldstat_histogram_record(instance, 0, 0, 0, 1234);
+
+ fieldstat_serialize(instance, &blob, &blob_len);
+ instance_from_blob = fieldstat_deserialize(blob, blob_len);
+ free(blob);
+ fieldstat_merge(instance_total, instance_from_blob);
+
+ test_assert_standard_instance(instance_total);
+ EXPECT_EQ(fieldstat_histogram_value_at_percentile(instance_total, 0, 0, 0, 50.0), 1234);
+ EXPECT_EQ(fieldstat_histogram_count_le_value(instance_total, 0, 0, 0, 1000), 1);
+
+ fieldstat_free(instance);
+ fieldstat_free(instance_from_blob);
+ fieldstat_free(instance_total);
+}
+
+int main(int argc, char *argv[])
+{
+ testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+} \ No newline at end of file