From 4292509d13c73a0739c21a215177799476c4d7dc Mon Sep 17 00:00:00 2001 From: Ana Rey Date: Wed, 9 Apr 2014 17:03:44 +0200 Subject: 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 , you can update test files in with a new structure of xml or json file. Signed-off-by: Ana Rey Signed-off-by: Pablo Neira Ayuso --- tests/nft-parsing-test.c | 42 ++++++++++++++++++++++++++++++++++++------ 1 file 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 Check test files from .\n" +" -u/--update Update test files from .\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; -- cgit v1.2.3