diff options
-rw-r--r-- | tests/libcgrouptest.h | 2 | ||||
-rw-r--r-- | tests/libcgrouptest01.c | 34 |
2 files changed, 36 insertions, 0 deletions
diff --git a/tests/libcgrouptest.h b/tests/libcgrouptest.h index 1efc4b8..73c4a9b 100644 --- a/tests/libcgrouptest.h +++ b/tests/libcgrouptest.h @@ -20,6 +20,7 @@ #include <errno.h> #include <fcntl.h> +#include <mntent.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -67,6 +68,7 @@ static int set_controller(int controller, char *controller_name, static int group_modified(char *path_control_file, int value_type); struct cgroup *new_cgroup(char *group, char *controller_name, char *control_file, int value_type); +int check_fsmounted(); static inline pid_t cgrouptest_gettid() { diff --git a/tests/libcgrouptest01.c b/tests/libcgrouptest01.c index a57c3ab..2ec63ec 100644 --- a/tests/libcgrouptest01.c +++ b/tests/libcgrouptest01.c @@ -149,6 +149,13 @@ int main(int argc, char *argv[]) case FS_MOUNTED: + /* Do a sanity check if cgroup fs is mounted */ + if (check_fsmounted()) { + printf("Sanity check fails. cgroup fs not mounted\n"); + printf("Exiting without running this set of tests\n"); + exit(1); + } + /* * Test01: call cgroup_attach_task() with null group * without calling cgroup_inti(). We can check other apis too. @@ -570,3 +577,30 @@ struct cgroup *new_cgroup(char *group, char *controller_name, } return newcgroup; } + +int check_fsmounted() +{ + struct mntent *entry, *tmp_entry; + /* Need a better mechanism to decide memory allocation size here */ + char entry_buffer[FILENAME_MAX * 4]; + FILE *proc_file; + + tmp_entry = (struct mntent *) malloc(sizeof(struct mntent *)); + if (!tmp_entry) { + perror("Error: failled to mallloc for mntent\n"); + return 1; + } + + proc_file = fopen("/proc/mounts", "r"); + if (!proc_file) { + printf("Error in opening /proc/mounts.\n"); + return EIO; + } + while ((entry = getmntent_r(proc_file, tmp_entry, entry_buffer, FILENAME_MAX*4)) != NULL) { + if (!strncmp(entry->mnt_type, "cgroup", strlen("cgroup"))) { + printf("sanity check pass.... %s\n", entry->mnt_type); + return 0; + } + } + return 1; +} |