summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliuxueli <[email protected]>2023-08-14 20:10:05 +0800
committerchenzizhan <[email protected]>2023-08-15 11:06:22 +0800
commitcabd1347f86a0235ab4b367b1d8a73c0be5ed170 (patch)
treef52f9ae03ffeb4c04b198580382dfbe50ade797c
parentcf3f77d5fe9b62df499bd3fafab38eca4f9e5245 (diff)
err proc for fieldstat_get_cube_versionv4.0.5
-rw-r--r--include/fieldstat/fieldstat.h7
-rw-r--r--src/fieldstat.c15
-rw-r--r--test/test_register_and_reset.cpp10
3 files changed, 27 insertions, 5 deletions
diff --git a/include/fieldstat/fieldstat.h b/include/fieldstat/fieldstat.h
index 1935cdb..acf086c 100644
--- a/include/fieldstat/fieldstat.h
+++ b/include/fieldstat/fieldstat.h
@@ -64,7 +64,12 @@ int fieldstat_register_cube(struct fieldstat *instance, const struct fieldstat_t
* @return 0 if success. -1 if cube_id is invalid.
*/
int fieldstat_unregister_cube(struct fieldstat *instance, int cube_id);
-unsigned long fieldstat_get_cube_version(const struct fieldstat *instance, int cube_id);
+
+/*
+ * @brief get the cube_version of the cube of cube_id.
+ * @return cube_version if success. -1 if instance is NULL. -2 if cube_id is -1. -3 if the cube_id is invalid(never registered for even once)
+*/
+long long fieldstat_get_cube_version(const struct fieldstat *instance, int cube_id);
/*
* @brief add a metric to the cube of cube_id. One metric may have multiple sub-metric that are associated with different cells.
* @param cube_id: cube id, previously returned by fieldstat_register_cube.
diff --git a/src/fieldstat.c b/src/fieldstat.c
index 5d2603f..f5f2f12 100644
--- a/src/fieldstat.c
+++ b/src/fieldstat.c
@@ -127,12 +127,21 @@ int fieldstat_unregister_cube(struct fieldstat *instance, int cube_id)
return 0;
}
-unsigned long fieldstat_get_cube_version(const struct fieldstat *instance, int cube_id)
+long long fieldstat_get_cube_version(const struct fieldstat *instance, int cube_id)
{
+ if (instance == NULL) {
+ return -1;
+ }
+ if (cube_id < 0) {
+ return -2;
+ }
if (cube_id >= instance->valid_cube_arr_length) {
- //printf("ERR: cube_id is out of range\n");
- return 0;
+ return -3;
+ }
+ if (instance->cube[cube_id] == NULL && instance->cube_version[cube_id] == 0) {
+ return -3;
}
+
return instance->cube_version[cube_id];
}
diff --git a/test/test_register_and_reset.cpp b/test/test_register_and_reset.cpp
index 8376f97..28d65a5 100644
--- a/test/test_register_and_reset.cpp
+++ b/test/test_register_and_reset.cpp
@@ -28,11 +28,19 @@ TEST(test_register, delete_cube_and_version_increase)
ret = fieldstat_unregister_cube(instance, cube_id);
EXPECT_EQ(ret, -1);
EXPECT_EQ(fieldstat_get_cube_version(instance, cube_id), 1);
- EXPECT_EQ(fieldstat_get_cube_version(instance, 123), 0);
fieldstat_free(instance);
}
+TEST(test_register, query_on_wrong_version)
+{
+ EXPECT_EQ(fieldstat_get_cube_version(NULL, 1), -1);
+ struct fieldstat *instance = fieldstat_new();
+ EXPECT_EQ(fieldstat_get_cube_version(instance, 1), -3);
+ EXPECT_EQ(fieldstat_get_cube_version(instance, -1), -2);
+ fieldstat_free(instance);
+}
+
TEST(test_register, delete_cube_and_register_and_origin_position)
{
struct fieldstat *instance = fieldstat_new();