[CRIU] [PATCH v4 6/6] zdtm: Add unlink_regular00 test

Pavel Emelyanov xemul at virtuozzo.com
Wed Jan 27 07:35:30 PST 2016


On 01/27/2016 06:25 PM, Kirill Tkhai wrote:
> 
> 
> On 27.01.2016 17:11, Pavel Emelyanov wrote:
>> On 01/25/2016 07:40 PM, Kirill Tkhai wrote:
>>> Test checks that a deleted file content in a deleted parent directory
>>> restores right. Initially directory is created in a separate mount,
>>> to check the ghost file is created in right mount and link() in
>>> rfi_remap() is working.
>>
>> That's test for ghost files, how about the one for link remaps?
> 
> Hm. But how is it touched by my patch?

open_path is patched in patch #5. Other than this, the issue might exist
for link remap files too, just modify your test slightly adding a hard
link on the file being deleted with its parent dir.

>>> Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
>>> ---
>>>  test/zdtm/live/static/Makefile              |    1 
>>>  test/zdtm/live/static/unlink_regular00.c    |  100 +++++++++++++++++++++++++++
>>>  test/zdtm/live/static/unlink_regular00.desc |    1 
>>>  3 files changed, 102 insertions(+)
>>>  create mode 100644 test/zdtm/live/static/unlink_regular00.c
>>>  create mode 100644 test/zdtm/live/static/unlink_regular00.desc
>>>
>>> diff --git a/test/zdtm/live/static/Makefile b/test/zdtm/live/static/Makefile
>>> index 357b784..60b5afc 100644
>>> --- a/test/zdtm/live/static/Makefile
>>> +++ b/test/zdtm/live/static/Makefile
>>> @@ -224,6 +224,7 @@ TST_DIR		=				\
>>>  		mnt_ext_master			\
>>>  		mntns_deleted			\
>>>  		binfmt_misc			\
>>> +		unlink_regular00		\
>>>  
>>>  TST_DIR_FILE	=				\
>>>  		chroot				\
>>> diff --git a/test/zdtm/live/static/unlink_regular00.c b/test/zdtm/live/static/unlink_regular00.c
>>> new file mode 100644
>>> index 0000000..22adaf6
>>> --- /dev/null
>>> +++ b/test/zdtm/live/static/unlink_regular00.c
>>> @@ -0,0 +1,100 @@
>>> +#include <errno.h>
>>> +#include <fcntl.h>
>>> +#include <stdlib.h>
>>> +#include <sys/types.h>
>>> +#include <sys/stat.h>
>>> +#include <sys/mount.h>
>>> +#include <unistd.h>
>>> +#include <string.h>
>>> +#include <limits.h>
>>> +
>>> +#include "zdtmtst.h"
>>> +
>>> +const char *test_doc = "Checkpointing/restore of unlinked file inside unlinked directory";
>>> +const char *test_author	= "Kirill Tkhai <ktkhai at virtuozzo.com>";
>>> +
>>> +char *dirname;
>>> +TEST_OPTION(dirname, string, "directory name", 1);
>>> +
>>> +#define SUBDIR "subdir"
>>> +#define FNAME "testfile"
>>> +#define MSG "Hello!!!111"
>>> +
>>> +int main(int argc, char ** argv)
>>> +{
>>> +	char subdir[PATH_MAX], fname[PATH_MAX];
>>> +	char buf[sizeof(MSG) + 1];
>>> +	int fd, ret = -1;
>>> +
>>> +	test_init(argc, argv);
>>> +
>>> +	memset(buf, 0, sizeof(buf));
>>> +
>>> +	if (mkdir(dirname, 0777)) {
>>> +		fail("can't create %s", dirname);
>>> +		exit(1);
>>> +	}
>>> +
>>> +	if (mount("none", dirname, "tmpfs", 0, "") < 0) {
>>> +		fail("can't mount tmpfs to %s", dirname);
>>> +		goto rm_topdir;
>>> +	}
>>> +
>>> +	sprintf(subdir, "%s/" SUBDIR, dirname);
>>> +
>>> +	if (mkdir(subdir, 0777)) {
>>> +		fail("can't create %s", subdir);
>>> +		goto umount;
>>> +	}
>>> +
>>> +	sprintf(fname, "%s/" SUBDIR "/" FNAME, dirname);
>>> +
>>> +	fd = open(fname, O_RDWR | O_CREAT, 0644);
>>> +	if (fd < 0) {
>>> +		fail("can't open %s", fname);
>>> +		rmdir(subdir);
>>> +		goto umount;
>>> +	}
>>> +
>>> +	if (unlink(fname) || rmdir(subdir)) {
>>> +		fail("can't unlink %s or %s", fname, subdir);
>>> +		goto close_file;
>>> +	}
>>> +
>>> +	if (write(fd, MSG, sizeof(MSG)) != sizeof(MSG)) {
>>> +		fail("can't write %s", fname);
>>> +		goto close_file;
>>> +	}
>>> +
>>> +	test_daemon();
>>> +	test_waitsig();
>>> +
>>> +	if (lseek(fd, 0, SEEK_SET) != 0) {
>>> +		fail("can't lseek %s", fname);
>>> +		goto close_file;
>>> +	}
>>> +
>>> +	if (read(fd, buf, sizeof(MSG)) != sizeof(MSG)) {
>>> +		fail("can't read %s", fname);
>>> +		goto close_file;
>>> +	}
>>> +
>>> +	if (strcmp(buf, MSG)) {
>>> +		fail("content differs: %s, %s, sizeof=%d", buf, MSG, sizeof(MSG));
>>> +		goto close_file;
>>> +	}
>>> +
>>> +	ret = 0;
>>> +	pass();
>>> +
>>> +close_file:
>>> +	close(fd);
>>> +umount:
>>> +	if (umount(dirname) < 0)
>>> +		pr_err("Can't umount\n");
>>> +rm_topdir:
>>> +	if (rmdir(dirname) < 0)
>>> +		pr_err("Can't rmdir()\n");
>>> +
>>> +	return ret;
>>> +}
>>> diff --git a/test/zdtm/live/static/unlink_regular00.desc b/test/zdtm/live/static/unlink_regular00.desc
>>> new file mode 100644
>>> index 0000000..dfe829b
>>> --- /dev/null
>>> +++ b/test/zdtm/live/static/unlink_regular00.desc
>>> @@ -0,0 +1 @@
>>> +{'flavor': 'ns', 'flags': 'suid'}
>>>
>>> .
>>>
>>
> .
> 



More information about the CRIU mailing list