Skip to contentSkip to conversation

New features in nft-parsing-test

PATCH Superseded Ana Rey 2 participants 7 messages Apr 9, 2014 netfilter

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore

Ana Rey

author
#0 lore raw

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
author
#1 lore raw

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
index 3cbec09..181aeae 100644
@@ -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
author
#5 lore raw

PATCH 2/3 tests: New tools to uptade xml and json testfiles.

In reply to Ana Rey

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.

---
 tests/nft-parsing-test.c | 42 ++++++++++++++++++++++++++++++++++++------
 1 file changed, 36 insertions(+), 6 deletions(-)
tests/nft-parsing-test.c +36 -6
index a35c064..3de343e 100644
@@ -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
author
#6 lore raw

PATCH 3/3 tests: Add support to check a json or xml testfile.

In reply to Ana Rey

Add 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
index 3de343e..9cc68dc 100644
@@ -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
#2 lore raw

Re: [libnftnl PATCH 1/3] ruleset: Add an end of line in the exit of ruleset.

In reply to Ana Rey
Quoted 3 lines · Ana Rey

Add an end of line in the exit of ruleset.

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
author
#3 lore raw

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.

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
author
#4 lore raw

Re: [libnftnl PATCH 1/3] ruleset: Add an end of line in the exit of ruleset.

In reply to Ana Rey

Please, 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.

---
 src/ruleset.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
src/ruleset.c +1 -2
index 3cbec09..181aeae 100644
@@ -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