[PATCH net-next v5 02/19] test_bitmap: unit tests for lib/bitmap.c
From: David Decotigny This is mainly testing bitmap construction and conversion to/from u32[] for now. Tested: qemu i386, x86_64, ppc, ppc64 BE and LE, ARM. Signed-off-by: David Decotigny --- lib/Kconfig.debug | 8 + lib/Makefile | 1 + lib/test_bitmap.c | 343 ++ tools/testing/selftests/lib/Makefile | 2 +- tools/testing/selftests/lib/bitmap.sh | 10 + 5 files changed, 363 insertions(+), 1 deletion(-) create mode 100644 lib/test_bitmap.c create mode 100644 tools/testing/selftests/lib/bitmap.sh diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 0d76ecc..3d25bdf 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -1721,6 +1721,14 @@ config TEST_KSTRTOX config TEST_PRINTF tristate "Test printf() family of functions at runtime" +config TEST_BITMAP + tristate "Test bitmap_*() family of functions at runtime" + default n + help + Enable this option to test the bitmap functions at boot. + + If unsure, say N. + config TEST_RHASHTABLE tristate "Perform selftest on resizable hash table" default n diff --git a/lib/Makefile b/lib/Makefile index 180dd4d..ba6b7fe 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -43,6 +43,7 @@ obj-$(CONFIG_TEST_USER_COPY) += test_user_copy.o obj-$(CONFIG_TEST_STATIC_KEYS) += test_static_keys.o obj-$(CONFIG_TEST_STATIC_KEYS) += test_static_key_base.o obj-$(CONFIG_TEST_PRINTF) += test_printf.o +obj-$(CONFIG_TEST_BITMAP) += test_bitmap.o ifeq ($(CONFIG_DEBUG_KOBJECT),y) CFLAGS_kobject.o += -DDEBUG diff --git a/lib/test_bitmap.c b/lib/test_bitmap.c new file mode 100644 index 000..33e572a --- /dev/null +++ b/lib/test_bitmap.c @@ -0,0 +1,343 @@ +/* + * Test cases for printf facility. + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include +#include +#include +#include +#include + +static unsigned total_tests __initdata; +static unsigned failed_tests __initdata; + +static char pbl_buffer[PAGE_SIZE] __initdata; + + +static bool __init +__check_eq_bitmap(const unsigned long *exp_bmap, unsigned int exp_nbits, + const unsigned long *bmap, unsigned int nbits) +{ + if (exp_nbits != nbits) { + pr_warn("bitmap length mismatch: expected %u, got %u\n", + exp_nbits, nbits); + return false; + } + + if (!bitmap_equal(exp_bmap, bmap, nbits)) { + pr_warn("bitmaps contents differ: expected \"%*pbl\", got \"%*pbl\"\n", + exp_nbits, exp_bmap, nbits, bmap); + return false; + } + return true; +} + +static int __init +expect_eq_bitmap(const unsigned long *exp_bmap, unsigned int exp_nbits, + const unsigned long *bmap, unsigned int nbits) +{ + total_tests++; + if (!__check_eq_bitmap(exp_bmap, exp_nbits, bmap, nbits)) { + failed_tests++; + return 1; + } + return 0; +} + +static bool __init +__check_eq_pbl(const char *expected_pbl, + const unsigned long *bitmap, unsigned int nbits) +{ + snprintf(pbl_buffer, sizeof(pbl_buffer), "%*pbl", nbits, bitmap); + if (strcmp(expected_pbl, pbl_buffer)) { + pr_warn("expected \"%s\", got \"%s\"\n", + expected_pbl, pbl_buffer); + return false; + } + return true; +} + +static int __init +expect_eq_pbl(const char *expected_pbl, + const unsigned long *bitmap, unsigned int nbits) +{ + total_tests++; + if (!__check_eq_pbl(expected_pbl, bitmap, nbits)) { + failed_tests++; + return 1; + } + return 0; +} + +static bool __init +__check_eq_u32_array(const u32 *exp_arr, unsigned int exp_len, +const u32 *arr, unsigned int len) +{ + if (exp_len != len) { + pr_warn("array length differ: expected %u, got %u\n", + exp_len, len); + return false; + } + + if (memcmp(exp_arr, arr, len*sizeof(*arr))) { + pr_warn("array contents differ\n"); + print_hex_dump(KERN_WARNING, " exp: ", DUMP_PREFIX_OFFSET, + 32, 4, exp_arr, exp_len*sizeof(*exp_arr), false); + print_hex_dump(KERN_WARNING, " got: ", DUMP_PREFIX_OFFSET, + 32, 4, arr, len*sizeof(*arr), false); + return false; + } + + return true; +} + +static int __init +expect_eq_u32_array(const u32 *exp_arr, unsigned int exp_len, + const u32 *arr, unsigned int len) +{ + total_tests++; + if (!__check_eq_u32_array(exp_arr, exp_len, arr, len)) { + failed_tests++; + return 1; + } + return 0; +} + +static void __init test_zero_fill_copy(void) +{ + DECLARE_BITMAP(bmap1, 1024); +
[PATCH net-next v5 02/19] test_bitmap: unit tests for lib/bitmap.c
From: David DecotignyThis is mainly testing bitmap construction and conversion to/from u32[] for now. Tested: qemu i386, x86_64, ppc, ppc64 BE and LE, ARM. Signed-off-by: David Decotigny --- lib/Kconfig.debug | 8 + lib/Makefile | 1 + lib/test_bitmap.c | 343 ++ tools/testing/selftests/lib/Makefile | 2 +- tools/testing/selftests/lib/bitmap.sh | 10 + 5 files changed, 363 insertions(+), 1 deletion(-) create mode 100644 lib/test_bitmap.c create mode 100644 tools/testing/selftests/lib/bitmap.sh diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 0d76ecc..3d25bdf 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -1721,6 +1721,14 @@ config TEST_KSTRTOX config TEST_PRINTF tristate "Test printf() family of functions at runtime" +config TEST_BITMAP + tristate "Test bitmap_*() family of functions at runtime" + default n + help + Enable this option to test the bitmap functions at boot. + + If unsure, say N. + config TEST_RHASHTABLE tristate "Perform selftest on resizable hash table" default n diff --git a/lib/Makefile b/lib/Makefile index 180dd4d..ba6b7fe 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -43,6 +43,7 @@ obj-$(CONFIG_TEST_USER_COPY) += test_user_copy.o obj-$(CONFIG_TEST_STATIC_KEYS) += test_static_keys.o obj-$(CONFIG_TEST_STATIC_KEYS) += test_static_key_base.o obj-$(CONFIG_TEST_PRINTF) += test_printf.o +obj-$(CONFIG_TEST_BITMAP) += test_bitmap.o ifeq ($(CONFIG_DEBUG_KOBJECT),y) CFLAGS_kobject.o += -DDEBUG diff --git a/lib/test_bitmap.c b/lib/test_bitmap.c new file mode 100644 index 000..33e572a --- /dev/null +++ b/lib/test_bitmap.c @@ -0,0 +1,343 @@ +/* + * Test cases for printf facility. + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include +#include +#include +#include +#include + +static unsigned total_tests __initdata; +static unsigned failed_tests __initdata; + +static char pbl_buffer[PAGE_SIZE] __initdata; + + +static bool __init +__check_eq_bitmap(const unsigned long *exp_bmap, unsigned int exp_nbits, + const unsigned long *bmap, unsigned int nbits) +{ + if (exp_nbits != nbits) { + pr_warn("bitmap length mismatch: expected %u, got %u\n", + exp_nbits, nbits); + return false; + } + + if (!bitmap_equal(exp_bmap, bmap, nbits)) { + pr_warn("bitmaps contents differ: expected \"%*pbl\", got \"%*pbl\"\n", + exp_nbits, exp_bmap, nbits, bmap); + return false; + } + return true; +} + +static int __init +expect_eq_bitmap(const unsigned long *exp_bmap, unsigned int exp_nbits, + const unsigned long *bmap, unsigned int nbits) +{ + total_tests++; + if (!__check_eq_bitmap(exp_bmap, exp_nbits, bmap, nbits)) { + failed_tests++; + return 1; + } + return 0; +} + +static bool __init +__check_eq_pbl(const char *expected_pbl, + const unsigned long *bitmap, unsigned int nbits) +{ + snprintf(pbl_buffer, sizeof(pbl_buffer), "%*pbl", nbits, bitmap); + if (strcmp(expected_pbl, pbl_buffer)) { + pr_warn("expected \"%s\", got \"%s\"\n", + expected_pbl, pbl_buffer); + return false; + } + return true; +} + +static int __init +expect_eq_pbl(const char *expected_pbl, + const unsigned long *bitmap, unsigned int nbits) +{ + total_tests++; + if (!__check_eq_pbl(expected_pbl, bitmap, nbits)) { + failed_tests++; + return 1; + } + return 0; +} + +static bool __init +__check_eq_u32_array(const u32 *exp_arr, unsigned int exp_len, +const u32 *arr, unsigned int len) +{ + if (exp_len != len) { + pr_warn("array length differ: expected %u, got %u\n", + exp_len, len); + return false; + } + + if (memcmp(exp_arr, arr, len*sizeof(*arr))) { + pr_warn("array contents differ\n"); + print_hex_dump(KERN_WARNING, " exp: ", DUMP_PREFIX_OFFSET, + 32, 4, exp_arr, exp_len*sizeof(*exp_arr), false); + print_hex_dump(KERN_WARNING, " got: ", DUMP_PREFIX_OFFSET, + 32, 4, arr, len*sizeof(*arr), false); + return false; + } + + return true; +} + +static int __init +expect_eq_u32_array(const u32 *exp_arr, unsigned int exp_len, + const u32 *arr, unsigned int len) +{ + total_tests++; + if (!__check_eq_u32_array(exp_arr, exp_len, arr, len)) { + failed_tests++; + return 1; + } + return 0; +} + +static void __init test_zero_fill_copy(void) +{ +