diff mbox series

[v2,1/4] kunit: Support skipped tests

Message ID 20210528075932.347154-1-davidgow@google.com (mailing list archive)
State Superseded, archived
Delegated to: Brendan Higgins
Headers show
Series [v2,1/4] kunit: Support skipped tests | expand

Commit Message

David Gow May 28, 2021, 7:59 a.m. UTC
The kunit_mark_skipped() macro marks the current test as "skipped", with
the provided reason. The kunit_skip() macro will mark the test as
skipped, and abort the test.

The TAP specification supports this "SKIP directive" as a comment after
the "ok" / "not ok" for a test. See the "Directives" section of the TAP
spec for details:
https://testanything.org/tap-specification.html#directives

The 'success' field for KUnit tests is replaced with a kunit_status
enum, which can be SUCCESS, FAILURE, or SKIPPED, combined with a
'status_comment' containing information on why a test was skipped.

A new 'kunit_status' test suite is added to test this.

Signed-off-by: David Gow <davidgow@google.com>
Tested-by: Marco Elver <elver@google.com>
Reviewed-by: Daniel Latypov <dlatypov@google.com>
---

Changes since v1:
https://lore.kernel.org/linux-kselftest/20210526081112.3652290-1-davidgow@google.com/
- Renamed kunit_status_to_string() to kunit_status_to_ok_not_ok
- Fixed incorrect printing of status comments on non-skipped tests.

Not changes:
- Still using kunit_log(KERN_INFO,...) instead of kunit_info() as it
  seems to be consistently used for printing results in the KUnit code.

 include/kunit/test.h   | 68 ++++++++++++++++++++++++++++++++++++++----
 lib/kunit/kunit-test.c | 42 +++++++++++++++++++++++++-
 lib/kunit/test.c       | 51 ++++++++++++++++++-------------
 3 files changed, 134 insertions(+), 27 deletions(-)

Comments

kernel test robot May 28, 2021, 9:46 a.m. UTC | #1
Hi David,

I love your patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[also build test WARNING on v5.13-rc3 next-20210527]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/David-Gow/kunit-Support-skipped-tests/20210528-160224
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 97e5bf604b7a0d6e1b3e00fe31d5fd4b9bffeaae
config: i386-randconfig-s001-20210528 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.3-341-g8af24329-dirty
        # https://github.com/0day-ci/linux/commit/a464519206cd4484f64540020093cb45ef8e272e
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review David-Gow/kunit-Support-skipped-tests/20210528-160224
        git checkout a464519206cd4484f64540020093cb45ef8e272e
        # save the attached .config to linux build tree
        make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=i386 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   lib/kunit/debugfs.c:28:6: warning: no previous prototype for 'kunit_debugfs_cleanup' [-Wmissing-prototypes]
      28 | void kunit_debugfs_cleanup(void)
         |      ^~~~~~~~~~~~~~~~~~~~~
   lib/kunit/debugfs.c:33:6: warning: no previous prototype for 'kunit_debugfs_init' [-Wmissing-prototypes]
      33 | void kunit_debugfs_init(void)
         |      ^~~~~~~~~~~~~~~~~~
   lib/kunit/debugfs.c: In function 'debugfs_print_results':
   lib/kunit/debugfs.c:67:6: error: implicit declaration of function 'kunit_status_to_string'; did you mean 'kunit_status_to_ok_not_ok'? [-Werror=implicit-function-declaration]
      67 |      kunit_status_to_string(success), 1, suite->name);
         |      ^~~~~~~~~~~~~~~~~~~~~~
         |      kunit_status_to_ok_not_ok
>> lib/kunit/debugfs.c:66:20: warning: format '%s' expects argument of type 'char *', but argument 3 has type 'int' [-Wformat=]
      66 |  seq_printf(seq, "%s %d - %s\n",
         |                   ~^
         |                    |
         |                    char *
         |                   %d
      67 |      kunit_status_to_string(success), 1, suite->name);
         |      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |      |
         |      int
   lib/kunit/debugfs.c: At top level:
   lib/kunit/debugfs.c:92:6: warning: no previous prototype for 'kunit_debugfs_create_suite' [-Wmissing-prototypes]
      92 | void kunit_debugfs_create_suite(struct kunit_suite *suite)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~
   lib/kunit/debugfs.c:108:6: warning: no previous prototype for 'kunit_debugfs_destroy_suite' [-Wmissing-prototypes]
     108 | void kunit_debugfs_destroy_suite(struct kunit_suite *suite)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors


vim +66 lib/kunit/debugfs.c

