tests: improve lxc.init.groups tests

parent c71f64cb
...@@ -324,7 +324,54 @@ if ENABLE_SECCOMP ...@@ -324,7 +324,54 @@ if ENABLE_SECCOMP
lxc_test_device_add_remove_SOURCES += ../lxc/seccomp.c ../lxc/lxcseccomp.h lxc_test_device_add_remove_SOURCES += ../lxc/seccomp.c ../lxc/lxcseccomp.h
endif endif
lxc_test_getkeys_SOURCES = getkeys.c lxc_test_getkeys_SOURCES = getkeys.c
lxc_test_get_item_SOURCES = get_item.c lxc_test_get_item_SOURCES = get_item.c \
../lxc/af_unix.c ../lxc/af_unix.h \
../lxc/caps.c ../lxc/caps.h \
../lxc/cgroups/cgfsng.c \
../lxc/cgroups/cgroup.c ../lxc/cgroups/cgroup.h \
../lxc/cgroups/cgroup2_devices.c ../lxc/cgroups/cgroup2_devices.h \
../lxc/cgroups/cgroup_utils.c ../lxc/cgroups/cgroup_utils.h \
../lxc/commands.c ../lxc/commands.h \
../lxc/commands_utils.c ../lxc/commands_utils.h \
../lxc/conf.c ../lxc/conf.h \
../lxc/confile.c ../lxc/confile.h \
../lxc/confile_utils.c ../lxc/confile_utils.h \
../lxc/error.c ../lxc/error.h \
../lxc/file_utils.c ../lxc/file_utils.h \
../include/netns_ifaddrs.c ../include/netns_ifaddrs.h \
../lxc/initutils.c ../lxc/initutils.h \
../lxc/log.c ../lxc/log.h \
../lxc/lxclock.c ../lxc/lxclock.h \
../lxc/mainloop.c ../lxc/mainloop.h \
../lxc/monitor.c ../lxc/monitor.h \
../lxc/namespace.c ../lxc/namespace.h \
../lxc/network.c ../lxc/network.h \
../lxc/nl.c ../lxc/nl.h \
../lxc/parse.c ../lxc/parse.h \
../lxc/process_utils.c ../lxc/process_utils.h \
../lxc/ringbuf.c ../lxc/ringbuf.h \
../lxc/start.c ../lxc/start.h \
../lxc/state.c ../lxc/state.h \
../lxc/storage/btrfs.c ../lxc/storage/btrfs.h \
../lxc/storage/dir.c ../lxc/storage/dir.h \
../lxc/storage/loop.c ../lxc/storage/loop.h \
../lxc/storage/lvm.c ../lxc/storage/lvm.h \
../lxc/storage/nbd.c ../lxc/storage/nbd.h \
../lxc/storage/overlay.c ../lxc/storage/overlay.h \
../lxc/storage/rbd.c ../lxc/storage/rbd.h \
../lxc/storage/rsync.c ../lxc/storage/rsync.h \
../lxc/storage/storage.c ../lxc/storage/storage.h \
../lxc/storage/storage_utils.c ../lxc/storage/storage_utils.h \
../lxc/storage/zfs.c ../lxc/storage/zfs.h \
../lxc/sync.c ../lxc/sync.h \
../lxc/string_utils.c ../lxc/string_utils.h \
../lxc/terminal.c ../lxc/terminal.h \
../lxc/utils.c ../lxc/utils.h \
../lxc/uuid.c ../lxc/uuid.h \
$(LSM_SOURCES)
if ENABLE_SECCOMP
lxc_test_get_item_SOURCES += ../lxc/seccomp.c ../lxc/lxcseccomp.h
endif
lxc_test_list_SOURCES = list.c lxc_test_list_SOURCES = list.c
lxc_test_locktests_SOURCES = locktests.c \ lxc_test_locktests_SOURCES = locktests.c \
../lxc/af_unix.c ../lxc/af_unix.h \ ../lxc/af_unix.c ../lxc/af_unix.h \
......
...@@ -29,15 +29,38 @@ ...@@ -29,15 +29,38 @@
#include "lxc/state.h" #include "lxc/state.h"
#include "lxctest.h" #include "lxctest.h"
#include "utils.h"
#ifndef HAVE_STRLCPY
#include "include/strlcpy.h"
#endif
#define MYNAME "lxctest1" #define MYNAME "lxctest1"
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
int ret; int fd_log, ret;
struct lxc_container *c; struct lxc_container *c = NULL;
int fret = EXIT_FAILURE; int fret = EXIT_FAILURE;
char v1[2], v2[256], v3[2048]; char v1[2], v2[256], v3[2048];
struct lxc_log log = {};
char template[sizeof(P_tmpdir"/attach_XXXXXX")];
(void)strlcpy(template, P_tmpdir"/attach_XXXXXX", sizeof(template));
fd_log = lxc_make_tmpfile(template, false);
if (fd_log < 0) {
lxc_error("Failed to create temporary log file for container %s\n", MYNAME);
exit(EXIT_FAILURE);
}
log.name = MYNAME;
log.file = template;
log.level = "TRACE";
log.prefix = "get_item";
log.quiet = false;
log.lxcpath = NULL;
if (lxc_log_init(&log))
goto out;
if ((c = lxc_container_new("testxyz", NULL)) == NULL) { if ((c = lxc_container_new("testxyz", NULL)) == NULL) {
fprintf(stderr, "%d: error opening lxc_container %s\n", __LINE__, MYNAME); fprintf(stderr, "%d: error opening lxc_container %s\n", __LINE__, MYNAME);
...@@ -136,30 +159,55 @@ int main(int argc, char *argv[]) ...@@ -136,30 +159,55 @@ int main(int argc, char *argv[])
} }
printf("lxc.init_gid returned %d %s\n", ret, v2); printf("lxc.init_gid returned %d %s\n", ret, v2);
if (!c->set_config_item(c, "lxc.init.groups", "")) { if (c->set_config_item(c, "lxc.init.groups", "10,20,foo,40")) {
fprintf(stderr, "%d: failed to set init_groups\n", __LINE__); fprintf(stderr, "%d: managed to set lxc.init.groups to '10,20,foo,40'\n", __LINE__);
goto out; goto out;
} }
if (!c->set_config_item(c, "lxc.init.groups", "10,20,foo,40")) { if (!c->set_config_item(c, "lxc.init.groups", "10,20,30,40")) {
printf("failed to set init_groups to '10,20,foo,40' as expected\n"); fprintf(stderr, "%d: managed to set lxc.init.groups to '10,20,30,40'\n", __LINE__);
} else {
goto out; goto out;
} }
if (!c->set_config_item(c, "lxc.init.groups", "10,20,30,40")) { ret = c->get_config_item(c, "lxc.init.groups", v2, 255);
fprintf(stderr, "%d: failed to set init_groups\n", __LINE__); if (ret < 0) {
fprintf(stderr, "%d: failed to get lxc.init.groups\n", __LINE__);
goto out;
}
ret = strcmp("10,20,30,40", v2);
printf("%d: lxc.init.groups returned %d %s\n", __LINE__, ret, v2);
if (ret != 0) {
goto out;
}
if (!c->set_config_item(c, "lxc.init.groups", "50,60,70,80")) {
fprintf(stderr, "%d: failed to set lxc.init.groups to '50,60,70,80'\n", __LINE__);
goto out; goto out;
} }
ret = c->get_config_item(c, "lxc.init.groups", v2, 255); ret = c->get_config_item(c, "lxc.init.groups", v2, 255);
if (ret < 0) { if (ret < 0) {
fprintf(stderr, "%d: get_config_item(lxc.init_gid) returned %d\n", fprintf(stderr, "%d: failed to get lxc.init.groups\n", __LINE__);
__LINE__, ret);
goto out; goto out;
} }
ret = strcmp("10,20,30,40", v2); ret = strcmp("10,20,30,40,50,60,70,80", v2);
printf("lxc.init_groups returned %d %s\n", ret, v2); printf("%d: lxc.init.groups returned %d %s\n", __LINE__, ret, v2);
if (ret != 0) {
goto out;
}
if (!c->set_config_item(c, "lxc.init.groups", "")) {
fprintf(stderr, "%d: failed to set lxc.init.groups to ''\n", __LINE__);
goto out;
}
ret = c->get_config_item(c, "lxc.init.groups", v2, 255);
if (ret < 0) {
fprintf(stderr, "%d: failed to get lxc.init.groups\n", __LINE__);
goto out;
}
ret = strcmp("", v2);
printf("%d: lxc.init.groups returned %d %s\n", __LINE__, ret, v2);
if (ret != 0) { if (ret != 0) {
goto out; goto out;
} }
...@@ -647,6 +695,17 @@ out: ...@@ -647,6 +695,17 @@ out:
c->destroy(c); c->destroy(c);
lxc_container_put(c); lxc_container_put(c);
} }
if (fret != EXIT_SUCCESS) {
char buf[4096];
ssize_t buflen;
while ((buflen = read(fd_log, buf, 1024)) > 0) {
buflen = write(STDERR_FILENO, buf, buflen);
if (buflen <= 0)
break;
}
close(fd_log);
}
(void)unlink(template);
exit(fret); exit(fret);
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment