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 3/3] test: remove unused resource API
Date: Tue, 30 Jul 2024 21:20:31 -0700	[thread overview]
Message-ID: <20240731042141.76985-4-stephen@networkplumber.org> (raw)
In-Reply-To: <20240731042141.76985-1-stephen@networkplumber.org>

This API was used only for cfgfile tests and was never built
after the conversion to meson. Will be replaced by simpler
method of doing cfgfile tests.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 app/test/meson.build     |   2 -
 app/test/resource.c      | 276 ---------------------------------------
 app/test/resource.h      | 106 ---------------
 app/test/test_cfgfile.c  |  46 +++----
 app/test/test_resource.c | 104 ---------------
 5 files changed, 23 insertions(+), 511 deletions(-)
 delete mode 100644 app/test/resource.c
 delete mode 100644 app/test/resource.h
 delete mode 100644 app/test/test_resource.c

diff --git a/app/test/meson.build b/app/test/meson.build
index c99d768ead..b2bb7c36f6 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -20,7 +20,6 @@ test_cryptodev_deps = ['bus_vdev', 'net', 'cryptodev', 'security']
 source_file_deps = {
     # The C files providing functionality to other test cases
     'packet_burst_generator.c': packet_burst_generator_deps,
-#    'resource.c': [],          # unused currently.
     'sample_packet_forward.c': sample_packet_forward_deps,
     'virtual_pmd.c': virtual_pmd_deps,
 
@@ -154,7 +153,6 @@ source_file_deps = {
     'test_reciprocal_division_perf.c': [],
     'test_red.c': ['sched'],
     'test_reorder.c': ['reorder'],
-#    'test_resource.c': [],
     'test_rib.c': ['net', 'rib'],
     'test_rib6.c': ['net', 'rib'],
     'test_ring.c': ['ptr_compress'],
diff --git a/app/test/resource.c b/app/test/resource.c
deleted file mode 100644
index 34465f1668..0000000000
--- a/app/test/resource.c
+++ /dev/null
@@ -1,276 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2016 RehiveTech. All rights reserved.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <sys/queue.h>
-
-#include <rte_debug.h>
-
-#include "resource.h"
-
-struct resource_list resource_list = TAILQ_HEAD_INITIALIZER(resource_list);
-
-size_t resource_size(const struct resource *r)
-{
-	return r->end - r->begin;
-}
-
-const struct resource *resource_find(const char *name)
-{
-	struct resource *r;
-
-	TAILQ_FOREACH(r, &resource_list, next) {
-		RTE_VERIFY(r->name);
-
-		if (!strcmp(r->name, name))
-			return r;
-	}
-
-	return NULL;
-}
-
-int resource_fwrite(const struct resource *r, FILE *f)
-{
-	const size_t goal = resource_size(r);
-	size_t total = 0;
-
-	while (total < goal) {
-		size_t wlen = fwrite(r->begin + total, 1, goal - total, f);
-		if (wlen == 0) {
-			perror(__func__);
-			return -1;
-		}
-
-		total += wlen;
-	}
-
-	return 0;
-}
-
-int resource_fwrite_file(const struct resource *r, const char *fname)
-{
-	FILE *f;
-	int ret;
-
-	f = fopen(fname, "w");
-	if (f == NULL) {
-		perror(__func__);
-		return -1;
-	}
-
-	ret = resource_fwrite(r, f);
-	fclose(f);
-	return ret;
-}
-
-#ifdef RTE_APP_TEST_RESOURCE_TAR
-#include <archive.h>
-#include <archive_entry.h>
-
-static int do_copy(struct archive *r, struct archive *w)
-{
-	const void *buf;
-	size_t len;
-#if ARCHIVE_VERSION_NUMBER >= 3000000
-	int64_t off;
-#else
-	off_t off;
-#endif
-	int ret;
-
-	while (1) {
-		ret = archive_read_data_block(r, &buf, &len, &off);
-		if (ret == ARCHIVE_RETRY)
-			continue;
-
-		if (ret == ARCHIVE_EOF)
-			return 0;
-
-		if (ret != ARCHIVE_OK)
-			return ret;
-
-		do {
-			ret = archive_write_data_block(w, buf, len, off);
-			if (ret != ARCHIVE_OK && ret != ARCHIVE_RETRY)
-				return ret;
-		} while (ret != ARCHIVE_OK);
-	}
-}
-
-int resource_untar(const struct resource *res)
-{
-	struct archive *r;
-	struct archive *w;
-	struct archive_entry *e;
-	void *p;
-	int flags = 0;
-	int ret;
-
-	p = malloc(resource_size(res));
-	if (p == NULL)
-		rte_panic("Failed to malloc %zu B\n", resource_size(res));
-
-	memcpy(p, res->begin, resource_size(res));
-
-	r = archive_read_new();
-	if (r == NULL) {
-		free(p);
-		return -1;
-	}
-
-	archive_read_support_format_all(r);
-	archive_read_support_filter_all(r);
-
-	w = archive_write_disk_new();
-	if (w == NULL) {
-		archive_read_free(r);
-		free(p);
-		return -1;
-	}
-
-	flags |= ARCHIVE_EXTRACT_PERM;
-	flags |= ARCHIVE_EXTRACT_FFLAGS;
-	archive_write_disk_set_options(w, flags);
-	archive_write_disk_set_standard_lookup(w);
-
-	ret = archive_read_open_memory(r, p, resource_size(res));
-	if (ret != ARCHIVE_OK)
-		goto fail;
-
-	while (1) {
-		ret = archive_read_next_header(r, &e);
-		if (ret == ARCHIVE_EOF)
-			break;
-		if (ret != ARCHIVE_OK)
-			goto fail;
-
-		ret = archive_write_header(w, e);
-		if (ret == ARCHIVE_EOF)
-			break;
-		if (ret != ARCHIVE_OK)
-			goto fail;
-
-		if (archive_entry_size(e) == 0)
-			continue;
-
-		ret = do_copy(r, w);
-		if (ret != ARCHIVE_OK)
-			goto fail;
-
-		ret = archive_write_finish_entry(w);
-		if (ret != ARCHIVE_OK)
-			goto fail;
-	}
-
-	archive_write_free(w);
-	archive_read_free(r);
-	free(p);
-	return 0;
-
-fail:
-	archive_write_free(w);
-	archive_read_free(r);
-	free(p);
-	rte_panic("Failed: %s\n", archive_error_string(r));
-	return -1;
-}
-
-int resource_rm_by_tar(const struct resource *res)
-{
-	struct archive *r;
-	struct archive_entry *e;
-	void *p;
-	int try_again = 1;
-	int attempts = 0;
-	int ret;
-
-	p = malloc(resource_size(res));
-	if (p == NULL)
-		rte_panic("Failed to malloc %zu B\n", resource_size(res));
-
-	memcpy(p, res->begin, resource_size(res));
-
-	/*
-	 * If somebody creates a file somewhere inside the extracted TAR
-	 * hierarchy during a test the resource_rm_by_tar might loop
-	 * infinitely. We prevent this by adding the attempts counter there.
-	 * In normal case, max N iteration is done where N is the depth of
-	 * the file-hierarchy.
-	 */
-	while (try_again && attempts < 10000) {
-		r = archive_read_new();
-		if (r == NULL) {
-			free(p);
-			return -1;
-		}
-
-		archive_read_support_format_all(r);
-		archive_read_support_filter_all(r);
-
-		ret = archive_read_open_memory(r, p, resource_size(res));
-		if (ret != ARCHIVE_OK) {
-			fprintf(stderr, "Failed: %s\n",
-					archive_error_string(r));
-			goto fail;
-		}
-
-		try_again = 0;
-
-		while (1) {
-			ret = archive_read_next_header(r, &e);
-			if (ret == ARCHIVE_EOF)
-				break;
-			if (ret != ARCHIVE_OK)
-				goto fail;
-
-			ret = remove(archive_entry_pathname(e));
-			if (ret < 0) {
-				switch (errno) {
-				case ENOTEMPTY:
-				case EEXIST:
-					try_again = 1;
-					break;
-
-				/* should not usually happen: */
-				case ENOENT:
-				case ENOTDIR:
-				case EROFS:
-					attempts += 1;
-					continue;
-				default:
-					perror("Failed to remove file");
-					goto fail;
-				}
-			}
-		}
-
-		archive_read_free(r);
-		attempts += 1;
-	}
-
-	if (attempts >= 10000) {
-		fprintf(stderr, "Failed to remove archive\n");
-		free(p);
-		return -1;
-	}
-
-	free(p);
-	return 0;
-
-fail:
-	archive_read_free(r);
-	free(p);
-
-	rte_panic("Failed: %s\n", archive_error_string(r));
-	return -1;
-}
-
-#endif /* RTE_APP_TEST_RESOURCE_TAR */
-
-void resource_register(struct resource *r)
-{
-	TAILQ_INSERT_TAIL(&resource_list, r, next);
-}
diff --git a/app/test/resource.h b/app/test/resource.h
deleted file mode 100644
index c75ebd4b5d..0000000000
--- a/app/test/resource.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2016 RehiveTech. All rights reserved.
- */
-
-#ifndef _RESOURCE_H_
-#define _RESOURCE_H_
-
-/**
- * @file
- *
- * Test Resource API
- *
- * Each test can require and use some external resources. Usually, an external
- * resource is a file or a filesystem sub-hierarchy. A resource is included
- * inside the test executable.
- */
-
-#include <sys/queue.h>
-#include <stdio.h>
-#include <stddef.h>
-
-#include <rte_eal.h>
-#include <rte_common.h>
-
-TAILQ_HEAD(resource_list, resource);
-extern struct resource_list resource_list;
-
-/**
- * Representation of a resource. It points to the resource's binary data.
- * The semantics of the binary data are defined by the target test.
- */
-struct resource {
-	const char *name;  /**< Unique name of the resource */
-	const char *begin; /**< Start of resource data */
-	const char *end;   /**< End of resource data */
-	TAILQ_ENTRY(resource) next;
-};
-
-/**
- * @return size of the given resource
- */
-size_t resource_size(const struct resource *r);
-
-/**
- * Find a resource by name in the global list of resources.
- */
-const struct resource *resource_find(const char *name);
-
-/**
- * Write the raw data of the resource to the given file.
- * @return 0 on success
- */
-int resource_fwrite(const struct resource *r, FILE *f);
-
-/**
- * Write the raw data of the resource to the given file given by name.
- * The name is relative to the current working directory.
- * @return 0 on success
- */
-int resource_fwrite_file(const struct resource *r, const char *fname);
-
-/**
- * Treat the given resource as a tar archive. Extract
- * the archive to the current directory.
- */
-int resource_untar(const struct resource *res);
-
-/**
- * Treat the given resource as a tar archive. Remove
- * all files (related to the current directory) listed
- * in the tar archive.
- */
-int resource_rm_by_tar(const struct resource *res);
-
-/**
- * Register a resource in the global list of resources.
- * Not intended for direct use, please check the REGISTER_RESOURCE
- * macro.
- */
-void resource_register(struct resource *r);
-
-/**
- * Definition of a resource linked externally (by means of the used toolchain).
- * Only the base name of the resource is expected. The name refers to the
- * linked pointers beg_<name> and end_<name> provided externally.
- */
-#define REGISTER_LINKED_RESOURCE(n) \
-extern const char beg_ ##n;         \
-extern const char end_ ##n;         \
-REGISTER_RESOURCE(n, &beg_ ##n, &end_ ##n) \
-
-/**
- * Definition of a resource described by its name, and pointers begin, end.
- */
-#define REGISTER_RESOURCE(n, b, e) \
-static struct resource linkres_ ##n = {       \
-	.name = RTE_STR(n),     \
-	.begin = b,             \
-	.end = e,               \
-};                              \
-RTE_INIT(resinitfn_ ##n)	\
-{                               \
-	resource_register(&linkres_ ##n);  \
-}
-
-#endif
diff --git a/app/test/test_cfgfile.c b/app/test/test_cfgfile.c
index f34838dd85..8db9f721ce 100644
--- a/app/test/test_cfgfile.c
+++ b/app/test/test_cfgfile.c
@@ -19,7 +19,7 @@ test_cfgfile_init(char *filename, const char *data)
 	size_t len = strlen(data);
 	int fd;
 
-	fd = mkstemps(filename, strlen(".ini"));
+	fd = mkstemp(filename);
 	if (fd < 0)
 		return fd;
 
@@ -71,7 +71,7 @@ static int
 test_cfgfile_sample1(void)
 {
 	struct rte_cfgfile *cfgfile;
-	char filename[] = "/tmp/cfg_sample1_XXXXXX.ini";
+	char filename[] = "/tmp/cfg_sample1_XXXXXX";
 	int fd, ret;
 
 	fd = test_cfgfile_init(filename, sample1_ini);
@@ -87,7 +87,7 @@ test_cfgfile_sample1(void)
 	ret = rte_cfgfile_close(cfgfile);
 	TEST_ASSERT_SUCCESS(ret, "Failed to close cfgfile");
 
-	unlink(filename);
+	remove(filename);
 
 	return 0;
 }
@@ -97,7 +97,7 @@ test_cfgfile_sample2(void)
 {
 	struct rte_cfgfile_parameters params;
 	struct rte_cfgfile *cfgfile;
-	char filename[] = "/tmp/cfgile_sample2_XXXXXX.ini";
+	char filename[] = "/tmp/cfgile_sample2_XXXXXX";
 	int fd, ret;
 
 	fd = test_cfgfile_init(filename, sample2_ini);
@@ -109,7 +109,7 @@ test_cfgfile_sample2(void)
 
 	cfgfile = rte_cfgfile_load_with_params(filename, 0, &params);
 	close(fd);
-	TEST_ASSERT_NOT_NULL(cfgfile, "Failed to parse sample2.ini");
+	TEST_ASSERT_NOT_NULL(cfgfile, "Failed to parse sample2");
 
 	ret = _test_cfgfile_sample(cfgfile);
 	TEST_ASSERT_SUCCESS(ret, "Failed to validate sample file: %d", ret);
@@ -117,7 +117,7 @@ test_cfgfile_sample2(void)
 	ret = rte_cfgfile_close(cfgfile);
 	TEST_ASSERT_SUCCESS(ret, "Failed to close cfgfile");
 
-	unlink(filename);
+	remove(filename);
 
 	return 0;
 }
@@ -126,7 +126,7 @@ static int
 test_cfgfile_realloc_sections(void)
 {
 	struct rte_cfgfile *cfgfile;
-	char filename[] = "/tmp/cfg_realloc_XXXXXX.ini";
+	char filename[] = "/tmp/cfg_realloc_XXXXXX";
 	int fd, ret;
 	const char *value;
 
@@ -161,7 +161,7 @@ test_cfgfile_realloc_sections(void)
 	ret = rte_cfgfile_close(cfgfile);
 	TEST_ASSERT_SUCCESS(ret, "Failed to close cfgfile");
 
-	unlink(filename);
+	remove(filename);
 
 	return 0;
 }
@@ -170,7 +170,7 @@ static int
 test_cfgfile_invalid_section_header(void)
 {
 	struct rte_cfgfile *cfgfile;
-	char filename[] = "/tmp/cfg_invalid_section_XXXXXX.ini";
+	char filename[] = "/tmp/cfg_invalid_section_XXXXXX";
 	int fd;
 
 	fd = test_cfgfile_init(filename, invalid_section_ini);
@@ -180,7 +180,7 @@ test_cfgfile_invalid_section_header(void)
 	TEST_ASSERT_NULL(cfgfile, "Expected failure did not occur");
 
 	close(fd);
-	unlink(filename);
+	remove(filename);
 	return 0;
 }
 
@@ -189,7 +189,7 @@ test_cfgfile_invalid_comment(void)
 {
 	struct rte_cfgfile_parameters params;
 	struct rte_cfgfile *cfgfile;
-	char filename[] = "/tmp/cfg_sample2_XXXXXX.ini";
+	char filename[] = "/tmp/cfg_sample2_XXXXXX";
 	int fd;
 
 	/* override comment character with an invalid one */
@@ -203,7 +203,7 @@ test_cfgfile_invalid_comment(void)
 	TEST_ASSERT_NULL(cfgfile, "Expected failure did not occur");
 
 	close(fd);
-	unlink(filename);
+	remove(filename);
 	return 0;
 }
 
@@ -211,7 +211,7 @@ static int
 test_cfgfile_invalid_key_value_pair(void)
 {
 	struct rte_cfgfile *cfgfile;
-	char filename[] = "/tmp/cfg_empty_key_XXXXXX.ini";
+	char filename[] = "/tmp/cfg_empty_key_XXXXXX";
 	int fd;
 
 	fd = test_cfgfile_init(filename, empty_key_value_ini);
@@ -221,7 +221,7 @@ test_cfgfile_invalid_key_value_pair(void)
 	close(fd);
 	TEST_ASSERT_NULL(cfgfile, "Expected failure did not occur");
 
-	unlink(filename);
+	remove(filename);
 	return 0;
 }
 
@@ -230,7 +230,7 @@ test_cfgfile_empty_key_value_pair(void)
 {
 	struct rte_cfgfile *cfgfile;
 	const char *value;
-	char filename[] = "/tmp/cfg_empty_key_XXXXXX.ini";
+	char filename[] = "/tmp/cfg_empty_key_XXXXXX";
 	int fd, ret;
 
 	fd = test_cfgfile_init(filename, empty_key_value_ini);
@@ -239,7 +239,7 @@ test_cfgfile_empty_key_value_pair(void)
 	cfgfile = rte_cfgfile_load(filename, CFG_FLAG_EMPTY_VALUES);
 	close(fd);
 
-	TEST_ASSERT_NOT_NULL(cfgfile, "Failed to parse empty_key_value.ini");
+	TEST_ASSERT_NOT_NULL(cfgfile, "Failed to parse empty_key_value");
 
 	ret = rte_cfgfile_num_sections(cfgfile, NULL, 0);
 	TEST_ASSERT(ret == 1, "Unexpected number of sections: %d", ret);
@@ -256,7 +256,7 @@ test_cfgfile_empty_key_value_pair(void)
 	ret = rte_cfgfile_close(cfgfile);
 	TEST_ASSERT_SUCCESS(ret, "Failed to close cfgfile");
 
-	unlink(filename);
+	remove(filename);
 	return 0;
 }
 
@@ -264,7 +264,7 @@ static int
 test_cfgfile_missing_section(void)
 {
 	struct rte_cfgfile *cfgfile;
-	char filename[] = "/tmp/cfg_missing_section_XXXXXX.ini";
+	char filename[] = "/tmp/cfg_missing_section_XXXXXX";
 	int fd;
 
 	fd = test_cfgfile_init(filename, missing_section_ini);
@@ -274,7 +274,7 @@ test_cfgfile_missing_section(void)
 	close(fd);
 
 	TEST_ASSERT_NULL(cfgfile, "Expected failure did not occur");
-	unlink(filename);
+	remove(filename);
 	return 0;
 }
 
@@ -283,7 +283,7 @@ test_cfgfile_global_properties(void)
 {
 	struct rte_cfgfile *cfgfile;
 	const char *value;
-	char filename[] = "/tmp/cfg_missing_section_XXXXXX.ini";
+	char filename[] = "/tmp/cfg_missing_section_XXXXXX";
 	int fd, ret;
 
 	fd = test_cfgfile_init(filename, missing_section_ini);
@@ -309,7 +309,7 @@ test_cfgfile_global_properties(void)
 	ret = rte_cfgfile_close(cfgfile);
 	TEST_ASSERT_SUCCESS(ret, "Failed to close cfgfile");
 
-	unlink(filename);
+	remove(filename);
 	return 0;
 }
 
@@ -317,7 +317,7 @@ static int
 test_cfgfile_empty_file(void)
 {
 	struct rte_cfgfile *cfgfile;
-	char filename[] = "/tmp/cfg_empty_XXXXXX.ini";
+	char filename[] = "/tmp/cfg_empty_XXXXXX";
 	int fd, ret;
 
 	fd = test_cfgfile_init(filename, empty_ini);
@@ -333,7 +333,7 @@ test_cfgfile_empty_file(void)
 	ret = rte_cfgfile_close(cfgfile);
 	TEST_ASSERT_SUCCESS(ret, "Failed to close cfgfile");
 
-	unlink(filename);
+	remove(filename);
 	return 0;
 }
 
diff --git a/app/test/test_resource.c b/app/test/test_resource.c
deleted file mode 100644
index 05c27db203..0000000000
--- a/app/test/test_resource.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2016 RehiveTech. All rights reserved.
- */
-
-#include <stdio.h>
-#include <string.h>
-
-#include "test.h"
-#include "resource.h"
-
-const char test_resource_dpdk_blob[] = {
-	'\x44', '\x50', '\x44', '\x4b', '\x00'
-};
-
-REGISTER_RESOURCE(test_resource_dpdk,
-		test_resource_dpdk_blob, test_resource_dpdk_blob + 4);
-
-static int test_resource_dpdk(void)
-{
-	const struct resource *r;
-
-	r = resource_find("test_resource_dpdk");
-	TEST_ASSERT_NOT_NULL(r, "Could not find test_resource_dpdk");
-	TEST_ASSERT(!strcmp(r->name, "test_resource_dpdk"),
-			"Found resource %s, expected test_resource_dpdk",
-			r->name);
-
-	TEST_ASSERT(!strncmp("DPDK", r->begin, 4),
-			"Unexpected payload: %.4s...", r->begin);
-
-	return 0;
-}
-
-REGISTER_LINKED_RESOURCE(test_resource_c);
-
-static int test_resource_c(void)
-{
-	const struct resource *r;
-	FILE *f;
-
-	r = resource_find("test_resource_c");
-	TEST_ASSERT_NOT_NULL(r, "No test_resource_c found");
-	TEST_ASSERT(!strcmp(r->name, "test_resource_c"),
-			"Found resource %s, expected test_resource_c",
-			r->name);
-
-	TEST_ASSERT_SUCCESS(resource_fwrite_file(r, "test_resource.c"),
-			"Failed to write file %s", r->name);
-
-	f = fopen("test_resource.c", "r");
-	TEST_ASSERT_NOT_NULL(f,
-			"Missing extracted file resource.c");
-	fclose(f);
-	remove("test_resource.c");
-
-	return 0;
-}
-
-#ifdef RTE_APP_TEST_RESOURCE_TAR
-REGISTER_LINKED_RESOURCE(test_resource_tar);
-
-static int test_resource_tar(void)
-{
-	const struct resource *r;
-	FILE *f;
-
-	r = resource_find("test_resource_tar");
-	TEST_ASSERT_NOT_NULL(r, "No test_resource_tar found");
-	TEST_ASSERT(!strcmp(r->name, "test_resource_tar"),
-			"Found resource %s, expected test_resource_tar",
-			r->name);
-
-	TEST_ASSERT_SUCCESS(resource_untar(r),
-			"Failed to to untar %s", r->name);
-
-	f = fopen("test_resource.c", "r");
-	TEST_ASSERT_NOT_NULL(f,
-			"Missing extracted file test_resource.c");
-	fclose(f);
-
-	TEST_ASSERT_SUCCESS(resource_rm_by_tar(r),
-			"Failed to remove extracted contents of %s", r->name);
-	return 0;
-}
-
-#endif /* RTE_APP_TEST_RESOURCE_TAR */
-
-static int test_resource(void)
-{
-	if (test_resource_dpdk())
-		return -1;
-
-	if (test_resource_c())
-		return -1;
-
-#ifdef RTE_APP_TEST_RESOURCE_TAR
-	if (test_resource_tar())
-		return -1;
-#endif /* RTE_APP_TEST_RESOURCE_TAR */
-
-	return 0;
-}
-
-REGISTER_TEST_COMMAND(resource_autotest, test_resource);
-- 
2.43.0


  parent reply	other threads:[~2024-07-31  4:24 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   ` [PATCH v2 2/3] test: restore cfgfile tests Stephen Hemminger
2024-07-31  4:20   ` Stephen Hemminger [this message]
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-4-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).