e2219db280e3fe Alan Maguire 2020-03-26  48  
e2219db280e3fe Alan Maguire 2020-03-26  49  /*
e2219db280e3fe Alan Maguire 2020-03-26  50   * /sys/kernel/debug/kunit/<testsuite>/results shows all results for testsuite.
e2219db280e3fe Alan Maguire 2020-03-26  51   */
e2219db280e3fe Alan Maguire 2020-03-26  52  static int debugfs_print_results(struct seq_file *seq, void *v)
e2219db280e3fe Alan Maguire 2020-03-26  53  {
e2219db280e3fe Alan Maguire 2020-03-26  54  	struct kunit_suite *suite = (struct kunit_suite *)seq->private;
e2219db280e3fe Alan Maguire 2020-03-26  55  	bool success = kunit_suite_has_succeeded(suite);
e2219db280e3fe Alan Maguire 2020-03-26  56  	struct kunit_case *test_case;
e2219db280e3fe Alan Maguire 2020-03-26  57  
e2219db280e3fe Alan Maguire 2020-03-26  58  	if (!suite || !suite->log)
e2219db280e3fe Alan Maguire 2020-03-26  59  		return 0;
e2219db280e3fe Alan Maguire 2020-03-26  60  
e2219db280e3fe Alan Maguire 2020-03-26  61  	seq_printf(seq, "%s", suite->log);
e2219db280e3fe Alan Maguire 2020-03-26  62  
e2219db280e3fe Alan Maguire 2020-03-26  63  	kunit_suite_for_each_test_case(suite, test_case)
e2219db280e3fe Alan Maguire 2020-03-26  64  		debugfs_print_result(seq, suite, test_case);
e2219db280e3fe Alan Maguire 2020-03-26  65  
e2219db280e3fe Alan Maguire 2020-03-26 @66  	seq_printf(seq, "%s %d - %s\n",
e2219db280e3fe Alan Maguire 2020-03-26  67  		   kunit_status_to_string(success), 1, suite->name);
e2219db280e3fe Alan Maguire 2020-03-26  68  	return 0;
e2219db280e3fe Alan Maguire 2020-03-26  69  }
e2219db280e3fe Alan Maguire 2020-03-26  70  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
kernel test robot May 28, 2021, 9:59 a.m. UTC | #2
Hi David,

