[CRIU] [PATCH v7 14/14] zdtm/net/ipv6: add test for string stable_secret

Pavel Tikhomirov ptikhomirov at virtuozzo.com
Tue Apr 26 04:49:45 PDT 2016


stable_secret is always unset in new netns, and we can not restore
it to that state after it is set, so just skip save/restore steps

Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
---
 test/zdtm/static/netns-dev.c | 87 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 87 insertions(+)

diff --git a/test/zdtm/static/netns-dev.c b/test/zdtm/static/netns-dev.c
index 456b1d0..3665dd7 100644
--- a/test/zdtm/static/netns-dev.c
+++ b/test/zdtm/static/netns-dev.c
@@ -345,6 +345,81 @@ static int for_each_option_do(int (*f)(FILE *fp, int *conf, int *conf_rand,
 	return 0;
 }
 
+#define IPV6ADDR_EXAMPLE "2607:f0d0:1002:0051:0000:0000:0000:0004"
+#define MAX_STR_CONF_LEN 200
+
+static int set_stable_secret(struct test_conf *tc) {
+	int ret;
+	FILE *fp;
+	char path[PATH_MAX];
+
+	ret = snprintf(path, sizeof(path), "%s/%s", tc->dir6, "stable_secret");
+	if (ret < 0) {
+		pr_perror("snprintf");
+		return -1;
+	}
+
+	ret = access(path, W_OK);
+	if (ret < 0)
+		return 0;
+
+	fp = fopen(path, "r+");
+	if (fp == NULL) {
+		pr_perror("fopen");
+		return -1;
+	}
+
+	ret = fprintf(fp, IPV6ADDR_EXAMPLE);
+	if (ret < 0) {
+		pr_perror("fprintf");
+		fclose(fp);
+		return -1;
+	}
+
+	fclose(fp);
+	return 0;
+}
+
+static int check_stable_secret(struct test_conf *tc) {
+	int ret;
+	FILE *fp;
+	char path[PATH_MAX];
+	char val[MAX_STR_CONF_LEN+1];
+
+	ret = snprintf(path, sizeof(path), "%s/%s", tc->dir6, "stable_secret");
+	if (ret < 0) {
+		pr_perror("snprintf");
+		return -1;
+	}
+
+	ret = access(path, W_OK);
+	if (ret < 0)
+		return 0;
+
+	fp = fopen(path, "r+");
+	if (fp == NULL) {
+		pr_perror("fopen");
+		return -1;
+	}
+
+	ret = fscanf(fp, "%s", val);
+	if (ret != 1) {
+		pr_perror("fscanf");
+		fclose(fp);
+		return -1;
+	}
+
+	if (strcmp(val, IPV6ADDR_EXAMPLE)) {
+		fail("Option \"%s\" changed from %s to %s",
+		     path, IPV6ADDR_EXAMPLE, val);
+		fclose(fp);
+		return -1;
+	}
+
+	fclose(fp);
+	return 0;
+}
+
 int main(int argc, char **argv)
 {
 	int ret;
@@ -362,6 +437,9 @@ int main(int argc, char **argv)
 	ret = for_each_option_do(gen_conf, &lo);
 	if (ret < 0)
 		return -1;
+	ret = set_stable_secret(&lo);
+	if (ret < 0)
+		return -1;
 
 	ret = for_each_option_do(save_conf, &def);
 	if (ret < 0)
@@ -369,6 +447,9 @@ int main(int argc, char **argv)
 	ret = for_each_option_do(gen_conf, &def);
 	if (ret < 0)
 		return -1;
+	ret = set_stable_secret(&def);
+	if (ret < 0)
+		return -1;
 
 	test_daemon();
 	test_waitsig();
@@ -379,6 +460,9 @@ int main(int argc, char **argv)
 	ret = for_each_option_do(restore_conf, &lo);
 	if (ret < 0)
 		return -1;
+	ret = check_stable_secret(&lo);
+	if (ret < 0)
+		return -1;
 
 	ret = for_each_option_do(check_conf, &def);
 	if (ret < 0)
@@ -386,6 +470,9 @@ int main(int argc, char **argv)
 	ret = for_each_option_do(restore_conf, &def);
 	if (ret < 0)
 		return -1;
+	ret = check_stable_secret(&def);
+	if (ret < 0)
+		return -1;
 
 	pass();
 	return 0;
-- 
2.4.11



More information about the CRIU mailing list