blob: cfd66081ef9e67dc90ccf87e7b7f864dee6a9eb6 [file] [log] [blame]
Dylan Reid837c74a2016-01-22 17:25:21 -08001/* Copyright 2016 The Chromium OS Authors. All rights reserved.
2 * Use of this source code is governed by a BSD-style license that can be
3 * found in the LICENSE file.
4 */
5
Dylan Reid837c74a2016-01-22 17:25:21 -08006#include <errno.h>
7#include <signal.h>
8#include <sys/mount.h>
9#include <sys/stat.h>
10#include <sys/types.h>
11#include <unistd.h>
12
13#include "test_harness.h"
14
15#include "container_cgroup.h"
16#include "libcontainer.h"
17
18static const pid_t INIT_TEST_PID = 5555;
Chinyue Chen4f3fd682016-07-01 14:11:42 +080019static const int TEST_CPU_SHARES = 200;
20static const int TEST_CPU_QUOTA = 20000;
21static const int TEST_CPU_PERIOD = 50000;
Dylan Reid837c74a2016-01-22 17:25:21 -080022
23struct mount_args {
24 char *source;
25 char *target;
26 char *filesystemtype;
27 unsigned long mountflags;
28 const void *data;
29};
30static struct mount_args mount_call_args[5];
31static int mount_called;
32
33struct mknod_args {
34 char *pathname;
35 mode_t mode;
36 dev_t dev;
37};
38static struct mknod_args mknod_call_args;
Chinyue Chen03c54ae2016-06-29 12:29:10 +080039static dev_t stat_rdev_ret;
Dylan Reid837c74a2016-01-22 17:25:21 -080040
41static int kill_called;
42static int kill_sig;
43static const char *minijail_alt_syscall_table;
44static int minijail_ipc_called;
45static int minijail_vfs_called;
46static int minijail_net_called;
47static int minijail_pids_called;
48static int minijail_run_as_init_called;
49static int minijail_user_called;
50static int minijail_wait_called;
51static int minijail_reset_signal_mask_called;
52static int mount_ret;
53static char *mkdtemp_root;
54
55/* global mock cgroup. */
Dylan Reid355d5e42016-04-29 16:53:31 -070056#define MAX_ADD_DEVICE_CALLS 2
Dylan Reid837c74a2016-01-22 17:25:21 -080057struct mock_cgroup {
58 struct container_cgroup cg;
59 int freeze_ret;
60 int thaw_ret;
61 int deny_all_devs_ret;
62 int add_device_ret;
Chinyue Chenfac909e2016-06-24 14:17:42 +080063 int set_cpu_ret;
Dylan Reid837c74a2016-01-22 17:25:21 -080064
65 int init_called_count;
66 int deny_all_devs_called_count;
67
Dylan Reid4843d6b2017-03-31 18:14:30 -070068 int add_dev_allow[MAX_ADD_DEVICE_CALLS];
Dylan Reid355d5e42016-04-29 16:53:31 -070069 int add_dev_major[MAX_ADD_DEVICE_CALLS];
70 int add_dev_minor[MAX_ADD_DEVICE_CALLS];
71 int add_dev_read[MAX_ADD_DEVICE_CALLS];
72 int add_dev_write[MAX_ADD_DEVICE_CALLS];
73 int add_dev_modify[MAX_ADD_DEVICE_CALLS];
74 char add_dev_type[MAX_ADD_DEVICE_CALLS];
75 int add_dev_called_count;
Chinyue Chenfac909e2016-06-24 14:17:42 +080076
77 int set_cpu_shares_count;
78 int set_cpu_quota_count;
79 int set_cpu_period_count;
80 int set_cpu_rt_runtime_count;
81 int set_cpu_rt_period_count;
Dylan Reid837c74a2016-01-22 17:25:21 -080082};
83
84static struct mock_cgroup gmcg;
85
86static int mock_freeze(const struct container_cgroup *cg)
87{
88 struct mock_cgroup *mcg = (struct mock_cgroup *)cg;
89 return mcg->freeze_ret;
90}
91
92static int mock_thaw(const struct container_cgroup *cg)
93{
94 struct mock_cgroup *mcg = (struct mock_cgroup *)cg;
95 return mcg->thaw_ret;
96}
97
98static int mock_deny_all_devices(const struct container_cgroup *cg)
99{
100 struct mock_cgroup *mcg = (struct mock_cgroup *)cg;
101 ++mcg->deny_all_devs_called_count;
102 return mcg->deny_all_devs_ret;
103}
104
Dylan Reid4843d6b2017-03-31 18:14:30 -0700105static int mock_add_device(const struct container_cgroup *cg, int allow,
106 int major, int minor, int read, int write,
107 int modify, char type)
Dylan Reid837c74a2016-01-22 17:25:21 -0800108{
109 struct mock_cgroup *mcg = (struct mock_cgroup *)cg;
Dylan Reid355d5e42016-04-29 16:53:31 -0700110
111 if (mcg->add_dev_called_count >= MAX_ADD_DEVICE_CALLS)
112 return mcg->add_device_ret;
Dylan Reid4843d6b2017-03-31 18:14:30 -0700113 mcg->add_dev_allow[mcg->add_dev_called_count] = allow;
Dylan Reid355d5e42016-04-29 16:53:31 -0700114 mcg->add_dev_major[mcg->add_dev_called_count] = major;
115 mcg->add_dev_minor[mcg->add_dev_called_count] = minor;
116 mcg->add_dev_read[mcg->add_dev_called_count] = read;
117 mcg->add_dev_write[mcg->add_dev_called_count] = write;
118 mcg->add_dev_modify[mcg->add_dev_called_count] = modify;
119 mcg->add_dev_type[mcg->add_dev_called_count] = type;
120 mcg->add_dev_called_count++;
Dylan Reid837c74a2016-01-22 17:25:21 -0800121 return mcg->add_device_ret;
122}
123
Chinyue Chenfac909e2016-06-24 14:17:42 +0800124static int mock_set_cpu_shares(const struct container_cgroup *cg, int shares)
125{
126 struct mock_cgroup *mcg = (struct mock_cgroup *)cg;
127 mcg->set_cpu_shares_count++;
128 return mcg->set_cpu_ret;
129}
130
131static int mock_set_cpu_quota(const struct container_cgroup *cg, int quota)
132{
133 struct mock_cgroup *mcg = (struct mock_cgroup *)cg;
134 mcg->set_cpu_quota_count++;
135 return mcg->set_cpu_ret;
136}
137
138static int mock_set_cpu_period(const struct container_cgroup *cg, int period)
139{
140 struct mock_cgroup *mcg = (struct mock_cgroup *)cg;
141 mcg->set_cpu_period_count++;
142 return mcg->set_cpu_ret;
143}
144
145static int mock_set_cpu_rt_runtime(const struct container_cgroup *cg, int rt_runtime)
146{
147 struct mock_cgroup *mcg = (struct mock_cgroup *)cg;
148 mcg->set_cpu_rt_runtime_count++;
149 return mcg->set_cpu_ret;
150}
151
152static int mock_set_cpu_rt_period(const struct container_cgroup *cg, int rt_period)
153{
154 struct mock_cgroup *mcg = (struct mock_cgroup *)cg;
155 mcg->set_cpu_rt_period_count++;
156 return mcg->set_cpu_ret;
157}
158
Dylan Reid837c74a2016-01-22 17:25:21 -0800159struct container_cgroup *container_cgroup_new(const char *name,
Keshav Santhanam998fd7d2016-07-12 13:33:00 -0700160 const char *cgroup_root,
Dylan Reida9966422016-07-21 10:11:34 -0700161 const char *cgroup_parent,
Dmitry Torokhov14eef722016-09-27 16:40:37 -0700162 uid_t uid, gid_t gid)
Dylan Reid837c74a2016-01-22 17:25:21 -0800163{
164 gmcg.cg.name = strdup(name);
165 return &gmcg.cg;
166}
167
168void container_cgroup_destroy(struct container_cgroup *c)
169{
170 free(c->name);
171}
172
Keshav Santhanam0e4c3282016-07-14 10:25:16 -0700173TEST(premounted_runfs)
174{
175 char premounted_runfs[] = "/tmp/cgtest_run/root";
176 struct container_config *config = container_config_create();
Luis Hector Chavezf9b16872017-09-14 14:22:15 -0700177 ASSERT_NE(nullptr, config);
Keshav Santhanam0e4c3282016-07-14 10:25:16 -0700178
179 container_config_premounted_runfs(config, premounted_runfs);
180 const char *result = container_config_get_premounted_runfs(config);
181 ASSERT_EQ(0, strcmp(result, premounted_runfs));
182
183 container_config_destroy(config);
184}
185
186TEST(pid_file_path)
187{
188 char pid_file_path[] = "/tmp/cgtest_run/root/container.pid";
189 struct container_config *config = container_config_create();
Luis Hector Chavezf9b16872017-09-14 14:22:15 -0700190 ASSERT_NE(nullptr, config);
Keshav Santhanam0e4c3282016-07-14 10:25:16 -0700191
192 container_config_pid_file(config, pid_file_path);
193 const char *result = container_config_get_pid_file(config);
194 ASSERT_EQ(0, strcmp(result, pid_file_path));
195
196 container_config_destroy(config);
197}
198
Dylan Reid837c74a2016-01-22 17:25:21 -0800199/* Start of tests. */
200FIXTURE(container_test) {
201 struct container_config *config;
202 struct container *container;
203 int mount_flags;
204 char *rootfs;
205};
206
207FIXTURE_SETUP(container_test)
208{
209 char temp_template[] = "/tmp/cgtestXXXXXX";
210 char rundir_template[] = "/tmp/cgtest_runXXXXXX";
211 char *rundir;
212 char path[256];
Dylan Reid17fd53f2016-11-18 19:14:41 -0800213 const char *pargs[] = {
Dylan Reid837c74a2016-01-22 17:25:21 -0800214 "/sbin/init",
215 };
216
217 memset(&mount_call_args, 0, sizeof(mount_call_args));
218 mount_called = 0;
219 memset(&mknod_call_args, 0, sizeof(mknod_call_args));
220 mkdtemp_root = NULL;
221
222 memset(&gmcg, 0, sizeof(gmcg));
223 static const struct cgroup_ops cgops = {
224 .freeze = mock_freeze,
225 .thaw = mock_thaw,
226 .deny_all_devices = mock_deny_all_devices,
227 .add_device = mock_add_device,
Chinyue Chenfac909e2016-06-24 14:17:42 +0800228 .set_cpu_shares = mock_set_cpu_shares,
229 .set_cpu_quota = mock_set_cpu_quota,
230 .set_cpu_period = mock_set_cpu_period,
231 .set_cpu_rt_runtime = mock_set_cpu_rt_runtime,
232 .set_cpu_rt_period = mock_set_cpu_rt_period,
Dylan Reid837c74a2016-01-22 17:25:21 -0800233 };
234 gmcg.cg.ops = &cgops;
235
236 self->rootfs = strdup(mkdtemp(temp_template));
237
238 kill_called = 0;
239 minijail_alt_syscall_table = NULL;
240 minijail_ipc_called = 0;
241 minijail_vfs_called = 0;
242 minijail_net_called = 0;
243 minijail_pids_called = 0;
244 minijail_run_as_init_called = 0;
245 minijail_user_called = 0;
246 minijail_wait_called = 0;
247 minijail_reset_signal_mask_called = 0;
248 mount_ret = 0;
Chinyue Chen03c54ae2016-06-29 12:29:10 +0800249 stat_rdev_ret = makedev(2, 3);
Dylan Reid837c74a2016-01-22 17:25:21 -0800250
251 snprintf(path, sizeof(path), "%s/dev", self->rootfs);
252 //mkdir(path, S_IRWXU | S_IRWXG);
253
254 self->mount_flags = MS_NOSUID | MS_NODEV | MS_NOEXEC;
255
256 self->config = container_config_create();
257 container_config_rootfs(self->config, self->rootfs);
258 container_config_program_argv(self->config, pargs, 1);
259 container_config_alt_syscall_table(self->config, "testsyscalltable");
260 container_config_add_mount(self->config,
261 "testtmpfs",
262 "tmpfs",
263 "/tmp",
264 "tmpfs",
265 NULL,
Mike Frysinger05e594e2017-01-10 02:11:08 -0500266 NULL,
Dylan Reid837c74a2016-01-22 17:25:21 -0800267 self->mount_flags,
Mike Frysinger412dbd22017-01-06 01:50:34 -0500268 0,
Dylan Reid837c74a2016-01-22 17:25:21 -0800269 1000,
270 1000,
271 0x666,
272 0,
273 1);
274 container_config_add_device(self->config,
275 'c',
276 "/dev/foo",
277 S_IRWXU | S_IRWXG,
278 245,
279 2,
Dylan Reid355d5e42016-04-29 16:53:31 -0700280 0,
281 1000,
282 1001,
283 1,
284 1,
285 0);
286 /* test dynamic minor on /dev/null */
287 container_config_add_device(self->config,
288 'c',
289 "/dev/null",
290 S_IRWXU | S_IRWXG,
291 1,
292 -1,
293 1,
Dylan Reid837c74a2016-01-22 17:25:21 -0800294 1000,
295 1001,
296 1,
297 1,
298 0);
299
Chinyue Chen4f3fd682016-07-01 14:11:42 +0800300 container_config_set_cpu_shares(self->config, TEST_CPU_SHARES);
301 container_config_set_cpu_cfs_params(
302 self->config, TEST_CPU_QUOTA, TEST_CPU_PERIOD);
Chinyue Chenfac909e2016-06-24 14:17:42 +0800303 /* Invalid params, so this won't be applied. */
304 container_config_set_cpu_rt_params(self->config, 20000, 20000);
305
Dylan Reid837c74a2016-01-22 17:25:21 -0800306 rundir = mkdtemp(rundir_template);
Dylan Reide040c6b2016-05-02 18:49:02 -0700307 self->container = container_new("containerUT", rundir);
Luis Hector Chavezf9b16872017-09-14 14:22:15 -0700308 ASSERT_NE(nullptr, self->container);
Dylan Reid837c74a2016-01-22 17:25:21 -0800309}
310
311FIXTURE_TEARDOWN(container_test)
312{
313 char path[256];
314 int i;
315
316 container_destroy(self->container);
317 snprintf(path, sizeof(path), "rm -rf %s", self->rootfs);
318 EXPECT_EQ(0, system(path));
319 free(self->rootfs);
320
321 for (i = 0; i < mount_called; i++) {
322 free(mount_call_args[i].source);
323 free(mount_call_args[i].target);
324 free(mount_call_args[i].filesystemtype);
325 }
326 free(mknod_call_args.pathname);
327 free(mkdtemp_root);
328}
329
330TEST_F(container_test, test_mount_tmp_start)
331{
332 char *path;
333
Dylan Reide040c6b2016-05-02 18:49:02 -0700334 EXPECT_EQ(0, container_start(self->container, self->config));
Dylan Reid837c74a2016-01-22 17:25:21 -0800335 EXPECT_EQ(2, mount_called);
336 EXPECT_EQ(0, strcmp(mount_call_args[1].source, "tmpfs"));
337 EXPECT_LT(0, asprintf(&path, "%s/root/tmp", mkdtemp_root));
338 EXPECT_EQ(0, strcmp(mount_call_args[1].target, path));
339 free(path);
340 EXPECT_EQ(0, strcmp(mount_call_args[1].filesystemtype,
341 "tmpfs"));
Luis Hector Chavezf9b16872017-09-14 14:22:15 -0700342 EXPECT_EQ(mount_call_args[1].mountflags,
343 static_cast<unsigned long>(self->mount_flags));
344 EXPECT_EQ(mount_call_args[1].data, nullptr);
Dylan Reid837c74a2016-01-22 17:25:21 -0800345
346 EXPECT_EQ(1, minijail_ipc_called);
347 EXPECT_EQ(1, minijail_vfs_called);
348 EXPECT_EQ(1, minijail_net_called);
349 EXPECT_EQ(1, minijail_pids_called);
350 EXPECT_EQ(1, minijail_user_called);
351 EXPECT_EQ(1, minijail_run_as_init_called);
352 EXPECT_EQ(1, gmcg.deny_all_devs_called_count);
353
Dylan Reid4843d6b2017-03-31 18:14:30 -0700354 EXPECT_EQ(1, gmcg.add_dev_allow[0]);
Dylan Reid355d5e42016-04-29 16:53:31 -0700355 EXPECT_EQ(245, gmcg.add_dev_major[0]);
356 EXPECT_EQ(2, gmcg.add_dev_minor[0]);
357 EXPECT_EQ(1, gmcg.add_dev_read[0]);
358 EXPECT_EQ(1, gmcg.add_dev_write[0]);
359 EXPECT_EQ(0, gmcg.add_dev_modify[0]);
360 EXPECT_EQ('c', gmcg.add_dev_type[0]);
361
Dylan Reid4843d6b2017-03-31 18:14:30 -0700362 EXPECT_EQ(1, gmcg.add_dev_allow[1]);
Dylan Reid355d5e42016-04-29 16:53:31 -0700363 EXPECT_EQ(1, gmcg.add_dev_major[1]);
364 EXPECT_EQ(3, gmcg.add_dev_minor[1]);
365 EXPECT_EQ(1, gmcg.add_dev_read[1]);
366 EXPECT_EQ(1, gmcg.add_dev_write[1]);
367 EXPECT_EQ(0, gmcg.add_dev_modify[1]);
368 EXPECT_EQ('c', gmcg.add_dev_type[1]);
Dylan Reid837c74a2016-01-22 17:25:21 -0800369
Chinyue Chen03c54ae2016-06-29 12:29:10 +0800370 EXPECT_LT(0, asprintf(&path, "%s/root/dev/null", mkdtemp_root));
371 EXPECT_EQ(0, strcmp(mknod_call_args.pathname, path));
372 free(path);
Luis Hector Chavezf9b16872017-09-14 14:22:15 -0700373 EXPECT_EQ(mknod_call_args.mode,
374 static_cast<mode_t>(S_IRWXU | S_IRWXG | S_IFCHR));
Chinyue Chen03c54ae2016-06-29 12:29:10 +0800375 EXPECT_EQ(mknod_call_args.dev, makedev(1, 3));
376
Chinyue Chenfac909e2016-06-24 14:17:42 +0800377 EXPECT_EQ(1, gmcg.set_cpu_shares_count);
Chinyue Chen4f3fd682016-07-01 14:11:42 +0800378 EXPECT_EQ(TEST_CPU_SHARES,
379 container_config_get_cpu_shares(self->config));
Chinyue Chenfac909e2016-06-24 14:17:42 +0800380 EXPECT_EQ(1, gmcg.set_cpu_quota_count);
Chinyue Chen4f3fd682016-07-01 14:11:42 +0800381 EXPECT_EQ(TEST_CPU_QUOTA,
382 container_config_get_cpu_quota(self->config));
Chinyue Chenfac909e2016-06-24 14:17:42 +0800383 EXPECT_EQ(1, gmcg.set_cpu_period_count);
Chinyue Chen4f3fd682016-07-01 14:11:42 +0800384 EXPECT_EQ(TEST_CPU_PERIOD,
385 container_config_get_cpu_period(self->config));
Chinyue Chenfac909e2016-06-24 14:17:42 +0800386 EXPECT_EQ(0, gmcg.set_cpu_rt_runtime_count);
Chinyue Chen4f3fd682016-07-01 14:11:42 +0800387 EXPECT_EQ(0, container_config_get_cpu_rt_runtime(self->config));
Chinyue Chenfac909e2016-06-24 14:17:42 +0800388 EXPECT_EQ(0, gmcg.set_cpu_rt_period_count);
Chinyue Chen4f3fd682016-07-01 14:11:42 +0800389 EXPECT_EQ(0, container_config_get_cpu_rt_period(self->config));
Chinyue Chenfac909e2016-06-24 14:17:42 +0800390
Luis Hector Chavezf9b16872017-09-14 14:22:15 -0700391 ASSERT_NE(nullptr, minijail_alt_syscall_table);
Dylan Reid837c74a2016-01-22 17:25:21 -0800392 EXPECT_EQ(0, strcmp(minijail_alt_syscall_table,
393 "testsyscalltable"));
394
395 EXPECT_EQ(0, container_wait(self->container));
396 EXPECT_EQ(1, minijail_wait_called);
397 EXPECT_EQ(1, minijail_reset_signal_mask_called);
398}
399
400TEST_F(container_test, test_kill_container)
401{
Dylan Reide040c6b2016-05-02 18:49:02 -0700402 EXPECT_EQ(0, container_start(self->container, self->config));
Dylan Reid837c74a2016-01-22 17:25:21 -0800403 EXPECT_EQ(0, container_kill(self->container));
404 EXPECT_EQ(1, kill_called);
405 EXPECT_EQ(SIGKILL, kill_sig);
406 EXPECT_EQ(1, minijail_wait_called);
407}
408
409/* libc stubs so the UT doesn't need root to call mount, etc. */
Luis Hector Chavezf9b16872017-09-14 14:22:15 -0700410extern "C" {
411
Dylan Reid837c74a2016-01-22 17:25:21 -0800412int mount(const char *source, const char *target,
413 const char *filesystemtype, unsigned long mountflags,
414 const void *data)
415{
416 if (mount_called >= 5)
417 return 0;
418
419 mount_call_args[mount_called].source = strdup(source);
420 mount_call_args[mount_called].target = strdup(target);
421 mount_call_args[mount_called].filesystemtype = strdup(filesystemtype);
422 mount_call_args[mount_called].mountflags = mountflags;
423 mount_call_args[mount_called].data = data;
424 ++mount_called;
425 return 0;
426}
427
428int umount(const char *target)
429{
430 return 0;
431}
432
Luis Hector Chavezf9b16872017-09-14 14:22:15 -0700433#ifdef __USE_EXTERN_INLINES
434/* Some environments use an inline version of mknod. */
435int __xmknod(int ver, const char *pathname, __mode_t mode, __dev_t *dev)
436#else
Dylan Reid837c74a2016-01-22 17:25:21 -0800437int mknod(const char *pathname, mode_t mode, dev_t dev)
Luis Hector Chavezf9b16872017-09-14 14:22:15 -0700438#endif
Dylan Reid837c74a2016-01-22 17:25:21 -0800439{
440 mknod_call_args.pathname = strdup(pathname);
441 mknod_call_args.mode = mode;
Luis Hector Chavezf9b16872017-09-14 14:22:15 -0700442#ifdef __USE_EXTERN_INLINES
443 mknod_call_args.dev = *dev;
444#else
Dylan Reid837c74a2016-01-22 17:25:21 -0800445 mknod_call_args.dev = dev;
Luis Hector Chavezf9b16872017-09-14 14:22:15 -0700446#endif
Dylan Reid837c74a2016-01-22 17:25:21 -0800447 return 0;
448}
449
450int chown(const char *path, uid_t owner, gid_t group)
451{
452 return 0;
453};
454
455int kill(pid_t pid, int sig)
456{
457 ++kill_called;
458 kill_sig = sig;
459 return 0;
460}
461
Luis Hector Chavezf9b16872017-09-14 14:22:15 -0700462#ifdef __USE_EXTERN_INLINES
463/* Some environments use an inline version of stat. */
464int __xstat(int ver, const char *path, struct stat *buf)
465#else
Dylan Reid837c74a2016-01-22 17:25:21 -0800466int stat(const char *path, struct stat *buf)
Luis Hector Chavezf9b16872017-09-14 14:22:15 -0700467#endif
Dylan Reid837c74a2016-01-22 17:25:21 -0800468{
Chinyue Chen03c54ae2016-06-29 12:29:10 +0800469 buf->st_rdev = stat_rdev_ret;
Dylan Reid837c74a2016-01-22 17:25:21 -0800470 return 0;
471}
472
473int chmod(const char *path, mode_t mode)
474{
475 return 0;
476}
477
Luis Hector Chavezf9b16872017-09-14 14:22:15 -0700478char *mkdtemp(char *template_string)
Dylan Reid837c74a2016-01-22 17:25:21 -0800479{
Luis Hector Chavezf9b16872017-09-14 14:22:15 -0700480 mkdtemp_root = strdup(template_string);
481 return template_string;
Dylan Reid837c74a2016-01-22 17:25:21 -0800482}
483
484int mkdir(const char *pathname, mode_t mode)
485{
486 return 0;
487}
488
489int rmdir(const char *pathname)
490{
491 return 0;
492}
493
494int unlink(const char *pathname)
495{
496 return 0;
497}
498
499/* Minijail stubs */
500struct minijail *minijail_new(void)
501{
Chinyue Chen03c54ae2016-06-29 12:29:10 +0800502 return (struct minijail *)0x55;
503}
504
505void minijail_destroy(struct minijail *j)
506{
Dylan Reid837c74a2016-01-22 17:25:21 -0800507}
508
509int minijail_mount(struct minijail *j, const char *src, const char *dest,
510 const char *type, unsigned long flags)
511{
512 return 0;
513}
514
515void minijail_namespace_vfs(struct minijail *j)
516{
517 ++minijail_vfs_called;
518}
519
520void minijail_namespace_ipc(struct minijail *j)
521{
522 ++minijail_ipc_called;
523}
524
525void minijail_namespace_net(struct minijail *j)
526{
527 ++minijail_net_called;
528}
529
530void minijail_namespace_pids(struct minijail *j)
531{
532 ++minijail_pids_called;
533}
534
535void minijail_namespace_user(struct minijail *j)
536{
537 ++minijail_user_called;
538}
539
540int minijail_uidmap(struct minijail *j, const char *uidmap)
541{
542 return 0;
543}
544
545int minijail_gidmap(struct minijail *j, const char *gidmap)
546{
547 return 0;
548}
549
550int minijail_enter_pivot_root(struct minijail *j, const char *dir)
551{
552 return 0;
553}
554
555void minijail_run_as_init(struct minijail *j)
556{
557 ++minijail_run_as_init_called;
558}
559
560int minijail_run_pid_pipes_no_preload(struct minijail *j, const char *filename,
561 char *const argv[], pid_t *pchild_pid,
562 int *pstdin_fd, int *pstdout_fd,
563 int *pstderr_fd)
564{
565 *pchild_pid = INIT_TEST_PID;
566 return 0;
567}
568
569int minijail_write_pid_file(struct minijail *j, const char *path)
570{
571 return 0;
572}
573
574int minijail_wait(struct minijail *j)
575{
576 ++minijail_wait_called;
577 return 0;
578}
579
580int minijail_use_alt_syscall(struct minijail *j, const char *table)
581{
582 minijail_alt_syscall_table = table;
583 return 0;
584}
585
Chinyue Chen03c54ae2016-06-29 12:29:10 +0800586int minijail_add_to_cgroup(struct minijail *j, const char *cg_path)
Dylan Reid837c74a2016-01-22 17:25:21 -0800587{
Chinyue Chen03c54ae2016-06-29 12:29:10 +0800588 return 0;
Dylan Reid837c74a2016-01-22 17:25:21 -0800589}
590
591void minijail_reset_signal_mask(struct minijail *j)
592{
593 ++minijail_reset_signal_mask_called;
594}
595
Chinyue Chen03c54ae2016-06-29 12:29:10 +0800596void minijail_skip_remount_private(struct minijail *j)
597{
598}
599
Luis Hector Chavezf9b16872017-09-14 14:22:15 -0700600} // extern "C"
601
Dylan Reid837c74a2016-01-22 17:25:21 -0800602TEST_HARNESS_MAIN