summaryrefslogtreecommitdiffstats
path: root/tests/libcgrouptest01.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/libcgrouptest01.c')
-rw-r--r--tests/libcgrouptest01.c730
1 files changed, 0 insertions, 730 deletions
diff --git a/tests/libcgrouptest01.c b/tests/libcgrouptest01.c
index ae7a6aa..2b1fed3 100644
--- a/tests/libcgrouptest01.c
+++ b/tests/libcgrouptest01.c
@@ -17,31 +17,6 @@
#include "libcgrouptest.h"
#include <errno.h>
-/* The messages that may be useful to the user */
-char info[][SIZE] = {
- " Parameter nullcgroup\n", /* NULLGRP */
- " Parameter commoncgroup\n", /* COMMONGRP */
- " Parameter not created group\n", /* NOTCRTDGRP */
- " Parameter same cgroup\n", /* SAMEGRP */
- " Task found in group/s\n", /* TASKINGRP */
- " Task not found in group/s\n", /* TASKNOTINGRP */
- " Task not found in all groups\n", /* TASKNOTINANYGRP */
- " group found in filesystem\n", /* GRPINFS */
- " group not found in filesystem\n", /* GRPNOTINFS */
- " group found under both controllers\n", /* GRPINBOTHCTLS */
- " group not found under second controller\n", /* GRPNOTIN2NDCTL */
- " group not found under first controller\n", /* GRPNOTIN1STCTL */
- " group modified under both controllers\n", /* GRPMODINBOTHCTLS */
- " group not modified under second controller\n",/* GRPNOTMODIN2NDCTL */
- " group not modified under any controller\n", /* GRPNOTMODINANYCTL */
- " Group deleted from filesystem\n", /* GRPDELETEDINFS */
- " Group not deleted from filesystem\n", /* GRPNOTDELETEDINFS */
- " Group not deleted globally\n", /* GRPNOTDELETEDGLOBALY */
- /* In case there is no extra info messages to be printed */
- "\n", /* NOMESSAGE */
-};
-
-
int cpu, memory;
int fs_mounted;
/* We use mountpoint for single mount.
@@ -666,223 +641,6 @@ int main(int argc, char *argv[])
return 0;
}
-
-void test_cgroup_init(int retcode, int i)
-{
- int retval;
-
- retval = cgroup_init();
- if (retval == retcode)
- message(i, PASS, "init()\t", retval, info[NOMESSAGE]);
- else
- message(i, FAIL, "init()\t", retval, info[NOMESSAGE]);
-}
-
-void test_cgroup_attach_task(int retcode, struct cgroup *cgrp,
- const char *group1, const char *group2,
- int k, int i)
-{
- int retval;
- char tasksfile[FILENAME_MAX], tasksfile2[FILENAME_MAX];
- /* Check, In case some error is expected due to a negative scenario */
- if (retcode) {
- retval = cgroup_attach_task(cgrp);
- if (retval == retcode)
- message(i, PASS, "attach_task()", retval, info[k]);
- else
- message(i, FAIL, "attach_task()", retval, info[k]);
-
- return;
- }
-
- /* Now there is no error and it is a genuine call */
- retval = cgroup_attach_task(cgrp);
- if (retval == 0) { /* API returned success, so perform check */
- build_path(tasksfile, mountpoint,
- group1, "tasks");
-
- if (check_task(tasksfile)) {
- if (fs_mounted == 2) { /* multiple mounts */
- build_path(tasksfile2, mountpoint2,
- group2, "tasks");
- if (check_task(tasksfile2)) {
- message(i, PASS, "attach_task()",
- retval, info[TASKINGRP]);
- } else {
- message(i, FAIL, "attach_task()",
- retval, info[TASKNOTINANYGRP]);
- }
- } else { /* single mount */
- message(i, PASS, "attach_task()",
- retval, info[TASKINGRP]);
- }
- } else {
- message(i, FAIL, "attach_task()", retval,
- info[TASKNOTINGRP]);
- }
- } else {
- message(i, FAIL, "attach_task()", retval, (char *)"\n");
- }
-}
-
-
-struct cgroup *create_new_cgroup_ds(int ctl, const char *grpname,
- int value_type, struct cntl_val_t cval, struct uid_gid_t ids, int i)
-{
- int retval;
- char group[FILENAME_MAX];
- char controller_name[FILENAME_MAX], control_file[FILENAME_MAX];
-
- strncpy(group, grpname, sizeof(group));
- retval = set_controller(ctl, controller_name, control_file);
- if (retval) {
- fprintf(stderr, "Setting controller failled\n");
- return NULL;
- }
-
- switch (ctl) {
- /* control values are controller specific, so will be set
- * accordingly from the config file */
- case CPU:
- strncpy(cval.val_string, "260000", sizeof(cval.val_string));
- break;
-
- case MEMORY:
- strncpy(cval.val_string, "7000064", sizeof(cval.val_string));
- break;
-
- /* To be added for other controllers */
- default:
- printf("Invalid controller name passed. Setting control value"
- " failed. Dependent tests may fail\n");
- return NULL;
- break;
- }
-
- return new_cgroup(group, controller_name, control_file,
- value_type, cval, ids, i);
-}
-
-
-void test_cgroup_create_cgroup(int retcode, struct cgroup *cgrp,
- const char *name, int common, int mpnt, int ign, int i)
-{
- int retval;
- char path1_group[FILENAME_MAX], path2_group[FILENAME_MAX];
- /* Check, In case some error is expected due to a negative scenario */
- if (retcode) {
- retval = cgroup_create_cgroup(cgrp, ign);
- if (retval == retcode)
- message(i, PASS, "create_cgroup()", retval,
- info[NOMESSAGE]);
- else
- message(i, FAIL, "create_cgroup()", retval,
- info[NOMESSAGE]);
-
- return;
- }
-
- /* Now there is no error and it is a genuine call */
- retval = cgroup_create_cgroup(cgrp, ign);
- if (retval) {
- message(i, FAIL, "create_cgroup()", retval, info[NOMESSAGE]);
- return;
- }
-
- /* Let us now check if the group exist in file system */
- if (!common) { /* group only under one mountpoint */
- if (mpnt == 1) /* group under mountpoint */
- build_path(path1_group, mountpoint, name, NULL);
- else /* group under mountpoint2 */
- build_path(path1_group, mountpoint2, name, NULL);
-
- if (group_exist(path1_group) == 0)
- message(i, PASS, "create_cgroup()", retval,
- info[GRPINFS]);
- else
- message(i, FAIL, "create_cgroup()", retval,
- info[GRPNOTINFS]);
-
- } else { /* group under both mountpoints */
- /* Check if the group exists under both controllers */
- build_path(path1_group, mountpoint, name, NULL);
- if (group_exist(path1_group) == 0) {
- build_path(path2_group, mountpoint2, name, NULL);
-
- if (group_exist(path2_group) == 0)
- message(i, PASS, "create_cgroup()",
- retval, info[GRPINBOTHCTLS]);
- else
- message(i, FAIL, "create_cgroup()",
- retval, info[GRPNOTIN2NDCTL]);
- } else {
- message(i, FAIL, "create_cgroup()", retval,
- info[GRPNOTIN1STCTL]);
- }
- }
-
- return;
-}
-
-void test_cgroup_delete_cgroup(int retcode, struct cgroup *cgrp,
- const char *name, int common, int mpnt, int ign, int i)
-{
- int retval;
- char path1_group[FILENAME_MAX], path2_group[FILENAME_MAX];
- /* Check, In case some error is expected due to a negative scenario */
- if (retcode) {
- retval = cgroup_delete_cgroup(cgrp, ign);
- if (retval == retcode)
- message(i, PASS, "delete_cgroup()", retval,
- info[NOMESSAGE]);
- else
- message(i, FAIL, "delete_cgroup()", retval,
- info[NOMESSAGE]);
-
- return;
- }
-
- /* Now there is no error and it is a genuine call */
- retval = cgroup_delete_cgroup(cgrp, ign);
- if (retval) {
- message(i, FAIL, "delete_cgroup()", retval, info[NOMESSAGE]);
- return;
- }
-
- /* Let us now check if the group has been deleted from file system */
- if (!common) { /* check only under one mountpoint */
- if (mpnt == 1) /* check group under mountpoint */
- build_path(path1_group, mountpoint, name, NULL);
- else /* check group under mountpoint2 */
- build_path(path1_group, mountpoint2, name, NULL);
-
- if (group_exist(path1_group) == -1)
- message(i, PASS, "delete_cgroup()", retval,
- info[GRPDELETEDINFS]);
- else
- message(i, FAIL, "delete_cgroup()", retval,
- info[GRPNOTDELETEDINFS]);
-
- } else { /* check group under both mountpoints */
- /* Check if the group deleted under both controllers */
- build_path(path1_group, mountpoint, name, NULL);
- if (group_exist(path1_group) == -1) {
- build_path(path2_group, mountpoint2, name, NULL);
-
- if (group_exist(path2_group) == -1)
- message(i, PASS, "delete_cgroup()",
- retval, info[GRPDELETEDINFS]);
- else
- message(i, FAIL, "delete_cgroup()",
- retval, info[GRPNOTDELETEDGLOBALY]);
- } else {
- message(i, FAIL, "delete_cgroup()", retval,
- info[GRPNOTDELETEDINFS]);
- }
- }
-
-}
-
void test_cgroup_modify_cgroup(int retcode, struct cgroup *cgrp,
const char *name, int which_ctl, int ctl1,
int ctl2, int value_type, int i)
@@ -994,491 +752,3 @@ void test_cgroup_modify_cgroup(int retcode, struct cgroup *cgrp,
return;
}
-
-void get_controllers(const char *name, int *exist)
-{
- int hierarchy, num_cgroups, enabled;
- FILE *fd;
- char subsys_name[FILENAME_MAX];
- fd = fopen("/proc/cgroups", "r");
- if (!fd)
- return;
-
- while (!feof(fd)) {
- fscanf(fd, "%s, %d, %d, %d", subsys_name,
- &hierarchy, &num_cgroups, &enabled);
- if (strncmp(name, subsys_name, sizeof(*name)) == 0)
- *exist = 1;
- }
-
- fclose(fd);
-}
-
-static int group_exist(char *path_group)
-{
- int ret;
- ret = open(path_group, O_DIRECTORY);
- if (ret == -1)
- return ret;
- return 0;
-}
-
-static int set_controller(int controller, char *controller_name,
- char *control_file)
-{
- switch (controller) {
- case MEMORY:
- if (memory == 0)
- return 1;
-
- strncpy(controller_name, "memory", FILENAME_MAX);
- strncpy(control_file, "memory.limit_in_bytes", FILENAME_MAX);
- return 0;
- break;
-
- case CPU:
- if (cpu == 0)
- return 1;
-
- strncpy(controller_name, "cpu", FILENAME_MAX);
- strncpy(control_file, "cpu.shares", FILENAME_MAX);
- return 0;
- break;
-
- case CPUSET:
- strncpy(controller_name, "cpuset", FILENAME_MAX);
- /* What is the exact control file?? */
- strncpy(control_file, "cpuset.mem_exclusive", FILENAME_MAX);
- return 0;
- break;
- /* Future controllers can be added here */
-
- default:
- printf("Invalid controller name passed. Setting controller"
- " failed. Dependent tests may fail\n");
- return 1;
- break;
- }
-}
-
-static int group_modified(char *path_control_file, int value_type,
- struct cntl_val_t cval)
-{
- bool bool_val;
- int64_t int64_val;
- u_int64_t uint64_val;
- char string_val[FILENAME_MAX]; /* Doubt: what should be the size ? */
- FILE *fd;
- int error = 1;
-
- fd = fopen(path_control_file, "r");
- if (!fd) {
- fprintf(stderr, "Error in opening %s\n", path_control_file);
- fprintf(stderr, "Skipping modified values check....\n");
- return 1;
- }
-
- switch (value_type) {
-
- case BOOL:
- fscanf(fd, "%d", &bool_val);
- if (bool_val == cval.val_bool)
- error = 0;
- break;
- case INT64:
- fscanf(fd, "%lld", &int64_val);
- if (int64_val == cval.val_int64)
- error = 0;
- break;
- case UINT64:
- fscanf(fd, "%llu", &uint64_val);
- if (uint64_val == cval.val_uint64)
- error = 0;
- break;
- case STRING:
- fscanf(fd, "%s", string_val);
- if (!strncmp(string_val, cval.val_string, strlen(string_val)))
- error = 0;
- break;
- default:
- fprintf(stderr, "Wrong value_type passed "
- "in group_modified()\n");
- fprintf(stderr, "Skipping modified values check....\n");
- error = 0; /* Can not report test result as failure */
- break;
- }
- fclose(fd);
- return error;
-}
-static int add_control_value(struct cgroup_controller *newcontroller,
- char *control_file, char *wr, int value_type, struct cntl_val_t cval)
-{
- int retval;
-
- switch (value_type) {
-
- case BOOL:
- retval = cgroup_add_value_bool(newcontroller,
- control_file, cval.val_bool);
- snprintf(wr, SIZE, "add_value_bool()");
- break;
- case INT64:
- retval = cgroup_add_value_int64(newcontroller,
- control_file, cval.val_int64);
- snprintf(wr, SIZE, "add_value_int64()");
- break;
- case UINT64:
- retval = cgroup_add_value_uint64(newcontroller,
- control_file, cval.val_uint64);
- snprintf(wr, SIZE, "add_value_uint64()");
- break;
- case STRING:
- retval = cgroup_add_value_string(newcontroller,
- control_file, cval.val_string);
- snprintf(wr, SIZE, "add_value_string()");
- break;
- default:
- printf("ERROR: wrong value in add_control_value()\n");
- return 1;
- break;
- }
- return retval;
-}
-
-struct cgroup *new_cgroup(char *group, char *controller_name,
- char *control_file, int value_type,
- struct cntl_val_t cval, struct uid_gid_t ids, int i)
-{
- int retval;
- char wr[SIZE]; /* Names of wrapper apis */
- struct cgroup *newcgroup;
- struct cgroup_controller *newcontroller;
-
- newcgroup = cgroup_new_cgroup(group);
-
- if (newcgroup) {
- retval = cgroup_set_uid_gid(newcgroup, ids.tasks_uid,
- ids.tasks_gid, ids.control_uid, ids.control_gid);
-
- if (retval) {
- snprintf(wr, SIZE, "set_uid_gid()");
- message(i++, FAIL, wr, retval, info[NOMESSAGE]);
- }
-
- newcontroller = cgroup_add_controller(newcgroup,
- controller_name);
- if (newcontroller) {
- retval = add_control_value(newcontroller,
- control_file, wr, value_type, cval);
-
- if (!retval) {
- message(i++, PASS, "new_cgroup()",
- retval, info[NOMESSAGE]);
- } else {
- message(i++, FAIL, wr, retval,
- info[NOMESSAGE]);
- return NULL;
- }
- } else {
- /* Since these wrappers do not return an int so -1 */
- message(i++, FAIL, "add_controller", -1,
- info[NOMESSAGE]);
- return NULL;
- }
- } else {
- message(i++, FAIL, "new_cgroup", -1, info[NOMESSAGE]);
- return NULL;
- }
- return newcgroup;
-}
-
-int check_fsmounted(int multimnt)
-{
- int count = 0;
- struct mntent *entry, *tmp_entry = NULL;
- /* Need a better mechanism to decide memory allocation size here */
- char entry_buffer[FILENAME_MAX * 4];
- FILE *proc_file = NULL;
- int ret = 1;
-
- tmp_entry = (struct mntent *) malloc(sizeof(struct mntent));
- if (!tmp_entry) {
- perror("Error: failled to mallloc for mntent\n");
- ret = 1;
- goto error;
- }
-
- proc_file = fopen("/proc/mounts", "r");
- if (!proc_file) {
- printf("Error in opening /proc/mounts.\n");
- ret = errno;
- goto error;
- }
- while ((entry = getmntent_r(proc_file, tmp_entry, entry_buffer,
- FILENAME_MAX*4)) != NULL) {
- if (!strncmp(entry->mnt_type, "cgroup", strlen("cgroup"))) {
- count++;
- if (multimnt) {
- if (count >= 2) {
- printf("sanity check pass. %s\n",
- entry->mnt_type);
- ret = 0;
- goto error;
- }
- } else {
- printf("sanity check pass. %s\n",
- entry->mnt_type);
- ret = 0;
- goto error;
- }
- }
- }
-error:
- if (tmp_entry)
- free(tmp_entry);
- if (proc_file)
- fclose(proc_file);
- return ret;
-}
-
-static int check_task(char *tasksfile)
-{
- FILE *file;
- pid_t curr_tid, tid;
- int pass = 0;
-
- file = fopen(tasksfile, "r");
- if (!file) {
- printf("ERROR: in opening %s\n", tasksfile);
- printf("Exiting without running other testcases in this set\n");
- exit(1);
- }
-
- curr_tid = cgrouptest_gettid();
- while (!feof(file)) {
- fscanf(file, "%u", &tid);
- if (tid == curr_tid) {
- pass = 1;
- break;
- }
- }
- fclose(file);
-
- return pass;
-}
-
-static inline void message(int num, int pass, const char *api,
- int retval, char *extra)
-{
- char res[10];
- char buf[2*SIZE];
- if (pass)
- strncpy(res, "PASS :", 10);
- else
- strncpy(res, "FAIL :", 10);
-
- /* Populate message buffer for the api */
- snprintf(buf, sizeof(buf), "cgroup_%s\t\t Ret Value = ", api);
- fprintf(stdout, "TEST%2d:%s %s%d\t%s", num, res, buf, retval, extra);
-}
-
-/* builds the path to target file/group */
-static inline void build_path(char *target, char *mountpoint,
- const char *group, const char *file)
-{
- strncpy(target, mountpoint, FILENAME_MAX);
-
- if (group) {
- strncat(target, "/", FILENAME_MAX - strlen(target));
- strncat(target, group, FILENAME_MAX - strlen(target));
- }
-
- if (file) {
- strncat(target, "/", FILENAME_MAX - strlen(target));
- strncat(target, file, FILENAME_MAX - strlen(target));
- }
-}
-
-void test_cgroup_compare_cgroup(int ctl1, int ctl2, int i)
-{
- int retval;
-
- struct cntl_val_t cval;
- cval.val_int64 = 0;
- cval.val_uint64 = 0;
- cval.val_bool = 0;
- strcpy(cval.val_string, "5000");
-
- struct cgroup *cgroup1, *cgroup2;
- struct cgroup_controller *controller;
- char controller_name[FILENAME_MAX], control_file[FILENAME_MAX];
- char wr[SIZE], extra[] = "in cgroup_compare_cgroup";
-
- retval = cgroup_compare_cgroup(NULL, NULL);
- if (retval)
- message(i++, PASS, "compare_cgroup()", retval, info[NULLGRP]);
- else
- message(i++, FAIL, "compare_cgroup()", retval, info[NULLGRP]);
-
- cgroup1 = cgroup_new_cgroup("testgroup");
- cgroup2 = cgroup_new_cgroup("testgroup");
- cgroup_set_uid_gid(cgroup1, 0, 0, 0, 0);
- cgroup_set_uid_gid(cgroup2, 0, 0, 0, 0);
-
- retval = set_controller(ctl1, controller_name, control_file);
-
- controller = cgroup_add_controller(cgroup1, controller_name);
- if (controller) {
- retval = add_control_value(controller,
- control_file, wr, STRING, cval);
- if (retval)
- message(i++, FAIL, wr, retval, extra);
- }
-
- controller = cgroup_add_controller(cgroup2, controller_name);
- if (controller) {
- retval = add_control_value(controller,
- control_file, wr, STRING, cval);
- if (retval)
- message(i++, FAIL, wr, retval, extra);
- }
-
- retval = cgroup_compare_cgroup(cgroup1, cgroup2);
- if (retval)
- message(i++, FAIL, "compare_cgroup()", retval, info[NOMESSAGE]);
- else
- message(i++, PASS, "compare_cgroup()", retval, info[NOMESSAGE]);
-
- /* Test the api by putting diff number of controllers in cgroups */
- retval = set_controller(ctl2, controller_name, control_file);
- controller = cgroup_add_controller(cgroup2, controller_name);
- if (controller) {
- retval = add_control_value(controller,
- control_file, wr, STRING, cval);
- if (retval)
- message(i++, FAIL, wr, retval, extra);
- }
-
- retval = cgroup_compare_cgroup(cgroup1, cgroup2);
- if (retval == ECGROUPNOTEQUAL)
- message(i++, PASS, "compare_cgroup()", retval, info[NOMESSAGE]);
- else
- message(i++, FAIL, "compare_cgroup()", retval, info[NOMESSAGE]);
-
- cgroup_free(&cgroup1);
- cgroup_free(&cgroup2);
-}
-
-void test_cgroup_get_cgroup(int ctl1, int ctl2, struct uid_gid_t ids, int i)
-{
- struct cgroup *cgroup_filled = NULL, *cgroup_a = NULL, *cgroup_b = NULL;
- struct cgroup_controller *controller = NULL;
- char controller_name[FILENAME_MAX], control_file[FILENAME_MAX];
- struct cntl_val_t cval = {0, 0, 0, "5000"};
- int ret;
-
- /*
- * No need to test the next 3 scenarios again for Multimnt
- * so testing them only under single mount
- */
- if (fs_mounted == FS_MOUNTED) {
- /* 1. Test with nullcgroup first */
- ret = cgroup_get_cgroup(NULL);
- if (ret == ECGROUPNOTALLOWED)
- message(i++, PASS, "get_cgroup()", ret, info[NULLGRP]);
- else
- message(i++, FAIL, "get_cgroup()", ret, info[NULLGRP]);
-
- /* 2. Test with invalid name filled cgroup(non existing) */
- cgroup_filled = cgroup_new_cgroup("nogroup");
- if (!cgroup_filled)
- message(i++, FAIL, "new_cgroup()", 0, info[NOMESSAGE]);
-
- ret = cgroup_get_cgroup(cgroup_filled);
- if (ret)
- message(i++, PASS, "get_cgroup()", ret,
- info[NOTCRTDGRP]);
- else
- message(i++, FAIL, "get_cgroup()", ret,
- info[NOTCRTDGRP]);
- cgroup_free(&cgroup_filled);
-
- /* 3.
- * Test with name filled cgroup. Ensure the group group1 exists
- * in the filesystem before calling this test function
- */
- cgroup_filled = cgroup_new_cgroup("group1");
- if (!cgroup_filled)
- message(i++, FAIL, "new_cgroup()", 0, info[NOMESSAGE]);
-
- ret = cgroup_get_cgroup(cgroup_filled);
- if (!ret)
- message(i++, PASS, "get_cgroup()", ret,
- info[NOMESSAGE]);
- else
- message(i++, FAIL, "get_cgroup()", ret,
- info[NOMESSAGE]);
- }
-
- /* MULTIMOUNT: Create, get and compare a cgroup under both mounts */
-
- /* get cgroup_a ds and create group_a in filesystem */
- cgroup_a = create_new_cgroup_ds(ctl1, "group_a", STRING, cval, ids, 0);
- if (fs_mounted == FS_MULTI_MOUNTED) {
- /* Create under another controller also */
- ret = set_controller(ctl2, controller_name, control_file);
- controller = cgroup_add_controller(cgroup_a, controller_name);
- }
- test_cgroup_create_cgroup(0, cgroup_a, "group_a", 0, 1, 1, 00);
-
- /* create group_b ds to be filled by cgroup_get_cgroup */
- cgroup_b = cgroup_new_cgroup("group_a");
- if (!cgroup_b)
- message(i++, FAIL, "new_cgroup()", 0, info[NOMESSAGE]);
- /* Fill the ds and compare the two */
- ret = cgroup_get_cgroup(cgroup_b);
- if (!ret) {
- ret = cgroup_compare_cgroup(cgroup_a, cgroup_b);
- if (ret == 0)
- message(i++, PASS, "get_cgroup()", ret, info[SAMEGRP]);
- else
- message(i++, FAIL, "get_cgroup()", ret,
- info[NOMESSAGE]);
- } else {
- message(i++, FAIL, "get_cgroup()", ret, info[NOMESSAGE]);
- }
-
- cgroup_free(&cgroup_a);
- cgroup_free(&cgroup_b);
- cgroup_free(&cgroup_filled);
-}
-
-void test_cgroup_add_free_controller(int i)
-{
- struct cgroup *cgroup1 = NULL, *cgroup2 = NULL;
- struct cgroup_controller *cgctl1, *cgctl2;
-
- /* Test with a Null cgroup */
- cgctl1 = cgroup_add_controller(cgroup1, "cpu");
- if (!cgctl1)
- message(i++, PASS, "add_controller()", 0, info[NOMESSAGE]);
- else
- message(i++, FAIL, "add_controller()", -1, info[NOMESSAGE]);
-
- cgroup1 = cgroup_new_cgroup("testgroup");
- cgctl1 = cgroup_add_controller(cgroup1, "cpuset");
- if (cgctl1)
- message(i++, PASS, "add_controller()", 0, info[NOMESSAGE]);
- else
- message(i++, FAIL, "add_controller()", -1, info[NOMESSAGE]);
-
- cgctl2 = cgroup_add_controller(cgroup1, "cpu");
- if (cgctl2)
- message(i++, PASS, "add_controller()", 0, info[NOMESSAGE]);
- else
- message(i++, FAIL, "add_controller()", -1, info[NOMESSAGE]);
-
- cgroup_free(&cgroup1);
- cgroup_free_controllers(cgroup2);
-
-}