diff options
-rw-r--r-- | tests/libcgrouptest.h | 9 | ||||
-rw-r--r-- | tests/libcgrouptest01.c | 107 |
2 files changed, 116 insertions, 0 deletions
diff --git a/tests/libcgrouptest.h b/tests/libcgrouptest.h index 644e176..70f565c 100644 --- a/tests/libcgrouptest.h +++ b/tests/libcgrouptest.h @@ -30,6 +30,7 @@ #include <libcgroup.h> #define SIZE 100 /* Max size of a message to be printed */ +#define NUM_MSGS 10 /* Number of such messsages */ #define PASS 1 /* test passed */ #define FAIL 0 /* test failed */ @@ -55,6 +56,9 @@ enum cgroup_control_val_t { STRING, }; +/* Create a matrix of possible info messages */ +char **info; + int64_t val_int64; u_int64_t val_uint64; bool val_bool; @@ -83,6 +87,11 @@ static inline void message(int num, int pass, char *api, int ret, char *extra); static inline void build_path(char *target, char *mountpoint, char *group, char *file); +/* Allocate memory and populate info messages */ +void set_info_msgs(); +/* Free the allocated memory for info messages */ +void free_info_msgs(); + static inline pid_t cgrouptest_gettid() { return syscall(__NR_gettid); diff --git a/tests/libcgrouptest01.c b/tests/libcgrouptest01.c index bc994ab..efe423a 100644 --- a/tests/libcgrouptest01.c +++ b/tests/libcgrouptest01.c @@ -77,6 +77,9 @@ int main(int argc, char *argv[]) tasks_uid = 0; tasks_gid = 0; + /* Initialize the message buffer with info messages */ + set_info_msgs(); + /* * Testsets: Testcases are broadly devided into 3 categories based on * filesystem(fs) mount scenario. fs not mounted, fs mounted, fs multi @@ -173,6 +176,9 @@ int main(int argc, char *argv[]) cgroup_free(&nullcgroup); cgroup_free(&cgroup1); + /* Free the allocated memory for info messages */ + free_info_msgs(); + break; case FS_MOUNTED: @@ -481,6 +487,9 @@ int main(int argc, char *argv[]) cgroup_free(&cgroup2); cgroup_free(&cgroup3); + /* Free the allocated memory for info messages */ + free_info_msgs(); + break; case FS_MULTI_MOUNTED: @@ -1040,6 +1049,9 @@ int main(int argc, char *argv[]) cgroup_free(&ctl2_cgroup1); cgroup_free(&ctl2_cgroup2); + /* Free the allocated memory for info messages */ + free_info_msgs(); + break; default: @@ -1324,3 +1336,98 @@ static inline void build_path(char *target, char *mountpoint, strncat(target, file, FILENAME_MAX); } } + +/* Initialize the info matrix with possible info messages */ +void set_info_msgs() +{ + info = (char **) malloc(NUM_MSGS * sizeof(char *)); + if (!info) { + printf("Could not allocate memory for msg buffer. Check if" + " system has sufficient memory. Exiting the testcases...\n"); + free_info_msgs(); + exit(1); + } + for (int k = 0; k < NUM_MSGS; ++k) { + info[k] = (char *) malloc(SIZE * sizeof(char)); + if (!info[k]) { + printf("Failed to allocate memory for msg %d. Check " + "your system memory. Exiting the testcases...\n", k); + free_info_msgs(); + exit(1); + } + + /* Is initialization this way ok or just n seqential lines?? */ + switch (k) { + case 0: + strncpy(info[k], " Par: nullcgroup\n", SIZE); + break; + case 1: + strncpy(info[k], " Par: commoncgroup\n", SIZE); + break; + case 2: + strncpy(info[k], " Par: not created group\n", SIZE); + break; + case 3: + strncpy(info[k], " Par: same cgroup\n", SIZE); + break; + case 4: + strncpy(info[k], " Task found in group/s\n", SIZE); + break; + case 5: + strncpy(info[k], " Task not found in group/s\n", SIZE); + break; + case 6: + strncpy(info[k], " Task not found in all" + " groups\n", SIZE); + break; + case 7: + strncpy(info[k], " group found under both" + " controllers\n", SIZE); + break; + case 8: + strncpy(info[k], " group not found under" + " second controller\n", SIZE); + break; + case 9: + strncpy(info[k], " group not found under" + " any controller\n", SIZE); + break; + case 10: + strncpy(info[k], " group modified under" + " both controllers\n", SIZE); + break; + case 11: + strncpy(info[k], " group not modified under" + " second controller\n", SIZE); + break; + case 12: + strncpy(info[k], " group not modified under" + " any controller\n", SIZE); + break; + case 13: + strncpy(info[k], " Group deleted from fs\n", SIZE); + break; + case 14: + strncpy(info[k], " Group not deleted from fs\n", SIZE); + break; + case 15: + strncpy(info[k], " Group not deleted globaly\n", SIZE); + break; + /* Add more messages here and change NUM_MSGS */ + default: + break; + } + } +} + +/* Free the allocated memory for buffers */ +void free_info_msgs() +{ + for (int k = 0; k < NUM_MSGS; ++k) { + if (info[k]) + free(info[k]); + } + + if (info) + free(info); +} |