DPDK patches and discussions
 help / color / mirror / Atom feed
From: Stephen Hemminger <stephen@networkplumber.org>
To: dev@dpdk.org
Cc: Stephen Hemminger <stephen@networkplumber.org>
Subject: [PATCH v2 2/3] test: restore cfgfile tests
Date: Tue, 30 Jul 2024 21:20:30 -0700	[thread overview]
Message-ID: <20240731042141.76985-3-stephen@networkplumber.org> (raw)
In-Reply-To: <20240731042141.76985-1-stephen@networkplumber.org>

These tests were not built since the conversion to meson.
Instead of using embedded resource functions, put data in include
file and generate before the test.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 app/meson.build                    |   3 +-
 app/test/meson.build               |   6 +-
 app/test/test_cfgfile.c            | 160 ++++++++++++++++++-----------
 app/test/test_cfgfiles/meson.build |  19 ++++
 4 files changed, 127 insertions(+), 61 deletions(-)
 create mode 100644 app/test/test_cfgfiles/meson.build

diff --git a/app/meson.build b/app/meson.build
index 5b2c80c7a1..e2db888ae1 100644
--- a/app/meson.build
+++ b/app/meson.build
@@ -55,6 +55,7 @@ foreach app:apps
     build = true
     reason = '<unknown reason>' # set if build == false to explain
     sources = []
+    resources = []
     includes = []
     cflags = default_cflags
     ldflags = default_ldflags
