From patchwork Tue Aug 13 15:57:53 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 143116 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 52073457B3; Tue, 13 Aug 2024 18:01:15 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 54D0540E44; Tue, 13 Aug 2024 18:00:57 +0200 (CEST) Received: from mail-pj1-f43.google.com (mail-pj1-f43.google.com [209.85.216.43]) by mails.dpdk.org (Postfix) with ESMTP id 23DA540E21 for ; Tue, 13 Aug 2024 18:00:54 +0200 (CEST) Received: by mail-pj1-f43.google.com with SMTP id 98e67ed59e1d1-2d396fde759so681624a91.3 for ; Tue, 13 Aug 2024 09:00:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1723564853; x=1724169653; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nnc/wU5O7LB9VHFiHu3VjkjZTqiXfO43xz4g+/xJsOI=; b=rtnj+OEh2ciwqNyrsLog2mwSYCGS0PO7H+jPb9yXQL6nt4rAevkO/XyTpA0Tu3OSUd EKPm/eSIjlTfOuuWvXrPUZ5JfERhdxuY1vGhn1rlTEAtrYrXZ4DCc4kBfHB8iS+q9TLj VzcijZU3i2MRdG6Y10hY2KufkMWWO1cfp4HfKR4ZPOfWGXB+o42Wg6tK7bL++DKEhiZF 7Qqc+knE13R9sQsywxwbq9ke4QK2rdGpnwo0aTIKIxHxAsiYak46UySHaB2s7Xq+5gv+ Yt8FxcozLb8W4G2RizBMJGH60Cow7H5J5a7zZNB1Rmxs37Bq5BJrYnoMdWC5s8aesvzy KRmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723564853; x=1724169653; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nnc/wU5O7LB9VHFiHu3VjkjZTqiXfO43xz4g+/xJsOI=; b=ZpS1j6HE2l0NyMOorTQN1Ukxm0aiZcOBq31wbvXeSn34CI5qzp3ZH8h4Qq1lIj/d9y XvE9La//9hVd22/66KT2mQMeIKybqSfg2B1HkzvKYYMad73hgrCAcdsVsEnwgL0i54Zy zeozsBcQOU+26VFZsSxUmqGyjqcgNKA6uifQl2OawnMPfU19jaD3BCE93Ch5GfrHv0+z BO8Ryt1AcVI2BRZpUQya4skavZaeNSJ7bhSj//QiQZ3grwsxfUow81cFKS/EU2wMXTyn fFSg+eFfprVBha9Qf3v32JR9nZjVdqdSGMrB6uxd423G5bSwW48WbAqNVvw88Rfb+wRv B44A== X-Gm-Message-State: AOJu0YyLYDvyr2PFyTmD4npeZskphezXqVKi2WJCgVl+jNRE/UoyT4FH iYIXPczVNIPJRLh72f0L31Sj1VHV0fDFK/STvp/Ba9ArHsnm6MHfD69bFjfaswA1xdCJ+FDXfZC E2A4= X-Google-Smtp-Source: AGHT+IHsnv8Ekg+PFAvscMXHRe0XiPc7AuZUc/h9A21yP112lsAGaIEHXIlh7D0uU3InbgNvIGhIHQ== X-Received: by 2002:a17:90b:895:b0:2c9:8b33:3197 with SMTP id 98e67ed59e1d1-2d39250e0b2mr4413428a91.10.1723564851560; Tue, 13 Aug 2024 09:00:51 -0700 (PDT) Received: from hermes.local (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2d1fcfe487esm7482612a91.42.2024.08.13.09.00.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 13 Aug 2024 09:00:51 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Bruce Richardson Subject: [PATCH v6 2/4] test: remove unused resource API Date: Tue, 13 Aug 2024 08:57:53 -0700 Message-ID: <20240813160039.5861-3-stephen@networkplumber.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240813160039.5861-1-stephen@networkplumber.org> References: <20240730225520.83314-1-stephen@networkplumber.org> <20240813160039.5861-1-stephen@networkplumber.org> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.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 Acked-by: Bruce Richardson --- 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 e29258e6ec..62478c0bb6 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 -#include -#include -#include - -#include - -#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 -#include - -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 -#include -#include - -#include -#include - -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_ and end_ 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 -#include - -#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);