From 90658f16040d65cecf2c0eaa5368bbf522aee577 Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Sun, 9 May 2021 16:11:12 +0200 Subject: [PATCH] tests: add tests for supported architectures Ensure that we detect all supported architectures and don't regress recognizing them. Signed-off-by: Christian Brauner --- .gitignore | 1 + src/tests/Makefile.am | 6 ++++ src/tests/arch_parse.c | 72 ++++++++++++++++++++++++++++++++++++++++++ src/tests/lxctest.h | 9 +++++- 4 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 src/tests/arch_parse.c diff --git a/.gitignore b/.gitignore index 44345454f..ba377e3ca 100644 --- a/.gitignore +++ b/.gitignore @@ -71,6 +71,7 @@ src/lxc/cmd/lxc-update-config src/tests/lxc-test-device-add-remove src/tests/lxc-test-attach src/tests/lxc-test-apparmor +src/tests/lxc-test-arch-parse src/tests/lxc-test-cgpath src/tests/lxc-test-clonetest src/tests/lxc-test-concurrent diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am index fa1cdebfb..259ba56e9 100644 --- a/src/tests/Makefile.am +++ b/src/tests/Makefile.am @@ -19,6 +19,11 @@ if ENABLE_SELINUX LSM_SOURCES += ../lxc/lsm/selinux.c endif +lxc_test_arch_parse_SOURCES = arch_parse.c \ + lxc.h \ + lxctest.h \ + memory_utils.h + lxc_test_api_reboot_SOURCES = api_reboot.c \ ../lxc/af_unix.c ../lxc/af_unix.h \ ../lxc/caps.c ../lxc/caps.h \ @@ -734,6 +739,7 @@ endif bin_PROGRAMS = lxc-test-api-reboot \ lxc-test-apparmor \ + lxc-test-arch-parse \ lxc-test-attach \ lxc-test-basic \ lxc-test-cgpath \ diff --git a/src/tests/arch_parse.c b/src/tests/arch_parse.c new file mode 100644 index 000000000..9f99dca93 --- /dev/null +++ b/src/tests/arch_parse.c @@ -0,0 +1,72 @@ +/* liblxcapi + * + * Copyright © 2021 Christian Brauner . + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "lxc/lxccontainer.h" + +#include "lxctest.h" +#include "../lxc/log.h" +#include "../lxc/lxc.h" +#include "../lxc/memory_utils.h" + +#ifndef HAVE_STRLCPY +#include "include/strlcpy.h" +#endif + +static const char *const arches[] = { + "arm", "armel", "armhf", "armv7l", "athlon", "i386", "i486", + "i586", "i686", "linux32", "mips", "mipsel", "ppc", "powerpc", + "x86", "aarch64", "amd64", "arm64", "linux64", "mips64", "mips64el", + "ppc64", "ppc64el", "ppc64le", "powerpc64", "s390x", "x86_64", +}; + +static bool parse_valid_architectures(void) +{ + __put_lxc_container struct lxc_container *c = NULL; + + c = lxc_container_new("parse-arch", NULL); + if (!c) + return test_error_ret(false, "Failed to create container \"parse_arch\""); + + for (size_t i = 0; i < ARRAY_SIZE(arches); i++) { + const char *arch = arches[i]; + + if (!c->set_config_item(c, "lxc.arch", arch)) + return test_error_ret(false, "Failed to set \"lxc.arch=%s\"", arch); + + if (!c->clear_config_item(c, "lxc.arch")) + return test_error_ret(false, "Failed to clear \"lxc.arch=%s\"", arch); + } + + return true; +} + +int main(int argc, char *argv[]) +{ + if (!parse_valid_architectures()) + exit(EXIT_FAILURE); + + exit(EXIT_SUCCESS); +} diff --git a/src/tests/lxctest.h b/src/tests/lxctest.h index c28d9c24f..506168bfb 100644 --- a/src/tests/lxctest.h +++ b/src/tests/lxctest.h @@ -30,7 +30,7 @@ #define lxc_debug_stream(stream, format, ...) \ do { \ - fprintf(stream, "%s: %d: %s: " format, __FILE__, __LINE__, \ + fprintf(stream, "%s: %d: %s: " format "\n", __FILE__, __LINE__, \ __func__, __VA_ARGS__); \ } while (false) @@ -48,4 +48,11 @@ #define lxc_test_assert_abort(expression) lxc_test_assert_stringify(expression, #expression) +#define test_error_ret(__ret__, format, ...) \ + ({ \ + typeof(__ret__) __internal_ret__ = (__ret__); \ + fprintf(stderr, format, ##__VA_ARGS__); \ + __internal_ret__; \ + }) + #endif /* __LXC_TEST_H */ -- 2.47.2