@@ -115,7 +116,7 @@ foreach app:apps
     endif
 
     exec = executable('dpdk-' + name,
-            sources,
+            [ sources, resources ],
             c_args: cflags,
             link_args: ldflags,
             link_whole: link_libs,
diff --git a/app/test/meson.build b/app/test/meson.build
index e29258e6ec..c99d768ead 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -36,7 +36,7 @@ source_file_deps = {
     'test_bitratestats.c': ['metrics', 'bitratestats', 'ethdev'] + sample_packet_forward_deps,
     'test_bpf.c': ['bpf', 'net'],
     'test_byteorder.c': [],
-#    'test_cfgfile.c': ['cfgfile'],
+    'test_cfgfile.c': ['cfgfile'],
     'test_cksum.c': ['net'],
     'test_cksum_perf.c': ['net'],
     'test_cmdline.c': [],
@@ -263,3 +263,7 @@ if not is_windows
             build_by_default: true,
             install: false)
 endif
+
+subdir('test_cfgfiles')
+
+resources += test_cfgfile_h
diff --git a/app/test/test_cfgfile.c b/app/test/test_cfgfile.c
index a5e3d8699c..f34838dd85 100644
--- a/app/test/test_cfgfile.c
+++ b/app/test/test_cfgfile.c
@@ -5,47 +5,31 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdint.h>
-#include <sys/queue.h>
+#include <unistd.h>
 
 #include <rte_cfgfile.h>
 
 #include "test.h"
-#include "resource.h"
 
-
-#define CFG_FILES_ETC "test_cfgfiles/etc"
-
-REGISTER_LINKED_RESOURCE(test_cfgfiles);
+#include "test_cfgfiles.h"
 
 static int
-test_cfgfile_setup(void)
+test_cfgfile_init(char *filename, const char *data)
 {
-	const struct resource *r;
-	int ret;
+	size_t len = strlen(data);
+	int fd;
 
-	r = resource_find("test_cfgfiles");
-	TEST_ASSERT_NOT_NULL(r, "missing resource test_cfgfiles");
+	fd = mkstemps(filename, strlen(".ini"));
+	if (fd < 0)
+		return fd;
 
-	ret = resource_untar(r);
-	TEST_ASSERT_SUCCESS(ret, "failed to untar %s", r->name);
-
-	return 0;
+	if (write(fd, data, len) != (int)len) {
+		close(fd);
+		return -1;
+	}
+	return fd;
 }
 
-static int
-test_cfgfile_cleanup(void)
-{
-	const struct resource *r;
-	int ret;
-
-	r = resource_find("test_cfgfiles");
-	TEST_ASSERT_NOT_NULL(r, "missing resource test_cfgfiles");
-
-	ret = resource_rm_by_tar(r);
-	TEST_ASSERT_SUCCESS(ret, "Failed to delete resource %s", r->name);
-
-	return 0;
-}
 
 static int
 _test_cfgfile_sample(struct rte_cfgfile *cfgfile)
@@ -87,9 +71,14 @@ static int
 test_cfgfile_sample1(void)
 {
 	struct rte_cfgfile *cfgfile;
-	int ret;
+	char filename[] = "/tmp/cfg_sample1_XXXXXX.ini";
+	int fd, ret;
 
-	cfgfile = rte_cfgfile_load(CFG_FILES_ETC "/sample1.ini", 0);
+	fd = test_cfgfile_init(filename, sample1_ini);
+	TEST_ASSERT(fd >= 0, "Failed to setup temp file");
+
+	cfgfile = rte_cfgfile_load(filename, 0);
+	close(fd);
 	TEST_ASSERT_NOT_NULL(cfgfile, "Failed to load config file");
 
 	ret = _test_cfgfile_sample(cfgfile);
@@ -98,6 +87,8 @@ test_cfgfile_sample1(void)
 	ret = rte_cfgfile_close(cfgfile);
 	TEST_ASSERT_SUCCESS(ret, "Failed to close cfgfile");
 
+	unlink(filename);
+
 	return 0;
 }
 
@@ -106,14 +97,18 @@ test_cfgfile_sample2(void)
 {
 	struct rte_cfgfile_parameters params;
 	struct rte_cfgfile *cfgfile;
-	int ret;
+	char filename[] = "/tmp/cfgile_sample2_XXXXXX.ini";
+	int fd, ret;
+
+	fd = test_cfgfile_init(filename, sample2_ini);
+	TEST_ASSERT(fd >= 0, "Failed to setup temp file");
 
 	/* override comment character */
 	memset(&params, 0, sizeof(params));
 	params.comment_character = '#';
 
-	cfgfile = rte_cfgfile_load_with_params(CFG_FILES_ETC "/sample2.ini", 0,
-					       &params);
+	cfgfile = rte_cfgfile_load_with_params(filename, 0, &params);
+	close(fd);
 	TEST_ASSERT_NOT_NULL(cfgfile, "Failed to parse sample2.ini");
 
 	ret = _test_cfgfile_sample(cfgfile);
@@ -122,6 +117,8 @@ test_cfgfile_sample2(void)
 	ret = rte_cfgfile_close(cfgfile);
 	TEST_ASSERT_SUCCESS(ret, "Failed to close cfgfile");
 
+	unlink(filename);
+
 	return 0;
 }
 
@@ -129,10 +126,15 @@ static int
 test_cfgfile_realloc_sections(void)
 {
 	struct rte_cfgfile *cfgfile;
-	int ret;
+	char filename[] = "/tmp/cfg_realloc_XXXXXX.ini";
+	int fd, ret;
 	const char *value;
 
-	cfgfile = rte_cfgfile_load(CFG_FILES_ETC "/realloc_sections.ini", 0);
+	fd = test_cfgfile_init(filename, realloc_sections_ini);
+	TEST_ASSERT(fd >= 0, "Failed to setup temp file");
+
+	cfgfile = rte_cfgfile_load(filename, 0);
+	close(fd);
 	TEST_ASSERT_NOT_NULL(cfgfile, "Failed to load config file");
 
 	ret = rte_cfgfile_num_sections(cfgfile, NULL, 0);
@@ -152,13 +154,15 @@ test_cfgfile_realloc_sections(void)
 	TEST_ASSERT(strcmp("value8_section9", value) == 0,
 		    "key unexpected value: %s", value);
 
-	ret = rte_cfgfile_save(cfgfile, "/tmp/cfgfile_save.ini");
+	ret = rte_cfgfile_save(cfgfile, "/tmp/cfg_save.ini");
 	TEST_ASSERT_SUCCESS(ret, "Failed to save *.ini file");
-	remove("/tmp/cfgfile_save.ini");
+	remove("/tmp/cfg_save.ini");
 
 	ret = rte_cfgfile_close(cfgfile);
 	TEST_ASSERT_SUCCESS(ret, "Failed to close cfgfile");
 
+	unlink(filename);
+
 	return 0;
 }
 
@@ -166,10 +170,17 @@ static int
 test_cfgfile_invalid_section_header(void)
 {
 	struct rte_cfgfile *cfgfile;
+	char filename[] = "/tmp/cfg_invalid_section_XXXXXX.ini";
+	int fd;
 
-	cfgfile = rte_cfgfile_load(CFG_FILES_ETC "/invalid_section.ini", 0);
+	fd = test_cfgfile_init(filename, invalid_section_ini);
+	TEST_ASSERT(fd >= 0, "Failed to setup temp file");
+
+	cfgfile = rte_cfgfile_load(filename, 0);
 	TEST_ASSERT_NULL(cfgfile, "Expected failure did not occur");
 
+	close(fd);
+	unlink(filename);
 	return 0;
 }
 
@@ -178,15 +189,21 @@ test_cfgfile_invalid_comment(void)
 {
 	struct rte_cfgfile_parameters params;
 	struct rte_cfgfile *cfgfile;
+	char filename[] = "/tmp/cfg_sample2_XXXXXX.ini";
+	int fd;
 
 	/* override comment character with an invalid one */
 	memset(&params, 0, sizeof(params));
 	params.comment_character = '$';
 
-	cfgfile = rte_cfgfile_load_with_params(CFG_FILES_ETC "/sample2.ini", 0,
-					       &params);
+	fd = test_cfgfile_init(filename, sample2_ini);
+	TEST_ASSERT(fd >= 0, "Failed to setup temp file");
+
+	cfgfile = rte_cfgfile_load_with_params(filename, 0, &params);
 	TEST_ASSERT_NULL(cfgfile, "Expected failure did not occur");
 
+	close(fd);
+	unlink(filename);
 	return 0;
 }
 
@@ -194,10 +211,17 @@ static int
 test_cfgfile_invalid_key_value_pair(void)
 {
 	struct rte_cfgfile *cfgfile;
+	char filename[] = "/tmp/cfg_empty_key_XXXXXX.ini";
+	int fd;
 
-	cfgfile = rte_cfgfile_load(CFG_FILES_ETC "/empty_key_value.ini", 0);
+	fd = test_cfgfile_init(filename, empty_key_value_ini);
+	TEST_ASSERT(fd >= 0, "Failed to setup temp file");
+
+	cfgfile = rte_cfgfile_load(filename, 0);
+	close(fd);
 	TEST_ASSERT_NULL(cfgfile, "Expected failure did not occur");
 
+	unlink(filename);
 	return 0;
 }
 
@@ -206,10 +230,15 @@ test_cfgfile_empty_key_value_pair(void)
 {
 	struct rte_cfgfile *cfgfile;
 	const char *value;
-	int ret;
+	char filename[] = "/tmp/cfg_empty_key_XXXXXX.ini";
+	int fd, ret;
+
+	fd = test_cfgfile_init(filename, empty_key_value_ini);
+	TEST_ASSERT(fd >= 0, "Failed to setup temp file");
+
+	cfgfile = rte_cfgfile_load(filename, CFG_FLAG_EMPTY_VALUES);
+	close(fd);
 
-	cfgfile = rte_cfgfile_load(CFG_FILES_ETC "/empty_key_value.ini",
-				   CFG_FLAG_EMPTY_VALUES);
 	TEST_ASSERT_NOT_NULL(cfgfile, "Failed to parse empty_key_value.ini");
 
 	ret = rte_cfgfile_num_sections(cfgfile, NULL, 0);
@@ -227,6 +256,7 @@ test_cfgfile_empty_key_value_pair(void)
 	ret = rte_cfgfile_close(cfgfile);
 	TEST_ASSERT_SUCCESS(ret, "Failed to close cfgfile");
 
+	unlink(filename);
 	return 0;
 }
 
@@ -234,10 +264,17 @@ static int
 test_cfgfile_missing_section(void)
 {
 	struct rte_cfgfile *cfgfile;
+	char filename[] = "/tmp/cfg_missing_section_XXXXXX.ini";
+	int fd;
 
-	cfgfile = rte_cfgfile_load(CFG_FILES_ETC "/missing_section.ini", 0);
-	TEST_ASSERT_NULL(cfgfile, "Expected failure did not occur");
+	fd = test_cfgfile_init(filename, missing_section_ini);
+	TEST_ASSERT(fd >= 0, "Failed to setup temp file");
 
+	cfgfile = rte_cfgfile_load(filename, 0);
+	close(fd);
+
+	TEST_ASSERT_NULL(cfgfile, "Expected failure did not occur");
+	unlink(filename);
 	return 0;
 }
 
@@ -246,10 +283,14 @@ test_cfgfile_global_properties(void)
 {
 	struct rte_cfgfile *cfgfile;
 	const char *value;
-	int ret;
+	char filename[] = "/tmp/cfg_missing_section_XXXXXX.ini";
+	int fd, ret;
 
-	cfgfile = rte_cfgfile_load(CFG_FILES_ETC "/missing_section.ini",
-				   CFG_FLAG_GLOBAL_SECTION);
+	fd = test_cfgfile_init(filename, missing_section_ini);
+	TEST_ASSERT(fd >= 0, "Failed to setup temp file");
+
+	cfgfile = rte_cfgfile_load(filename, CFG_FLAG_GLOBAL_SECTION);
+	close(fd);
 	TEST_ASSERT_NOT_NULL(cfgfile, "Failed to load config file");
 
 	ret = rte_cfgfile_num_sections(cfgfile, NULL, 0);
@@ -268,6 +309,7 @@ test_cfgfile_global_properties(void)
 	ret = rte_cfgfile_close(cfgfile);
 	TEST_ASSERT_SUCCESS(ret, "Failed to close cfgfile");
 
+	unlink(filename);
 	return 0;
 }
 
@@ -275,9 +317,14 @@ static int
 test_cfgfile_empty_file(void)
 {
 	struct rte_cfgfile *cfgfile;
-	int ret;
+	char filename[] = "/tmp/cfg_empty_XXXXXX.ini";
+	int fd, ret;
 
-	cfgfile = rte_cfgfile_load(CFG_FILES_ETC "/empty.ini", 0);
+	fd = test_cfgfile_init(filename, empty_ini);
+	TEST_ASSERT(fd >= 0, "Failed to setup temp file");
+
+	cfgfile = rte_cfgfile_load(filename, 0);
+	close(fd);
 	TEST_ASSERT_NOT_NULL(cfgfile, "Failed to load config file");
 
 	ret = rte_cfgfile_num_sections(cfgfile, NULL, 0);
@@ -286,15 +333,13 @@ test_cfgfile_empty_file(void)
 	ret = rte_cfgfile_close(cfgfile);
 	TEST_ASSERT_SUCCESS(ret, "Failed to close cfgfile");
 
+	unlink(filename);
 	return 0;
 }
 
 static int
 test_cfgfile(void)
 {
-	if (test_cfgfile_setup())
-		return -1;
-
 	if (test_cfgfile_sample1())
 		return -1;
 
@@ -325,10 +370,7 @@ test_cfgfile(void)
 	if (test_cfgfile_empty_file())
 		return -1;
 
-	if (test_cfgfile_cleanup())
-		return -1;
-
 	return 0;
 }
 
-REGISTER_TEST_COMMAND(cfgfile_autotest, test_cfgfile);
+REGISTER_FAST_TEST(cfgfile_autotest, true, true, test_cfgfile);
diff --git a/app/test/test_cfgfiles/meson.build b/app/test/test_cfgfiles/meson.build
new file mode 100644
index 0000000000..068b61044a
--- /dev/null
+++ b/app/test/test_cfgfiles/meson.build
@@ -0,0 +1,19 @@
+# SPDX-License-Identifier: BSD-3-Clause
+
+test_cfgfiles = files(
+    'etc/empty.ini',
+    'etc/empty_key_value.ini',
+    'etc/invalid_section.ini',
+    'etc/line_too_long.ini',
+    'etc/missing_section.ini',
+    'etc/realloc_sections.ini',
+    'etc/sample1.ini',
+    'etc/sample2.ini',
+)
+
+# generate the header file used in cfgfile test
+test_cfgfile_h = custom_target('test_cfgfile',
+                          output: 'test_cfgfiles.h',
+                          input: test_cfgfiles,
+                          capture: true,
+                          command: [ header_gen_cmd, '@INPUT@'])
-- 
2.43.0


  parent reply	other threads:[~2024-07-31  4:23 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-30 22:51 [PATCH 0/3] restore cfgfile library tests Stephen Hemminger
2024-07-30 22:51 ` [PATCH 1/3] buildtools: add helper to convert text file to header Stephen Hemminger
2024-07-30 22:51 ` [PATCH 2/3] test: restore cfgfile tests Stephen Hemminger
2024-07-30 22:51 ` [PATCH 3/3] test: remove unused resource API Stephen Hemminger
2024-07-31  4:20 ` [PATCH v2 0/3] restore cfgfile library tests Stephen Hemminger
2024-07-31  4:20   ` [PATCH v2 1/3] buildtools: add helper to convert text file to header Stephen Hemminger
2024-07-31  4:20   ` Stephen Hemminger [this message]
2024-07-31  4:20   ` [PATCH v2 3/3] test: remove unused resource API Stephen Hemminger
2024-07-31 17:35 ` [PATCH v3 0/3] restore lost tests for rte_cfgfile Stephen Hemminger
2024-07-31 17:35   ` [PATCH v3 1/3] buildtools: add helper to convert text file to header Stephen Hemminger
2024-07-31 17:35   ` [PATCH v3 2/3] test: remove unused resource API Stephen Hemminger
2024-07-31 17:35   ` [PATCH v3 3/3] test: restore cfgfile tests Stephen Hemminger
2024-08-01 17:29 ` [PATCH v4 0/3] restore lost " Stephen Hemminger
2024-08-01 17:29   ` [PATCH v4 1/3] buildtools: add helper to convert text file to header Stephen Hemminger
2024-08-02 15:15     ` Bruce Richardson
2024-08-01 17:29   ` [PATCH v4 2/3] test: remove unused resource API Stephen Hemminger
2024-08-02 15:16     ` Bruce Richardson
2024-08-01 17:29   ` [PATCH v4 3/3] test: restore cfgfile tests Stephen Hemminger
2024-08-02 15:21     ` Bruce Richardson
2024-08-02 16:44 ` [PATCH v5 0/4] restore unused " Stephen Hemminger
2024-08-02 16:45   ` [PATCH v5 1/4] buildtools: add helper to convert text file to header Stephen Hemminger
2024-08-02 16:45   ` [PATCH v5 2/4] test: remove unused resource API Stephen Hemminger
2024-08-02 16:45   ` [PATCH v5 3/4] test: restore cfgfile tests Stephen Hemminger
2024-08-02 16:52     ` Bruce Richardson
2024-08-02 16:45   ` [PATCH v5 4/4] test: rearrange test_cfgfiles cases Stephen Hemminger
2024-08-02 16:51     ` Bruce Richardson
2024-08-02 17:06       ` Stephen Hemminger
2024-08-06  8:37         ` Bruce Richardson
2024-08-13 15:57 ` [PATCH v6 0/4] test: restore cfgfile lib tests Stephen Hemminger
2024-08-13 15:57   ` [PATCH v6 1/4] buildtools: add helper to convert text file to header Stephen Hemminger
2024-08-13 15:57   ` [PATCH v6 2/4] test: remove unused resource API Stephen Hemminger
2024-08-13 15:57   ` [PATCH v6 3/4] test: rearrange test_cfgfiles cases Stephen Hemminger
2024-08-13 15:57   ` [PATCH v6 4/4] test: restore cfgfile tests Stephen Hemminger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240731042141.76985-3-stephen@networkplumber.org \
    --to=stephen@networkplumber.org \
    --cc=dev@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).