summaryrefslogtreecommitdiffstats
path: root/tests/libcgrouptest.h
blob: eee6e6285153a3d388fa15ee6a53fe5f0331b02c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142

/*
 * Copyright IBM Corporation. 2008
 *
 * Author:	Sudhir Kumar <skumar@linux.vnet.ibm.com>
 *
 * 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 <errno.h>
#include <fcntl.h>
#include <mntent.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/syscall.h>
#include <sys/types.h>

#include <libcgroup.h>

#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 */

int cpu = 0, memory = 0;

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,
};

/* The set of verbose messages useful to the user */
extern char info[NUM_MSGS][SIZE];

int64_t val_int64;
u_int64_t val_uint64;
bool val_bool;
/* Doubt: size of following string. is'nt this wrong ?*/
char val_string[FILENAME_MAX];	/* string value of control parameter */
uid_t control_uid;
gid_t control_gid;
uid_t tasks_uid;
gid_t tasks_gid;
/* this variable is never modified */
int fs_mounted;

/* The mountpoints as received from script */
char mountpoint[FILENAME_MAX], mountpoint2[FILENAME_MAX];

/* No extra message unless specified */
char extra[SIZE] = "\n";

/* 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,
								int k, int i);
struct cgroup *create_new_cgroup_ds(int ctl, const char *grpname,
						 int value_type, 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, 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 get_controllers(const char *name, int *exist);
static int group_exist(char *path_group);
static int set_controller(int controller, char *controller_name,
						 char *control_file);
static int group_modified(char *path_control_file, int value_type);
static int add_control_value(struct cgroup_controller *newcontroller,
				 char * control_file, char *wr, int value_type);
struct cgroup *new_cgroup(char *group, char *controller_name,
				 char *control_file, int value_type, int i);
int check_fsmounted(int multimnt);
static int check_task(char *tasksfile);
/* function to print messages in better format */
static inline void message(int num, int pass, const char *api,
						 int ret, char *extra);
static inline void build_path(char *target, char *mountpoint,
				 const char *group, const char *file);

static inline pid_t cgrouptest_gettid()
{
	return syscall(__NR_gettid);
}
#endif