I love your patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v5.13-rc3 next-20210527]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/David-Gow/kunit-Support-skipped-tests/20210528-160224
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 97e5bf604b7a0d6e1b3e00fe31d5fd4b9bffeaae
config: x86_64-rhel-8.3 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce (this is a W=1 build):
        # https://github.com/0day-ci/linux/commit/a464519206cd4484f64540020093cb45ef8e272e
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review David-Gow/kunit-Support-skipped-tests/20210528-160224
        git checkout a464519206cd4484f64540020093cb45ef8e272e
        # save the attached .config to linux build tree
        make W=1 ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   In file included from include/linux/kernel.h:15,
                    from include/kunit/assert.h:13,
                    from include/kunit/test.h:12,
                    from lib/kunit/kunit-test.c:8:
   lib/kunit/kunit-test.c: In function 'kunit_status_mark_skipped_test':
   include/linux/minmax.h:20:28: warning: comparison of distinct pointer types lacks a cast
      20 |  (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
         |                            ^~
   include/kunit/test.h:834:9: note: in expansion of macro '__typecheck'
     834 |  ((void)__typecheck(__left, __right));           \
         |         ^~~~~~~~~~~
   include/kunit/test.h:858:2: note: in expansion of macro 'KUNIT_BASE_BINARY_ASSERTION'
     858 |  KUNIT_BASE_BINARY_ASSERTION(test,           \
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/kunit/test.h:947:2: note: in expansion of macro 'KUNIT_BASE_EQ_MSG_ASSERTION'
     947 |  KUNIT_BASE_EQ_MSG_ASSERTION(test,           \
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/kunit/test.h:957:2: note: in expansion of macro 'KUNIT_BINARY_EQ_MSG_ASSERTION'
     957 |  KUNIT_BINARY_EQ_MSG_ASSERTION(test,           \
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/kunit/test.h:1320:2: note: in expansion of macro 'KUNIT_BINARY_EQ_ASSERTION'
    1320 |  KUNIT_BINARY_EQ_ASSERTION(test, KUNIT_EXPECTATION, left, right)
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~
   lib/kunit/kunit-test.c:458:2: note: in expansion of macro 'KUNIT_EXPECT_EQ'
     458 |  KUNIT_EXPECT_EQ(test, fake.status, KUNIT_SUCCESS);
         |  ^~~~~~~~~~~~~~~
   In file included from lib/kunit/kunit-test.c:8:
>> include/kunit/test.h:1188:24: error: invalid initializer
    1188 |  typeof(left) __left = (left);            \
         |                        ^
   include/kunit/test.h:1211:2: note: in expansion of macro 'KUNIT_BINARY_STR_ASSERTION'
    1211 |  KUNIT_BINARY_STR_ASSERTION(test,           \
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~
   include/kunit/test.h:1218:2: note: in expansion of macro 'KUNIT_BINARY_STR_EQ_MSG_ASSERTION'
    1218 |  KUNIT_BINARY_STR_EQ_MSG_ASSERTION(test,           \
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/kunit/test.h:1502:2: note: in expansion of macro 'KUNIT_BINARY_STR_EQ_ASSERTION'
    1502 |  KUNIT_BINARY_STR_EQ_ASSERTION(test, KUNIT_EXPECTATION, left, right)
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   lib/kunit/kunit-test.c:459:2: note: in expansion of macro 'KUNIT_EXPECT_STREQ'
     459 |  KUNIT_EXPECT_STREQ(test, fake.status_comment, "");
         |  ^~~~~~~~~~~~~~~~~~
>> include/kunit/test.h:1188:24: error: invalid initializer
    1188 |  typeof(left) __left = (left);            \
         |                        ^
   include/kunit/test.h:1211:2: note: in expansion of macro 'KUNIT_BINARY_STR_ASSERTION'
    1211 |  KUNIT_BINARY_STR_ASSERTION(test,           \
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~
   include/kunit/test.h:1218:2: note: in expansion of macro 'KUNIT_BINARY_STR_EQ_MSG_ASSERTION'
    1218 |  KUNIT_BINARY_STR_EQ_MSG_ASSERTION(test,           \
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/kunit/test.h:1502:2: note: in expansion of macro 'KUNIT_BINARY_STR_EQ_ASSERTION'
    1502 |  KUNIT_BINARY_STR_EQ_ASSERTION(test, KUNIT_EXPECTATION, left, right)
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   lib/kunit/kunit-test.c:466:2: note: in expansion of macro 'KUNIT_EXPECT_STREQ'
     466 |  KUNIT_EXPECT_STREQ(test, fake.status_comment, "Accepts format string: YES");
         |  ^~~~~~~~~~~~~~~~~~


vim +1188 include/kunit/test.h

73cda7bb8bfb1d Brendan Higgins 2019-09-23   849  
73cda7bb8bfb1d Brendan Higgins 2019-09-23   850  #define KUNIT_BASE_EQ_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   851  				    assert_class,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   852  				    ASSERT_CLASS_INIT,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   853  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   854  				    left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   855  				    right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   856  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   857  				    ...)				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   858  	KUNIT_BASE_BINARY_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   859  				    assert_class,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   860  				    ASSERT_CLASS_INIT,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   861  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   862  				    left, ==, right,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   863  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   864  				    ##__VA_ARGS__)
73cda7bb8bfb1d Brendan Higgins 2019-09-23   865  
73cda7bb8bfb1d Brendan Higgins 2019-09-23   866  #define KUNIT_BASE_NE_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   867  				    assert_class,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   868  				    ASSERT_CLASS_INIT,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   869  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   870  				    left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   871  				    right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   872  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   873  				    ...)				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   874  	KUNIT_BASE_BINARY_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   875  				    assert_class,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   876  				    ASSERT_CLASS_INIT,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   877  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   878  				    left, !=, right,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   879  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   880  				    ##__VA_ARGS__)
73cda7bb8bfb1d Brendan Higgins 2019-09-23   881  
73cda7bb8bfb1d Brendan Higgins 2019-09-23   882  #define KUNIT_BASE_LT_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   883  				    assert_class,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   884  				    ASSERT_CLASS_INIT,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   885  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   886  				    left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   887  				    right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   888  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   889  				    ...)				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   890  	KUNIT_BASE_BINARY_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   891  				    assert_class,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   892  				    ASSERT_CLASS_INIT,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   893  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   894  				    left, <, right,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   895  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   896  				    ##__VA_ARGS__)
73cda7bb8bfb1d Brendan Higgins 2019-09-23   897  
73cda7bb8bfb1d Brendan Higgins 2019-09-23   898  #define KUNIT_BASE_LE_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   899  				    assert_class,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   900  				    ASSERT_CLASS_INIT,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   901  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   902  				    left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   903  				    right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   904  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   905  				    ...)				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   906  	KUNIT_BASE_BINARY_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   907  				    assert_class,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   908  				    ASSERT_CLASS_INIT,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   909  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   910  				    left, <=, right,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   911  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   912  				    ##__VA_ARGS__)
73cda7bb8bfb1d Brendan Higgins 2019-09-23   913  
73cda7bb8bfb1d Brendan Higgins 2019-09-23   914  #define KUNIT_BASE_GT_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   915  				    assert_class,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   916  				    ASSERT_CLASS_INIT,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   917  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   918  				    left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   919  				    right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   920  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   921  				    ...)				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   922  	KUNIT_BASE_BINARY_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   923  				    assert_class,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   924  				    ASSERT_CLASS_INIT,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   925  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   926  				    left, >, right,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   927  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   928  				    ##__VA_ARGS__)
73cda7bb8bfb1d Brendan Higgins 2019-09-23   929  
73cda7bb8bfb1d Brendan Higgins 2019-09-23   930  #define KUNIT_BASE_GE_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   931  				    assert_class,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   932  				    ASSERT_CLASS_INIT,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   933  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   934  				    left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   935  				    right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   936  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   937  				    ...)				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   938  	KUNIT_BASE_BINARY_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   939  				    assert_class,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   940  				    ASSERT_CLASS_INIT,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   941  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   942  				    left, >=, right,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   943  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   944  				    ##__VA_ARGS__)
73cda7bb8bfb1d Brendan Higgins 2019-09-23   945  
73cda7bb8bfb1d Brendan Higgins 2019-09-23   946  #define KUNIT_BINARY_EQ_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
73cda7bb8bfb1d Brendan Higgins 2019-09-23   947  	KUNIT_BASE_EQ_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   948  				    kunit_binary_assert,		       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   949  				    KUNIT_INIT_BINARY_ASSERT_STRUCT,	       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   950  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   951  				    left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   952  				    right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   953  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   954  				    ##__VA_ARGS__)
73cda7bb8bfb1d Brendan Higgins 2019-09-23   955  
73cda7bb8bfb1d Brendan Higgins 2019-09-23   956  #define KUNIT_BINARY_EQ_ASSERTION(test, assert_type, left, right)	       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   957  	KUNIT_BINARY_EQ_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   958  				      assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   959  				      left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   960  				      right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   961  				      NULL)
73cda7bb8bfb1d Brendan Higgins 2019-09-23   962  
73cda7bb8bfb1d Brendan Higgins 2019-09-23   963  #define KUNIT_BINARY_PTR_EQ_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   964  					  assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   965  					  left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   966  					  right,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   967  					  fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   968  					  ...)				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   969  	KUNIT_BASE_EQ_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   970  				    kunit_binary_ptr_assert,		       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   971  				    KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT,       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   972  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   973  				    left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   974  				    right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   975  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   976  				    ##__VA_ARGS__)
73cda7bb8bfb1d Brendan Higgins 2019-09-23   977  
73cda7bb8bfb1d Brendan Higgins 2019-09-23   978  #define KUNIT_BINARY_PTR_EQ_ASSERTION(test, assert_type, left, right)	       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   979  	KUNIT_BINARY_PTR_EQ_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   980  					  assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   981  					  left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   982  					  right,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   983  					  NULL)
73cda7bb8bfb1d Brendan Higgins 2019-09-23   984  
73cda7bb8bfb1d Brendan Higgins 2019-09-23   985  #define KUNIT_BINARY_NE_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
73cda7bb8bfb1d Brendan Higgins 2019-09-23   986  	KUNIT_BASE_NE_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   987  				    kunit_binary_assert,		       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   988  				    KUNIT_INIT_BINARY_ASSERT_STRUCT,	       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   989  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   990  				    left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   991  				    right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   992  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   993  				    ##__VA_ARGS__)
73cda7bb8bfb1d Brendan Higgins 2019-09-23   994  
73cda7bb8bfb1d Brendan Higgins 2019-09-23   995  #define KUNIT_BINARY_NE_ASSERTION(test, assert_type, left, right)	       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   996  	KUNIT_BINARY_NE_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   997  				      assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   998  				      left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23   999  				      right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1000  				      NULL)
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1001  
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1002  #define KUNIT_BINARY_PTR_NE_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1003  					  assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1004  					  left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1005  					  right,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1006  					  fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1007  					  ...)				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1008  	KUNIT_BASE_NE_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1009  				    kunit_binary_ptr_assert,		       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1010  				    KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT,       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1011  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1012  				    left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1013  				    right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1014  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1015  				    ##__VA_ARGS__)
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1016  
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1017  #define KUNIT_BINARY_PTR_NE_ASSERTION(test, assert_type, left, right)	       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1018  	KUNIT_BINARY_PTR_NE_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1019  					  assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1020  					  left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1021  					  right,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1022  					  NULL)
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1023  
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1024  #define KUNIT_BINARY_LT_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1025  	KUNIT_BASE_LT_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1026  				    kunit_binary_assert,		       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1027  				    KUNIT_INIT_BINARY_ASSERT_STRUCT,	       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1028  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1029  				    left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1030  				    right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1031  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1032  				    ##__VA_ARGS__)
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1033  
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1034  #define KUNIT_BINARY_LT_ASSERTION(test, assert_type, left, right)	       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1035  	KUNIT_BINARY_LT_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1036  				      assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1037  				      left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1038  				      right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1039  				      NULL)
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1040  
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1041  #define KUNIT_BINARY_PTR_LT_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1042  					  assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1043  					  left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1044  					  right,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1045  					  fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1046  					  ...)				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1047  	KUNIT_BASE_LT_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1048  				    kunit_binary_ptr_assert,		       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1049  				    KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT,       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1050  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1051  				    left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1052  				    right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1053  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1054  				    ##__VA_ARGS__)
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1055  
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1056  #define KUNIT_BINARY_PTR_LT_ASSERTION(test, assert_type, left, right)	       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1057  	KUNIT_BINARY_PTR_LT_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1058  					  assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1059  					  left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1060  					  right,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1061  					  NULL)
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1062  
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1063  #define KUNIT_BINARY_LE_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1064  	KUNIT_BASE_LE_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1065  				    kunit_binary_assert,		       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1066  				    KUNIT_INIT_BINARY_ASSERT_STRUCT,	       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1067  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1068  				    left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1069  				    right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1070  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1071  				    ##__VA_ARGS__)
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1072  
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1073  #define KUNIT_BINARY_LE_ASSERTION(test, assert_type, left, right)	       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1074  	KUNIT_BINARY_LE_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1075  				      assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1076  				      left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1077  				      right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1078  				      NULL)
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1079  
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1080  #define KUNIT_BINARY_PTR_LE_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1081  					  assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1082  					  left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1083  					  right,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1084  					  fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1085  					  ...)				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1086  	KUNIT_BASE_LE_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1087  				    kunit_binary_ptr_assert,		       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1088  				    KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT,       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1089  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1090  				    left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1091  				    right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1092  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1093  				    ##__VA_ARGS__)
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1094  
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1095  #define KUNIT_BINARY_PTR_LE_ASSERTION(test, assert_type, left, right)	       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1096  	KUNIT_BINARY_PTR_LE_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1097  					  assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1098  					  left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1099  					  right,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1100  					  NULL)
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1101  
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1102  #define KUNIT_BINARY_GT_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1103  	KUNIT_BASE_GT_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1104  				    kunit_binary_assert,		       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1105  				    KUNIT_INIT_BINARY_ASSERT_STRUCT,	       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1106  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1107  				    left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1108  				    right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1109  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1110  				    ##__VA_ARGS__)
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1111  
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1112  #define KUNIT_BINARY_GT_ASSERTION(test, assert_type, left, right)	       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1113  	KUNIT_BINARY_GT_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1114  				      assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1115  				      left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1116  				      right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1117  				      NULL)
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1118  
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1119  #define KUNIT_BINARY_PTR_GT_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1120  					  assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1121  					  left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1122  					  right,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1123  					  fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1124  					  ...)				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1125  	KUNIT_BASE_GT_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1126  				    kunit_binary_ptr_assert,		       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1127  				    KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT,       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1128  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1129  				    left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1130  				    right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1131  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1132  				    ##__VA_ARGS__)
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1133  
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1134  #define KUNIT_BINARY_PTR_GT_ASSERTION(test, assert_type, left, right)	       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1135  	KUNIT_BINARY_PTR_GT_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1136  					  assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1137  					  left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1138  					  right,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1139  					  NULL)
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1140  
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1141  #define KUNIT_BINARY_GE_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1142  	KUNIT_BASE_GE_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1143  				    kunit_binary_assert,		       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1144  				    KUNIT_INIT_BINARY_ASSERT_STRUCT,	       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1145  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1146  				    left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1147  				    right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1148  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1149  				    ##__VA_ARGS__)
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1150  
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1151  #define KUNIT_BINARY_GE_ASSERTION(test, assert_type, left, right)	       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1152  	KUNIT_BINARY_GE_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1153  				      assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1154  				      left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1155  				      right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1156  				      NULL)
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1157  
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1158  #define KUNIT_BINARY_PTR_GE_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1159  					  assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1160  					  left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1161  					  right,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1162  					  fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1163  					  ...)				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1164  	KUNIT_BASE_GE_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1165  				    kunit_binary_ptr_assert,		       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1166  				    KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT,       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1167  				    assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1168  				    left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1169  				    right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1170  				    fmt,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1171  				    ##__VA_ARGS__)
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1172  
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1173  #define KUNIT_BINARY_PTR_GE_ASSERTION(test, assert_type, left, right)	       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1174  	KUNIT_BINARY_PTR_GE_MSG_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1175  					  assert_type,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1176  					  left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1177  					  right,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1178  					  NULL)
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1179  
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1180  #define KUNIT_BINARY_STR_ASSERTION(test,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1181  				   assert_type,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1182  				   left,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1183  				   op,					       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1184  				   right,				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1185  				   fmt,					       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1186  				   ...)					       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1187  do {									       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23 @1188  	typeof(left) __left = (left);					       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1189  	typeof(right) __right = (right);				       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1190  									       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1191  	KUNIT_ASSERTION(test,						       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1192  			strcmp(__left, __right) op 0,			       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1193  			kunit_binary_str_assert,			       \
3084db0e0d5076 Daniel Latypov  2020-11-02  1194  			KUNIT_INIT_BINARY_STR_ASSERT_STRUCT(test,	       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1195  							assert_type,	       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1196  							#op,		       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1197  							#left,		       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1198  							__left,		       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1199  							#right,		       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1200  							__right),	       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1201  			fmt,						       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1202  			##__VA_ARGS__);					       \
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1203  } while (0)
73cda7bb8bfb1d Brendan Higgins 2019-09-23  1204  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Brendan Higgins June 4, 2021, 9:04 p.m. UTC | #3
On Fri, May 28, 2021 at 12:59 AM David Gow <davidgow@google.com> wrote:
>
> The kunit_mark_skipped() macro marks the current test as "skipped", with
> the provided reason. The kunit_skip() macro will mark the test as
> skipped, and abort the test.
>
> The TAP specification supports this "SKIP directive" as a comment after
> the "ok" / "not ok" for a test. See the "Directives" section of the TAP
> spec for details:
> https://testanything.org/tap-specification.html#directives
>
> The 'success' field for KUnit tests is replaced with a kunit_status
> enum, which can be SUCCESS, FAILURE, or SKIPPED, combined with a
> 'status_comment' containing information on why a test was skipped.
>
> A new 'kunit_status' test suite is added to test this.
>
> Signed-off-by: David Gow <davidgow@google.com>
> Tested-by: Marco Elver <elver@google.com>
> Reviewed-by: Daniel Latypov <dlatypov@google.com>

One fairly minor nit below. Other than that, looks great!

Reviewed-by: Brendan Higgins <brendanhiggins@google.com>

> ---

[...]

> diff --git a/include/kunit/test.h b/include/kunit/test.h
> index b68c61348121..1401c620ac5e 100644
> --- a/include/kunit/test.h
> +++ b/include/kunit/test.h
> @@ -105,6 +105,18 @@ struct kunit;
>  #define KUNIT_SUBTEST_INDENT           "    "
>  #define KUNIT_SUBSUBTEST_INDENT                "        "
>
> +/**
> + * enum kunit_status - Type of result for a test or test suite
> + * @KUNIT_SUCCESS: Denotes the test suite has not failed nor been skipped
> + * @KUNIT_FAILURE: Denotes the test has failed.
> + * @KUNIT_SKIPPED: Denotes the test has been skipped.
> + */
> +enum kunit_status {
> +       KUNIT_SUCCESS,
> +       KUNIT_FAILURE,
> +       KUNIT_SKIPPED,
> +};
> +
>  /**
>   * struct kunit_case - represents an individual test case.
>   *
> @@ -148,13 +160,20 @@ struct kunit_case {
>         const void* (*generate_params)(const void *prev, char *desc);
>
>         /* private: internal use only. */
> -       bool success;
> +       enum kunit_status status;
>         char *log;
>  };
>
> -static inline char *kunit_status_to_string(bool status)
> +static inline char *kunit_status_to_ok_not_ok(enum kunit_status status)
>  {
> -       return status ? "ok" : "not ok";
> +       switch (status) {
> +       case KUNIT_SKIPPED:
> +       case KUNIT_SUCCESS:
> +               return "ok";
> +       case KUNIT_FAILURE:
> +               return "not ok";
> +       }
> +       return "invalid";
>  }
>
>  /**
> @@ -212,6 +231,7 @@ struct kunit_suite {
>         struct kunit_case *test_cases;
>
>         /* private: internal use only */
> +       char status_comment[256];

nit: How about we make the 256 a constant since you use it in a number
of places?

If not, at least when you reference the struct, you might want to use
ARRAY_SIZE(...).

>         struct dentry *debugfs;
>         char *log;
>  };
[...]
diff mbox series

Patch

diff --git a/include/kunit/test.h b/include/kunit/test.h
index b68c61348121..1401c620ac5e 100644
--- a/include/kunit/test.h
+++ b/include/kunit/test.h
@@ -105,6 +105,18 @@  struct kunit;
 #define KUNIT_SUBTEST_INDENT		"    "
 #define KUNIT_SUBSUBTEST_INDENT		"        "
 
+/**
+ * enum kunit_status - Type of result for a test or test suite
+ * @KUNIT_SUCCESS: Denotes the test suite has not failed nor been skipped
+ * @KUNIT_FAILURE: Denotes the test has failed.
+ * @KUNIT_SKIPPED: Denotes the test has been skipped.
+ */
+enum kunit_status {
+	KUNIT_SUCCESS,
+	KUNIT_FAILURE,
+	KUNIT_SKIPPED,
+};
+
 /**
  * struct kunit_case - represents an individual test case.
  *
@@ -148,13 +160,20 @@  struct kunit_case {
 	const void* (*generate_params)(const void *prev, char *desc);
 
 	/* private: internal use only. */
-	bool success;
+	enum kunit_status status;
 	char *log;
 };
 
-static inline char *kunit_status_to_string(bool status)
+static inline char *kunit_status_to_ok_not_ok(enum kunit_status status)
 {
-	return status ? "ok" : "not ok";
+	switch (status) {
+	case KUNIT_SKIPPED:
+	case KUNIT_SUCCESS:
+		return "ok";
+	case KUNIT_FAILURE:
+		return "not ok";
+	}
+	return "invalid";
 }
 
 /**
@@ -212,6 +231,7 @@  struct kunit_suite {
 	struct kunit_case *test_cases;
 
 	/* private: internal use only */
+	char status_comment[256];
 	struct dentry *debugfs;
 	char *log;
 };
@@ -245,19 +265,21 @@  struct kunit {
 	 * be read after the test case finishes once all threads associated
 	 * with the test case have terminated.
 	 */
-	bool success; /* Read only after test_case finishes! */
 	spinlock_t lock; /* Guards all mutable test state. */
+	enum kunit_status status; /* Read only after test_case finishes! */
 	/*
 	 * Because resources is a list that may be updated multiple times (with
 	 * new resources) from any thread associated with a test case, we must
 	 * protect it with some type of lock.
 	 */
 	struct list_head resources; /* Protected by lock. */
+
+	char status_comment[256];
 };
 
 static inline void kunit_set_failure(struct kunit *test)
 {
-	WRITE_ONCE(test->success, false);
+	WRITE_ONCE(test->status, KUNIT_FAILURE);
 }
 
 void kunit_init_test(struct kunit *test, const char *name, char *log);
@@ -348,7 +370,7 @@  static inline int kunit_run_all_tests(void)
 #define kunit_suite_for_each_test_case(suite, test_case)		\
 	for (test_case = suite->test_cases; test_case->run_case; test_case++)
 
-bool kunit_suite_has_succeeded(struct kunit_suite *suite);
+enum kunit_status kunit_suite_has_succeeded(struct kunit_suite *suite);
 
 /*
  * Like kunit_alloc_resource() below, but returns the struct kunit_resource
@@ -612,6 +634,40 @@  void kunit_cleanup(struct kunit *test);
 
 void kunit_log_append(char *log, const char *fmt, ...);
 
+/**
+ * kunit_mark_skipped() - Marks @test_or_suite as skipped
+ *
+ * @test_or_suite: The test context object.
+ * @fmt:  A printk() style format string.
+ *
+ * Marks the test as skipped. @fmt is given output as the test status
+ * comment, typically the reason the test was skipped.
+ *
+ * Test execution continues after kunit_mark_skipped() is called.
+ */
+#define kunit_mark_skipped(test_or_suite, fmt, ...)			\
+	do {								\
+		WRITE_ONCE((test_or_suite)->status, KUNIT_SKIPPED);	\
+		scnprintf((test_or_suite)->status_comment, 256, fmt, ##__VA_ARGS__); \
+	} while (0)
+
+/**
+ * kunit_skip() - Marks @test_or_suite as skipped
+ *
+ * @test_or_suite: The test context object.
+ * @fmt:  A printk() style format string.
+ *
+ * Skips the test. @fmt is given output as the test status
+ * comment, typically the reason the test was skipped.
+ *
+ * Test execution is halted after kunit_skip() is called.
+ */
+#define kunit_skip(test_or_suite, fmt, ...)				\
+	do {								\
+		kunit_mark_skipped((test_or_suite), fmt, ##__VA_ARGS__);\
+		kunit_try_catch_throw(&((test_or_suite)->try_catch));	\
+	} while (0)
+
 /*
  * printk and log to per-test or per-suite log buffer.  Logging only done
  * if CONFIG_KUNIT_DEBUGFS is 'y'; if it is 'n', no log is allocated/used.
diff --git a/lib/kunit/kunit-test.c b/lib/kunit/kunit-test.c
index 69f902440a0e..d69efcbed624 100644
--- a/lib/kunit/kunit-test.c
+++ b/lib/kunit/kunit-test.c
@@ -437,7 +437,47 @@  static void kunit_log_test(struct kunit *test)
 #endif
 }
 
+static void kunit_status_set_failure_test(struct kunit *test)
+{
+	struct kunit fake;
+
+	kunit_init_test(&fake, "fake test", NULL);
+
+	KUNIT_EXPECT_EQ(test, fake.status, (enum kunit_status)KUNIT_SUCCESS);
+	kunit_set_failure(&fake);
+	KUNIT_EXPECT_EQ(test, fake.status, (enum kunit_status)KUNIT_FAILURE);
+}
+
+static void kunit_status_mark_skipped_test(struct kunit *test)
+{
+	struct kunit fake;
+
+	kunit_init_test(&fake, "fake test", NULL);
+
+	/* Before: Should be SUCCESS with no comment. */
+	KUNIT_EXPECT_EQ(test, fake.status, KUNIT_SUCCESS);
+	KUNIT_EXPECT_STREQ(test, fake.status_comment, "");
+
+	/* Mark the test as skipped. */
+	kunit_mark_skipped(&fake, "Accepts format string: %s", "YES");
+
+	/* After: Should be SKIPPED with our comment. */
+	KUNIT_EXPECT_EQ(test, fake.status, (enum kunit_status)KUNIT_SKIPPED);
+	KUNIT_EXPECT_STREQ(test, fake.status_comment, "Accepts format string: YES");
+}
+
+static struct kunit_case kunit_status_test_cases[] = {
+	KUNIT_CASE(kunit_status_set_failure_test),
+	KUNIT_CASE(kunit_status_mark_skipped_test),
+	{}
+};
+
+static struct kunit_suite kunit_status_test_suite = {
+	.name = "kunit_status",
+	.test_cases = kunit_status_test_cases,
+};
+
 kunit_test_suites(&kunit_try_catch_test_suite, &kunit_resource_test_suite,
-		  &kunit_log_test_suite);
+		  &kunit_log_test_suite, &kunit_status_test_suite);
 
 MODULE_LICENSE("GPL v2");
diff --git a/lib/kunit/test.c b/lib/kunit/test.c
index 2f6cc0123232..8ce0c8fddb96 100644
--- a/lib/kunit/test.c
+++ b/lib/kunit/test.c
@@ -98,12 +98,14 @@  static void kunit_print_subtest_start(struct kunit_suite *suite)
 
 static void kunit_print_ok_not_ok(void *test_or_suite,
 				  bool is_test,
-				  bool is_ok,
+				  enum kunit_status status,
 				  size_t test_number,
-				  const char *description)
+				  const char *description,
+				  const char *directive)
 {
 	struct kunit_suite *suite = is_test ? NULL : test_or_suite;
 	struct kunit *test = is_test ? test_or_suite : NULL;
+	const char *directive_header = (status == KUNIT_SKIPPED) ? " # SKIP " : "";
 
 	/*
 	 * We do not log the test suite results as doing so would
@@ -114,25 +116,31 @@  static void kunit_print_ok_not_ok(void *test_or_suite,
 	 * representation.
 	 */
 	if (suite)
-		pr_info("%s %zd - %s\n",
-			kunit_status_to_string(is_ok),
-			test_number, description);
+		pr_info("%s %zd - %s%s%s\n",
+			kunit_status_to_ok_not_ok(status),
+			test_number, description, directive_header,
+			(status == KUNIT_SKIPPED) ? directive : "");
 	else
-		kunit_log(KERN_INFO, test, KUNIT_SUBTEST_INDENT "%s %zd - %s",
-			  kunit_status_to_string(is_ok),
-			  test_number, description);
+		kunit_log(KERN_INFO, test,
+			  KUNIT_SUBTEST_INDENT "%s %zd - %s%s%s",
+			  kunit_status_to_ok_not_ok(status),
+			  test_number, description, directive_header,
+			  (status == KUNIT_SKIPPED) ? directive : "");
 }
 
-bool kunit_suite_has_succeeded(struct kunit_suite *suite)
+enum kunit_status kunit_suite_has_succeeded(struct kunit_suite *suite)
 {
 	const struct kunit_case *test_case;
+	enum kunit_status status = KUNIT_SKIPPED;
 
 	kunit_suite_for_each_test_case(suite, test_case) {
-		if (!test_case->success)
-			return false;
+		if (test_case->status == KUNIT_FAILURE)
+			return KUNIT_FAILURE;
+		else if (test_case->status == KUNIT_SUCCESS)
+			status = KUNIT_SUCCESS;
 	}
 
-	return true;
+	return status;
 }
 EXPORT_SYMBOL_GPL(kunit_suite_has_succeeded);
 
@@ -143,7 +151,8 @@  static void kunit_print_subtest_end(struct kunit_suite *suite)
 	kunit_print_ok_not_ok((void *)suite, false,
 			      kunit_suite_has_succeeded(suite),
 			      kunit_suite_counter++,
-			      suite->name);
+			      suite->name,
+			      suite->status_comment);
 }
 
 unsigned int kunit_test_case_num(struct kunit_suite *suite,
@@ -252,7 +261,8 @@  void kunit_init_test(struct kunit *test, const char *name, char *log)
 	test->log = log;
 	if (test->log)
 		test->log[0] = '\0';
-	test->success = true;
+	test->status = KUNIT_SUCCESS;
+	test->status_comment[0] = '\0';
 }
 EXPORT_SYMBOL_GPL(kunit_init_test);
 
@@ -376,7 +386,8 @@  static void kunit_run_case_catch_errors(struct kunit_suite *suite,
 	context.test_case = test_case;
 	kunit_try_catch_run(try_catch, &context);
 
-	test_case->success = test->success;
+	test_case->status = test->status;
+
 }
 
 int kunit_run_tests(struct kunit_suite *suite)
@@ -388,7 +399,6 @@  int kunit_run_tests(struct kunit_suite *suite)
 
 	kunit_suite_for_each_test_case(suite, test_case) {
 		struct kunit test = { .param_value = NULL, .param_index = 0 };
-		bool test_success = true;
 
 		if (test_case->generate_params) {
 			/* Get initial param. */
@@ -398,7 +408,6 @@  int kunit_run_tests(struct kunit_suite *suite)
 
 		do {
 			kunit_run_case_catch_errors(suite, test_case, &test);
-			test_success &= test_case->success;
 
 			if (test_case->generate_params) {
 				if (param_desc[0] == '\0') {
@@ -410,7 +419,7 @@  int kunit_run_tests(struct kunit_suite *suite)
 					  KUNIT_SUBTEST_INDENT
 					  "# %s: %s %d - %s",
 					  test_case->name,
-					  kunit_status_to_string(test.success),
+					  kunit_status_to_ok_not_ok(test.status),
 					  test.param_index + 1, param_desc);
 
 				/* Get next param. */
@@ -420,9 +429,10 @@  int kunit_run_tests(struct kunit_suite *suite)
 			}
 		} while (test.param_value);
 
-		kunit_print_ok_not_ok(&test, true, test_success,
+		kunit_print_ok_not_ok(&test, true, test_case->status,
 				      kunit_test_case_num(suite, test_case),
-				      test_case->name);
+				      test_case->name,
+				      test.status_comment);
 	}
 
 	kunit_print_subtest_end(suite);
@@ -434,6 +444,7 @@  EXPORT_SYMBOL_GPL(kunit_run_tests);
 static void kunit_init_suite(struct kunit_suite *suite)
 {
 	kunit_debugfs_create_suite(suite);
+	suite->status_comment[0] = '\0';
 }
 
 int __kunit_test_suites_init(struct kunit_suite * const * const suites)