From: Stephen Hemminger <stephen@networkplumber.org>
To: dev@dpdk.org
Cc: Stephen Hemminger <stephen@networkplumber.org>
Subject: [PATCH 3/3] test: remove unused resource API
Date: Tue, 30 Jul 2024 15:51:29 -0700 [thread overview]
Message-ID: <20240730225520.83314-4-stephen@networkplumber.org> (raw)
In-Reply-To: <20240730225520.83314-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_resource.c | 104 ---------------
4 files changed, 488 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_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
next prev parent reply other threads:[~2024-07-30 22:56 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 ` Stephen Hemminger [this message]
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 ` [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=20240730225520.83314-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).