mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-07-17 16:47:50 +00:00
zdtm: check mounts of external devices
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com> Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
This commit is contained in:
parent
022e3b9b9c
commit
d44276c143
7 changed files with 135 additions and 3 deletions
|
|
@ -11,7 +11,7 @@ all:
|
|||
$(MAKE) zdtm-freezer
|
||||
.PHONY: all
|
||||
|
||||
TESTS = unix-callback mem-snap rpc libcriu mounts/ext security pipes crit socketpairs overlayfs
|
||||
TESTS = unix-callback mem-snap rpc libcriu mounts/ext security pipes crit socketpairs overlayfs mnt-ext-dev
|
||||
|
||||
other:
|
||||
for t in $(TESTS); do \
|
||||
|
|
|
|||
2
test/others/mnt-ext-dev/Makefile
Normal file
2
test/others/mnt-ext-dev/Makefile
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
run:
|
||||
./run.sh
|
||||
17
test/others/mnt-ext-dev/run.sh
Executable file
17
test/others/mnt-ext-dev/run.sh
Executable file
|
|
@ -0,0 +1,17 @@
|
|||
#!/bin/sh
|
||||
set -e -x
|
||||
|
||||
# construct root
|
||||
python ../../zdtm.py run -t zdtm/static/env00 --iter 0 -f ns
|
||||
|
||||
truncate -s 0 zdtm.loop
|
||||
truncate -s 50M zdtm.loop
|
||||
mkfs.ext4 zdtm.loop
|
||||
dev=`losetup --find --show zdtm.loop`
|
||||
mkdir -p ../../dev
|
||||
cp -ap $dev ../../dev
|
||||
export ZDTM_MNT_EXT_DEV=$dev
|
||||
python ../../zdtm.py run -t zdtm/static/mnt_ext_dev || ret=$?
|
||||
losetup -d $dev
|
||||
unlink zdtm.loop
|
||||
exit $ret
|
||||
|
|
@ -413,10 +413,10 @@ class zdtm_test:
|
|||
return opts
|
||||
|
||||
def getdopts(self):
|
||||
return self.__getcropts() + self.__freezer.getdopts()
|
||||
return self.__getcropts() + self.__freezer.getdopts() + self.__desc.get('dopts', '').split()
|
||||
|
||||
def getropts(self):
|
||||
return self.__getcropts() + self.__freezer.getropts()
|
||||
return self.__getcropts() + self.__freezer.getropts() + self.__desc.get('ropts', '').split()
|
||||
|
||||
def gone(self, force = True):
|
||||
if not self.auto_reap:
|
||||
|
|
|
|||
|
|
@ -230,6 +230,7 @@ TST_DIR = \
|
|||
mntns_shared_vs_private \
|
||||
mnt_ext_auto \
|
||||
mnt_ext_master \
|
||||
mnt_ext_dev \
|
||||
mntns_deleted \
|
||||
unlink_regular00 \
|
||||
|
||||
|
|
|
|||
106
test/zdtm/static/mnt_ext_dev.c
Normal file
106
test/zdtm/static/mnt_ext_dev.c
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/mount.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include <linux/limits.h>
|
||||
|
||||
#include "zdtmtst.h"
|
||||
|
||||
const char *test_doc = "Check mounts of external devices";
|
||||
const char *test_author = "Andrei Vagin <avagin@virtuozzo.com";
|
||||
|
||||
char *dirname;
|
||||
TEST_OPTION(dirname, string, "directory name", 1);
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
char *loop, fd, dfd, fd2;
|
||||
test_init(argc, argv);
|
||||
struct stat st, stp, st2;
|
||||
char dname[PATH_MAX], dname2[PATH_MAX];
|
||||
|
||||
snprintf(dname, sizeof(dname), "%s/test_dir", dirname);
|
||||
snprintf(dname2, sizeof(dname2), "%s/test_dir2", dirname);
|
||||
|
||||
mkdir(dirname, 0777);
|
||||
loop = getenv("ZDTM_MNT_EXT_DEV");
|
||||
if (loop == NULL)
|
||||
return 1;
|
||||
|
||||
if (mount(loop, dirname, "ext4", 0, NULL) == -1) {
|
||||
pr_perror("mount");
|
||||
return -1;
|
||||
}
|
||||
|
||||
dfd = open(dirname, O_RDONLY);
|
||||
if (dfd < 0) {
|
||||
pr_perror("open");
|
||||
return -1;
|
||||
}
|
||||
|
||||
fd = openat(dfd, "test_file", O_RDWR | O_CREAT, 0666);
|
||||
if (fd < 0) {
|
||||
pr_perror("open");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (fstat(fd, &st) < 0) {
|
||||
pr_perror("stat");
|
||||
return 1;
|
||||
}
|
||||
|
||||
mkdir(dname, 0777);
|
||||
mkdir(dname2, 0777);
|
||||
|
||||
if (mount(dname, dname2, NULL, MS_BIND, NULL)) {
|
||||
pr_perror("mount");
|
||||
return 1;
|
||||
}
|
||||
fd2 = openat(dfd, "test_dir2/test_file2", O_RDWR | O_CREAT, 0666);
|
||||
if (fd2 < 0) {
|
||||
pr_perror("open");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (fstat(fd2, &st2) < 0) {
|
||||
pr_perror("stat");
|
||||
return 1;
|
||||
}
|
||||
|
||||
test_daemon();
|
||||
test_waitsig();
|
||||
|
||||
if (fstat(fd, &stp) < 0) {
|
||||
pr_perror("stat");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (st.st_ino != stp.st_ino) {
|
||||
fail("file1");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (fstat(fd2, &stp) < 0) {
|
||||
pr_perror("stat");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (st2.st_ino != stp.st_ino) {
|
||||
fail("file2");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (umount2(dname2, MNT_DETACH)) {
|
||||
pr_perror("umount");
|
||||
return 1;
|
||||
}
|
||||
|
||||
pass();
|
||||
|
||||
return 0;
|
||||
}
|
||||
6
test/zdtm/static/mnt_ext_dev.desc
Normal file
6
test/zdtm/static/mnt_ext_dev.desc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
os.getenv("ZDTM_MNT_EXT_DEV") and \
|
||||
( lambda dev, rdev:
|
||||
{'flavor': 'ns', 'feature': 'mnt_id', "flags": "suid",
|
||||
"dopts": "--external dev[%d/%d]:loop" % (os.major(rdev), os.minor(rdev)),
|
||||
"ropts": "--external dev[loop]:%s" % dev,
|
||||
} ) (os.getenv("ZDTM_MNT_EXT_DEV"), os.stat(os.getenv("ZDTM_MNT_EXT_DEV")).st_rdev) or {'flags': 'noauto'}
|
||||
Loading…
Add table
Add a link
Reference in a new issue