diff options
author | Ana Rey <anarey@gmail.com> | 2014-04-09 17:03:44 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2014-04-14 10:46:15 +0200 |
commit | 4292509d13c73a0739c21a215177799476c4d7dc (patch) | |
tree | fdaae738f18afec6f8e39b3002b30562e9fb8cf0 | |
parent | ba1eaf0b3df13cc45b963a4d2bedda89ea510c2c (diff) |
tests: New tools to update xml and json testfiles
New tools to updata testfiles when the structure of xml or json files
are changed.
It adds a new command-line argument in nft-parsing-test.
With nft-parsing-test -u <directory>, you can update test files in
<directory> with a new structure of xml or json file.
Signed-off-by: Ana Rey <anarey@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r-- | tests/nft-parsing-test.c | 42 |
1 files changed, 36 insertions, 6 deletions
diff --git a/tests/nft-parsing-test.c b/tests/nft-parsing-test.c index a35c064..59c75a6 100644 --- a/tests/nft-parsing-test.c +++ b/tests/nft-parsing-test.c @@ -18,6 +18,8 @@ enum { TEST_JSON_RULESET, }; +static bool update = false; + static void print_detail_error(char *a, char *b) { int i; @@ -80,8 +82,24 @@ static int compare_test(uint32_t type, struct nft_ruleset *rs, rewind(fp); fgets(orig, sizeof(orig), fp); - if (strncmp(orig, out, strlen(out)) == 0) + if (strncmp(orig, out, strlen(out)) == 0) { + if (update) + printf("%s: No changes to update\n", filename); + return 0; + } + if (update) { + FILE *fout; + printf("%s: Updating test file\n", filename); + fout = fopen(filename, "w"); + if (fout == NULL) { + printf("unable to open file %s: %s\n", filename, + strerror(errno)); + return -1; + } + fprintf(fout, "%s\n", out); + fclose(fout); return 0; + } printf("validating %s: ", filename); printf("\033[31mFAILED\e[0m\n"); @@ -193,15 +211,21 @@ static int execute_test(const char *dir_name) if (strcmp(&dent->d_name[len-4], ".xml") == 0) { if ((ret = test_xml(path, err)) == 0) { - printf("parsing and validating %s: ", path); - printf("\033[32mOK\e[0m\n"); + if (!update) { + printf("parsing and validating %s: ", + path); + printf("\033[32mOK\e[0m\n"); + } } exit_code += ret; } if (strcmp(&dent->d_name[len-5], ".json") == 0) { if ((ret = test_json(path, err)) == 0) { - printf("parsing and validating %s: ", path); - printf("\033[32mOK\e[0m\n"); + if (!update) { + printf("parsing and validating %s: ", + path); + printf("\033[32mOK\e[0m\n"); + } } exit_code += ret; } @@ -223,6 +247,7 @@ static void show_help(const char *name) "\n" "Options:\n" " -d/--dir <directory> Check test files from <directory>.\n" +" -u/--update <directory> Update test files from <directory>.\n" "\n", name); } @@ -234,6 +259,7 @@ int main(int argc, char *argv[]) int option_index = 0; static struct option long_options[] = { { "dir", required_argument, 0, 'd' }, + { "update", required_argument, 0, 'u' }, { 0 } }; @@ -243,7 +269,7 @@ int main(int argc, char *argv[]) } while (1) { - val = getopt_long(argc, argv, "d:", long_options, + val = getopt_long(argc, argv, "d:u:", long_options, &option_index); if (val == -1) @@ -253,6 +279,10 @@ int main(int argc, char *argv[]) case 'd': ret = execute_test(optarg); break; + case 'u': + update = true; + ret = execute_test(optarg); + break; default: show_help(argv[0]); break; |