[CRIU] [PATCH 2/2] zdtm: Add maps05 test

Cyrill Gorcunov gorcunov at openvz.org
Mon May 5 08:48:29 PDT 2014


To test a flood of small VMAs.

Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
---
 test/zdtm.sh                   |  1 +
 test/zdtm/live/static/Makefile |  1 +
 test/zdtm/live/static/maps05.c | 51 ++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 53 insertions(+)
 create mode 100644 test/zdtm/live/static/maps05.c

diff --git a/test/zdtm.sh b/test/zdtm.sh
index 4de131d0b47c..1df1d969bdb6 100755
--- a/test/zdtm.sh
+++ b/test/zdtm.sh
@@ -12,6 +12,7 @@ static/maps00
 static/maps01
 static/maps02
 static/maps04
+static/maps05
 static/maps_file_prot
 static/mprotect00
 static/mtime_mmap
diff --git a/test/zdtm/live/static/Makefile b/test/zdtm/live/static/Makefile
index b0f7807f9732..bf53ab6ecac4 100644
--- a/test/zdtm/live/static/Makefile
+++ b/test/zdtm/live/static/Makefile
@@ -66,6 +66,7 @@ TST_NOFILE	=				\
 		maps02				\
 		maps03				\
 		maps04				\
+		maps05				\
 		xids00				\
 		groups				\
 		file_fown			\
diff --git a/test/zdtm/live/static/maps05.c b/test/zdtm/live/static/maps05.c
new file mode 100644
index 000000000000..2ef178598405
--- /dev/null
+++ b/test/zdtm/live/static/maps05.c
@@ -0,0 +1,51 @@
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <setjmp.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include "zdtmtst.h"
+
+const char *test_doc	= "Create a bunch of small VMAs and test they survive transferring\n";
+const char *test_author	= "Cyrill Gorcunov <gorcunov at openvz.org>";
+
+#define NR_MAPS 4096
+
+int main(int argc, char ** argv)
+{
+	void *map[NR_MAPS] = { };
+	size_t i;
+
+	test_init(argc, argv);
+
+	for (i = 0; i < NR_MAPS; i++) {
+		map[i] = mmap(i > 0 ? map[i - 1] + 8192 : NULL, 4096, PROT_READ | PROT_WRITE,
+			      MAP_ANONYMOUS | MAP_PRIVATE | (i > 0 ? MAP_FIXED : 0), -1, 0);
+		if (map[i] == MAP_FAILED) {
+			err("Can't mmap");
+			return 1;
+		} else {
+			/* Dirtify it */
+			int *v = (void *)map[i];
+			*v = i;
+		}
+	}
+
+	test_daemon();
+	test_waitsig();
+
+	for (i = 0; i < NR_MAPS; i++) {
+		int *v = (void *)map[i];
+
+		if (*v != i) {
+			fail("Data corrupted at page %lu", (unsigned long)i);
+			return 1;
+		}
+	}
+	pass();
+	return 0;
+}
-- 
1.8.3.1



More information about the CRIU mailing list