[CRIU] [PATCH 4/4] zdtm/tempfs: check that overmounted parts are restored

Pavel Emelyanov xemul at parallels.com
Fri Feb 28 01:18:10 PST 2014


On 02/24/2014 12:04 PM, Andrey Vagin wrote:
> Signed-off-by: Andrey Vagin <avagin at openvz.org>
> ---
>  test/zdtm.sh                   |  2 ++
>  test/zdtm/live/static/tempfs.c | 43 ++++++++++++++++++++++++++++--------------
>  2 files changed, 31 insertions(+), 14 deletions(-)
> 
> diff --git a/test/zdtm.sh b/test/zdtm.sh
> index 6f0f964..ac6b974 100755
> --- a/test/zdtm.sh
> +++ b/test/zdtm.sh
> @@ -122,6 +122,7 @@ static/pty03
>  static/mountpoints
>  ns/static/session00
>  ns/static/session01
> +ns/static/tempfs
>  static/utsname
>  static/ipc_namespace
>  static/shm
> @@ -156,6 +157,7 @@ chroot-file
>  rtc
>  tempfs
>  maps007
> +tempfs
>  "
>  
>  source $(readlink -f `dirname $0`/env.sh) || exit 1
> diff --git a/test/zdtm/live/static/tempfs.c b/test/zdtm/live/static/tempfs.c
> index fd5e711..779fd0d 100644
> --- a/test/zdtm/live/static/tempfs.c
> +++ b/test/zdtm/live/static/tempfs.c
> @@ -4,6 +4,7 @@
>  #include <unistd.h>
>  #include <sys/mount.h>
>  #include <sys/stat.h>
> +#include <linux/limits.h>
>  
>  #include "zdtmtst.h"
>  
> @@ -18,7 +19,7 @@ TEST_OPTION(dirname, string, "directory name", 1);
>  int main(int argc, char **argv)
>  {
>  	int fd, ret = 1;
> -	char buf[1024];
> +	char buf[1024], fname[PATH_MAX], overmount[PATH_MAX];
>  
>  	test_init(argc, argv);
>  
> @@ -28,43 +29,57 @@ int main(int argc, char **argv)
>  		return 1;
>  	}
>  
> -	snprintf(buf, sizeof(buf), "%s/test", dirname);
> -	fd = open(buf, O_RDWR | O_CREAT);
> +	snprintf(overmount, sizeof(buf), "%s/test", dirname);
> +	mkdir(overmount, 0700);
> +
> +	snprintf(fname, sizeof(buf), "%s/test.file", overmount);
> +	fd = open(fname, O_RDWR | O_CREAT);
>  	if (fd < 0) {
>  		err("open failed");
> -		goto outum;
> +		goto err;
>  	}
>  
>  	if (write(fd, TEST_WORD, sizeof(TEST_WORD)) != sizeof(TEST_WORD)) {
>  		err("write() failed");
> -		goto outuc;
> +		goto err;
> +	}
> +	close(fd);
> +
> +	if (mount("none", overmount, "tmpfs", 0, "") < 0) {
> +		fail("Can't mount tmpfs");
> +		goto err;
>  	}
>  
>  	test_daemon();
>  	test_waitsig();
>  
> -	if (lseek(fd, 0, SEEK_SET) < 0) {
> -		fail("Seek failed");
> -		goto outuc;
> +	if (umount(overmount) < 0) {
> +		fail("Can't mount tmpfs");
> +		goto err;
> +	}
> +
> +	fd = open(fname, O_RDONLY);
> +	if (fd < 0) {
> +		err("open failed");
> +		goto err;
>  	}
>  
>  	buf[sizeof(TEST_WORD) + 1] = '\0';
>  	if (read(fd, buf, sizeof(TEST_WORD)) != sizeof(TEST_WORD)) {
>  		fail("Read failed");
> -		goto outuc;
> +		goto err;
>  	}
> +	close(fd);

Who would check that plain file opened on tempfs is restored?

>  	if (strcmp(buf, TEST_WORD)) {
>  		fail("File corrupted");
> -		goto outuc;
> +		goto err;
>  	}
>  
>  	pass();
>  	ret = 0;
> -outuc:
> -	close(fd);
> -outum:
> -	umount(dirname);
> +err:
> +	umount2(dirname, MNT_DETACH);
>  	rmdir(dirname);
>  	return ret;
>  }
> 




More information about the CRIU mailing list