New features in nft-parsing-test
v2 cover New features in nft-parsing-test
The following patchset contains new features in nft-parsing-test:
* Add the following command-line arguments:
-u/--update <directory> Update test files from <directory>.
-f/--file <file> Check test file <file>\n"
[Changes in v2:]
* Delete 'ruleset: Add an end of line in the exit of ruleset.' patch of this patchset.
Ana Rey (2):
tests: New tools to uptade xml and json testfiles.
tests: Add support to check a json or xml testfile.
tests/nft-parsing-test.c | 88 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 82 insertions(+), 6 deletions(-)
Signature · 1 line
1.9.0
PATCH v2 1/2 tests: New tools to uptade 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.
---
[Changes in v2:]
* Change from fwrite to fprintf functions to add the end of line in the new files.
tests/nft-parsing-test.c | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-)
tests/nft-parsing-test.c +36 -6
@@ -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 ;
Signature · 1 line
1.9.0
PATCH v2 2/2 tests: Add support to check a json or xml testfile.
In reply to Ana ReyAdd new command-line argument "-f <file>" to check a json or xml testfile.
./nft-parsing-test -f <file> Check this testfile.
---
[Change in v2:]
Without changes.
tests/nft-parsing-test.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-)
tests/nft-parsing-test.c +47 -1
@@ -240,6 +240,47 @@ static int execute_test(const char *dir_name)return 0 ; } +static int execute_test_file (const char *filename) +{ +char path[PATH_MAX ]; +int ret =0 ; +struct nft_parse_err *err; + + err =nft_parse_err_alloc (); +if (err ==NULL ) { +perror ("error" ); +exit (EXIT_FAILURE ); + } + +snprintf (path,sizeof (path),"%s" , filename); + +int len =strlen (filename); +if (strcmp (&filename[len-4 ],".xml" ) ==0 ) { +if ((ret =test_xml (path, err)) ==0 ) { +if (!update) { +printf ("parsing and validating %s: " , + path); +printf ("\033[32mOK\e[0m\n" ); + } + } +exit (EXIT_FAILURE ); + } +if (strcmp (&filename[len-5 ],".json" ) ==0 ) { +if ((ret =test_json (path, err)) ==0 ) { +if (!update) { +printf ("parsing and validating %s: " , + path); +printf ("\033[32mOK\e[0m\n" ); + } + } +exit (EXIT_FAILURE ); + } + +nft_parse_err_free (err); + +return 0 ; +} +static void show_help (const char *name) { printf(
@@ -248,6 +289,7 @@ static void show_help(const char *name)"Options:\n" " -d/--dir <directory> Check test files from <directory>.\n" " -u/--update <directory> Update test files from <directory>.\n" +" -f/--file <file> Check test file <file>\n" "\n" , name); }
@@ -260,6 +302,7 @@ int main(int argc, char *argv[])static struct option long_options[] = { {"dir" , required_argument,0 ,'d' }, {"update" , required_argument,0 ,'u' }, + {"file" , required_argument,0 ,'f' }, {0 } };
@@ -269,7 +312,7 @@ int main(int argc, char *argv[]) }while (1 ) { - val =getopt_long (argc, argv,"d:u:" , long_options, + val =getopt_long (argc, argv,"d:u:f:" , long_options, &option_index);if (val ==-1 )
@@ -283,6 +326,9 @@ int main(int argc, char *argv[]) update = true; ret =execute_test (optarg);break ; +case 'f' : + ret =execute_test_file (optarg); +break ;default :show_help (argv[0 ]);break ;
Signature · 1 line
1.9.0
Pablo Neira Ayuso
maintainerQuoted 10 lines · Ana Rey
The following patchset contains new features in nft-parsing-test:
* Add the following command-line arguments:
(quoted diff) +0
-2-u/--update <directory> Update test files from <directory>. -f/--file <file> Check test file <file>\n"[Changes in v2:]
* Delete 'ruleset: Add an end of line in the exit of ruleset.' patch of this patchset.
Series applied, thanks Ana.