diff options
author | Pavel Tikhomirov <ptikhomirov@virtuozzo.com> | 2016-04-28 19:39:03 +0300 |
---|---|---|
committer | Pavel Emelyanov <xemul@virtuozzo.com> | 2016-05-27 13:32:05 +0300 |
commit | 52bccb262c797c02cd3daa268f7d5d4c23593f71 (patch) | |
tree | abb3f642ce675a63db5b873388a7204bc7268045 /test/zdtm/static | |
parent | ac7c8b24938184dccff55f6f2875d2c50f07e4dd (diff) |
zdtm/net/ipv6: add test for string stable_secret
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@virtuozzo.com>
Reviewed-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Diffstat (limited to 'test/zdtm/static')
-rw-r--r-- | test/zdtm/static/netns-dev.c | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/test/zdtm/static/netns-dev.c b/test/zdtm/static/netns-dev.c index 21a6e5ce4..37b7b04b0 100644 --- a/test/zdtm/static/netns-dev.c +++ b/test/zdtm/static/netns-dev.c @@ -351,6 +351,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; @@ -368,6 +443,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) @@ -375,6 +453,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(); @@ -385,6 +466,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) @@ -392,6 +476,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; |