tools/testing/scatterlist: Show errors in human readable form
authorTvrtko Ursulin <tvrtko.ursulin@intel.com>
Sun, 4 Oct 2020 15:43:39 +0000 (18:43 +0300)
committerJason Gunthorpe <jgg@nvidia.com>
Mon, 5 Oct 2020 23:45:45 +0000 (20:45 -0300)
Instead of just asserting dump some more useful info about what the test
saw versus what it expected to see.

Link: https://lore.kernel.org/r/20201004154340.1080481-4-leon@kernel.org
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Maor Gottlieb <maorg@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
tools/testing/scatterlist/main.c

index 0a1464181226214b1b908e6bf7e3c9f25a093f17..c6db0a1989b23d43525bec83fdfc7a6c1aae71c8 100644 (file)
@@ -5,6 +5,15 @@
 
 #define MAX_PAGES (64)
 
+struct test {
+       int alloc_ret;
+       unsigned num_pages;
+       unsigned *pfn;
+       unsigned size;
+       unsigned int max_seg;
+       unsigned int expected_segments;
+};
+
 static void set_pages(struct page **pages, const unsigned *array, unsigned num)
 {
        unsigned int i;
@@ -17,17 +26,32 @@ static void set_pages(struct page **pages, const unsigned *array, unsigned num)
 
 #define pfn(...) (unsigned []){ __VA_ARGS__ }
 
+static void fail(struct test *test, struct sg_table *st, const char *cond)
+{
+       unsigned int i;
+
+       fprintf(stderr, "Failed on '%s'!\n\n", cond);
+
+       printf("size = %u, max segment = %u, expected nents = %u\nst->nents = %u, st->orig_nents= %u\n",
+              test->size, test->max_seg, test->expected_segments, st->nents,
+              st->orig_nents);
+
+       printf("%u input PFNs:", test->num_pages);
+       for (i = 0; i < test->num_pages; i++)
+               printf(" %x", test->pfn[i]);
+       printf("\n");
+
+       exit(1);
+}
+
+#define VALIDATE(cond, st, test) \
+       if (!(cond)) \
+               fail((test), (st), #cond);
+
 int main(void)
 {
        const unsigned int sgmax = SCATTERLIST_MAX_SEGMENT;
-       struct test {
-               int alloc_ret;
-               unsigned num_pages;
-               unsigned *pfn;
-               unsigned size;
-               unsigned int max_seg;
-               unsigned int expected_segments;
-       } *test, tests[] = {
+       struct test *test, tests[] = {
                { -EINVAL, 1, pfn(0), PAGE_SIZE, PAGE_SIZE + 1, 1 },
                { -EINVAL, 1, pfn(0), PAGE_SIZE, 0, 1 },
                { -EINVAL, 1, pfn(0), PAGE_SIZE, sgmax + 1, 1 },
@@ -67,8 +91,8 @@ int main(void)
                if (test->alloc_ret)
                        continue;
 
-               assert(st.nents == test->expected_segments);
-               assert(st.orig_nents == test->expected_segments);
+               VALIDATE(st.nents == test->expected_segments, &st, test);
+               VALIDATE(st.orig_nents == test->expected_segments, &st, test);
 
                sg_free_table(&st);
        }