From: Tom Hromatka Date: Tue, 22 Feb 2022 20:07:32 +0000 (-0700) Subject: tests: Delete legacy tests X-Git-Tag: v3.1.0~308^2~2^2~49 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c38133553093bca982445c81227920bb97244b58;p=thirdparty%2Flibcgroup.git tests: Delete legacy tests The legacy tests have been moved to libcgroup [1] in the samples/c/ directory. [1] https://github.com/libcgroup/libcgroup Signed-off-by: Tom Hromatka Reviewed-by: Kamalesh Babulal --- diff --git a/Makefile.am b/Makefile.am index 7ce61d7b..b23ba5d8 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,26 +1 @@ -SUBDIRS = ftests gunit tools - -INCLUDES = -I$(top_srcdir)/include -LDADD = $(top_builddir)/src/.libs/libcgroup.la - -libcgrouptest01_SOURCES=libcgrouptest01.c test_functions.c libcgrouptest.h -libcg_ba_SOURCES=libcg_ba.cpp -setuid_SOURCES=setuid.c -walk_test_SOURCES=walk_test.c -read_stats_SOURCES=read_stats.c -walk_task_SOURCES=walk_task.c -get_controller_SOURCES=get_controller.c -get_mount_point_SOURCES=get_mount_point.c -proctest_SOURCES=proctest.c -get_all_controller_SOURCES=get_all_controller.c -get_variable_names_SOURCES=get_variable_names.c -test_named_hierarchy_SOURCES=test_named_hierarchy.c -get_procs_SOURCES=get_procs.c -wrapper_test_SOURCES=wrapper_test.c -logger_SOURCES=logger.c - -EXTRA_DIST = runlibcgrouptest.sh logger.sh - -# The legacy tests have been disabled because they do not successfully run -# on Travis CI. -#TESTS = wrapper_test runlibcgrouptest.sh logger.sh +SUBDIRS = ftests gunit diff --git a/get_all_controller.c b/get_all_controller.c deleted file mode 100644 index d643c986..00000000 --- a/get_all_controller.c +++ /dev/null @@ -1,34 +0,0 @@ -#include -#include -#include - -int main() -{ - int error; - void *handle; - struct controller_data info; - - error = cgroup_init(); - - if (error) { - printf("cgroup_init failed with %s\n", cgroup_strerror(error)); - exit(1); - } - - error = cgroup_get_all_controller_begin(&handle, &info); - - while (error != ECGEOF) { - printf("Controller %10s %5d %5d %5d\n", info.name, - info.hierarchy, info.num_cgroups, info.enabled); - error = cgroup_get_all_controller_next(&handle, &info); - if (error && error != ECGEOF) { - printf("cgroup_get_controller_next failed with %s\n", - cgroup_strerror(error)); - exit(1); - } - } - - error = cgroup_get_all_controller_end(&handle); - - return 0; -} diff --git a/get_controller.c b/get_controller.c deleted file mode 100644 index 1829f5cc..00000000 --- a/get_controller.c +++ /dev/null @@ -1,34 +0,0 @@ -#include -#include -#include - -int main() -{ - int error; - void *handle; - struct cgroup_mount_point info; - - error = cgroup_init(); - - if (error) { - printf("cgroup_init failed with %s\n", cgroup_strerror(error)); - exit(1); - } - - error = cgroup_get_controller_begin(&handle, &info); - - while (error != ECGEOF) { - printf("Controller %s is mounted at %s\n", info.name, - info.path); - error = cgroup_get_controller_next(&handle, &info); - if (error && error != ECGEOF) { - printf("cgroup_get_contrller_next failed with %s", - cgroup_strerror(error)); - exit(1); - } - } - - error = cgroup_get_controller_end(&handle); - - return 0; -} diff --git a/get_mount_point.c b/get_mount_point.c deleted file mode 100644 index b3720927..00000000 --- a/get_mount_point.c +++ /dev/null @@ -1,49 +0,0 @@ -#include -#include -#include -#include -#include - -int main() -{ - int ret; - char *mount_point; - char string[100]; - - strcpy(string, "cpu"); - - ret = cgroup_init(); - if (ret) { - printf("cgroup_init failed with %s\n", cgroup_strerror(ret)); - exit(3); - } - - ret = cgroup_get_subsys_mount_point(string, &mount_point); - if (ret) { - printf("get_mount_point failed with %s\n", - cgroup_strerror(ret)); - exit(3); - } - - printf("The mount point is %s\n", mount_point); - free(mount_point); - - strcpy(string, "obviouslynonexistsubsys"); - - ret = cgroup_get_subsys_mount_point(string, &mount_point); - - if (!ret) { - printf("get_mount_point failed as it got a " - "non existant subsys\n"); - exit(3); - } - - if (ret == ECGROUPNOTEXIST) { - printf("get_mount_point worked as expected\n"); - return 0; - } - - printf("get_mount_point failed with %s\n", cgroup_strerror(ret)); - - return 3; -} diff --git a/get_procs.c b/get_procs.c deleted file mode 100644 index caa84448..00000000 --- a/get_procs.c +++ /dev/null @@ -1,36 +0,0 @@ -#include -#include -#include - -/* - * Assumes the cgroup is already mounted at /cgroup/memory/a - * - * Assumes some processes are already in the cgroup - * - * Assumes it is the memory controller is mounted in at that - * point - */ -int main() -{ - int size; - pid_t *pids; - int ret; - int i; - - ret = cgroup_init(); - if (ret) { - printf("FAIL: cgroup_init failed with %s\n", cgroup_strerror(ret)); - exit(3); - } - - ret = cgroup_get_procs("a", "memory", &pids, &size); - if (ret) { - printf("FAIL: cgroup_get_procs failed with %s\n", cgroup_strerror(ret)); - exit(3); - } - - for (i = 0; i < size; i++) - printf("%u\n", pids[i]); - - return 0; -} diff --git a/get_variable_names.c b/get_variable_names.c deleted file mode 100644 index dc2ef149..00000000 --- a/get_variable_names.c +++ /dev/null @@ -1,59 +0,0 @@ -#include -#include -#include -#include -#include "../src/libcgroup-internal.h" - -int main(int argc, char *argv[]) -{ - int ret; - int i, j; - int count; - char *name; - struct cgroup_controller *group_controller = NULL; - struct cgroup *group = NULL; - char group_name[] = "/"; - - if (argc < 2) { - printf("no list of groups provided\n"); - return -1; - } - - ret = cgroup_init(); - - if (ret) { - printf("cgroup_init failed with %s\n", cgroup_strerror(ret)); - exit(1); - } - - group = cgroup_new_cgroup(group_name); - if (group == NULL) { - printf("cannot create group '%s'\n", group_name); - return -1; - } - - ret = cgroup_get_cgroup(group); - if (ret != 0) { - printf("cannot read group '%s': %s\n", - group_name, cgroup_strerror(ret)); - } - - for (i = 1; i < argc; i++) { - - group_controller = cgroup_get_controller(group, argv[i]); - if (group_controller == NULL) { - printf("cannot find controller "\ - "'%s' in group '%s'\n", argv[i], group_name); - ret = -1; - continue; - } - count = cgroup_get_value_name_count(group_controller); - for (j = 0; j < count; j++) { - name = cgroup_get_value_name(group_controller, j); - if (name != NULL) - printf("%s \n", name); - } - } - - return ret; -} diff --git a/libcg_ba.cpp b/libcg_ba.cpp deleted file mode 100644 index 322794b2..00000000 --- a/libcg_ba.cpp +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright IBM Corporation. 2007 - * - * Author: Balbir Singh - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2.1 of the GNU Lesser General Public License - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Basic acceptance test for libcgroup - Written one late night by Balbir Singh - */ -using namespace std; - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "../config.h" - -#ifdef CGROUP_DBG -#define cgroup_dbg(p...) printf(p...) -#else -#define cgroup_dbg(p...) do {} while (0) -#endif - -namespace cgtest { - -class cg { -private: -public: - cg(); - ~cg() - { } - struct cgroup *makenode(const string &name, const string &task_uid, - const string &task_gid, const string &control_uid, - const string &control_gid); - struct cgroup *makenodefromparent(const string &name); -}; - -cg::cg(void) -{ - int ret; - - ret = cgroup_init(); - if (ret) - throw logic_error("Control Group Initialization failed..." - "Please check that cgroups are mounted and\n" - "at a single place"); -} - -struct cgroup *cg::makenode(const string &name, const string &task_uid, - const string &task_gid, const string &control_uid, - const string &control_gid) -{ - uid_t tuid, cuid; - gid_t tgid, cgid; - char *cgroup_name; - struct cgroup *ccg; - struct cgroup_controller *cpu, *cpuacct; - struct passwd *passwd; - struct group *grp; - int ret; - - passwd = getpwnam(task_uid.c_str()); - if (!passwd) - return NULL; - tuid = passwd->pw_uid; - - grp = getgrnam(task_gid.c_str()); - if (!grp) - return NULL; - tgid = grp->gr_gid; - - passwd = getpwnam(control_uid.c_str()); - if (!passwd) - return NULL; - cuid = passwd->pw_uid; - - grp = getgrnam(control_gid.c_str()); - if (!grp) - return NULL; - cgid = grp->gr_gid; - - cgroup_dbg("tuid %d, tgid %d, cuid %d, cgid %d\n", tuid, tgid, cuid, cgid); - - cgroup_name = (char *) malloc(name.length()); - strncpy(cgroup_name, name.c_str(), name.length() + 1); - - ccg = cgroup_new_cgroup(cgroup_name); - cgroup_set_uid_gid(ccg, tuid, tgid, cuid, cgid); - cpu = cgroup_add_controller(ccg, "cpu"); - cgroup_add_value_uint64(cpu, "cpu.shares", 2048); - cpuacct = cgroup_add_controller(ccg, "cpuacct"); - cgroup_add_value_uint64(cpuacct, "cpuacct.usage", 0); - - - ret = cgroup_create_cgroup(ccg, 1); - if (ret) { - cout << "cg create group failed " << errno << endl; - ret = cgroup_delete_cgroup(ccg, 1); - if (ret) - cout << "cg delete group failed " << errno << endl; - } - return ccg; -} - -struct cgroup *cg::makenodefromparent(const string &name) -{ - char *cgroup_name; - struct cgroup *ccg; - int ret; - - cgroup_name = (char *) malloc(name.length()); - memset(cgroup_name, '\0', name.length()); - strcpy(cgroup_name, name.c_str()); - - ccg = cgroup_new_cgroup(cgroup_name); - ret = cgroup_create_cgroup_from_parent(ccg, 1); - if (ret) { - cout << "cg create group failed " << errno << endl; - ret = cgroup_delete_cgroup(ccg, 1); - if (ret) - cout << "cg delete group failed " << errno << endl; - } - return ccg; -} - -} // namespace - -using namespace cgtest; -int main(int argc, char *argv[]) -{ - try { - cg *app = new cg(); - struct cgroup *ccg, *ccg_child1, *ccg_child2; - ccg = app->makenode("database", "root", "root", "balbir", - "balbir"); - ccg_child1 = app->makenodefromparent("mysql"); - ccg_child2 = app->makenodefromparent("mysql/db1"); - cgroup_free(&ccg); - cgroup_free(&ccg_child1); - cgroup_free(&ccg_child2); - delete app; - } catch (exception &e) { - cout << e.what() << endl; - exit(1); - } - return 0; -} diff --git a/libcgrouptest.h b/libcgrouptest.h deleted file mode 100644 index 98b1ba9c..00000000 --- a/libcgrouptest.h +++ /dev/null @@ -1,158 +0,0 @@ - -/* - * Copyright IBM Corporation. 2008 - * - * Author: Sudhir Kumar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2.1 of the GNU Lesser General Public License - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Description: This file is the header file for libcgroup test programs. - */ - -#ifndef __LIBCGROUPTEST_H -#define __LIBCGROUPTEST_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "../config.h" -#include -#include - -#define SIZE 100 /* Max size of a message to be printed */ -#define NUM_MSGS 20 /* Number of such messsages */ -#define PASS 1 /* test passed */ -#define FAIL 0 /* test failed */ - -enum cgroup_mount_t { - FS_NOT_MOUNTED, - FS_MOUNTED, - FS_MULTI_MOUNTED, -}; - -enum controller_t { - CPU, - MEMORY, - CPUSET, - /* Add new controllers here */ -}; - -enum cgroup_control_val_t { - BOOL, - INT64, - UINT64, - STRING, -}; - -enum info_message_t { - NULLGRP, - COMMONGRP, - NOTCRTDGRP, - SAMEGRP, - TASKINGRP, - TASKNOTINGRP, - TASKNOTINANYGRP, - GRPINFS, - GRPNOTINFS, - GRPINBOTHCTLS, - GRPNOTIN2NDCTL, - GRPNOTIN1STCTL, - GRPMODINBOTHCTLS, - GRPNOTMODIN2NDCTL, - GRPNOTMODINANYCTL, - GRPDELETEDINFS, - GRPNOTDELETEDINFS, - GRPNOTDELETEDGLOBALY, - NOMESSAGE, -}; - -/* Keep a single struct of all ids */ -struct uid_gid_t { - uid_t control_uid; - gid_t control_gid; - uid_t tasks_uid; - gid_t tasks_gid; -}; - -/* Keep a single struct of all control values */ -struct cntl_val_t { - int64_t val_int64; - u_int64_t val_uint64; - bool val_bool; - /* size worth of 100 digit num is fair enough */ - char val_string[100]; /* string value of control parameter */ -}; - -extern int cpu, memory; - -/* The set of verbose messages useful to the user */ -extern char info[NUM_MSGS][SIZE]; - -/* this variable is never modified */ -extern int fs_mounted; - -/* The mountpoints as received from script - * We use mountpoint for single mount. - * For multimount we use mountpoint and mountpoint2. - */ -extern char mountpoint[], mountpoint2[]; - -/* Functions to test each API */ -void test_cgroup_init(int retcode, int i); -void test_cgroup_attach_task(int retcode, struct cgroup *cgroup1, - const char *group1, const char *group2, pid_t pid, - int k, int i); -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); -void test_cgroup_create_cgroup(int retcode, struct cgroup *cgrp, - const char *name, int common, int mpnt, int ign, int i); -void test_cgroup_delete_cgroup(int retcode, struct cgroup *cgrp, - const char *name, int common, int mpnt, int ign, int i); -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); -void test_cgroup_get_cgroup(int ctl1, int ctl2, struct uid_gid_t ids, int i); -/* API test functions end here */ - -void test_cgroup_compare_cgroup(int ctl1, int ctl2, int i); -void test_cgroup_add_free_controller(int i); -void is_subsystem_enabled(const char *name, int *exist); -int group_exist(char *path_group); -int set_controller(int controller, char *controller_name, - char *control_file); -int group_modified(char *path_control_file, int value_type, - struct cntl_val_t cval); -int add_control_value(struct cgroup_controller *newcontroller, - char *control_file, char *wr, int value_type, struct cntl_val_t cval); -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 check_fsmounted(int multimnt); -int check_task(char *tasksfile, pid_t pid); -/* function to print messages in better format */ -void message(int num, int pass, const char *api, - int ret, char *extra); -void build_path(char *target, char *mountpoint, - const char *group, const char *file); -pid_t cgrouptest_gettid(); - -#ifdef CGROUP_DEBUG -#define cgroup_dbg(p...) printf(p) -#else -#define cgroup_dbg(p...) do {} while (0); -#endif - -#endif diff --git a/libcgrouptest01.c b/libcgrouptest01.c deleted file mode 100644 index d7770a09..00000000 --- a/libcgrouptest01.c +++ /dev/null @@ -1,756 +0,0 @@ -/* - * Copyright IBM Corporation. 2008 - * - * Author: Sudhir Kumar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2.1 of the GNU Lesser General Public License - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Description: This file contains the test code for testing libcgroup apis. - */ - -#include "libcgrouptest.h" -#include - -int cpu, memory; -int fs_mounted; -/* We use mountpoint for single mount. - * For multimount we use mountpoint and mountpoint2. - */ -char mountpoint[FILENAME_MAX], mountpoint2[FILENAME_MAX]; - -int main(int argc, char *argv[]) -{ - int retval; - struct uid_gid_t ids = {0}; /* Set default control permissions */ - - struct cntl_val_t cval; - cval.val_int64 = 200000; - cval.val_uint64 = 200000; - cval.val_bool = 1; - strcpy(cval.val_string, "200000"); - - struct cgroup *cgroup1, *cgroup2, *cgroup3, *nullcgroup = NULL; - struct cgroup_controller *sec_controller; - /* In case of multimount for readability we use the controller name - * before the cgroup structure name */ - struct cgroup *ctl1_cgroup1, *ctl2_cgroup1, *ctl2_cgroup2; - struct cgroup *mod_ctl1_cgroup1, *mod_ctl2_cgroup1, *mod_common_cgroup; - struct cgroup *common_cgroup; - char controller_name[FILENAME_MAX], control_file[FILENAME_MAX]; - char path_control_file[FILENAME_MAX]; - - /* Get controllers name from script */ - int ctl1 = CPU, ctl2 = MEMORY; - - if ((argc < 2) || (argc > 6) || (atoi(argv[1]) < 0)) { - printf("ERROR: Wrong no of parameters recieved from script\n"); - printf("Exiting the libcgroup testset\n"); - exit(1); - } - fs_mounted = atoi(argv[1]); - cgroup_dbg("C:DBG: fs_mounted as recieved from script=%d\n", - fs_mounted); - /* All possible controller will be element of an enum */ - if (fs_mounted) { - ctl1 = atoi(argv[2]); - ctl2 = atoi(argv[3]); - strncpy(mountpoint, argv[4], sizeof(mountpoint) - 1); - cgroup_dbg("C:DBG: mountpoint1 as recieved from script=%s\n", - mountpoint); - if (fs_mounted == FS_MULTI_MOUNTED) { - strncpy(mountpoint2, argv[5], sizeof(mountpoint2) - 1); - cgroup_dbg("C:DBG: mountpoint2 as recieved from " - "script=%s\n", mountpoint2); - } - - } - - /* - * check if one of the supported controllers is cpu or memory - */ - is_subsystem_enabled("cpu", &cpu); - is_subsystem_enabled("memory", &memory); - if (cpu == 0 && memory == 0) { - fprintf(stderr, "none of cpu and memory controllers" - " is enabled in kernel\n"); - fprintf(stderr, "Exiting the libcgroup testcases......\n"); - exit(1); - } - - /* - * Testsets: Testcases are broadly devided into 3 categories based on - * filesystem(fs) mount scenario. fs not mounted, fs mounted, fs multi - * mounted. Call different apis in these different scenarios. - */ - - switch (fs_mounted) { - - case FS_NOT_MOUNTED: - - /* - * Test01: call cgroup_init() and check return values - * Exp outcome: error ECGROUPNOTMOUNTED - */ - - test_cgroup_init(ECGROUPNOTMOUNTED, 1); - - /* - * Test02: call cgroup_attach_task() with null group - * Exp outcome: error non zero return value - */ - - test_cgroup_attach_task(ECGROUPNOTINITIALIZED, nullcgroup, - NULL, NULL, 0, NULLGRP, 2); - - /* - * Test03: Create a valid cgroup ds and check all return values - * Exp outcome: no error - */ - - cgroup1 = create_new_cgroup_ds(0, "group1", - STRING, cval, ids, 3); - - /* - * Test04: Then Call cgroup_create_cgroup() with this valid grp - * Exp outcome: non zero return value - */ - test_cgroup_create_cgroup(ECGROUPNOTINITIALIZED, cgroup1, - "group1", 0, 1, 1, 4); - - /* - * Test05: delete cgroup - * Exp outcome: non zero return value but what ? - */ - test_cgroup_delete_cgroup(ECGROUPNOTINITIALIZED, cgroup1, - "group1", 0, 1, 1, 5); - - /* - * Test06: Check if cgroup_create_cgroup() handles a NULL cgroup - * Exp outcome: error ECGROUPNOTALLOWED - */ - test_cgroup_create_cgroup(ECGROUPNOTINITIALIZED, nullcgroup, - "group1", 0, 1, 1, 6); - - /* - * Test07: delete nullcgroup - */ - test_cgroup_delete_cgroup(ECGROUPNOTINITIALIZED, nullcgroup, - "group1", 0, 1, 1, 7); - /* Test08: test the wrapper */ - test_cgroup_add_free_controller(8); - - cgroup_free(&nullcgroup); - cgroup_free(&cgroup1); - - break; - - case FS_MOUNTED: - - /* Do a sanity check if cgroup fs is mounted */ - if (check_fsmounted(0)) { - 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_init(). We can check other apis too. - * Exp outcome: error ECGROUPNOTINITIALIZED - */ - - test_cgroup_attach_task(ECGROUPNOTINITIALIZED, nullcgroup, - NULL, NULL, 0, NULLGRP, 1); - - /* - * Test02: call cgroup_init() and check return values - * Exp outcome: no error. return value 0 - */ - - test_cgroup_init(0, 2); - - /* - * Test03: Call cgroup_attach_task() with null group and check - * if return values are correct. If yes check if task exists in - * root group tasks file - * TODO: This test needs some modification in script - * Exp outcome: current task should be attached to root group - */ - - test_cgroup_attach_task(0, nullcgroup, NULL, NULL, 0, - NULLGRP, 3); - /* - * Test04: Call cgroup_attach_task_pid() with null group - * and invalid pid - * Exp outcome: error - */ - retval = cgroup_attach_task_pid(nullcgroup, -1); - if (retval != 0) - message(4, PASS, "attach_task_pid()", retval, - info[NOMESSAGE]); - else - message(4, FAIL, "attach_task_pid()", retval, - info[NOMESSAGE]); - - /* - * Test05: Create a valid cgroup structure - * Exp outcome: no error. 0 return value - */ - cgroup1 = create_new_cgroup_ds(ctl1, "group1", - STRING, cval, ids, 5); - if (!cgroup1) { - fprintf(stderr, "Failed to create new cgroup ds. " - "Trying with second controller\n"); - cgroup1 = create_new_cgroup_ds(ctl2, "group1", STRING, - cval, ids, 5); - if (!cgroup1) { - fprintf(stderr, "Failed to create cgroup ds. " - "Tests dependent on this structure " - "will fail. So exiting...\n"); - exit(1); - } - } - - /* - * Test06: Then Call cgroup_create_cgroup() with this group - * Exp outcome: zero return value - */ - test_cgroup_create_cgroup(0, cgroup1, "group1", 0, 1, 1, 6); - - /* - * Test07: Call cgroup_attach_task() with valid cgroup and check - * if return values are correct. If yes check if task exists in - * that group's tasks file - * Exp outcome: current task should be attached to that group - */ - - test_cgroup_attach_task(0, cgroup1, "group1", NULL, - 0, NOMESSAGE, 7); - - /* - * Test08: modify cgroup with the same cgroup - * Exp outcome: zero return value. No change. - */ - set_controller(ctl1, controller_name, control_file); - build_path(path_control_file, mountpoint, - "group1", control_file); - strncpy(cval.val_string, "260000", sizeof(cval.val_string)); - retval = cgroup_modify_cgroup(cgroup1); - /* Check if the values are changed. cval contains orig values */ - if (!retval && !group_modified(path_control_file, STRING, cval)) - message(8, PASS, "modify_cgroup()", retval, - info[SAMEGRP]); - else - message(8, FAIL, "modify_cgroup()", retval, - info[SAMEGRP]); - - /* - * Create another valid cgroup structure with same group - * to modify the existing group - */ - cgroup2 = create_new_cgroup_ds(ctl1, "group1", - STRING, cval, ids, 9); - if (!cgroup2) { - fprintf(stderr, "Failed to create new cgroup ds. " - "Trying with second controller\n"); - cgroup2 = create_new_cgroup_ds(ctl2, "group1", - STRING, cval, ids, 9); - if (!cgroup2) { - fprintf(stderr, "Failed to create cgroup ds. " - "Tests dependent on this structure " - "will fail. So exiting...\n"); - exit(1); - } - } - - /* - * Test10: modify cgroup with this new cgroup - * Exp outcome: zero return value - * Drawback: In case of first attempt failure above for - * create_new_cgroup_ds(), this test will fail - */ - test_cgroup_modify_cgroup(0, cgroup2, "group1", - 1, ctl1, ctl2, STRING, 10); - - /* - * Test11: modify cgroup with the null cgroup - * Exp outcome: zero return value. - */ - - test_cgroup_modify_cgroup(ECGROUPNOTALLOWED, nullcgroup, - "group1", 1, ctl1, ctl2, STRING, 11); - - /* - * Create another valid cgroup structure with diff controller - * to modify the existing group - */ - cval.val_int64 = 262144; - cgroup3 = create_new_cgroup_ds(ctl2, "group1", - INT64, cval, ids, 12); - if (!cgroup3) { - fprintf(stderr, "Failed to create new cgroup ds. " - "Tests dependent on this structure " - "will fail. So exiting...\n"); - exit(1); - } - - /* - * Test13: modify existing group with this cgroup - * Exp outcome: zero return value - */ - test_cgroup_modify_cgroup(0, cgroup3, "group1", - 2, ctl1, ctl2, INT64, 13); - - /* Test14: Test cgroup_get_cgroup() api - * The group group1 has been created and modified in the - * filesystem. Read it using the api and check if the values - * are correct as we know all the control values now. - * WARN: If any of the previous api fails and control reaches - * here, this api also will fail. Also the test function assumes - * that "group1" exists in fs. So call cgroup_create_cgroup() - * with "group1" named group before calling this test function. - */ - test_cgroup_get_cgroup(ctl1, ctl2, ids, 14); - - /* - * Test16: delete cgroup - * Exp outcome: zero return value - */ - test_cgroup_delete_cgroup(0, cgroup1, "group1", 0, 1, 1, 16); - - /* - * Test16: Check if cgroup_create_cgroup() handles a NULL cgroup - * Exp outcome: error ECGROUPNOTALLOWED - */ - test_cgroup_create_cgroup(ECGROUPNOTALLOWED, nullcgroup, - "group1", 0, 1, 1, 17); - - /* - * Test16: delete nullcgroup - */ - test_cgroup_delete_cgroup(ECGROUPNOTALLOWED, NULL, - "group1", 0, 1, 1, 18); - - /* Test17: Test the wrapper to compare cgroup - * Create 2 cgroups and test it - */ - test_cgroup_compare_cgroup(ctl1, ctl2, 19); - - cgroup_free(&nullcgroup); - cgroup_free(&cgroup1); - cgroup_free(&cgroup2); - cgroup_free(&cgroup3); - - break; - - case FS_MULTI_MOUNTED: - - /* Do a sanity check if cgroup fs is multi mounted */ - if (check_fsmounted(1)) { - printf("Sanity check fails. cgroup fs is not multi " - "mounted. Exiting without running this set " - "of testcases\n"); - exit(1); - } - - /* - * Test01: call apis and check return values - * Exp outcome: - */ - - /* - * Scenario 1: cgroup fs is multi mounted - * Exp outcome: no error. 0 return value - */ - - test_cgroup_init(0, 1); - - /* - * Test02: Call cgroup_attach_task() with null group and check - * if return values are correct. If yes check if task exists in - * root group tasks file for each controller - * TODO: This test needs some modification in script - * Exp outcome: current task should be attached to root groups - */ - - test_cgroup_attach_task(0, nullcgroup, NULL, NULL, - 0, NULLGRP, 2); - - /* - * Test03: Create a valid cgroup structure - * Exp outcome: no error. 0 return value - */ - ctl1_cgroup1 = create_new_cgroup_ds(ctl1, "ctl1_group1", - STRING, cval, ids, 3); - if (!ctl1_cgroup1) { - fprintf(stderr, "Failed to create new cgroup ds. " - "Tests dependent on this structure " - "will fail. So exiting...\n"); - exit(1); - } - - /* - * Test04: Then Call cgroup_create_cgroup() with this valid grp - * Exp outcome: zero return value - */ - test_cgroup_create_cgroup(0, ctl1_cgroup1, - "ctl1_group1", 0, 1, 1, 4); - - /* - * Test05: Create a valid cgroup structure - * Exp outcome: no error. 0 return value - */ - ctl2_cgroup1 = create_new_cgroup_ds(ctl2, "ctl2_group1", - STRING, cval, ids, 5); - if (!ctl2_cgroup1) { - fprintf(stderr, "Failed to create new cgroup ds. " - "Tests dependent on this structure " - "will fail. So exiting...\n"); - exit(1); - } - - /* - * Test06: Then Call cgroup_create_cgroup() with this valid grp - * Exp outcome: zero return value - */ - test_cgroup_create_cgroup(0, ctl2_cgroup1, - "ctl2_group1", 0, 2, 1, 6); - - /* - * Test07: Call cgroup_create_cgroup() with the same group - * Exp outcome: zero return value as the latest changes in api - */ - test_cgroup_create_cgroup(0, ctl2_cgroup1, - "ctl2_group1", 0, 2, 1, 7); - - /* - * Test06: Call cgroup_attach_task() with a group with ctl1 - * controller and check if return values are correct. If yes - * check if task exists in that group under only ctl1 controller - * hierarchy and in the root group under other controllers - * hierarchy. - */ - - test_cgroup_attach_task(0, ctl1_cgroup1, "ctl1_group1", - NULL, 0, NOMESSAGE, 8); - - /* - * Test07: Call cgroup_attach_task() with a group with ctl2 - * controller and check if return values are correct. If yes - * check if task exists in the groups under both controller's - * hierarchy. - */ - - test_cgroup_attach_task(0, ctl2_cgroup1, "ctl1_group1", - "ctl2_group1", 0, NOMESSAGE, 9); - - /* - * Test: Create a valid cgroup structure - * Exp outcome: no error. 0 return value - */ - ctl2_cgroup2 = create_new_cgroup_ds(ctl2, "ctl2_group2", - STRING, cval, ids, 10); - if (!ctl2_cgroup2) { - fprintf(stderr, "Failed to create new cgroup ds. " - "Tests dependent on this structure " - "will fail. So exiting...\n"); - exit(1); - } - - /* - * Test08: Try to attach a task to this non existing group. - * Group does not exist in fs so should return ECGROUPNOTEXIST - */ - - test_cgroup_attach_task(ECGROUPNOTEXIST, ctl2_cgroup2, - NULL, NULL, 0, NOTCRTDGRP, 11); - - /* - * Create another valid cgroup structure with same group name - * to modify the existing group ctl1_group1 - * Exp outcome: no error. 0 return value - */ - mod_ctl1_cgroup1 = create_new_cgroup_ds(ctl1, "ctl1_group1", - STRING, cval, ids, 12); - if (!mod_ctl1_cgroup1) { - fprintf(stderr, "Failed to create new cgroup ds. " - "Tests dependent on this structure " - "will fail. So exiting...\n"); - exit(1); - } - - /* - * Test09: modify existing cgroup with this new cgroup - * Exp outcome: zero return value and control value modified - */ - test_cgroup_modify_cgroup(0, mod_ctl1_cgroup1, "ctl1_group1", - 1, ctl1, ctl2, STRING, 13); - - /* - * Create another valid cgroup structure with same group name - * to modify the existing group ctl2_group1 - * Exp outcome: no error. 0 return value - */ - mod_ctl2_cgroup1 = create_new_cgroup_ds(ctl2, "ctl2_group1", - STRING, cval, ids, 14); - if (!mod_ctl2_cgroup1) { - fprintf(stderr, "Failed to create new cgroup ds. " - "Tests dependent on this structure " - "will fail. So exiting...\n"); - exit(1); - } - - /* - * Test10: modify existing cgroup with this new cgroup - * Exp outcome: zero return value and control value modified - */ - test_cgroup_modify_cgroup(0, mod_ctl2_cgroup1, "ctl2_group1", - 2, ctl1, ctl2, STRING, 15); - - /* - * Test11: delete cgroups - * Exp outcome: zero return value - */ - test_cgroup_delete_cgroup(0, ctl1_cgroup1, - "ctl1_group1", 0, 1, 1, 16); - - /* - * Test09: delete other cgroups too - * Exp outcome: zero return value - */ - test_cgroup_delete_cgroup(0, ctl2_cgroup1, - "ctl2_group1", 0, 1, 1, 17); - - /* - * Test15: Create a valid cgroup structure - * which has multiple controllers - * Exp outcome: no error. 0 return value - */ - common_cgroup = create_new_cgroup_ds(ctl1, "commongroup", - STRING, cval, ids, 18); - if (!common_cgroup) { - fprintf(stderr, "Failed to create new cgroup ds. " - "Tests dependent on this structure " - "will fail. So exiting...\n"); - exit(1); - } - - /* Add one more controller to the cgroup */ - /* This also needs to be a function.. will do?? */ - retval = set_controller(ctl2, controller_name, control_file); - if (retval) { - fprintf(stderr, "Setting controller failled " - " Exiting without running further testcases\n"); - exit(1); - } - if (!cgroup_add_controller(common_cgroup, controller_name)) { - message(15, FAIL, "add_controller()", retval, - info[NOMESSAGE]); - fprintf(stderr, "Adding second controller failled " - " Exiting without running further testcases\n"); - exit(1); - } - - /* - * Test11: Then Call cgroup_create_cgroup() with this valid grp - * Exp outcome: zero return value - */ - test_cgroup_create_cgroup(0, common_cgroup, - "commongroup", 1, 2, 1, 19); - - /* - * Test12: Call cgroup_attach_task() with this common group - * and check if return values are correct. If yes check if - * task exists in the group under both controller's hierarchy - */ - - test_cgroup_attach_task(0, common_cgroup, "commongroup", - "commongroup", 0, COMMONGRP, 20); - - /* - * Test18: Create a valid cgroup structure to modify the - * commongroup which is under multiple controllers - * Exp outcome: no error. 0 return value - */ - mod_common_cgroup = create_new_cgroup_ds(ctl1, "commongroup", - STRING, cval, ids, 21); - if (!common_cgroup) { - fprintf(stderr, "Failed to create new cgroup ds. " - "Tests dependent on this structure " - "will fail. So exiting...\n"); - exit(1); - } - - /* Add one more controller to the cgroup */ - /* This also needs to be a function.. will do?? */ - retval = set_controller(ctl2, controller_name, control_file); - if (retval) { - fprintf(stderr, "Setting controller failled " - " Exiting without running further testcases\n"); - exit(1); - } - sec_controller = cgroup_add_controller(mod_common_cgroup, - controller_name); - if (!sec_controller) { - message(18, FAIL, "add_controller()", retval, - info[NOMESSAGE]); - fprintf(stderr, "Adding second controller failled " - " Exiting without running further testcases\n"); - exit(1); - } - - strncpy(cval.val_string, "7000064", sizeof(cval.val_string)); - retval = cgroup_add_value_string(sec_controller, - control_file, cval.val_string); - if (retval) - printf("The cgroup_modify_cgroup() test will fail\n"); - - /* - * Test14: modify existing cgroup with this new cgroup - * Exp outcome: zero return value and control value modified - */ - test_cgroup_modify_cgroup(0, mod_common_cgroup, "commongroup", - 0, ctl1, ctl2, STRING, 22); - - /* - * Test15: delete this common cgroup - * Exp outcome: zero return value - */ - test_cgroup_delete_cgroup(0, common_cgroup, - "commongroup", 1, 2, 1, 23); - test_cgroup_get_cgroup(ctl1, ctl2, ids, 24); - - /* Free the cgroup structures */ - cgroup_free(&nullcgroup); - cgroup_free(&ctl1_cgroup1); - cgroup_free(&ctl2_cgroup1); - cgroup_free(&ctl2_cgroup2); - - break; - - default: - fprintf(stderr, "ERROR: Wrong parameters recieved from script. \ - Exiting tests\n"); - exit(1); - break; - } - return 0; -} - -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) -{ - int retval; - struct cntl_val_t cval = {0, 0, 0, "1000"}; - char path1_control_file[FILENAME_MAX], path2_control_file[FILENAME_MAX]; - char controller_name[FILENAME_MAX], control_file[FILENAME_MAX]; - - /* Check, In case some error is expected due to a negative scenario */ - if (retcode) { - retval = cgroup_modify_cgroup(cgrp); - if (retval == retcode) - message(i, PASS, "modify_cgroup()", retval, - info[NOMESSAGE]); - else - message(i, FAIL, "modify_cgroup()", retval, - info[NOMESSAGE]); - - return; - } - - /* Now there is no error and it is a genuine call */ - retval = cgroup_modify_cgroup(cgrp); - if (retval) { - message(i, FAIL, "modify_cgroup()", retval, info[NOMESSAGE]); - return; - } - - /* Let us now check if the group modified in file system */ - switch (which_ctl) { /* group modified under which controllers */ - - case 1: /* group is modified under ctl1 which is always - * mounted at mountpoint in both cases */ - set_controller(ctl1, controller_name, control_file); - build_path(path1_control_file, mountpoint, name, control_file); - /* this approach will be changed in coming patches */ - strncpy(cval.val_string, "260000", sizeof(cval.val_string)); - - if (!group_modified(path1_control_file, value_type, cval)) - message(i, PASS, "modify_cgroup()", retval, - info[NOMESSAGE]); - else - message(i, FAIL, "modify_cgroup()", retval, - info[NOMESSAGE]); - - break; - case 2: /* group is modified under ctl2 which may be - * mounted at mountpoint or mountpoint2 */ - set_controller(ctl2, controller_name, control_file); - - if (fs_mounted == FS_MOUNTED) /* group under mountpoint */ - build_path(path2_control_file, mountpoint, - name, control_file); - else /* group under mountpoint2 */ - build_path(path2_control_file, mountpoint2, - name, control_file); - - /* this approach will be changed in coming patches */ - strncpy(cval.val_string, "7000064", sizeof(cval.val_string)); - cval.val_int64 = 262144; - if (!group_modified(path2_control_file, value_type, cval)) - message(i, PASS, "modify_cgroup()", retval, - info[NOMESSAGE]); - else - message(i, FAIL, "modify_cgroup()", retval, - info[NOMESSAGE]); - - break; - case 0: - /* ctl1 is always mounted at mountpoint */ - set_controller(ctl1, controller_name, control_file); - build_path(path1_control_file, mountpoint, - name, control_file); - /* ctl2 may be mounted at mountpoint or mountpoint2 depending - * on single or multiple mount case */ - if (fs_mounted == FS_MOUNTED) { /* group under mountpoint */ - set_controller(ctl2, controller_name, control_file); - build_path(path2_control_file, mountpoint, - name, control_file); - } else { /* group under mountpoint2 */ - set_controller(ctl2, controller_name, control_file); - build_path(path2_control_file, mountpoint2, - name, control_file); - } - /* this approach will be changed in coming patches */ - strncpy(cval.val_string, "260000", sizeof(cval.val_string)); - if (!group_modified(path1_control_file, value_type, cval)) { - strncpy(cval.val_string, "7000064", - sizeof(cval.val_string)); - if (!group_modified(path2_control_file, - value_type, cval)) - message(i, PASS, "modify_cgroup()", - retval, info[GRPMODINBOTHCTLS]); - else - message(i, FAIL, "modify_cgroup()", - retval, info[GRPNOTMODIN2NDCTL]); - } else { - message(i, FAIL, "modify_cgroup()", retval, - info[GRPNOTMODINANYCTL]); - } - - break; - default: - printf("Wrong controller parameter received....\n"); - message(i, FAIL, "modify_cgroup()", retval, info[NOMESSAGE]); - break; - } - - return; -} diff --git a/logger.c b/logger.c deleted file mode 100644 index b7f1b702..00000000 --- a/logger.c +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright Red Hat Inc., 2012 - * - * Author: Jan Safranek - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2.1 of the GNU Lesser General Public License - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Description: This file contains the test code for libcgroup logging. - */ - -#include "config.h" -#include "libcgroup.h" -#include "../src/libcgroup-internal.h" -#include -#include - -static void mylogger(void *userdata, int loglevel, const char *fmt, va_list ap) -{ - printf("custom: "); - vprintf(fmt, ap); -} - -int main(int argc, char **argv) -{ - int custom = 0; - int loglevel = -1; - int i; - - for (i = 1; i < argc; i++) { - if (strcmp("custom", argv[i]) == 0) - custom = 1; - else - loglevel = atoi(argv[i]); - } - - if (custom) - cgroup_set_logger(mylogger, loglevel, NULL); - else - cgroup_set_default_logger(loglevel); - - cgroup_dbg("DEBUG message\n"); - cgroup_info("INFO message\n"); - cgroup_warn("WARNING message\n"); - cgroup_err("ERROR message\n"); - - return 0; -} diff --git a/logger.sh b/logger.sh deleted file mode 100755 index b3c82a54..00000000 --- a/logger.sh +++ /dev/null @@ -1,137 +0,0 @@ -#!/bin/bash -# Test various log levels - -export LOGFILE= -export RET=0 -unset CGROUP_LOGLEVEL - -function run_logger() -{ - LOGFILE=`mktemp` - echo "Running CGROUP_LOGLEVEL=$CGROUP_LOGLEVEL logger $* >$LOGFILE" - ./logger $* >$LOGFILE -} - -function assert_grep() -{ - if ! grep "$@" <$LOGFILE >/dev/null; then - echo "Error: expecting $* in output" - RET=1 - fi -} - -function assert_not_grep() -{ - if grep "$@" <$LOGFILE >/dev/null; then - echo "Error: unexptected $* in output" - RET=1 - fi -} - -# CGROUP_LOGLEVEL is case-insensitive -CGROUP_LOGLEVEL=DeBuG run_logger -1 -assert_grep "^DEBUG message" -assert_grep "^INFO message" -assert_grep "^WARNING message" -assert_grep "^ERROR message" -rm $LOGFILE - -# missing CGROUP_LOGLEVEL leads to ERRORs only -run_logger -1 -assert_not_grep "^DEBUG message" -assert_not_grep "^INFO message" -assert_not_grep "^WARNING message" -assert_grep "^ERROR message" -rm $LOGFILE - -# wrong CGROUP_LOGLEVEL leads to ERRORs only -CGROUP_LOGLEVEL=xyz run_logger -1 -assert_not_grep "^DEBUG message" -assert_not_grep "^INFO message" -assert_not_grep "^WARNING message" -assert_grep "^ERROR message" -rm $LOGFILE - -# numeric CGROUP_LOGLEVEL -CGROUP_LOGLEVEL=3 run_logger -1 -assert_not_grep "^DEBUG message" -assert_grep "^INFO message" -assert_grep "^WARNING message" -assert_grep "^ERROR message" -rm $LOGFILE - -# errors only CGROUP_LOGLEVEL -CGROUP_LOGLEVEL=ERROR run_logger -1 -assert_not_grep "^DEBUG message" -assert_not_grep "^INFO message" -assert_not_grep "^WARNING message" -assert_grep "^ERROR message" -rm $LOGFILE - -# no CGROUP_LOGLEVEL -> DEBUG -run_logger 4 -assert_grep "^DEBUG message" -assert_grep "^INFO message" -assert_grep "^WARNING message" -assert_grep "^ERROR message" -rm $LOGFILE - -# no CGROUP_LOGLEVEL -> INFO -run_logger 3 -assert_not_grep "^DEBUG message" -assert_grep "^INFO message" -assert_grep "^WARNING message" -assert_grep "^ERROR message" -rm $LOGFILE - -# no CGROUP_LOGLEVEL -> WARN -run_logger 2 -assert_not_grep "^DEBUG message" -assert_not_grep "^INFO message" -assert_grep "^WARNING message" -assert_grep "^ERROR message" -rm $LOGFILE - -# no CGROUP_LOGLEVEL -> ERROR -run_logger 1 -assert_not_grep "^DEBUG message" -assert_not_grep "^INFO message" -assert_not_grep "^WARNING message" -assert_grep "^ERROR message" -rm $LOGFILE - -# no CGROUP_LOGLEVEL -> nothing -run_logger 0 -assert_not_grep "^DEBUG message" -assert_not_grep "^INFO message" -assert_not_grep "^WARNING message" -assert_not_grep "^ERROR message" -rm $LOGFILE - - -# custom logger -> DEBUG -run_logger custom 4 -assert_grep "^custom: DEBUG message" -assert_grep "^custom: INFO message" -assert_grep "^custom: WARNING message" -assert_grep "^custom: ERROR message" -rm $LOGFILE - -# custom logger -> INFO -run_logger custom 3 -assert_not_grep "^custom: DEBUG message" -assert_grep "^custom: INFO message" -assert_grep "^custom: WARNING message" -assert_grep "^custom: ERROR message" -rm $LOGFILE - -# custom logger -> WARN -run_logger custom 2 -assert_not_grep "^custom: DEBUG message" -assert_not_grep "^custom: INFO message" -assert_grep "^custom: WARNING message" -assert_grep "^custom: ERROR message" -rm $LOGFILE - -exit $RET - diff --git a/proctest.c b/proctest.c deleted file mode 100644 index 8e840c1e..00000000 --- a/proctest.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright NEC Soft Ltd. 2009 - * - * Author: Ken'ichi Ohmichi - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2.1 of the GNU Lesser General Public License - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include -#include -#include "../src/libcgroup-internal.h" - -int main(int argc, char *argv[]) -{ - int i; - int ret; - pid_t pid; - uid_t uid; - gid_t gid; - char *procname; - - if (argc < 2) { - printf("Specify process-id.\n"); - return 1; - } - printf(" Pid | Process name | Uid | Gid \n"); - printf("-------+----------------------------------+-------+-------\n"); - - for (i = 1; i < argc; i++) { - pid = atoi(argv[i]); - - ret = cgroup_get_uid_gid_from_procfs(pid, &uid, &gid); - if (ret) { - printf("%6d | ret = %d\n", pid, ret); - continue; - } - ret = cgroup_get_procname_from_procfs(pid, &procname); - if (ret) { - printf("%6d | ret = %d\n", pid, ret); - continue; - } - printf("%6d | %32s | %5d | %5d\n", pid, procname, uid, gid); - free(procname); - } - return 0; -} diff --git a/read_stats.c b/read_stats.c deleted file mode 100644 index 0583039d..00000000 --- a/read_stats.c +++ /dev/null @@ -1,84 +0,0 @@ -#include -#include -#include -#include -#include -#include - -int read_stats(char *path, char *controller) -{ - int ret; - void *handle; - struct cgroup_stat stat; - - ret = cgroup_read_stats_begin(controller, path, &handle, &stat); - - if (ret != 0) { - fprintf(stderr, "stats read failed\n"); - return -1; - } - - printf("Stats for %s:\n", path); - printf("%s: %s", stat.name, stat.value); - - while ((ret = cgroup_read_stats_next(&handle, &stat)) != - ECGEOF) { - printf("%s: %s", stat.name, stat.value); - } - - cgroup_read_stats_end(&handle); - printf("\n"); - return 0; -} - -int main(int argc, char *argv[]) -{ - int ret; - char *controller; - void *handle; - struct cgroup_file_info info; - int lvl; - char cgroup_path[FILENAME_MAX]; - int root_len; - - if (argc < 2) { - fprintf(stderr, "Usage %s: \n", - argv[0]); - exit(EXIT_FAILURE); - } - - controller = argv[1]; - - ret = cgroup_init(); - if (ret != 0) { - fprintf(stderr, "init failed\n"); - exit(EXIT_FAILURE); - } - - ret = cgroup_walk_tree_begin(controller, "/", 0, &handle, &info, &lvl); - - if (ret != 0) { - fprintf(stderr, "Walk failed\n"); - exit(EXIT_FAILURE); - } - - root_len = strlen(info.full_path) - 1; - strncpy(cgroup_path, info.path, FILENAME_MAX - 1); - ret = read_stats(cgroup_path, controller); - if (ret < 0) - exit(EXIT_FAILURE); - - while ((ret = cgroup_walk_tree_next(0, &handle, &info, lvl)) != - ECGEOF) { - if (info.type != CGROUP_FILE_TYPE_DIR) - continue; - strncpy(cgroup_path, info.full_path + root_len, FILENAME_MAX - 1); - strcat(cgroup_path, "/"); - ret = read_stats(cgroup_path, controller); - if (ret < 0) - exit(EXIT_FAILURE); - } - cgroup_walk_tree_end(&handle); - - return EXIT_SUCCESS; -} diff --git a/runlibcgrouptest.sh.in b/runlibcgrouptest.sh.in deleted file mode 100755 index 119addd2..00000000 --- a/runlibcgrouptest.sh.in +++ /dev/null @@ -1,444 +0,0 @@ -#!/bin/bash -# usage ./runlibcgrouptest.sh -# Copyright IBM Corporation. 2008 -# -# Author: Sudhir Kumar -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of version 2.1 of the GNU Lesser General Public License -# as published by the Free Software Foundation. -# -# This program is distributed in the hope that it would be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -# Description: This script runs the the basic tests for testing libcgroup apis. -# - -# TODO path to config.h have to be set properly -OPAQUE_HIERARCHY=`grep "OPAQUE_HIERARCHY" @abs_top_srcdir@/config.h |\ - cut -d" " -f3 | sed 's|\"||g'` -DEBUG=false; # for debug messages -FS_MOUNTED=0; # 0 for not mounted, 1 for mounted, 2 for multimounted -MOUNTPOINT=/dev/cgroup_controllers; # Just to initialize -TARGET=/dev/cgroup_controllers; -CONTROLLERS=cpu,memory; -NUM_MOUNT=1; # Number of places to be mounted on -MULTIMOUNT=false; # mounted at one point only -NUM_CTLRS=0; # num of controllers supported -CTLR1=""; -CTLR2=""; -CPU=""; -MEMORY=""; -SKIP_TEST=77 -RET=0 - -declare -a allcontrollers; -declare -a targets; - -debug() -{ - # Function parameter is the string to print out - if $DEBUG - then - echo SH:DBG: $1; - fi -} - -check_mount_fs () -{ - local NUM_MOUNT=0; - CGROUP=`cat /proc/mounts|grep -w ^cgroup|tr -s [:space:]|cut -d" " -f3`; - - # get first word in case of multiple mounts - CGROUP=`echo $CGROUP|cut -d" " -f1`; - - debug "check_mount_fs(): CGROUP is $CGROUP"; - if [ "$CGROUP" = "cgroup" ] - then - NUM_MOUNT=`cat /proc/mounts|grep -w ^cgroup|wc -l`; - debug "check_mount_fs(): fs mounted at $NUM_MOUNT places"; - - if [ $NUM_MOUNT -eq 1 ] - then - FS_MOUNTED=1; - else - # Any number of mounts is multi mount - FS_MOUNTED=2; - fi; - return 0; # True - else - FS_MOUNTED=0; - return 1; # false - fi -} - -umount_fs () -{ - PROC_ENTRY_NUMBER=`cat /proc/mounts|grep ^cgroup | wc -l`; - NUMBER=1; - #go and remove all ot opaque mount points - while [ $PROC_ENTRY_NUMBER -ge $NUMBER ] - do - # Get $NUMBER-th mountpoint in case of multiple mount - PROC_ENTRY=`cat /proc/mounts|grep ^cgroup|\ - tr -s [:space:]|cut -d" " -f2 |\ - head -n$NUMBER | tail -n1`; - # if the hierarchy is opaque skip to next item - if [ -n "$OPAQUE_HIERARCHY" ] - then - # find whether is the NUMBER-th item opaque - PROC_ENTRY_OPT=`cat /proc/mounts|grep ^cgroup|\ - tr -s [:space:]|cut -d" " -f4 |\ - head -n$NUMBER | tail -n1`; - echo $PROC_ENTRY_OPT | grep $OPAQUE_HIERARCHY - # if yes skip it to the next item - if [ $? -eq 0 ] - then - let NUMBER=$NUMBER+1 - continue - fi; - fi; - # remove the item - if [ ! -z "$PROC_ENTRY" ] - then - TARGET=$PROC_ENTRY; - # Need to take care of running tasks in any group ?? - rmdir $TARGET/* 2> /dev/null ; - umount $TARGET; - rmdir $TARGET; - debug "umounted $TARGET"; - fi; - # go to the next item - let NUMBER=$NUMBER+1 - done; - FS_MOUNTED=0; - TARGET=/dev/cgroup_controllers; #?? - echo "Cleanup done"; -} - -# Put all the supported controllers in an array -# We have the priority for cpu and memory controller. So prefer to mount -# them if they exist -get_all_controllers() -{ - while [ 1 ]; do - read line || break; - if ! echo $line | grep -q ^# - then - allcontrollers[$NUM_CTLRS]=`echo $line | cut -d" " -f1`; - if [ ${allcontrollers[$NUM_CTLRS]} == "cpu" ]; then - CPU="cpu"; - elif [ ${allcontrollers[$NUM_CTLRS]} == "memory" ]; then - MEMORY="memory"; - fi; - debug "controller: ${allcontrollers[$NUM_CTLRS]}"; - NUM_CTLRS=`expr $NUM_CTLRS + 1`; - fi - done < /proc/cgroups; - debug "Total controllers $NUM_CTLRS"; -} - -# Get a second controller other than cpu or memory -get_second_controller() -{ - local i=0; - while [ $i -lt $NUM_CTLRS ] - do - if [ "${allcontrollers[$i]}" != "cpu" ] && - [ "${allcontrollers[$i]}" != "memory" ] - then - CTLR2=${allcontrollers[$i]}; - return 0; - fi; - i=`expr $i + 1`; - done; -} - -# Check if kernel is not having any of the controllers enabled -no_controllers() -{ - # prefer if cpu and memory controller are enabled - if [ ! -z $CPU ] && [ ! -z $MEMORY ] - then - CONTROLLERS=$CPU,$MEMORY ; - CTLR1=$CPU; - CTLR2=$MEMORY; - debug "first controller is $CTLR1"; - debug "second controller is $CTLR2"; - return 1; # false - elif [ ! -z $CPU ] - then - CONTROLLERS=$CPU ; - CTLR1=$CPU; - get_second_controller; - debug "first controller is $CTLR1"; - debug "second controller is $CTLR2"; - return 1; # false - elif [ ! -z $MEMORY ] - then - CONTROLLERS=$MEMORY ; - CTLR1=$MEMORY; - get_second_controller; - debug "first controller is $CTLR1"; - debug "second controller is $CTLR2"; - return 1; # false - fi; - # Kernel has neither cpu nor memory controller enabled. So there is - # no point in running the testcases. At least one of them should be - # supported.(or should I run testcases with controllers such as - # ns, devices etc? Thoughts???) - if [ $NUM_CTLRS -lt 2 ] - then - echo "Kernel needs to have 2 controllers enabled"; - echo "Recompile your kernel with at least 2 controllers" - echo "Exiting the tests....."; - exit $SKIP_TEST; - fi; - - return 0; # true -} - - -mount_fs () -{ - local NUM_MOUNT=0; # On how many places to mount on - local CUR_MOUNT=1; - FS_MOUNTED=0; - - # Check if kernel has controllers enabled - if no_controllers - then - echo "Kernel has none of cpu/memory controllers enabled"; - echo "Recompile your kernel with at least one of these enabled" - echo "Exiting the tests....."; - exit $SKIP_TEST; - fi; - - # At least one Controller is enabled. So proceed further. - if [ -z $1 ] - then - echo "WARN: No parameter passed to function mount_fs"; - echo "taking default as 0....So not mounting cgroup fs"; - else - NUM_MOUNT=$1; - debug "mount_fs fs will be mounted on $NUM_MOUNT places"; - fi; - - # create so many directories i.e. mountpoints - while [ $NUM_MOUNT -ge $CUR_MOUNT ] - do - NEWTARGET="$TARGET-$CUR_MOUNT"; - if [ -e $NEWTARGET ] - then - echo "WARN: $NEWTARGET already exist..overwriting"; - check_mount_fs; # Possibly fs might be mounted on it - if [ $FS_MOUNTED -gt 0 ] - then - umount_fs; - else - rmdir $NEWTARGET ; - fi; - fi; - mkdir $NEWTARGET; - - # In case of multimount, mount controllers at diff points - if $MULTIMOUNT ; then - if [ $CTLR1 ] && [ $CTLR2 ] ; then - if [ $CUR_MOUNT -eq 1 ] ; then - CONTROLLERS=$CTLR1; - else - CONTROLLERS=$CTLR2; - fi; - else - echo "Only 1 controler enabled in kernel"; - echo "So not running multiple mount testcases"; - exit $SKIP_TEST; - fi; - fi; - - mount -t cgroup -o $CONTROLLERS cgroup $NEWTARGET; - if [ $? -ne 0 ] - then - echo "ERROR: in mounting cgroup fs on $NEWTARGET." - echo "Exiting test"; - umount_fs; - exit -1; - fi; - target[$CUR_MOUNT]=$NEWTARGET; - CUR_MOUNT=`expr $CUR_MOUNT + 1`; - FS_MOUNTED=`expr $FS_MOUNTED + 1`; - - # Group created earlier may again be visible if not cleaned. - # So clean them all - if [ -e $NEWTARGET/group1 ] # first group that is created - then - # Need to handle if tasks are running in them - rmdir $NEWTARGET/group* - echo "WARN: Earlier groups found and removed..."; - fi; - - debug "$CONTROLLERS controllers mounted on $NEWTARGET directory" - done; - - if [ $FS_MOUNTED -gt 2 ] - then - FS_MOUNTED=2; - fi; - -} - -get_ctl_num() -{ - ctl1=$1; - ctl2=$2; - if [ -z $ctl1 ] || [ -z $ctl2 ]; then - echo "Null controller passed to function get_ctl_num" - echo "Exiting the testcases....." - fi - - # Add any new controller developed here - declare -a ctl_list; - # Following list has to be in sync with enums in header - ctl_list[0]="cpu"; - ctl_list[1]="memory"; - ctl_list[2]="cpuset"; - - local i=0; - while [ ! -z ${ctl_list[$i]} ]; do - if [ "${ctl_list[$i]}" == "$ctl1" ]; then - ctl1=$i; - fi; - - if [ "${ctl_list[$i]}" == "$ctl2" ]; then - ctl2=$i; - fi; - i=`expr $i + 1`; - done; -} - -runtest() -{ - MOUNT_INFO=$1; - TEST_EXEC=$2; - if [ -f $TEST_EXEC ] - then - ./$TEST_EXEC $MOUNT_INFO $ctl1 $ctl2 ${target[1]} ${target[2]}; - if [ $? -ne 0 ] - then - echo Error in running ./$TEST_EXEC - echo Exiting tests. - else - PID=$!; - fi; - else - echo Sources not compiled. please run make; - fi -} - -############################### -# Main starts here - # Check if kernel has controllers support - if [ -e /proc/cgroups ] - then - get_all_controllers; - else - echo "Your Kernel seems to be too old. Plz recompile your" - echo "Kernel with cgroups and appropriate controllers enabled" - echo " Exiting the testcases...." - exit $SKIP_TEST; - fi; - - MY_ID=`id -u` - if [ $MY_ID -ne 0 ]; then - echo "Only root can start this script." - echo " Exiting the testcase..." - exit $SKIP_TEST - fi - -# TestSet01: Run tests without mounting cgroup filesystem - echo; - echo Running first set of testcases; - echo ============================== - FS_MOUNTED=0; - FILE=libcgrouptest01; - check_mount_fs; - # unmount fs if already mounted - if [ $FS_MOUNTED -ne 0 ] - then - umount_fs; - fi; - debug "FS_MOUNTED = $FS_MOUNTED" - runtest $FS_MOUNTED $FILE - - wait $PID; - RC=$?; - if [ $RC -ne 0 ] - then - echo Test binary $FILE exited abnormaly with return value $RC; - # Do not exit here. Failure in this case does not imply - # failure in other cases also - RET=$RC - fi; - -# TestSet02: Run tests with mounting cgroup filesystem - echo; - echo Running second set of testcases; - echo ============================== - FILE=libcgrouptest01; - check_mount_fs; - # mount fs at one point if not already mounted or multimounted - NUM_MOUNT=1; - if [ $FS_MOUNTED -eq 0 ] - then - mount_fs $NUM_MOUNT; - elif [ $FS_MOUNTED -gt 1 ] - then - umount_fs; - mount_fs $NUM_MOUNT; - fi; - debug "FS_MOUNTED = $FS_MOUNTED" - get_ctl_num $CTLR1 $CTLR2; - runtest $FS_MOUNTED $FILE - - wait $PID; - RC=$?; - if [ $RC -ne 0 ] - then - echo Test binary $FILE exited abnormaly with return value $RC; - RET=$RC - fi; - umount_fs; - - -# TestSet03: Run tests with mounting cgroup filesystem at multiple points - echo; - echo Running third set of testcases; - echo ============================== - FILE=libcgrouptest01; - check_mount_fs; - # mount fs at multiple points - MULTIMOUNT=true; - NUM_MOUNT=2; - if [ $FS_MOUNTED -eq 0 ] - then - mount_fs $NUM_MOUNT; - elif [ $FS_MOUNTED -eq 1 ] - then - umount_fs; - mount_fs $NUM_MOUNT; - fi; - debug "FS_MOUNTED = $FS_MOUNTED" - get_ctl_num $CTLR1 $CTLR2; - runtest $FS_MOUNTED $FILE - - wait $PID; - RC=$?; - if [ $RC -ne 0 ] - then - echo Test binary $FILE exited abnormaly with return value $RC; - RET=$RC - fi; - umount_fs; - - exit $RET; diff --git a/setuid.c b/setuid.c deleted file mode 100644 index 02916e41..00000000 --- a/setuid.c +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright Red Hat Inc. 2008 - * - * Author: Steve Olivieri - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2.1 of the GNU Lesser General Public License - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -/* - * This is just a simple program for changing a UID or a GID. Comment out - * whichever block you don't want to use. - */ -int main(int argc, char *argv[]) -{ - /* User data */ - struct passwd *pwd; - - /* UID of user */ - uid_t uid; - - /* Return codes */ - int ret = 0; - - if (argc < 2) { - printf("Usage: %s \n", argv[0]); - goto finished; - } - - pwd = getpwnam(argv[1]); - if (!pwd) { - fprintf(stderr, "getpwnam() failed: %s\n", - strerror(errno)); - ret = -errno; - goto finished; - } - uid = pwd->pw_uid; - fprintf(stdout, "Setting UID to %s (%d).\n", pwd->pw_name, uid); - if ((ret = setuid(uid))) { - fprintf(stderr, "Call to setuid() failed with error: %s\n", - strerror(errno)); - ret = -errno; - goto finished; - } - -// while(1) { -// grp = getgrnam("root"); -// gid = grp->gr_gid; -// fprintf(stdout, "Setting GID to %s (%d).\n", -// grp->gr_name, gid); -// if ((ret = setgid(gid))) { -// fprintf(stderr, "Call to setgid() failed with error:" -// " %s\n", strerror(errno)); -// ret = -errno; -// goto finished; -// } -// } - - while (1) { - usleep(3000000); - } - -finished: - return ret; -} diff --git a/test_functions.c b/test_functions.c deleted file mode 100644 index f357ab2f..00000000 --- a/test_functions.c +++ /dev/null @@ -1,927 +0,0 @@ -/* - * Copyright IBM Corporation. 2008 - * - * Author: Sudhir Kumar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2.1 of the GNU Lesser General Public License - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Description: This file contains the functions for testing libcgroup apis. - */ - -#include "libcgrouptest.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 */ -}; - -/** - * Tests the cgroup_init_cgroup() api under different scenarios - * @param retcode error code in case any error is expected from api - * @param i the test number - */ -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()", retval, info[NOMESSAGE]); -} - -/** - * Tests the cgroup_attach_cgroup() api under different scenarios - * @param retcode error code in case any error is expected from api - * @param cgrp the group to assign the task to - * @param group1 the name of the group under first (single) mountpoint - * @param group2 the name of the group under 2nd moutpoint for multimount - * @param i the test number - * @param k the message enum number to print the useful message - */ -void test_cgroup_attach_task(int retcode, struct cgroup *cgrp, - const char *group1, const char *group2, pid_t pid, 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) { - if (pid) - retval = cgroup_attach_task_pid(cgrp, pid); - else - 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 */ - if (pid) - retval = cgroup_attach_task_pid(cgrp, pid); - else - retval = cgroup_attach_task(cgrp); - - /* API returned success, so perform check */ - if (retval == 0) { - build_path(tasksfile, mountpoint, - group1, "tasks"); - - if (check_task(tasksfile, 0)) { - if (fs_mounted == 2) { - /* multiple mounts */ - build_path(tasksfile2, mountpoint2, - group2, "tasks"); - if (check_task(tasksfile2, 0)) { - 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"); - } -} - -/** - * This function creates a cgroup data structure - * This function is a bit ugly for now and need to be changed - * @param ctl the controller under which group is to be created - * @param grpname the name of the group - * @param value_type which value out of four types - * @param struct cval the control value structure - * @param struct ids the permissions struct - * @param the test number - */ -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) - 1); - 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); -} - -/** - * Tests the cgroup_create_cgroup() api under different scenarios - * @param retcode error code in case any error is expected from api - * @param cgrp the group to be created - * @param name the name of the group - * @param common to test if group will be created under one or both mountpoints - * @param mpnt to test if group under mountpoint or mountpoint2 - * @param ign parameter for api if to ignore the ownership - * @param the test number - */ -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]); - - /* group under both mountpoints */ - } else { - /* 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; -} - -/** - * Tests the cgroup_delete_cgroup() api under different scenarios - * @param retcode error code in case any error is expected from api - * @param cgrp the group to be deleted - * @param name the name of the group - * @param common to test if group was created under one or both mountpoints - * @param mpnt to test if group under mountpoint or mountpoint2 - * @param ign parameter for api if to ignore the ownership - * @param the test number - */ -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) == ENOENT) - 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 mountpoints */ - build_path(path1_group, mountpoint, name, NULL); - if (group_exist(path1_group) == ENOENT) { - build_path(path2_group, mountpoint2, name, NULL); - - if (group_exist(path2_group) == ENOENT) - 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]); - } - } - -} - -/** - * The function tests if the given controller is enabled in kernel - * @param name the name of the controller to be checked - * @param exist set to 1 if the controller exists - */ -void is_subsystem_enabled(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); -} - -/** - * This function tests if the given group exists in filesystem - * @param path_group path to the group to be tested for existence - */ -int group_exist(char *path_group) -{ - struct stat statbuf; - if (stat(path_group, &statbuf) == -1) { - /* Group deleted. OK */ - if (errno == ENOENT) - return ENOENT; - /* There is some other failure */ - printf("stat failed, return code is %d\n", errno); - return -1; - } - - if (S_ISDIR(statbuf.st_mode)) - return 0; - else - return -1; -} - -/** - * Sets the controller name and control file name - * @param controller the enum for the name of the controller - * @param controller_name name of the controller - * @param control_file corresponding control file - */ -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); - strncpy(control_file, "cpuset.cpus", 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; - } -} - -/** - * Tests if a group has been modified - * @param path_control_file path to the control file of the controller - * @param value_type which value out of four types - * @param struct cval the control value structure - */ -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; - /* 100 char looks ok for a control value as string */ - char string_val[100]; - FILE *fd; - int error = 1; - int aux; - - 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", &aux); - bool_val = aux; - if (bool_val == cval.val_bool) - error = 0; - break; - case INT64: - fscanf(fd, "%" SCNi64, &int64_val); - if (int64_val == cval.val_int64) - error = 0; - break; - case UINT64: - fscanf(fd, "%" SCNu64, &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"); - /* Can not report test result as failure */ - error = 0; - break; - } - - fclose(fd); - return error; -} - -/** - * Adds the control value to a controller using wrapper apis - * @param newcontroller the controller to be added the value to - * @param control_file name of the control file of the controller - * @param wr the name of wrapper api - * @param value_type which value out of four types - * @param struct cval the control value structure - */ -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; -} - -/** - * This function creates and returns a cgroup data structure - * @param group the name of the group - * @param controller_name the name of the controller to be added to the group - * @param control_file name of the control file of the controller - * @param value_type which value out of four types - * @param struct cval the control value structure - * @param struct ids the permissions struct - * @param the test number - */ -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; - /* Names of wrapper apis */ - char wr[SIZE]; - 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]); - cgroup_free(&newcgroup); - return NULL; - } - } else { - /* Since these wrappers do not return an int so -1 */ - message(i++, FAIL, "add_controller", -1, - info[NOMESSAGE]); - cgroup_free(&newcgroup); - return NULL; - } - } else { - message(i++, FAIL, "new_cgroup", -1, info[NOMESSAGE]); - return NULL; - } - return newcgroup; -} - -/** - * Checks if the cgroup filesystem has been mounted - * @param multimnt to decide if check is for single mount or multimount - */ -int check_fsmounted(int multimnt) -{ - int count = 0; - int ret = 1; - struct mntent *entry = NULL, *tmp_entry = NULL; - /* Need a better mechanism to decide memory allocation size here */ - char entry_buffer[FILENAME_MAX * 4]; - FILE *proc_file = NULL; - - tmp_entry = (struct mntent *) malloc(sizeof(struct mntent)); - if (!tmp_entry) { - perror("Error: failled to mallloc for mntent\n"); - ret = errno; - 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; -} - -/** - * Checks if the current task belongs to the given tasks file - * @param tasksfile the task file to be tested for the task - */ -int check_task(char *tasksfile, pid_t pid) -{ - 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); - } - - if (pid) - curr_tid = pid; - else - curr_tid = cgrouptest_gettid(); - - while (!feof(file)) { - fscanf(file, "%u", &tid); - if (tid == curr_tid) { - pass = 1; - break; - } - } - fclose(file); - - return pass; -} - -/** - * Prints the test result in a readable format with some verbose messages - * @param num the test number - * @param pass test passed or failed - * @param api the name of the api tested - * @param retval the return value of the api - * @param extra the extra message to the user about the scenario tested - */ -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 - * @param target to write the built path to - * @param mountpoint for which mountpoint the path to be built - * @param group the name of the group (directory) - * @param file what file under the group - */ -void -build_path(char *target, char *mountpoint, const char *group, const char *file) -{ - if (!target) - return; - - 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)); - } -} - -/** - * Tests the cgroup_compare_cgroup() api under different scenarios - * @param ctl1 controller 1 to be used for testing - * @param ctl2 controller 1 to be used for testing - * @param the test number - */ -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 = NULL, *cgroup2 = NULL; - struct cgroup_controller *controller = NULL; - 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); -} - -/** - * Tests the cgroup_get_cgroup() api under different scenarios - * @param ctl1 controller 1 to be used for testing - * @param ctl2 controller 1 to be used for testing - * @param struct ids the permissions struct - * @param the test number - */ -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 separately 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]); - /* Free the allocated cgroup before reallocation */ - 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]); - } - - /* SINGLE & MULTI MOUNT: Create, get and compare a cgroup */ - - /* 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); - if (controller) - message(i++, PASS, "cgroup_add_controller()", - 0, info[NOMESSAGE]); - else - message(i++, FAIL, "cgroup_add_controller()", - -1, info[NOMESSAGE]); - } - 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]); - } - - /* Delete this created group from fs to leave fs clean */ - if (fs_mounted == FS_MULTI_MOUNTED) - test_cgroup_delete_cgroup(0, cgroup_a, "group_a", 1, 1, 0, 0); - else - test_cgroup_delete_cgroup(0, cgroup_a, "group_a", 0, 1, 0, 0); - - cgroup_free(&cgroup_a); - cgroup_free(&cgroup_b); - cgroup_free(&cgroup_filled); -} - -/** - * Tests the cgroup_add_controller() and cgroup_free_controller() wrapper - * apis under different scenarios - * @param the test number - */ -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); -} - -/** - * Returns the tid of the current thread - */ -pid_t cgrouptest_gettid() -{ - return syscall(__NR_gettid); -} diff --git a/test_named_hierarchy.c b/test_named_hierarchy.c deleted file mode 100644 index 934c8752..00000000 --- a/test_named_hierarchy.c +++ /dev/null @@ -1,47 +0,0 @@ -#include -#include -#include -#include - -/* - * Assumes cgroup is mounted at /cgroup using - * - * mount -t cgroup -o none,name=test none /cgroup - */ -int main() -{ - int ret; - struct cgroup *cgroup; - struct cgroup_controller *cgc; - - ret = cgroup_init(); - if (ret) { - printf("FAIL: cgroup_init failed with %s\n", cgroup_strerror(ret)); - exit(3); - } - - cgroup = cgroup_new_cgroup("test"); - if (!cgroup) { - printf("FAIL: cgroup_new_cgroup failed\n"); - exit(3); - } - - cgc = cgroup_add_controller(cgroup, "name=test"); - if (!cgc) { - printf("FAIL: cgroup_add_controller failed\n"); - exit(3); - } - - ret = cgroup_create_cgroup(cgroup, 1); - if (ret) { - printf("FAIL: cgroup_create_cgroup failed with %s\n", cgroup_strerror(ret)); - exit(3); - } - - if (access("/cgroup/test", F_OK)) - printf("PASS\n"); - else - printf("Failed to create cgroup\n"); - - return 0; -} diff --git a/tools/Makefile.am b/tools/Makefile.am deleted file mode 100644 index 45c1955d..00000000 --- a/tools/Makefile.am +++ /dev/null @@ -1,2 +0,0 @@ -SUBDIRS = cgconfigparser cgclassify multimount - diff --git a/tools/README b/tools/README deleted file mode 100644 index ec4703ec..00000000 --- a/tools/README +++ /dev/null @@ -1,35 +0,0 @@ -libcgroup tools test suite -========================== - -These files should test libcgroup tools, not the libcgroup library itself! All -the tools use the library so it gets pretty well tested, but that's just a side -effect, not an intention. - -Usage ------ - -There are few requirements to run this test: - - !!! YOU MUST RUN THE TESTS AS ROOT !!! - the tests need to mount/unmount - stuff. The tests should not destroy anything important, but use a virtual - machine if possible, just to be sure. - - You must have no cgroup mounted (i.e. run cgclear before starting the test - suite). - - The tests require various tools to be present in $PATH or at the specified - location, among others: - diff, awk, su, /bin/bash, /bin/sleep - - The tests require that user and group named 'nobody' exists, some processes - with be started with its UID/GID. - - The tests mounts/unmounts cpu, cpuacct, freezer and net_cls controllers. - Make sure your kernel supports them. - -If you have met all above prerequisites just run 'make check' in this directory -as root. - -Design ------- -There is very simple testenv.sh script, which contains common functions for all -tests. It includes also simple example how to write a test. - -The tests themselves are just simple shell scripts, which either end with exit -status 0 (=success) or nonzero (=error). The tests should clean after themselves -(incl. unmounting all groups and removing all temp. files). diff --git a/tools/cgclassify/Makefile.am b/tools/cgclassify/Makefile.am deleted file mode 100644 index 2adde69e..00000000 --- a/tools/cgclassify/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -EXTRA_DIST = cgclassify cgclassify-rules simple.conf - -# The legacy tests have been disabled because they do not successfully run -# on Travis CI. -#TESTS = cgclassify cgclassify-rules diff --git a/tools/cgclassify/cgclassify b/tools/cgclassify/cgclassify deleted file mode 100755 index 9560a155..00000000 --- a/tools/cgclassify/cgclassify +++ /dev/null @@ -1,134 +0,0 @@ -#!/bin/bash -# -# Test cgclassify with various arguments, without /etc/cgrules.conf. -# cglassify is tested with exact destination group, multiple PIDs, groups -# specified by '*', multiple target groups, lot of PIDs on command line -# and various error cases. - -. `dirname $0`/../testenv.sh - -function checkpid() -{ - # check that given process is in given groups - local PID=$1 - # delete hierarchy number, ignore systemd - cat /proc/$PID/cgroup | sed 's/^[0-9]*://' | grep -v systemd > $TMP/pid-$PID.group - printf >$TMP/pid-$PID.expected "$2" - diff -u -w $TMP/pid-$PID.group $TMP/pid-$PID.expected - return $? -} - -function resetgroup() -{ - # move given processes back to root group - $TOOLSDIR/cgclassify -g "*:/" $* -} - -# prepare some hierarchy -$TOOLSDIR/cgconfigparser -l `prepare_config simple.conf` || \ - die "cannot parse simple.conf" - -# start few processes to torture -/bin/sleep 10000 & -PID1=$! -/bin/sleep 10000 & -PID2=$! -/bin/sleep 10000 & -PID3=$! - -# STEP1: simple cgclassify to exact groups -$TOOLSDIR/cgclassify -g net_cls,cpu:common $PID1 || \ - die "STEP1: cgclassify PID1 failed" -$TOOLSDIR/cgclassify -g net_cls:net1 $PID2 || \ - die "STEP1: cgclassify PID2 failed" -$TOOLSDIR/cgclassify -g cpu:cpu1 $PID3 || \ - die "STEP1: cgclassify PID3 failed" - -checkpid $PID1 "net_cls,freezer:/common\ncpuacct,cpu:/common\n" || \ - die "STEP1: unexpected group of pid1" -checkpid $PID2 "net_cls,freezer:/net1\ncpuacct,cpu:/\n" || \ - die "STEP!: unexpected group of pid2" -checkpid $PID3 "net_cls,freezer:/\ncpuacct,cpu:/cpu1\n" || \ - die "STEP!: unexpected group of pid3" - -# STEP2: try * and more PIDs -$TOOLSDIR/cgclassify -g "*:/" $PID1 $PID2 $PID3 || \ - die "cgclassify 2 failed" -checkpid $PID1 "net_cls,freezer:/\ncpuacct,cpu:/\n" || \ - die "STEP2: unexpected group of pid1" -checkpid $PID2 "net_cls,freezer:/\ncpuacct,cpu:/\n" || \ - die "STEP2: unexpected group of pid2" -checkpid $PID3 "net_cls,freezer:/\ncpuacct,cpu:/\n" || \ - die "STEP2: unexpected group of pid3" - -# STEP3: try different groups -resetgroup $PID1 $PID2 $PID3 -$TOOLSDIR/cgclassify -g cpu:cpu1 -g net_cls:net1 $PID1 -checkpid $PID1 "net_cls,freezer:/net1\ncpuacct,cpu:/cpu1\n" || \ - die "STEP3: unexpected group of pid1" - -# STEP4: different groups multiple times (tha last should win) -resetgroup $PID1 $PID2 $PID3 -$TOOLSDIR/cgclassify -g "*:/" -g cpu:common -g net_cls:common -g cpu:cpu1 -g net_cls:net1 $PID1 || \ - die "STEP4: cgclassify pid1 failed" -checkpid $PID1 "net_cls,freezer:/net1\ncpuacct,cpu:/cpu1\n" || \ - die "STEP4: unexpected group of pid1" -$TOOLSDIR/cgclassify -g "*:/" -g cpu:common -g net_cls:common -g cpu:cpu1 $PID2 || \ - die "STEP4: cgclassify pid2 failed" -checkpid $PID2 "net_cls,freezer:/common\ncpuacct,cpu:/cpu1\n" || \ - die "STEP4: unexpected group of pid2" - -# STEP5: some error cases -# group does not exist -echo "Testing error cases, error messages will appear!" -$TOOLSDIR/cgclassify -g cpu:invalid_group $PID1 && \ - die "STEP5: cgclassify with invalig_group succeeded" -# parameter is not a PID -$TOOLSDIR/cgclassify -g cpu:/ xxx && \ - die "STEP5: cgclassify with xxx pid succeeded" -# let's hope process 1234567 does not exist -$TOOLSDIR/cgclassify -g cpu:/ 1234567 && \ - die "STEP5: cgclassify with 1234567 succeeded" -# not-mounted controller -$TOOLSDIR/cgclassify -g xxx:/ $PID1 && \ - die "STEP5: cgclassify with xxx controller succeeded" -# no -g parameter -$TOOLSDIR/cgclassify -g $PID1 && \ - die "STEP5: cgclassify without -g succeeded" -# invalid -g format -$TOOLSDIR/cgclassify -g cpu/cpu1 $PID1 && \ - die "STEP5: cgclassify -g cpu/cpu1 succeeded" - -# some existing processes among unexisting -resetgroup $PID1 $PID2 $PID3 -$TOOLSDIR/cgclassify -g cpu,net_cls:common $PID1 1234567 $PID2 1234568 $PID3 && \ - die "STEP5: cgclassify with mixed processed succeeded" -checkpid $PID1 "net_cls,freezer:/common\ncpuacct,cpu:/common\n" || \ - die "STEP5: unexpected group of pid1" -checkpid $PID2 "net_cls,freezer:/common\ncpuacct,cpu:/common\n" || \ - die "STEP5: unexpected group of pid2" -checkpid $PID3 "net_cls,freezer:/common\ncpuacct,cpu:/common\n" || \ - die "STEP5: unexpected group of pid3" - -echo "End of error cases" - -# STEP6: *lot of* processes on command line -echo "Testing lot of arguments, this will take some time" -COUNT=1000 -echo >$TMP/pids -( - for i in `seq $COUNT`; do - sleep 100000 & - echo $! >>$TMP/pids - done -) > /dev/null -$TOOLSDIR/cgclassify -g net_cls,cpu:common `cat $TMP/pids` || \ - die "STEP6: cgclassify failed" - -kill `cat $TMP/pids` -sleep 1 # to settle down the sleep load - sigterm does not kill sleep immediatelly - -kill $PID1 $PID2 $PID3 -$TOOLSDIR/cgclear -cleanup -exit 0 diff --git a/tools/cgclassify/cgclassify-rules b/tools/cgclassify/cgclassify-rules deleted file mode 100755 index b2b2cd82..00000000 --- a/tools/cgclassify/cgclassify-rules +++ /dev/null @@ -1,171 +0,0 @@ -#!/bin/bash -# -# Test cgclassify with various /etc/cgrules.conf settings, like -# simple rules, multiple matching rules, using @groups, executable -# names and default rules. -# The test relies on testenv.sh to backup/restore /etc/cgrules.conf. -# - -. `dirname $0`/../testenv.sh - -# The test need sto start few processes with non-root UID/GID. Which should be -# used? -TESTUSER=nobody -TESTGROUP=nobody - -function checkpid() -{ - # check that given process is in given groups - local PID=$1 - # delete hierarchy number, ignore systemd - cat /proc/$PID/cgroup | sed 's/^[0-9]*://' | grep -v systemd > $TMP/pid-$PID.group - printf >$TMP/pid-$PID.expected "$2" - diff -u -w $TMP/pid-$PID.group $TMP/pid-$PID.expected - return $? -} - -function resetgroup() -{ - # move given processes back to root group - $TOOLSDIR/cgclassify -g "*:/" $* -} - -# prepare some hierarchy -$TOOLSDIR/cgconfigparser -l `prepare_config simple.conf` || \ - die "cannot parse simple.conf" - -# prepare specific process names -ln -s /bin/sleep $TMP/sleep1 -$TMP/sleep1 10000 & -PID1=$! -ln -s /bin/sleep $TMP/sleep2 -$TMP/sleep2 10000 & -PID2=$! - -# start some processes as $TESTUSER -chmod o+rwX $TMP -su $TESTUSER -s /bin/bash -c "$TMP/sleep1 10000" & -su $TESTUSER -s /bin/bash -c "$TMP/sleep2 10000" & -sleep 0.1 -NPID1=`ps h -u $TESTUSER | grep sleep1 | awk '{ print $1; }' | tail -n 1` -NPID2=`ps h -u $TESTUSER | grep sleep2 | awk '{ print $1; }' | tail -n 1` - -# STEP1: simple global rule -cat </etc/cgrules.conf -unused * / -* * common -EOF -$TOOLSDIR/cgclassify $PID1 -checkpid $PID1 "net_cls,freezer:/common\ncpuacct,cpu:/common\n" || \ - die "STEP1: unexpected group of pid1" -resetgroup $PID1 - -# STEP2: two destination groups -cat </etc/cgrules.conf -unused * / -* cpu cpu1 -% net_cls net1 -EOF -$TOOLSDIR/cgclassify $PID1 -checkpid $PID1 "net_cls,freezer:/net1\ncpuacct,cpu:/cpu1\n" || \ - die "STEP2: unexpected group of pid1" -resetgroup $PID1 - -# STEP3: two matching rules, only the first is executed -cat </etc/cgrules.conf -unused * / -* cpu cpu1 -* net_cls net1 -EOF -$TOOLSDIR/cgclassify $PID1 -checkpid $PID1 "net_cls,freezer:/\ncpuacct,cpu:/cpu1\n" || \ - die "STEP3: unexpected group of pid1" -resetgroup $PID1 - -# STEP4: process name in a rule -cat </etc/cgrules.conf -unused * / -*:sleep1 cpu cpu1 -*:sleep2 net_cls net1 -EOF -$TOOLSDIR/cgclassify $PID1 -checkpid $PID1 "net_cls,freezer:/\ncpuacct,cpu:/cpu1\n" || \ - die "STEP4: unexpected group of pid1" -$TOOLSDIR/cgclassify $PID2 -checkpid $PID2 "net_cls,freezer:/net1\ncpuacct,cpu:/\n" || \ - die "STEP4: unexpected group of pid2" -resetgroup $PID1 $PID2 - -# STEP5: full path -cat </etc/cgrules.conf -unused * / -*:$TMP/sleep1 cpu cpu1 -*:$TMP/sleep2 net_cls net1 -EOF -$TOOLSDIR/cgclassify $PID1 -checkpid $PID1 "net_cls,freezer:/\ncpuacct,cpu:/cpu1\n" || \ - die "STEP5: unexpected group of pid1" -$TOOLSDIR/cgclassify $PID2 -checkpid $PID2 "net_cls,freezer:/net1\ncpuacct,cpu:/\n" || \ - die "STEP5: unexpected group of pid2" -resetgroup $PID1 $PID2 - -#STEP6: username -cat </etc/cgrules.conf -unused * / -$TESTUSER cpu cpu1 -* net_cls net1 -EOF -$TOOLSDIR/cgclassify $PID1 $NPID1 -checkpid $NPID1 "net_cls,freezer:/\ncpuacct,cpu:/cpu1\n" || \ - die "STEP6: unexpected group of npid1" -checkpid $PID1 "net_cls,freezer:/net1\ncpuacct,cpu:/\n" || \ - die "STEP6: unexpected group of pid1" -resetgroup $PID1 $NPID1 - -#STEP7: username + processname -cat </etc/cgrules.conf -unused * / -$TESTUSER:$TMP/sleep1 cpu cpu1 -*:$TMP/sleep1 net_cls net1 -EOF -$TOOLSDIR/cgclassify $PID1 $NPID1 -checkpid $NPID1 "net_cls,freezer:/\ncpuacct,cpu:/cpu1\n" || \ - die "STEP7: unexpected group of npid1" -checkpid $PID1 "net_cls,freezer:/net1\ncpuacct,cpu:/\n" || \ - die "STEP7: unexpected group of pid1" -resetgroup $PID1 $NPID1 - -#STEP8: groupname + processname -cat </etc/cgrules.conf -unused * / -@$TESTGROUP:$TMP/sleep1 cpu cpu1 -*:$TMP/sleep1 net_cls net1 -EOF -$TOOLSDIR/cgclassify $PID1 $NPID1 -checkpid $NPID1 "net_cls,freezer:/\ncpuacct,cpu:/cpu1\n" || \ - die "STEP8: unexpected group of npid1" -checkpid $PID1 "net_cls,freezer:/net1\ncpuacct,cpu:/\n" || \ - die "STEP8: unexpected group of pid1" -resetgroup $PID1 $NPID1 - -#STEP9: processname + default -cat </etc/cgrules.conf -unused * / -*:$TMP/sleep1 cpu cpu1 -* net_cls net1 -EOF -$TOOLSDIR/cgclassify $PID1 $PID2 -checkpid $PID1 "net_cls,freezer:/\ncpuacct,cpu:/cpu1\n" || \ - die "STEP9: unexpected group of pid1" -checkpid $PID2 "net_cls,freezer:/net1\ncpuacct,cpu:/\n" || \ - die "STEP9: unexpected group of pid2" -resetgroup $PID1 $NPID1 - -kill -9 $PID1 $PID2 $NPID1 $NPID2 - -sleep 0.1 -$TOOLSDIR/cgclear - -cleanup -exit 0 diff --git a/tools/cgclassify/simple.conf b/tools/cgclassify/simple.conf deleted file mode 100644 index 07f8ccd1..00000000 --- a/tools/cgclassify/simple.conf +++ /dev/null @@ -1,24 +0,0 @@ -# Two hierarchies, two controllers each: - -mount { - cpu = TMP/cgroup/cpu; - cpuacct = TMP/cgroup/cpu; - net_cls = TMP/cgroup/net; - freezer = TMP/cgroup/net; -} - -# One group common for all hierarchies: - -group common { - cpu {} - net_cls {} -} - -# Two separate groups: -group net1 { - net_cls{} -} - -group cpu1 { - cpu {} -} diff --git a/tools/cgconfigparser/Makefile.am b/tools/cgconfigparser/Makefile.am deleted file mode 100644 index fd28516f..00000000 --- a/tools/cgconfigparser/Makefile.am +++ /dev/null @@ -1,30 +0,0 @@ -EXTRA_DIST = cgconfigparser_simple \ - cgconfigparser_conf_files_tests \ - cgconfigparser_conf_files/cgconfig.conf.5.ex1 \ - cgconfigparser_conf_files/cgconfig.conf.5.ex2 \ - cgconfigparser_conf_files/cgconfig.conf.5.ex3 \ - cgconfigparser_conf_files/cgconfig.conf.5.ex4 \ - cgconfigparser_conf_files/permissions.conf \ - cgconfigparser_multiconfig \ - cgclear_config_multi \ - cgclear_config_one \ - permissions \ - cgconfigparser_conf_files/permissions_default1.conf \ - cgconfigparser_conf_files/permissions_default2.conf \ - cgconfigparser_conf_files/permissions_default3.conf \ - cgconfigparser_conf_files/permissions_default4.conf \ - multiconfig/1.conf \ - multiconfig/2.conf \ - multiconfig/3.conf \ - multiconfig/4.conf \ - multiconfig/5.conf \ - cgclear/cgclear_config_multi_1.conf \ - cgclear/cgclear_config_multi_2.conf \ - cgclear/cgclear_config_multi_3.conf \ - cgclear/cgclear_config_one.conf - -# The legacy tests have been disabled because they do not successfully run -# on Travis CI. -#TESTS = cgconfigparser_simple cgconfigparser_conf_files_tests permissions \ -# cgconfigparser_multiconfig cgclear_config_multi cgclear_config_one - diff --git a/tools/cgconfigparser/cgclear/cgclear_config_multi_1.conf b/tools/cgconfigparser/cgclear/cgclear_config_multi_1.conf deleted file mode 100644 index 106be833..00000000 --- a/tools/cgconfigparser/cgclear/cgclear_config_multi_1.conf +++ /dev/null @@ -1,12 +0,0 @@ -mount { - cpu = /TMP/cgroups/cpu; - cpuacct = /TMP/cgroups/cpu; -} - -group 1 { - cpu { } -} - -group 1/1 { - cpu { } -} diff --git a/tools/cgconfigparser/cgclear/cgclear_config_multi_2.conf b/tools/cgconfigparser/cgclear/cgclear_config_multi_2.conf deleted file mode 100644 index 67d1d5a6..00000000 --- a/tools/cgconfigparser/cgclear/cgclear_config_multi_2.conf +++ /dev/null @@ -1,11 +0,0 @@ -group 2 { - cpu { } -} - -group 1/2 { - cpu { } -} - -group 1/2/2 { - cpu { } -} diff --git a/tools/cgconfigparser/cgclear/cgclear_config_multi_3.conf b/tools/cgconfigparser/cgclear/cgclear_config_multi_3.conf deleted file mode 100644 index 48c5f296..00000000 --- a/tools/cgconfigparser/cgclear/cgclear_config_multi_3.conf +++ /dev/null @@ -1,19 +0,0 @@ -group 3 { - cpu { } -} - -group 1/2/3 { - cpu { } -} - -group 1/2/2/3 { - cpu { } -} - -group 1/3 { - cpu { } -} - -group 2/3 { - cpu { } -} diff --git a/tools/cgconfigparser/cgclear/cgclear_config_one.conf b/tools/cgconfigparser/cgclear/cgclear_config_one.conf deleted file mode 100644 index 37b32f12..00000000 --- a/tools/cgconfigparser/cgclear/cgclear_config_one.conf +++ /dev/null @@ -1,16 +0,0 @@ -mount { - cpu = /TMP/cgroups/cpu; - cpuacct = /TMP/cgroups/cpu; -} - -group first { - cpu { } -} - -group first/subgroup { - cpu { } -} - -group second { - cpu { } -} diff --git a/tools/cgconfigparser/cgclear_config_multi b/tools/cgconfigparser/cgclear_config_multi deleted file mode 100755 index 964c61d3..00000000 --- a/tools/cgconfigparser/cgclear_config_multi +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash -# test cgclear with multiple config files - -. `dirname $0`/../testenv.sh - -# start a process to torture -/bin/sleep 10000 & -PID=$! - -# STEP1: parse three config files and cgclear them at once (in reverse order!) -$TOOLSDIR/cgconfigparser -l `prepare_config cgclear/cgclear_config_multi_1.conf` \ - || die "STEP1: cgconfigparser multi_1 failed" -$TOOLSDIR/cgconfigparser -l `prepare_config cgclear/cgclear_config_multi_2.conf` \ - || die "STEP1: cgconfigparser multi_2 failed" -$TOOLSDIR/cgconfigparser -l `prepare_config cgclear/cgclear_config_multi_3.conf` \ - || die "STEP1: cgconfigparser multi_3 failed" -$TOOLSDIR/lscgroup > $TMP/groups.log -grep 1/2/3 <$TMP/groups.log >/dev/null \ - || die "STEP1: cannot find group '1/2/3'" - -# clear it all -$TOOLSDIR/cgclear -e -l `prepare_config cgclear/cgclear_config_multi_1.conf` \ - -l `prepare_config cgclear/cgclear_config_multi_2.conf` \ - -l `prepare_config cgclear/cgclear_config_multi_3.conf` \ - || die "STEP1: cgclear failed" - -# check all is gone -$TOOLSDIR/lscgroup 2>/dev/null \ - && die "STEP1: something is mounted after cgclear" - - -# STEP2: same as step1, but in wrong order - cgclear should fail -$TOOLSDIR/cgconfigparser -l `prepare_config cgclear/cgclear_config_multi_1.conf` \ - || die "STEP2: cgconfigparser multi_1 failed" -$TOOLSDIR/cgconfigparser -l `prepare_config cgclear/cgclear_config_multi_2.conf` \ - || die "STEP2: cgconfigparser multi_2 failed" -$TOOLSDIR/cgconfigparser -l `prepare_config cgclear/cgclear_config_multi_3.conf` \ - || die "STEP2: cgconfigparser multi_3 failed" -$TOOLSDIR/lscgroup > $TMP/groups.log -grep 1/2/3 <$TMP/groups.log >/dev/null \ - || die "STEP2: cannot find group '1/2/3'" - -# clear it all -$TOOLSDIR/cgclear -e -l `prepare_config cgclear/cgclear_config_multi_3.conf` \ - -l `prepare_config cgclear/cgclear_config_multi_2.conf` \ - -l `prepare_config cgclear/cgclear_config_multi_1.conf` \ - || die "STEP2: cgclear failed" - -# check that cpu,cpuacct:/1/2 still exists -$TOOLSDIR/lscgroup > $TMP/groups.log -grep 1/2 <$TMP/groups.log >/dev/null \ - || die "STEP2: cannot find group '1/2 after cgclear" - -$TOOLSDIR/cgclear - - -cleanup -kill -9 $PID -exit 0 diff --git a/tools/cgconfigparser/cgclear_config_one b/tools/cgconfigparser/cgclear_config_one deleted file mode 100755 index e673917a..00000000 --- a/tools/cgconfigparser/cgclear_config_one +++ /dev/null @@ -1,146 +0,0 @@ -#!/bin/bash -# test cgclear with one config file - -. `dirname $0`/../testenv.sh - -# start a process to torture -/bin/sleep 10000 & -PID=$! - -# STEP1: parse one simple config with mount and cgclear it (incl. unmount) -$TOOLSDIR/cgconfigparser -l `prepare_config cgclear/cgclear_config_one.conf` \ - || die "STEP1: cgconfigparser failed" -$TOOLSDIR/lscgroup > $TMP/groups.log -grep first <$TMP/groups.log >/dev/null \ - || die "STEP1: cannot find group 'first'" - -# unmount it -$TOOLSDIR/cgclear -l `prepare_config cgclear/cgclear_config_one.conf` \ - || die "STEP1: cgclear failed" - -# check all is gone -$TOOLSDIR/lscgroup 2>/dev/null \ - && die "STEP1: something is mounted after cgclear" - - -# STEP2: create a cgroup out of config's tree - it must survive cgclear -$TOOLSDIR/cgconfigparser -l `prepare_config cgclear/cgclear_config_one.conf` \ - || die "STEP2: cgconfigparser failed" -$TOOLSDIR/lscgroup > $TMP/groups.log -grep first <$TMP/groups.log >/dev/null \ - || die "STEP2: cannot find group 'first'" - -$TOOLSDIR/cgcreate -g cpu:/evil \ - || die "STEP2: cgcreate failed" - -# clear it - 'evil' should survive -$TOOLSDIR/cgclear -l `prepare_config cgclear/cgclear_config_one.conf` \ - || die "STEP2: cgclear1 failed" - -# check evil is there -$TOOLSDIR/lscgroup > $TMP/groups.log -grep evil <$TMP/groups.log >/dev/null \ - || die "STEP2: evil not found" - -# clear everything -$TOOLSDIR/cgclear || die "STEP2: cgclear2 failed" -$TOOLSDIR/lscgroup 2>/dev/null \ - && die "STEP2: something is mounted after cgclear" - - -# STEP3: leave a process and a subgroup somewhere and check cgclear *without* -e clears it -$TOOLSDIR/cgconfigparser -l `prepare_config cgclear/cgclear_config_one.conf` \ - || die "STEP3: cgconfigparser failed" -$TOOLSDIR/lscgroup > $TMP/groups.log -grep first <$TMP/groups.log >/dev/null \ - || die "STEP3: cannot find group 'first'" - -$TOOLSDIR/cgclassify -g cpu:first $PID \ - || die "STEP3: cgclassify failed" -$TOOLSDIR/cgcreate -g cpu:first/evil \ - || die "STEP3: cgcreate failed" - -# unmount it -$TOOLSDIR/cgclear -l `prepare_config cgclear/cgclear_config_one.conf` \ - || die "STEP3: cgclear failed" - -# check all is gone -$TOOLSDIR/lscgroup 2>/dev/null \ - && die "STEP3: something is mounted after cgclear" - - - -# STEP4: leave a process somewhere and check cgclear with -e doesn't clear it -$TOOLSDIR/cgconfigparser -l `prepare_config cgclear/cgclear_config_one.conf` \ - || die "STEP4: cgconfigparser failed" -$TOOLSDIR/lscgroup > $TMP/groups.log -grep first <$TMP/groups.log >/dev/null \ - || die "STEP4: cannot find group 'first'" - -$TOOLSDIR/cgclassify -g cpu:first $PID \ - || die "STEP4: cgclassify failed" - -# try to clear it - cgclear should not fail and the group should survive -$TOOLSDIR/cgclear -e -l `prepare_config cgclear/cgclear_config_one.conf` \ - || die "STEP4: cgclear failed" -$TOOLSDIR/lscgroup > $TMP/groups2.log -grep first <$TMP/groups2.log >/dev/null \ - || die "STEP4: cannot find group 'first' after cgclear" - -# cpu:first should survive -$TOOLSDIR/lscgroup > $TMP/groups.log -grep first <$TMP/groups.log >/dev/null \ - || die "STEP4: cannot find group 'first'" -# cpu:second should *not* survive -grep second <$TMP/groups.log >/dev/null \ - && die "STEP4: unexpected group 'second' found" -# cpu:first/subgroup should *not* survive -grep first/subgroup <$TMP/groups.log >/dev/null \ - && die "STEP4: unexpected group 'first/subgroup' found" - -$TOOLSDIR/cgclear - -# check all is gone -$TOOLSDIR/lscgroup 2>/dev/null \ - && die "STEP4: something is mounted after cgclear" - - - -# STEP5: leave a subgroup somewhere and check cgclear with -e doesn't clear it -$TOOLSDIR/cgconfigparser -l `prepare_config cgclear/cgclear_config_one.conf` \ - || die "STEP5: cgconfigparser failed" -$TOOLSDIR/lscgroup > $TMP/groups.log -grep first <$TMP/groups.log >/dev/null \ - || die "STEP5: cannot find group 'first'" - -$TOOLSDIR/cgcreate -g cpu:first/evil \ - || die "STEP5: cgcreate failed" - -# try to clear it - cgclear should not fail, the group should survive -$TOOLSDIR/cgclear -e -l `prepare_config cgclear/cgclear_config_one.conf` \ - || die "STEP5: cgclear failed" -$TOOLSDIR/lscgroup > $TMP/groups2.log -grep first <$TMP/groups2.log >/dev/null \ - || die "STEP5: cannot find group 'first' after clear" - -# cpu:first/evil should survive -$TOOLSDIR/lscgroup > $TMP/groups.log -grep first/evil <$TMP/groups.log >/dev/null \ - || die "STEP5: cannot find group 'first/evil'" -# cpu:second should *not* survive -grep second <$TMP/groups.log >/dev/null \ - && die "STEP5: unexpected group 'second' found" -# cpu:first/subgroup should *not* survive -grep first/subgroup <$TMP/groups.log >/dev/null \ - && die "STEP5: unexpected group 'first/subgroup' found" - -$TOOLSDIR/cgclear - -# check all is gone -$TOOLSDIR/lscgroup 2>/dev/null \ - && die "STEP4: something is mounted after cgclear" - -kill -9 $PID - -cleanup -exit 0 diff --git a/tools/cgconfigparser/cgconfigparser_conf_files/cgconfig.conf.5.ex1 b/tools/cgconfigparser/cgconfigparser_conf_files/cgconfig.conf.5.ex1 deleted file mode 100644 index b8bb9f16..00000000 --- a/tools/cgconfigparser/cgconfigparser_conf_files/cgconfig.conf.5.ex1 +++ /dev/null @@ -1,5 +0,0 @@ - mount { - cpu = /TMP/cgroups/cpu; - cpuacct = /TMP/cgroups/cpu; - } - diff --git a/tools/cgconfigparser/cgconfigparser_conf_files/cgconfig.conf.5.ex2 b/tools/cgconfigparser/cgconfigparser_conf_files/cgconfig.conf.5.ex2 deleted file mode 100644 index 182290cc..00000000 --- a/tools/cgconfigparser/cgconfigparser_conf_files/cgconfig.conf.5.ex2 +++ /dev/null @@ -1,36 +0,0 @@ - mount { - cpu = /TMP/cgroups/cpu; - cpuacct = /TMP/cgroups/cpu; - } - - group daemons/www { - perm { - task { - uid = root; - gid = nobody; - } - admin { - uid = root; - gid = root; - } - } - cpu { - cpu.shares = "1000"; - } - } - - group daemons/ftp { - perm { - task { - uid = root; - gid = nobody; - } - admin { - uid = root; - gid = root; - } - } - cpu { - cpu.shares = "500"; - } - } diff --git a/tools/cgconfigparser/cgconfigparser_conf_files/cgconfig.conf.5.ex3 b/tools/cgconfigparser/cgconfigparser_conf_files/cgconfig.conf.5.ex3 deleted file mode 100644 index f733f576..00000000 --- a/tools/cgconfigparser/cgconfigparser_conf_files/cgconfig.conf.5.ex3 +++ /dev/null @@ -1,11 +0,0 @@ - mount { - cpu = /TMP/cgroups/cpu; - cpuacct = /TMP/cgroups/cpuacct; - } - - group daemons { - cpuacct{ - } - cpu { - } - } diff --git a/tools/cgconfigparser/cgconfigparser_conf_files/cgconfig.conf.5.ex4 b/tools/cgconfigparser/cgconfigparser_conf_files/cgconfig.conf.5.ex4 deleted file mode 100644 index 16eb5f44..00000000 --- a/tools/cgconfigparser/cgconfigparser_conf_files/cgconfig.conf.5.ex4 +++ /dev/null @@ -1,21 +0,0 @@ - mount { - cpu = /TMP/cgroups/cpu; - cpuacct = /TMP/cgroups/cpuacct; - } - - group daemons { - cpuacct{ - } - } - - group daemons/www { - cpu { - cpu.shares = "1000"; - } - } - - group daemons/ftp { - cpu { - cpu.shares = "500"; - } - } diff --git a/tools/cgconfigparser/cgconfigparser_conf_files/permissions.conf b/tools/cgconfigparser/cgconfigparser_conf_files/permissions.conf deleted file mode 100644 index e61f4e17..00000000 --- a/tools/cgconfigparser/cgconfigparser_conf_files/permissions.conf +++ /dev/null @@ -1,42 +0,0 @@ - mount { - cpu = /TMP/cgroups/cpu; - cpuacct = /TMP/cgroups/cpu; - } - - group daemons/www { - perm { - task { - uid = root; - gid = nobody; - fperm = 750; - } - admin { - uid = root; - gid = root; - dperm = 770; - fperm = 777; - } - } - cpu { - cpu.shares = "1000"; - } - } - - group daemons/ftp { - perm { - task { - uid = root; - gid = nobody; - fperm = 274; - } - admin { - uid = root; - gid = root; - dperm = 742; - fperm = 427; - } - } - cpu { - cpu.shares = "500"; - } - } diff --git a/tools/cgconfigparser/cgconfigparser_conf_files/permissions_default1.conf b/tools/cgconfigparser/cgconfigparser_conf_files/permissions_default1.conf deleted file mode 100644 index 3138d11c..00000000 --- a/tools/cgconfigparser/cgconfigparser_conf_files/permissions_default1.conf +++ /dev/null @@ -1,64 +0,0 @@ -mount { - cpu = /TMP/cgroups/cpu; - cpuacct = /TMP/cgroups/cpu; -} - -default { - perm { - task { - uid=nobody; - gid=nobody; - fperm=757; - } - admin { - uid = nobody; - gid = nobody; - dperm = 757; - fperm = 757; - } - } -} - -# inherit default -group daemons/www { - cpu { - cpu.shares = "1000"; - } -} - -#override default -group daemons/ftp { - perm { - task { - uid = root; - gid = root; - fperm = 274; - } - admin { - uid = root; - gid = root; - dperm = 742; - fperm = 427; - } - } - cpu { - cpu.shares = "500"; - } -} - -# override some default -group daemons/ssh { - perm { - task { - uid = root; - fperm = 274; - } - admin { - uid = root; - fperm = 427; - } - } - cpu { - cpu.shares = "500"; - } -} diff --git a/tools/cgconfigparser/cgconfigparser_conf_files/permissions_default2.conf b/tools/cgconfigparser/cgconfigparser_conf_files/permissions_default2.conf deleted file mode 100644 index b8021ea4..00000000 --- a/tools/cgconfigparser/cgconfigparser_conf_files/permissions_default2.conf +++ /dev/null @@ -1,82 +0,0 @@ -mount { - cpu = /TMP/cgroups/cpu; - cpuacct = /TMP/cgroups/cpu; -} - -default { - perm { - task { - uid=root; - gid=root; - fperm=700; - } - admin { - uid = root; - gid = root; - dperm = 700; - fperm = 700; - } - } -} - - -# inherit default -group daemons/www { - cpu { - cpu.shares = "1000"; - } -} - -#override default -group daemons/ftp { - perm { - task { - uid = root; - gid = root; - fperm = 274; - } - admin { - uid = root; - gid = root; - dperm = 742; - fperm = 427; - } - } - cpu { - cpu.shares = "500"; - } -} - -# override some default -group daemons/ssh { - perm { - task { - uid = root; - fperm = 274; - } - admin { - uid = root; - fperm = 427; - } - } - cpu { - cpu.shares = "500"; - } -} - -# second default, wins -default { - perm { - task { - uid=nobody; - gid=nobody; - fperm=757; - } - admin { - uid = nobody; - gid = nobody; - dperm = 757; - fperm = 757; - } - } -} diff --git a/tools/cgconfigparser/cgconfigparser_conf_files/permissions_default3.conf b/tools/cgconfigparser/cgconfigparser_conf_files/permissions_default3.conf deleted file mode 100644 index 99465a57..00000000 --- a/tools/cgconfigparser/cgconfigparser_conf_files/permissions_default3.conf +++ /dev/null @@ -1,64 +0,0 @@ -mount { - cpu = /TMP/cgroups/cpu; - cpuacct = /TMP/cgroups/cpu; -} - -default { - perm { - task { - uid=nobody; - gid=nobody; - fperm=1757; - } - admin { - uid = nobody; - gid = nobody; - dperm = 2757; - fperm = 7757; - } - } -} - -# inherit default -group daemons/www { - cpu { - cpu.shares = "1000"; - } -} - -#override default -group daemons/ftp { - perm { - task { - uid = root; - gid = root; - fperm = 274; - } - admin { - uid = root; - gid = root; - dperm = 742; - fperm = 427; - } - } - cpu { - cpu.shares = "500"; - } -} - -# override some default -group daemons/ssh { - perm { - task { - uid = root; - fperm = 274; - } - admin { - uid = root; - fperm = 427; - } - } - cpu { - cpu.shares = "500"; - } -} diff --git a/tools/cgconfigparser/cgconfigparser_conf_files/permissions_default4.conf b/tools/cgconfigparser/cgconfigparser_conf_files/permissions_default4.conf deleted file mode 100644 index 97d36f94..00000000 --- a/tools/cgconfigparser/cgconfigparser_conf_files/permissions_default4.conf +++ /dev/null @@ -1,48 +0,0 @@ -mount { - cpu = /TMP/cgroups/cpu; - cpuacct = /TMP/cgroups/cpu; -} - -# inherit default -group daemons/www { - cpu { - cpu.shares = "1000"; - } -} - -#override default -group daemons/ftp { - perm { - task { - uid = root; - gid = root; - fperm = 274; - } - admin { - uid = root; - gid = root; - dperm = 742; - fperm = 427; - } - } - cpu { - cpu.shares = "500"; - } -} - -# override some default -group daemons/ssh { - perm { - task { - uid = root; - fperm = 274; - } - admin { - uid = root; - fperm = 427; - } - } - cpu { - cpu.shares = "500"; - } -} diff --git a/tools/cgconfigparser/cgconfigparser_conf_files_tests b/tools/cgconfigparser/cgconfigparser_conf_files_tests deleted file mode 100755 index 858bc145..00000000 --- a/tools/cgconfigparser/cgconfigparser_conf_files_tests +++ /dev/null @@ -1,240 +0,0 @@ -#!/bin/bash -# this script tests the examples 1-4 from cgconfig.conf man pages -# - for each one tests whether the configuration which is created using described configuration -# file is identical with the example described below -# TODO: Example 5 is missing now - - -. `dirname $0`/../testenv.sh - -CONFDIR=$TESTDIR/tools/cgconfigparser/cgconfigparser_conf_files - -# all mount points are in /$TMP/cgroups -mkdir /$TMP/cgroups/ 2>/dev/null -#----------------------------------------------------------------------------- -# EXAMPLE 1 -#----------------------------------------------------------------------------- -$TOOLSDIR/cgconfigparser -l `prepare_config $CONFDIR/cgconfig.conf.5.ex1` || \ - die "cgconfigparser -l $CONFDIR/cgconfig.conf.5.ex1 failed" - -$TOOLSDIR/cgsnapshot -b $CONFIGDIR/cgsnapshot_blacklist.conf -s \ - >/$TMP/temp.conf || die "example1 cgsnapshot failed" - -lssubsys_1=`$TOOLSDIR/lssubsys -m` - -$TOOLSDIR/cgclear || \ - die "example1 1st cgclear failed" - -# cgsnapshot sanity test -$TOOLSDIR/cgconfigparser -l /$TMP/temp.conf || \ - die "example1 cgconfigparser failed" - -lssubsys_2=`$TOOLSDIR/lssubsys -m` - -$TOOLSDIR/cgclear || \ - die "example1 2st cgclear failed" - -if [ "$lssubsys_1" != "$lssubsys_2" ]; then - echo "ERROR(example1): lssubsys_1='$lssubsys_1', lssubsys_2='$lssubsys_2'" - die "example1 failed" -fi - -# cgconfigparser test -mkdir /$TMP/cgroups/cpu 2>/dev/null -mount -t cgroup -o cpu,cpuacct cpu $TMP/cgroups/cpu || die "example1 Mount failed" -lssubsys_3=`lssubsys -m` -$TOOLSDIR/cgclear || die "example1 3rd cgclear failed" - -if [ "$lssubsys_1" != "$lssubsys_3" ]; then - echo "ERROR(example1): lssubsys_1='$lssubsys_1', lssubsys_3='$lssubsys_3'" - die "example1 failed" -fi - -#----------------------------------------------------------------------------- -# EXAMPLE 2 -#----------------------------------------------------------------------------- -$TOOLSDIR/cgconfigparser -l `prepare_config $CONFDIR/cgconfig.conf.5.ex2` || \ - die "cgconfigparser -l $CONFDIR/cgconfig.conf.5.ex2 failed" - -val1=`$TOOLSDIR/cgget -nv -r cpu.shares daemons/ftp`; -val2=`$TOOLSDIR/cgget -nv -r cpu.shares daemons/www`; - - -if [ $val1 -ne 500 ]; then - echo "ERROR(example2): bogus variable setting daemons/ftp/cpu.shares $val1 "\ - "(should be 500)" - die "example2 failed" -fi - -if [ $val2 -ne 1000 ]; then - echo "ERROR(example2): bogus variable setting daemons/www/cpu.shares $val2 "\ - "(should be 1000)" - die "example2 failed" -fi - -$TOOLSDIR/cgsnapshot -b $CONFIGDIR/cgsnapshot_blacklist.conf -s >\ - /$TMP/temp.conf || die "example2 cgsnapshot failed" - -lssubsys_1=`$TOOLSDIR/lssubsys -m` -$TOOLSDIR/cgclear || die "example2 1st cgclear failed" - - -# cgsnapshot sanity test -$TOOLSDIR/cgconfigparser -l /$TMP/temp.conf || \ - die "example2 cgconfigparser of cgsnapshot file failed" - -lssubsys_2=`$TOOLSDIR/lssubsys -m` -val1=`$TOOLSDIR/cgget -nv -r cpu.shares daemons/ftp`; -val2=`$TOOLSDIR/cgget -nv -r cpu.shares daemons/www`; -$TOOLSDIR/cgclear || die "example2 2st cgclear failed" - -if [ "$lssubsys_1" != "$lssubsys_2" ]; then - echo "ERROR(example2): lssubsys_1='$lssubsys_1', lssubsys_2='$lssubsys_2'" - die "example2 failed" -fi - - -if [ $val1 -ne 500 ]; then - echo "ERROR(example2): bogus variable setting daemons/ftp/cpu.shares $val1 "\ - "(should be 500)" - die "example2 failed" -fi - -if [ $val2 -ne 1000 ]; then - echo "ERROR(example2): bogus variable setting daemons/www/cpu.shares $val2 "\ - "(should be 1000)" - die "example2 failed" -fi - -# cgconfigparser test -mkdir /$TMP/cgroups/cpu 2>/dev/null -mount -t cgroup -o cpu,cpuacct cpu /$TMP/cgroups/cpu || - die "example2 mount failed" -mkdir /$TMP/cgroups/cpu/daemons 2>/dev/null - -mkdir /$TMP/cgroups/cpu/daemons/www 2>/dev/null -echo 1000 > /$TMP/cgroups/cpu/daemons/www/cpu.shares || - die "example2 var.setting failed" - -mkdir /$TMP/cgroups/cpu/daemons/ftp 2>/dev/null -echo 500 > /$TMP/cgroups/cpu/daemons/ftp/cpu.shares || - die "example2 var.setting failed" - -lssubsys_3=`$TOOLSDIR/lssubsys -m` -$TOOLSDIR/cgclear || die "example2 3rd cgclear failed" - - -if [ "$lssubsys_1" != "$lssubsys_3" ]; then - echo "ERROR(example1): lssubsys_1='$lssubsys_1', lssubsys_3='lssubsys_3'" - die "example2 failed" -fi - -#----------------------------------------------------------------------------- -# EXAMPLE 3 -#----------------------------------------------------------------------------- -$TOOLSDIR/cgconfigparser -l `prepare_config $CONFDIR/cgconfig.conf.5.ex3` || \ - die "cgconfigparser -l $CONFDIR/cgconfig.conf.5.ex3 failed" - -$TOOLSDIR/cgsnapshot -b $CONFIGDIR/cgsnapshot_blacklist.conf \ - -s >/$TMP/temp.conf || die "example3 cgsnapshot failed" -lssubsys_1=`$TOOLSDIR/lssubsys -m` -lscg1=`$TOOLSDIR/lscgroup` -$TOOLSDIR/cgclear || die "example3 1st cgclear failed" - -# cgsnapshot sanity test -$TOOLSDIR/cgconfigparser -l /$TMP/temp.conf || die "example3 cgconfigparser failed" -lssubsys_2=`$TOOLSDIR/lssubsys -m` -lscg2=`$TOOLSDIR/lscgroup` -$TOOLSDIR/cgclear || die "example3 2st cgclear failed" - -if [ "$lssubsys_1" != "$lssubsys_2" ]; then - echo "ERROR(example3): lssubsys_1='$lssubsys_1', lssubsys_='$lssubsys_2'" - die "example3 failed" -fi - - -if [ "$lscg1" != "$lscg2" ]; then - echo "ERROR(example3): lscg1='$lscg1', lscg2='$lscg2'" - die "example3 failed" -fi - -# cgconfigparser test -mkdir /$TMP/cgroups/cpu 2>/dev/null -mkdir /$TMP/cgroups/cpuacct 2>/dev/null -mount -t cgroup -o cpu cpu /$TMP/cgroups/cpu || die "example3 Mount1 failed" -mount -t cgroup -o cpuacct cpuacct /$TMP/cgroups/cpuacct || die "example3 Mount2 failed" - -mkdir /$TMP/cgroups/cpu/daemons 2>/dev/null -mkdir /$TMP/cgroups/cpuacct/daemons 2>/dev/null - -lssubsys_3=`$TOOLSDIR/lssubsys -m` -lscg3=`$TOOLSDIR/lscgroup` -$TOOLSDIR/cgclear || die "example3 3rd cgclear failed" - -if [ "$lssubsys_1" != "$lssubsys_3" ]; then - echo "ERROR(example3): lssubsys_1='$lssubsys_1', lssubsys_3='$lssubsys_3'" - die "example3 failed" -fi - -if [ "$lscg1" != "$lscg3" ]; then - echo "ERROR(example3): lscg1='$lscg1', lscg3='$lscg3'" - die "example3 failed" -fi - -#----------------------------------------------------------------------------- -# EXAMPLE 4 -#----------------------------------------------------------------------------- -$TOOLSDIR/cgconfigparser -l `prepare_config $CONFDIR/cgconfig.conf.5.ex4` || \ - die "cgconfigparser -l $CONFDIR/cgconfig.conf.5.ex4 failed" - -$TOOLSDIR/cgsnapshot -b $CONFIGDIR/cgsnapshot_blacklist.conf -s \ - >/$TMP/temp.conf || die "example4 cgsnapshot failed" -lssubsys_1=`$TOOLSDIR/lssubsys -m` -lscg1=`$TOOLSDIR/lscgroup | sort` -$TOOLSDIR/cgclear || die "example4 1st cgclear failed" - -# cgsnapshot sanity test -$TOOLSDIR/cgconfigparser -l /$TMP/temp.conf || die "example4 cgconfigparser failed" -lssubsys_2=`$TOOLSDIR/lssubsys -m` -lscg2=`$TOOLSDIR/lscgroup| sort` -$TOOLSDIR/cgclear || die "example4 2st cgclear failed" - -if [ "$lssubsys_1" != "$lssubsys_2" ]; then - echo "ERROR(example4): lssubsys_1='$lssubsys_1', lssubsys_2='$lssubsys_2'" - die "example4 failed" -fi - -if [ "$lscg1" != "$lscg2" ]; then - echo "ERROR(example4): lscg1='$lscg1', lscg2='$lscg2'" - die "example4 failed" -fi - -# cgconfigparser test -mkdir /$TMP/cgroups/cpu 2>/dev/null -mkdir /$TMP/cgroups/cpuacct 2>/dev/null -mount -t cgroup -o cpu cpu /$TMP/cgroups/cpu || die "example4 Mount1 failed" -mount -t cgroup -o cpuacct cpuacct /$TMP/cgroups/cpuacct || die "example4 Mount2 failed" - -mkdir /$TMP/cgroups/cpuacct/daemons 2>/dev/null -mkdir /$TMP/cgroups/cpu/daemons 2>/dev/null -mkdir /$TMP/cgroups/cpu/daemons/www 2>/dev/null -mkdir /$TMP/cgroups/cpu/daemons/ftp 2>/dev/null - -lssubsys_3=`$TOOLSDIR/lssubsys -m` -lscg3=`$TOOLSDIR/lscgroup | sort` -cgclear || die "example3 3rd cgclear failed" - - -if [ "$lssubsys_1" != "$lssubsys_3" ]; then - echo "ERROR(example4): lssubsys_1='$lssubsys_1', lssubsys_3='$lssubsys_3'" - die "example4 failed" -fi - -if [ "$lscg1" != "$lscg3" ]; then - echo "ERROR(example4): lscg1='$lscg1', lscg3='$lscg3'" - die "example4 failed" -fi - - -cleanup -exit 0 \ No newline at end of file diff --git a/tools/cgconfigparser/cgconfigparser_multiconfig b/tools/cgconfigparser/cgconfigparser_multiconfig deleted file mode 100755 index 9a062297..00000000 --- a/tools/cgconfigparser/cgconfigparser_multiconfig +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash -# test cgconfigparser with multiple config files - -. `dirname $0`/../testenv.sh - -# prepare config files in a temporary directory -mkdir -p $TMP/conf.d -for i in $TESTDIR/tools/cgconfigparser/multiconfig/*.conf; do - mv `prepare_config $i` $TMP/conf.d/ -done - -$TOOLSDIR/cgconfigparser -L $TMP/conf.d/ \ - || die "cgconfigparser failed" - -# check that all expected groups exist -$TOOLSDIR/lscgroup > $TMP/groups.out -grep "cpu,cpuacct:/1$" <$TMP/groups.out >/dev/null \ - || die "cannot find group 1" -grep "freezer:/22$" <$TMP/groups.out >/dev/null \ - || die "cannot find group 2" -grep "net_cls:/333$" <$TMP/groups.out >/dev/null \ - || die "cannot find group 3" -grep "cpu,cpuacct:/1/4$" <$TMP/groups.out >/dev/null \ - || die "cannot find group 1/4" -grep "freezer:/22/4$" <$TMP/groups.out >/dev/null \ - || die "cannot find group 22/4" -grep "net_cls:/333/4$" <$TMP/groups.out >/dev/null \ - || die "cannot find group 333/4" -grep "cpu,cpuacct:/5$" <$TMP/groups.out >/dev/null \ - || die "cannot find group 5" -grep "freezer:/55$" <$TMP/groups.out >/dev/null \ - || die "cannot find group 55" -grep "net_cls:/555$" <$TMP/groups.out >/dev/null \ - || die "cannot find group 555" - -# clear it at once -$TOOLSDIR/cgclear -e -L $TMP/conf.d/ \ - || die "cgclear failed" - -cleanup -exit 0 diff --git a/tools/cgconfigparser/cgconfigparser_simple b/tools/cgconfigparser/cgconfigparser_simple deleted file mode 100755 index 070bd737..00000000 --- a/tools/cgconfigparser/cgconfigparser_simple +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -# simple sanity test for cgconfigparser, cgsnapshot and cgclear tool - -. `dirname $0`/../testenv.sh - - -mkdir -p /$TMP/cgroups/cpu 2>/dev/null -mount -t cgroup -o cpu,cpuacct cpu /$TMP/cgroups/cpu || die "Mount failed" - -$TOOLSDIR/cgsnapshot -b $CONFIGDIR/cgsnapshot_blacklist.conf >/$TMP/temp.conf || die "cgsnapshot failed" -lss_o1=`$TOOLSDIR/lssubsys -m` -$TOOLSDIR/cgclear || die "1st cgclear failed" - -$TOOLSDIR/cgconfigparser -l /$TMP/temp.conf || die "cgconfigparser failed" -lss_o2=`$TOOLSDIR/lssubsys -m` -$TOOLSDIR/cgclear || die "2nd cgclear failed" - -if [ "$lss_o1" != "$lss_o2" ]; then - echo "ERROR: first lss ouptput:'$lss_o1', second lss output:'$lss_o2'" -fi - -cleanup -exit 0 diff --git a/tools/cgconfigparser/multiconfig/1.conf b/tools/cgconfigparser/multiconfig/1.conf deleted file mode 100644 index dbc16d24..00000000 --- a/tools/cgconfigparser/multiconfig/1.conf +++ /dev/null @@ -1,9 +0,0 @@ -mount { - cpu = /TMP/cgroups/cpu; - cpuacct = /TMP/cgroups/cpu; -} - -group 1 { - cpu { } -} - diff --git a/tools/cgconfigparser/multiconfig/2.conf b/tools/cgconfigparser/multiconfig/2.conf deleted file mode 100644 index c1039dc5..00000000 --- a/tools/cgconfigparser/multiconfig/2.conf +++ /dev/null @@ -1,12 +0,0 @@ -mount { - freezer = /TMP/cgroups/freezer; -} - -# check that cpu is already mounted -group 2 { - cpu { } -} - -group 22 { - freezer { } -} diff --git a/tools/cgconfigparser/multiconfig/3.conf b/tools/cgconfigparser/multiconfig/3.conf deleted file mode 100644 index 620923bb..00000000 --- a/tools/cgconfigparser/multiconfig/3.conf +++ /dev/null @@ -1,17 +0,0 @@ -mount { - net_cls = /TMP/cgroups/net; -} - -# check that cpu is already mounted -group 3 { - cpu { } -} - -# check that freezer is already mounted -group 33 { - freezer { } -} - -group 333 { - net_cls { } -} diff --git a/tools/cgconfigparser/multiconfig/4.conf b/tools/cgconfigparser/multiconfig/4.conf deleted file mode 100644 index d48f12fa..00000000 --- a/tools/cgconfigparser/multiconfig/4.conf +++ /dev/null @@ -1,12 +0,0 @@ -# now with a namespace -namespace { - cpu=1; - cpuacct=1; - freezer=22; - net_cls=333; -} -group 4 { - cpu { } - freezer { } - net_cls { } -} diff --git a/tools/cgconfigparser/multiconfig/5.conf b/tools/cgconfigparser/multiconfig/5.conf deleted file mode 100644 index d4dc4653..00000000 --- a/tools/cgconfigparser/multiconfig/5.conf +++ /dev/null @@ -1,12 +0,0 @@ -# now without mount section -group 5 { - cpu { } -} - -group 55 { - freezer { } -} - -group 555 { - net_cls { } -} diff --git a/tools/cgconfigparser/permissions b/tools/cgconfigparser/permissions deleted file mode 100755 index 2d45afc2..00000000 --- a/tools/cgconfigparser/permissions +++ /dev/null @@ -1,177 +0,0 @@ -#!/bin/bash -# this script tests fperm and dperm configuration options - - -. `dirname $0`/../testenv.sh - -CONFDIR=$TESTDIR/tools/cgconfigparser/cgconfigparser_conf_files - -# permissions test -function check_perm() -{ - STEP=$1 - FILENAME=$2 - EXPECTED_PERM=$3 - EXPECTED_UID=$4 - EXPECTED_GID=$5 - REAL_PERM=`stat -c "%a" $FILENAME` - REAL_UID=`stat -c "%U" $FILENAME` - REAL_GID=`stat -c "%G" $FILENAME` - if [ "$EXPECTED_PERM" != "$REAL_PERM" ]; then - die "$STEP: Wrong permissions of $FILENAME,"\ - " expected $EXPECTED_PERM, actual $REAL_PERM" - fi - if [ "$EXPECTED_UID" != "$REAL_UID" ]; then - die "$STEP: Wrong uid of $FILENAME,"\ - " expected $EXPECTED_UID, actual $REAL_UID" - fi - if [ "$EXPECTED_GID" != "$REAL_GID" ]; then - die "$STEP: Wrong gid of $FILENAME,"\ - " expected $EXPECTED_GID, actual $REAL_GID" - fi -} - -# all mount points are in /$TMP/cgroups -mkdir /$TMP/cgroups/ 2>/dev/null - -# STEP1: simple config file without default section -$TOOLSDIR/cgconfigparser -l `prepare_config $CONFDIR/permissions.conf` || \ - die "STEP1: cgconfigparser -l $CONFDIR/permissions.conf failed" -check_perm "STEP1" "/$TMP/cgroups/cpu/daemons/www" 770 root root -check_perm "STEP1" "/$TMP/cgroups/cpu/daemons/www/cpu.shares" 666 root root -check_perm "STEP1" "/$TMP/cgroups/cpu/daemons/www/tasks" 640 root nobody - -check_perm "STEP1" "/$TMP/cgroups/cpu/daemons/ftp" 742 root root -check_perm "STEP1" "/$TMP/cgroups/cpu/daemons/ftp/cpu.shares" 426 root root -check_perm "STEP1" "/$TMP/cgroups/cpu/daemons/ftp/tasks" 264 root nobody - -$TOOLSDIR/cgclear || die "STEP1: cgclear failed" - -# STEP2: config file with one default section -$TOOLSDIR/cgconfigparser -l `prepare_config $CONFDIR/permissions_default1.conf` || \ - die "STEP2: cgconfigparser -l $CONFDIR/permissions_default1.conf failed" - -check_perm "STEP2" "/$TMP/cgroups/cpu/daemons/www" 757 nobody nobody -check_perm "STEP2" "/$TMP/cgroups/cpu/daemons/www/cpu.shares" 646 nobody nobody -check_perm "STEP2" "/$TMP/cgroups/cpu/daemons/www/tasks" 646 nobody nobody - -check_perm "STEP2" "/$TMP/cgroups/cpu/daemons/ftp" 742 root root -check_perm "STEP2" "/$TMP/cgroups/cpu/daemons/ftp/cpu.shares" 426 root root -check_perm "STEP2" "/$TMP/cgroups/cpu/daemons/ftp/tasks" 264 root root - -check_perm "STEP2" "/$TMP/cgroups/cpu/daemons/ssh" 757 root nobody -check_perm "STEP2" "/$TMP/cgroups/cpu/daemons/ssh/cpu.shares" 426 root nobody -check_perm "STEP2" "/$TMP/cgroups/cpu/daemons/ssh/tasks" 264 root nobody - -$TOOLSDIR/cgclear || die "cgclear failed" - -# STEP3: config file with two default sections - the last wins -$TOOLSDIR/cgconfigparser -l `prepare_config $CONFDIR/permissions_default2.conf` || \ - die "STEP3: cgconfigparser -l $CONFDIR/permissions_default2.conf failed" - -check_perm "STEP3" "/$TMP/cgroups/cpu/daemons/www" 757 nobody nobody -check_perm "STEP3" "/$TMP/cgroups/cpu/daemons/www/cpu.shares" 646 nobody nobody -check_perm "STEP3" "/$TMP/cgroups/cpu/daemons/www/tasks" 646 nobody nobody - -check_perm "STEP3" "/$TMP/cgroups/cpu/daemons/ftp" 742 root root -check_perm "STEP3" "/$TMP/cgroups/cpu/daemons/ftp/cpu.shares" 426 root root -check_perm "STEP3" "/$TMP/cgroups/cpu/daemons/ftp/tasks" 264 root root - -check_perm "STEP3" "/$TMP/cgroups/cpu/daemons/ssh" 757 root nobody -check_perm "STEP3" "/$TMP/cgroups/cpu/daemons/ssh/cpu.shares" 426 root nobody -check_perm "STEP3" "/$TMP/cgroups/cpu/daemons/ssh/tasks" 264 root nobody - -$TOOLSDIR/cgclear || die "cgclear failed" - -# STEP4: config file with one default section, now with SUID and SGID bits -$TOOLSDIR/cgconfigparser -l `prepare_config $CONFDIR/permissions_default3.conf` || \ - die "STEP4: cgconfigparser -l $CONFDIR/permissions_default3.conf failed" - -check_perm "STEP4" "/$TMP/cgroups/cpu/daemons/www" 2757 nobody nobody -check_perm "STEP4" "/$TMP/cgroups/cpu/daemons/www/cpu.shares" 7646 nobody nobody -check_perm "STEP4" "/$TMP/cgroups/cpu/daemons/www/tasks" 1646 nobody nobody - -check_perm "STEP4" "/$TMP/cgroups/cpu/daemons/ftp" 742 root root -check_perm "STEP4" "/$TMP/cgroups/cpu/daemons/ftp/cpu.shares" 426 root root -check_perm "STEP4" "/$TMP/cgroups/cpu/daemons/ftp/tasks" 264 root root - -check_perm "STEP4" "/$TMP/cgroups/cpu/daemons/ssh" 2757 root nobody -check_perm "STEP4" "/$TMP/cgroups/cpu/daemons/ssh/cpu.shares" 426 root nobody -check_perm "STEP4" "/$TMP/cgroups/cpu/daemons/ssh/tasks" 264 root nobody - -$TOOLSDIR/cgclear || die "cgclear failed" - -# STEP5: config file without default section, but with -a -t params -$TOOLSDIR/cgconfigparser -l `prepare_config $CONFDIR/permissions_default4.conf` -t nobody:nobody -a nobody:nobody -d 757 -f 757 || \ - die "STEP5: cgconfigparser -l $CONFDIR/permissions_default4.conf failed" - -check_perm "STEP5" "/$TMP/cgroups/cpu/daemons/www" 757 nobody nobody -check_perm "STEP5" "/$TMP/cgroups/cpu/daemons/www/cpu.shares" 646 nobody nobody -check_perm "STEP5" "/$TMP/cgroups/cpu/daemons/www/tasks" 644 nobody nobody - -check_perm "STEP5" "/$TMP/cgroups/cpu/daemons/ftp" 742 root root -check_perm "STEP5" "/$TMP/cgroups/cpu/daemons/ftp/cpu.shares" 426 root root -check_perm "STEP5" "/$TMP/cgroups/cpu/daemons/ftp/tasks" 264 root root - -check_perm "STEP5" "/$TMP/cgroups/cpu/daemons/ssh" 757 root nobody -check_perm "STEP5" "/$TMP/cgroups/cpu/daemons/ssh/cpu.shares" 426 root nobody -check_perm "STEP5" "/$TMP/cgroups/cpu/daemons/ssh/tasks" 264 root nobody - -$TOOLSDIR/cgclear || die "cgclear failed" - -# STEP6: config file without default section, but with -a -t params and sticky bit -$TOOLSDIR/cgconfigparser -l `prepare_config $CONFDIR/permissions_default4.conf` -t nobody:nobody -a nobody:nobody -d 2757 -f 7757 || \ - die "STEP6: cgconfigparser -l $CONFDIR/permissions_default4.conf failed" - -check_perm "STEP6" "/$TMP/cgroups/cpu/daemons/www" 2757 nobody nobody -check_perm "STEP6" "/$TMP/cgroups/cpu/daemons/www/cpu.shares" 7646 nobody nobody -check_perm "STEP6" "/$TMP/cgroups/cpu/daemons/www/tasks" 644 nobody nobody - -check_perm "STEP6" "/$TMP/cgroups/cpu/daemons/ftp" 742 root root -check_perm "STEP6" "/$TMP/cgroups/cpu/daemons/ftp/cpu.shares" 426 root root -check_perm "STEP6" "/$TMP/cgroups/cpu/daemons/ftp/tasks" 264 root root - -check_perm "STEP6" "/$TMP/cgroups/cpu/daemons/ssh" 2757 root nobody -check_perm "STEP6" "/$TMP/cgroups/cpu/daemons/ssh/cpu.shares" 426 root nobody -check_perm "STEP6" "/$TMP/cgroups/cpu/daemons/ssh/tasks" 264 root nobody - -$TOOLSDIR/cgclear || die "cgclear failed" - -# STEP7: config file without default section, but with only -d params (=-f is taken from umask) -$TOOLSDIR/cgconfigparser -l `prepare_config $CONFDIR/permissions_default4.conf` -t nobody:nobody -a nobody:nobody -d 757 || \ - die "STEP7: cgconfigparser -l $CONFDIR/permissions_default4.conf failed" - -check_perm "STEP7" "/$TMP/cgroups/cpu/daemons/www" 757 nobody nobody -check_perm "STEP7" "/$TMP/cgroups/cpu/daemons/www/cpu.shares" 644 nobody nobody -check_perm "STEP7" "/$TMP/cgroups/cpu/daemons/www/tasks" 644 nobody nobody - -check_perm "STEP7" "/$TMP/cgroups/cpu/daemons/ftp" 742 root root -check_perm "STEP7" "/$TMP/cgroups/cpu/daemons/ftp/cpu.shares" 426 root root -check_perm "STEP7" "/$TMP/cgroups/cpu/daemons/ftp/tasks" 264 root root - -check_perm "STEP7" "/$TMP/cgroups/cpu/daemons/ssh" 757 root nobody -check_perm "STEP7" "/$TMP/cgroups/cpu/daemons/ssh/cpu.shares" 426 root nobody -check_perm "STEP7" "/$TMP/cgroups/cpu/daemons/ssh/tasks" 264 root nobody - -$TOOLSDIR/cgclear || die "cgclear failed" - -# STEP8: config file without default section, but with -f, -d and -t -$TOOLSDIR/cgconfigparser -l `prepare_config $CONFDIR/permissions_default4.conf` -t nobody:nobody -a nobody:nobody -d 757 -f 757 -s 7247 || \ - die "STEP8: cgconfigparser -l $CONFDIR/permissions_default4.conf failed" - -check_perm "STEP8" "/$TMP/cgroups/cpu/daemons/www" 757 nobody nobody -check_perm "STEP8" "/$TMP/cgroups/cpu/daemons/www/cpu.shares" 646 nobody nobody -check_perm "STEP8" "/$TMP/cgroups/cpu/daemons/www/tasks" 7246 nobody nobody - -check_perm "STEP8" "/$TMP/cgroups/cpu/daemons/ftp" 742 root root -check_perm "STEP8" "/$TMP/cgroups/cpu/daemons/ftp/cpu.shares" 426 root root -check_perm "STEP8" "/$TMP/cgroups/cpu/daemons/ftp/tasks" 264 root root - -check_perm "STEP8" "/$TMP/cgroups/cpu/daemons/ssh" 757 root nobody -check_perm "STEP8" "/$TMP/cgroups/cpu/daemons/ssh/cpu.shares" 426 root nobody -check_perm "STEP8" "/$TMP/cgroups/cpu/daemons/ssh/tasks" 264 root nobody - -$TOOLSDIR/cgclear || die "cgclear failed" - -cleanup -exit 0 diff --git a/tools/multimount/Makefile.am b/tools/multimount/Makefile.am deleted file mode 100644 index 85fa7f42..00000000 --- a/tools/multimount/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -EXTRA_DIST = many_mp many_named - -# The legacy tests have been disabled because they do not successfully run -# on Travis CI. -#TESTS = many_mp many_named diff --git a/tools/multimount/many_mp b/tools/multimount/many_mp deleted file mode 100755 index 04659c15..00000000 --- a/tools/multimount/many_mp +++ /dev/null @@ -1,85 +0,0 @@ -#!/bin/bash -# Test hierarchies mounted multiple times (one hierarchy mounted 99 times) -# - cgsnapshot -# - cgconfigparser -# - lssubsys - -. `dirname $0`/../testenv.sh - -# cgconfigparser cannot handle more than 100 mount points :-( -COUNT=99 - -function check_config() -{ - CONFIG=$1 - # check basic sanity of generatet cgconfig.conf file - # - it has expected number of mount points - if [ `grep '=' < $CONFIG | wc -l` -ne $(($COUNT*4)) ]; then - die "wrong number of mount points in $CONFIG" - fi - - # - it has mount section - grep "mount" >/dev/null <$CONFIG \ - || die "cgsnapshot failed, no mount section found in $CONFIG" - - # - it has 99 different mount points - for i in `seq $COUNT`; do - grep "cpuacct$i" >/dev/null <$CONFIG \ - || die "cgsnapshot failed, no cpuacct$i found in $CONFIG" - done -} - -for i in `seq $COUNT`; do - mkdir -p $TMP/cgroups/cpuacct$i 2>/dev/null - mount -t cgroup -o cpuacct,cpuset,memory,freezer cpuacct$i \ - $TMP/cgroups/cpuacct$i \ - || die "Mount $i failed" -done - -# check lssubsys -# plain lssubsys - only one line with 4 controllers is expected -$TOOLSDIR/lssubsys >$TMP/subsys1.out \ - || die "plain lssubsys failed" -[ `wc -l <$TMP/subsys1.out` -eq 1 ] \ - || die "unexpected output of plan lssubsys" - -# lssubsys -m - first mount point is returned -$TOOLSDIR/lssubsys -m >$TMP/subsys2.out \ - || die "lssubsys -m failed" -[ `wc -l <$TMP/subsys2.out` -eq 1 ] \ - || die "unexpected output of lssubsys -m" -grep <$TMP/subsys2.out cpuacct1 >/dev/null \ - || die "lssubsys -m does not show the first mount point" - -# lssubsys -M - all mount points are returned -$TOOLSDIR/lssubsys -M >$TMP/subsys3.out \ - || die "lssubsys -M failed" -[ `wc -l <$TMP/subsys3.out` -eq $COUNT ] \ - || die "unexpected output of lssubsys -M" -for i in `seq $COUNT`; do - grep <$TMP/subsys3.out cpuacct$i >/dev/null \ - || die "lssubsys -m does not show cpuacct$i" -done - -# check cgsnapshot -$TOOLSDIR/cgsnapshot -b $CONFIGDIR/cgsnapshot_blacklist.conf >$TMP/snapshot.conf \ - || die "cgsnapshot failed" - -check_config $TMP/snapshot.conf - -$TOOLSDIR/cgclear || die "cgclear 1 failed" - -# check cgconfigparser - try to parse the generated config -$TOOLSDIR/cgconfigparser -l $TMP/snapshot.conf \ - || die "cgconfigparser failed to parse the snapshot" - -# and make its snapshot again -$TOOLSDIR/cgsnapshot -b $CONFIGDIR/cgsnapshot_blacklist.conf >$TMP/snapshot2.conf \ - || die "cgsnapshot2 failed" - -check_config $TMP/snapshot2.conf - -$TOOLSDIR/cgclear - -cleanup -exit 0 diff --git a/tools/multimount/many_named b/tools/multimount/many_named deleted file mode 100755 index fa27aa5a..00000000 --- a/tools/multimount/many_named +++ /dev/null @@ -1,102 +0,0 @@ -#!/bin/bash -# Tests named hierarchies, mouted several times -# - cgsnapshot -# - cgconfigparser -# - lssubsys - -. `dirname $0`/../testenv.sh - -# 10 named hierarchies, each mounted 8 times -HIERARCHIES=10 -COUNT=8 - -function check_config() -{ - # check basic sanity of the generated file - CONFIG=$1 - - # it has expected nr. of mount points - if [ `grep '=' <$CONFIG | wc -l` -ne $(($COUNT*$HIERARCHIES+3)) ];then - die "wrong number of mount points displayed in $CONFIG" - fi - # it has mount section - grep "mount" >/dev/null <$CONFIG \ - || die "cgsnapshot failed, no mount section found in $CONFIG" - # it has every hierarchy at least once - for i in `seq $HIERARCHIES`; do - grep "name=$i" >/dev/null <$CONFIG \ - || die "cgsnapshot failed, no name=$i found in $CONFIG" - done - # it has cpuacct,cpuset,name=cputest mount - grep "name=cputest" >/dev/null <$CONFIG \ - || die "cannot find name=cputest in $CONFIG" - grep "cpuacct" >/dev/null <$CONFIG \ - || die "cannot find cpuacct in $CONFIG" -} - -for i in `seq $HIERARCHIES`; do - for j in `seq $COUNT`; do - mkdir -p $TMP/cgroups/named$i-$j 2>/dev/null - mount -t cgroup -o none,name=$i named$i \ - $TMP/cgroups/named$i-$j \ - || die "Mount $i_$j failed" - done -done - -# add one named mount point with other controllers -mkdir -p $TMP/cgroups/cpu 2>/dev/null -mount -t cgroup -o cpuset,cpuacct,name=cputest test $TMP/cgroups/cpu \ - || die "Mount cpu failed" - -# !!! lssubsys does NOT support named hierarchies now !!! -# check lssubsys -# plain lssubsys - every hierarchy only once -#$TOOLSDIR/lssubsys >$TMP/subsys1.out \ -# || die "plain lssubsys failed" -#[ `wc -l <$TMP/subsys1.out` -eq $(( $HIERARCHIES+1 )) ] \ -# || die "unexpected output of plain lssubsys" - -# lssubsys -m - first mount point is returned -#$TOOLSDIR/lssubsys -m >$TMP/subsys2.out \ -# || die "lssubsys -m failed" -#[ `wc -l <$TMP/subsys2.out` -eq $(( $HIERARCHIES+1 )) ] \ -# || die "unexpected output of lssubsys -m" -#grep <$TMP/subsys2.out cgroups/cpu >/dev/null \ -# || die "lssubsys -m does not show the first mount point for cputest" -#for i in `seq $HIERARCHIES`; do -# grep <$TMP/subsys2.out cgroups/named$i-1 >/dev/null \ -# || die "lssubsys -m does not show cgroups/named$i-1" -#done - -# lssubsys -M - all mount points are returned -#$TOOLSDIR/lssubsys -M >$TMP/subsys3.out \ -# || die "lssubsys -M failed" -#[ `wc -l <$TMP/subsys3.out` -eq $(( $COUNT*$HIERARCHIES+1)) ] \ -# || die "unexpected output of lssubsys -M" -#for i in `seq $HIERARCHIES`; do -# for j in `seq $COUNT`; do -# grep <$TMP/subsys3.out cgroups/named$i-$j >/dev/null \ -# || die "lssubsys -m does not show cgroups/named$i-$j" -# done -#done - -$TOOLSDIR/cgsnapshot -b $CONFIGDIR/cgsnapshot_blacklist.conf >$TMP/snapshot.conf \ - || die "cgsnapshot failed" - -check_config $TMP/snapshot.conf - -$TOOLSDIR/cgclear || die "cgclear 1 failed" - -# try to parse the config... -$TOOLSDIR/cgconfigparser -l $TMP/snapshot.conf \ - || die "cgconfigparser failed to parse the snapshot" -# and make its snapshot again -$TOOLSDIR/cgsnapshot -b $CONFIGDIR/cgsnapshot_blacklist.conf >$TMP/snapshot2.conf \ - || die "cgsnapshot2 failed" - -check_config $TMP/snapshot2.conf - -$TOOLSDIR/cgclear - -cleanup -exit 0 diff --git a/tools/testenv.sh.in b/tools/testenv.sh.in deleted file mode 100644 index 2b3eca1b..00000000 --- a/tools/testenv.sh.in +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/bash - -# Simple test framework for libcgroup. -# Upon loading it does following: -# - sets $TMP, where all temporary files should be stored. -# - backs-up /etc/cgrules.conf in the $TMP -# (so it does not interfere with tests) -# -# Function cleanup() or die() must be called to destroy this temporary -# directory and restore previous cgrules.conf! -# -# Usage: -# . ./testenv.sh -# -# cleanup -# exit 0 - -# Print an error message and exit -# Usage: -# cgclear || die "cgclear failed" -function die() -{ - echo $* - @abs_top_srcdir@/libtool --mode=execute @abs_top_srcdir@/src/tools/cgclear - if [ -e $TMP/cgrules-backup.conf ]; then - mv $TMP/cgrules-backup.conf /etc/cgrules.conf &>/dev/null - else - rm /etc/cgrules.conf &>/dev/null - fi - rm -rf $TMP - unset TMP - exit 1 -} - -# Clear everything that was created at loading this script, i.e. -# remove the temporary directory -# In addition, check that nothing remained mounted. -# Usage: -# cleanup -function cleanup() -{ - RET=0 - grep -v systemd $TMP/mounts - if grep "^cgroup" $TMP/mounts &>/dev/null; then - echo "Error: cleanup has found mounted cgroup:" - grep cgroup /proc/mounts - RET=1 - cgclear - fi - if [ -e $TMP/cgrules-backup.conf ]; then - mv $TMP/cgrules-backup.conf /etc/cgrules.conf &>/dev/null - else - rm /etc/cgrules.conf &>/dev/null - fi - rm -rf $TMP - unset TMP - [ -z $RET ] || exit $RET -} - -# Copies a file to $TMP and replaces all occurrences of TMP in the file with -# value of $TMP. The function prints the name of the new file to its std. -# output. -# Usage: -# cgconfigparser -l `prepare_config config/sample.conf` -function prepare_config() -{ - INPUT=$1 - OUTPUT=$TMP/`basename $INPUT` - # echo -n "m4_changequote()" | m4 -P -D "TMP=$TMP" - $FILE >$OUTPUT - sed -e "s!\bTMP\b!$TMP!g" <$INPUT >$OUTPUT || ( - echo "Error: prepare config failed!" >&2; exit 1 - ) - echo $OUTPUT -} - -export TMP=`mktemp --tmpdir -d libcgroup-tmp-XXXXXXX` -# store the rules on safe place, we don't want them to mess up the tests -mv /etc/cgrules.conf $TMP/cgrules-backup.conf &>/dev/null -# tools directory -export TOOLSDIR="@abs_top_srcdir@/libtool --mode=execute @abs_top_srcdir@/src/tools/" -# config files directory -export CONFIGDIR="@abs_top_srcdir@/samples" -# test directory -export TESTDIR="@abs_top_srcdir@/tests" diff --git a/walk_task.c b/walk_task.c deleted file mode 100644 index 42ef32db..00000000 --- a/walk_task.c +++ /dev/null @@ -1,49 +0,0 @@ -#include -#include -#include -#include -#include - -int main(int argc, char *argv[]) -{ - int ret, i; - char *group = NULL; - void *handle; - - if (argc < 2) { - printf("No list of groups provided\n"); - return -1; - } - - ret = cgroup_init(); - - if (ret) { - printf("cgroup_init failed with %s\n", cgroup_strerror(ret)); - return -1; - } - - for (i = 1; i < argc; i++) { - pid_t pid; - group = strdup(argv[i]); - printf("Printing the details of groups %s\n", group); - ret = cgroup_get_task_begin(group, "cpu", &handle, &pid); - while (!ret) { - printf("Pid is %u\n", pid); - ret = cgroup_get_task_next(&handle, &pid); - if (ret && ret != ECGEOF) { - printf("cgroup_get_task_next failed with %s\n", - cgroup_strerror(ret)); - if (ret == ECGOTHER) - printf("failure with %s\n", - strerror(errno)); - return -1; - } - } - free(group); - group = NULL; - ret = cgroup_get_task_end(&handle); - } - - return 0; - -} diff --git a/walk_test.c b/walk_test.c deleted file mode 100644 index f3112c5f..00000000 --- a/walk_test.c +++ /dev/null @@ -1,121 +0,0 @@ -#include -#include -#include -#include -#include -#include - -void visit_node(struct cgroup_file_info *info, char *root) -{ - if (info->type == CGROUP_FILE_TYPE_DIR) { - printf("path %s, parent %s, relative %s, full %s\n", - info->path, info->parent, info->full_path + - + strlen(root) - 1, - info->full_path); - } -} - -int main(int argc, char *argv[]) -{ - int ret; - char *controller; - void *handle; - struct cgroup_file_info info; - char root[FILENAME_MAX]; - int lvl, i; - - if (argc < 2) { - fprintf(stderr, "Usage %s: \n", - argv[0]); - exit(EXIT_FAILURE); - } - - controller = argv[1]; - - ret = cgroup_init(); - if (ret != 0) { - fprintf(stderr, "Init failed\n"); - exit(EXIT_FAILURE); - } - - ret = cgroup_walk_tree_begin(controller, "/", 0, &handle, &info, &lvl); - - if (ret != 0) { - fprintf(stderr, "Walk failed\n"); - exit(EXIT_FAILURE); - } - strcpy(root, info.full_path); - printf("Begin pre-order walk\n"); - printf("root is %s\n", root); - visit_node(&info, root); - while ((ret = cgroup_walk_tree_next(0, &handle, &info, lvl)) != - ECGEOF) { - visit_node(&info, root); - } - cgroup_walk_tree_end(&handle); - - printf("pre-order walk finished\n"); - ret = cgroup_walk_tree_begin(controller, "/", 0, &handle, &info, &lvl); - - if (ret != 0) { - fprintf(stderr, "Walk failed\n"); - exit(EXIT_FAILURE); - } - - ret = cgroup_walk_tree_set_flags(&handle, CGROUP_WALK_TYPE_POST_DIR); - - if (ret) { - fprintf(stderr, "Walk failed with %s\n", cgroup_strerror(ret)); - exit(EXIT_FAILURE); - } - - strcpy(root, info.full_path); - printf("Begin post-order walk\n"); - printf("root is %s\n", root); - visit_node(&info, root); - while ((ret = cgroup_walk_tree_next(0, &handle, &info, lvl)) != - ECGEOF) { - visit_node(&info, root); - } - cgroup_walk_tree_end(&handle); - printf("post order walk finished\n"); - - ret = cgroup_walk_tree_begin(controller, "/a", 2, &handle, &info, &lvl); - - if (ret != 0) { - fprintf(stderr, "Walk failed\n"); - exit(EXIT_FAILURE); - } - strcpy(root, info.full_path); - printf("root is %s\n", root); - visit_node(&info, root); - while ((ret = cgroup_walk_tree_next(2, &handle, &info, lvl)) != - ECGEOF) { - visit_node(&info, root); - } - cgroup_walk_tree_end(&handle); - - /* - * Walk only the first five nodes - */ - i = 0; - printf("Walking the first 5 nodes\n"); - ret = cgroup_walk_tree_begin(controller, "/", 0, &handle, &info, &lvl); - - if (ret != 0) { - fprintf(stderr, "Walk failed\n"); - exit(EXIT_FAILURE); - } - strcpy(root, info.full_path); - printf("root is %s\n", root); - visit_node(&info, root); - i++; - while ((ret = cgroup_walk_tree_next(0, &handle, &info, lvl)) != - ECGEOF) { - visit_node(&info, root); - if (++i >= 5) - break; - } - cgroup_walk_tree_end(&handle); - return EXIT_SUCCESS; -} diff --git a/wrapper_test.c b/wrapper_test.c deleted file mode 100644 index 257ece33..00000000 --- a/wrapper_test.c +++ /dev/null @@ -1,44 +0,0 @@ -#include -#include -#include -#include "../src/libcgroup-internal.h" - -int main() -{ - struct cgroup *cgroup; - struct cgroup_controller *cgc; - int fail = 0; - - cgroup = cgroup_new_cgroup("test"); - cgc = cgroup_add_controller(cgroup, "cpu"); - - cgroup_add_value_int64(cgc, "cpu.shares", 2048); - cgroup_add_value_uint64(cgc, "cpu.something", 1000); - cgroup_add_value_bool(cgc, "cpu.bool", 1); - - if (!strcmp(cgroup->controller[0]->values[0]->name, "cpu.shares")) { - if (strcmp(cgroup->controller[0]->values[0]->value, "2048")) { - printf("FAIL for add_value_int\n"); - fail = 1; - } - } - - if (!strcmp(cgroup->controller[0]->values[1]->name, "cpu.something")) { - if (strcmp(cgroup->controller[0]->values[1]->value, "1000")) { - printf("FAIL for add_value_uint\n"); - fail = 1; - } - } - - if (!strcmp(cgroup->controller[0]->values[2]->name, "cpu.bool")) { - if (strcmp(cgroup->controller[0]->values[2]->value, "1")) { - printf("FAIL for add_value_bool\n"); - fail = 1; - } - } - - if (!fail) - printf("PASS!\n"); - - return fail; -}