New features in nft-parsing-test
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"
* Add an end of line in the exit of ruleset. It is necessary to write the new generated testfiles.
Ana Rey (3):
ruleset: Add an end of line in the exit of ruleset.
tests: New tools to uptade xml and json testfiles.
tests: Add support to check a json or xml testfile.
src/ruleset.c | 2 +- tests/nft-parsing-test.c | 88 ++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 83 insertions(+), 7 deletions(-)
Signature · 1 line
1.9.0
PATCH 1/3 ruleset: Add an end of line in the exit of ruleset.
Add an end of line in the exit of ruleset.
--- src/ruleset.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
src/ruleset.c +1 -1
@@ -818,7 +818,7 @@ nft_ruleset_do_snprintf(char *buf, size_t size, const struct nft_ruleset *rs,SNPRINTF_BUFFER_SIZE (ret, size, len, offset); } - ret =snprintf (buf+offset, size,"%s" ,nft_ruleset_o_closetag (type)); + ret =snprintf (buf+offset, size,"%s\n" ,nft_ruleset_o_closetag (type));SNPRINTF_BUFFER_SIZE (ret, size, len, offset);return offset;
Signature · 1 line
1.9.0
PATCH 2/3 tests: New tools to uptade xml and json testfiles.
In reply to Ana ReyNew 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.
--- 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 ; + } +fwrite (out,strlen (out),1 , fout); +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 3/3 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.
--- 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
Re: [libnftnl PATCH 1/3] ruleset: Add an end of line in the exit of ruleset.
In reply to Ana ReyQuoted 3 lines · Ana Rey
Add an end of line in the exit of ruleset.
Signed-off-by Ana Rey <[email protected]>
Hi Ana,
Why do you need this here?
The policy was to don't add any format stuff (tabs, newlines..) to XML|JSON formats and let the caller add the trailing \n if needed..
However, I see several inconsistencies already in the code:src/rule.c: ret = snprintf(buf+offset, len, "\n"); src/rule.c: ret = snprintf(buf+offset, len, "]\n"); src/rule.c: ret = snprintf(buf+offset, len, " }\n"); src/set.c: ret = snprintf(buf+offset, len, "\n");
Signature · 5 lines
Arturo Borrero González -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [libnftnl PATCH 1/3] ruleset: Add an end of line in the exit of ruleset.
2014-04-09 12:11 GMT+02:00 Arturo Borrero Gonzalez <[email protected]>:
Quoted 11 lines · Ana Rey
Quoted 3 lines
Add an end of line in the exit of ruleset.
Signed-off-by Ana Rey <[email protected]>Hi Ana,
Why do you need this here?
The policy was to don't add any format stuff (tabs, newlines..) to XML|JSON formats and let the caller add the trailing \n if needed..
Thank you for this advise. I'll remember it the next time.
I solved this problem in the tests/nft-parsing-test.c
(I'll send a new version of "[libnftnl PATCH 2/3] tests: New tools to uptade xml and json testfiles." patch and I deleted it of tihs patchset)
Thank you!
Quoted 9 lines
However, I see several inconsistencies already in the code:
src/rule.c: ret =snprintf(buf+offset, len, "\n");src/rule.c: ret =snprintf(buf+offset, len, "]\n");src/rule.c: ret =snprintf(buf+offset, len, " }\n");src/set.c: ret =snprintf(buf+offset, len, "\n");--
Arturo Borrero González
Signature · 6 lines
Ana Rey (@anaRB) http://about.me/anarey -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [libnftnl PATCH 1/3] ruleset: Add an end of line in the exit of ruleset.
In reply to Ana ReyPlease, Fotget this patch.
2014-04-09 10:53 GMT+02:00 Ana Rey <[email protected]>:
Quoted 23 lines
Add an end of line in the exit of ruleset.
Signed-off-by Ana Rey <[email protected]>--- src/ruleset.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)src/ruleset.c +1
-2@@ -818,7 +818,7 @@ nft_ruleset_do_snprintf(char *buf, size_t size, const struct nft_ruleset *rs,SNPRINTF_BUFFER_SIZE (ret, size, len, offset); } - ret =snprintf (buf+offset, size,"%s" ,nft_ruleset_o_closetag (type)); + ret =snprintf (buf+offset, size,"%s\n" ,nft_ruleset_o_closetag (type));SNPRINTF_BUFFER_SIZE (ret, size, len, offset);return offset; --1.9.0
Signature · 2 lines
Ana Rey (@anaRB) http://about.me/anarey