linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 1/4] kunit: Support skipped tests
@ 2021-06-08  6:48 David Gow
  2021-06-08  6:50 ` [PATCH v3 2/4] kunit: tool: Support skipped tests in kunit_tool David Gow
                   ` (4 more replies)
  0 siblings, 5 replies; 9+ messages in thread
From: David Gow @ 2021-06-08  6:48 UTC (permalink / raw)
  To: Brendan Higgins, Alan Maguire
  Cc: David Gow, Daniel Latypov, Shuah Khan, Marco Elver, kunit-dev,
	linux-kselftest, linux-kernel

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>
Reviewed-by: Brendan Higgins <brendanhiggins@google.com>
---

Changes since v2:
https://lore.kernel.org/linux-kselftest/20210528075932.347154-1-davidgow@google.com/
- Make the length of the status comment a #define
- Fixed a build issue where debugfs was still using the old
  kunit_status_to_string() function name.

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.


 include/kunit/test.h   | 73 ++++++++++++++++++++++++++++++++++++++----
 lib/kunit/debugfs.c    |  2 +-
 lib/kunit/kunit-test.c | 42 +++++++++++++++++++++++-
 lib/kunit/test.c       | 51 +++++++++++++++++------------
 4 files changed, 140 insertions(+), 28 deletions(-)

diff --git a/include/kunit/test.h b/include/kunit/test.h
index b68c61348121..fb481696c587 100644
--- a/include/kunit/test.h
+++ b/include/kunit/test.h
@@ -97,6 +97,9 @@ struct kunit;
 /* Maximum size of parameter description string. */
 #define KUNIT_PARAM_DESC_SIZE 128
 
+/* Maximum size of a status comment. */
+#define KUNIT_STATUS_COMMENT_SIZE 256
+
 /*
  * TAP specifies subtest stream indentation of 4 spaces, 8 spaces for a
  * sub-subtest.  See the "Subtests" section in
@@ -105,6 +108,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 +163,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 +234,7 @@ struct kunit_suite {
 	struct kunit_case *test_cases;
 
 	/* private: internal use only */
+	char status_comment[KUNIT_STATUS_COMMENT_SIZE];
 	struct dentry *debugfs;
 	char *log;
 };
@@ -245,19 +268,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[KUNIT_STATUS_COMMENT_SIZE];
 };
 
 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 +373,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 +637,42 @@ 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,		\
+			  KUNIT_STATUS_COMMENT_SIZE,			\
+			  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/debugfs.c b/lib/kunit/debugfs.c
index 9214c493d8b7..b71db0abc12b 100644
--- a/lib/kunit/debugfs.c
+++ b/lib/kunit/debugfs.c
@@ -64,7 +64,7 @@ static int debugfs_print_results(struct seq_file *seq, void *v)
 		debugfs_print_result(seq, suite, test_case);
 
 	seq_printf(seq, "%s %d - %s\n",
-		   kunit_status_to_string(success), 1, suite->name);
+		   kunit_status_to_ok_not_ok(success), 1, suite->name);
 	return 0;
 }
 
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)
-- 
2.32.0.rc1.229.g3e70b5a671-goog


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v3 2/4] kunit: tool: Support skipped tests in kunit_tool
  2021-06-08  6:48 [PATCH v3 1/4] kunit: Support skipped tests David Gow
@ 2021-06-08  6:50 ` David Gow
  2021-06-08 21:21   ` Brendan Higgins
  2021-06-08  6:51 ` [PATCH v3 3/4] kunit: test: Add example tests which are always skipped David Gow
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 9+ messages in thread
From: David Gow @ 2021-06-08  6:50 UTC (permalink / raw)
  To: Brendan Higgins, Alan Maguire
  Cc: David Gow, Daniel Latypov, Shuah Khan, Marco Elver, kunit-dev,
	linux-kselftest, linux-kernel

Add support for the SKIP directive to kunit_tool's TAP parser.

Skipped tests now show up as such in the printed summary. The number of
skipped tests is counted, and if all tests in a suite are skipped, the
suite is also marked as skipped. Otherwise, skipped tests do affect the
suite result.

Example output:
[00:22:34] ======== [SKIPPED] example_skip ========
[00:22:34] [SKIPPED] example_skip_test # SKIP this test should be skipped
[00:22:34] [SKIPPED] example_mark_skipped_test # SKIP this test should be skipped
[00:22:34] ============================================================
[00:22:34] Testing complete. 2 tests run. 0 failed. 0 crashed. 2 skipped.

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

No changes since v1

 tools/testing/kunit/kunit_parser.py           | 77 +++++++++++++------
 tools/testing/kunit/kunit_tool_test.py        | 22 ++++++
 .../kunit/test_data/test_skip_all_tests.log   | 15 ++++
 .../kunit/test_data/test_skip_tests.log       | 15 ++++
 4 files changed, 105 insertions(+), 24 deletions(-)
 create mode 100644 tools/testing/kunit/test_data/test_skip_all_tests.log
 create mode 100644 tools/testing/kunit/test_data/test_skip_tests.log

diff --git a/tools/testing/kunit/kunit_parser.py b/tools/testing/kunit/kunit_parser.py
index e8bcc139702e..f07dce1d4146 100644
--- a/tools/testing/kunit/kunit_parser.py
+++ b/tools/testing/kunit/kunit_parser.py
@@ -43,6 +43,7 @@ class TestCase(object):
 class TestStatus(Enum):
 	SUCCESS = auto()
 	FAILURE = auto()
+	SKIPPED = auto()
 	TEST_CRASHED = auto()
 	NO_TESTS = auto()
 	FAILURE_TO_PARSE_TESTS = auto()
@@ -108,6 +109,8 @@ def save_non_diagnostic(lines: List[str], test_case: TestCase) -> None:
 
 OkNotOkResult = namedtuple('OkNotOkResult', ['is_ok','description', 'text'])
 
+OK_NOT_OK_SKIP = re.compile(r'^[\s]*(ok|not ok) [0-9]+ - (.*) # SKIP(.*)$')
+
 OK_NOT_OK_SUBTEST = re.compile(r'^[\s]+(ok|not ok) [0-9]+ - (.*)$')
 
 OK_NOT_OK_MODULE = re.compile(r'^(ok|not ok) ([0-9]+) - (.*)$')
@@ -125,6 +128,10 @@ def parse_ok_not_ok_test_case(lines: List[str], test_case: TestCase) -> bool:
 	if match:
 		test_case.log.append(lines.pop(0))
 		test_case.name = match.group(2)
+		skip_match = OK_NOT_OK_SKIP.match(line)
+		if skip_match:
+			test_case.status = TestStatus.SKIPPED
+			return True
 		if test_case.status == TestStatus.TEST_CRASHED:
 			return True
 		if match.group(1) == 'ok':
@@ -188,16 +195,16 @@ def parse_subtest_plan(lines: List[str]) -> Optional[int]:
 		return None
 
 def max_status(left: TestStatus, right: TestStatus) -> TestStatus:
-	if left == TestStatus.TEST_CRASHED or right == TestStatus.TEST_CRASHED:
+	if left == right:
+		return left
+	elif left == TestStatus.TEST_CRASHED or right == TestStatus.TEST_CRASHED:
 		return TestStatus.TEST_CRASHED
 	elif left == TestStatus.FAILURE or right == TestStatus.FAILURE:
 		return TestStatus.FAILURE
-	elif left != TestStatus.SUCCESS:
-		return left
-	elif right != TestStatus.SUCCESS:
+	elif left == TestStatus.SKIPPED:
 		return right
 	else:
-		return TestStatus.SUCCESS
+		return left
 
 def parse_ok_not_ok_test_suite(lines: List[str],
 			       test_suite: TestSuite,
@@ -214,6 +221,9 @@ def parse_ok_not_ok_test_suite(lines: List[str],
 			test_suite.status = TestStatus.SUCCESS
 		else:
 			test_suite.status = TestStatus.FAILURE
+		skip_match = OK_NOT_OK_SKIP.match(line)
+		if skip_match:
+			test_suite.status = TestStatus.SKIPPED
 		suite_index = int(match.group(2))
 		if suite_index != expected_suite_index:
 			print_with_timestamp(
@@ -224,8 +234,8 @@ def parse_ok_not_ok_test_suite(lines: List[str],
 	else:
 		return False
 
-def bubble_up_errors(statuses: Iterable[TestStatus]) -> TestStatus:
-	return reduce(max_status, statuses, TestStatus.SUCCESS)
+def bubble_up_errors(status_list: Iterable[TestStatus]) -> TestStatus:
+	return reduce(max_status, status_list, TestStatus.SKIPPED)
 
 def bubble_up_test_case_errors(test_suite: TestSuite) -> TestStatus:
 	max_test_case_status = bubble_up_errors(x.status for x in test_suite.cases)
@@ -311,49 +321,68 @@ def parse_test_result(lines: List[str]) -> TestResult:
 	else:
 		return TestResult(TestStatus.NO_TESTS, [], lines)
 
-def print_and_count_results(test_result: TestResult) -> Tuple[int, int, int]:
-	total_tests = 0
-	failed_tests = 0
-	crashed_tests = 0
+class TestCounts:
+	passed: int
+	failed: int
+	crashed: int
+	skipped: int
+
+	def __init__(self):
+		self.passed = 0
+		self.failed = 0
+		self.crashed = 0
+		self.skipped = 0
+
+	def total(self) -> int:
+		return self.passed + self.failed + self.crashed + self.skipped
+
+def print_and_count_results(test_result: TestResult) -> TestCounts:
+	counts = TestCounts()
 	for test_suite in test_result.suites:
 		if test_suite.status == TestStatus.SUCCESS:
 			print_suite_divider(green('[PASSED] ') + test_suite.name)
+		elif test_suite.status == TestStatus.SKIPPED:
+			print_suite_divider(yellow('[SKIPPED] ') + test_suite.name)
 		elif test_suite.status == TestStatus.TEST_CRASHED:
 			print_suite_divider(red('[CRASHED] ' + test_suite.name))
 		else:
 			print_suite_divider(red('[FAILED] ') + test_suite.name)
 		for test_case in test_suite.cases:
-			total_tests += 1
 			if test_case.status == TestStatus.SUCCESS:
+				counts.passed += 1
 				print_with_timestamp(green('[PASSED] ') + test_case.name)
+			elif test_case.status == TestStatus.SKIPPED:
+				counts.skipped += 1
+				print_with_timestamp(yellow('[SKIPPED] ') + test_case.name)
 			elif test_case.status == TestStatus.TEST_CRASHED:
-				crashed_tests += 1
+				counts.crashed += 1
 				print_with_timestamp(red('[CRASHED] ' + test_case.name))
 				print_log(map(yellow, test_case.log))
 				print_with_timestamp('')
 			else:
-				failed_tests += 1
+				counts.failed += 1
 				print_with_timestamp(red('[FAILED] ') + test_case.name)
 				print_log(map(yellow, test_case.log))
 				print_with_timestamp('')
-	return total_tests, failed_tests, crashed_tests
+	return counts
 
 def parse_run_tests(kernel_output) -> TestResult:
-	total_tests = 0
-	failed_tests = 0
-	crashed_tests = 0
+	counts = TestCounts()
 	test_result = parse_test_result(list(isolate_kunit_output(kernel_output)))
 	if test_result.status == TestStatus.NO_TESTS:
 		print(red('[ERROR] ') + yellow('no tests run!'))
 	elif test_result.status == TestStatus.FAILURE_TO_PARSE_TESTS:
 		print(red('[ERROR] ') + yellow('could not parse test results!'))
 	else:
-		(total_tests,
-		 failed_tests,
-		 crashed_tests) = print_and_count_results(test_result)
+		counts = print_and_count_results(test_result)
 	print_with_timestamp(DIVIDER)
-	fmt = green if test_result.status == TestStatus.SUCCESS else red
+	if test_result.status == TestStatus.SUCCESS:
+		fmt = green
+	elif test_result.status == TestStatus.SKIPPED:
+		fmt = yellow
+	else:
+		fmt =red
 	print_with_timestamp(
-		fmt('Testing complete. %d tests run. %d failed. %d crashed.' %
-		    (total_tests, failed_tests, crashed_tests)))
+		fmt('Testing complete. %d tests run. %d failed. %d crashed. %d skipped.' %
+		    (counts.total(), counts.failed, counts.crashed, counts.skipped)))
 	return test_result
diff --git a/tools/testing/kunit/kunit_tool_test.py b/tools/testing/kunit/kunit_tool_test.py
index 2e809dd956a7..a51e70cafcc1 100755
--- a/tools/testing/kunit/kunit_tool_test.py
+++ b/tools/testing/kunit/kunit_tool_test.py
@@ -183,6 +183,28 @@ class KUnitParserTest(unittest.TestCase):
 			kunit_parser.TestStatus.TEST_CRASHED,
 			result.status)
 
+	def test_skipped_test(self):
+		skipped_log = test_data_path('test_skip_tests.log')
+		file = open(skipped_log)
+		result = kunit_parser.parse_run_tests(file.readlines())
+
+		# A skipped test does not fail the whole suite.
+		self.assertEqual(
+			kunit_parser.TestStatus.SUCCESS,
+			result.status)
+		file.close()
+
+	def test_skipped_all_tests(self):
+		skipped_log = test_data_path('test_skip_all_tests.log')
+		file = open(skipped_log)
+		result = kunit_parser.parse_run_tests(file.readlines())
+
+		self.assertEqual(
+			kunit_parser.TestStatus.SKIPPED,
+			result.status)
+		file.close()
+
+
 	def test_ignores_prefix_printk_time(self):
 		prefix_log = test_data_path('test_config_printk_time.log')
 		with open(prefix_log) as file:
diff --git a/tools/testing/kunit/test_data/test_skip_all_tests.log b/tools/testing/kunit/test_data/test_skip_all_tests.log
new file mode 100644
index 000000000000..2ea6e6d14fff
--- /dev/null
+++ b/tools/testing/kunit/test_data/test_skip_all_tests.log
@@ -0,0 +1,15 @@
+TAP version 14
+1..2
+    # Subtest: string-stream-test
+    1..3
+    ok 1 - string_stream_test_empty_on_creation # SKIP all tests skipped
+    ok 2 - string_stream_test_not_empty_after_add # SKIP all tests skipped
+    ok 3 - string_stream_test_get_string # SKIP all tests skipped
+ok 1 - string-stream-test # SKIP
+    # Subtest: example
+    1..2
+    # example_simple_test: initializing
+    ok 1 - example_simple_test # SKIP all tests skipped
+    # example_skip_test: initializing
+    ok 2 - example_skip_test # SKIP this test should be skipped
+ok 2 - example # SKIP
diff --git a/tools/testing/kunit/test_data/test_skip_tests.log b/tools/testing/kunit/test_data/test_skip_tests.log
new file mode 100644
index 000000000000..79b326e31274
--- /dev/null
+++ b/tools/testing/kunit/test_data/test_skip_tests.log
@@ -0,0 +1,15 @@
+TAP version 14
+1..2
+    # Subtest: string-stream-test
+    1..3
+    ok 1 - string_stream_test_empty_on_creation
+    ok 2 - string_stream_test_not_empty_after_add
+    ok 3 - string_stream_test_get_string
+ok 1 - string-stream-test
+    # Subtest: example
+    1..2
+    # example_simple_test: initializing
+    ok 1 - example_simple_test
+    # example_skip_test: initializing
+    ok 2 - example_skip_test # SKIP this test should be skipped
+ok 2 - example
-- 
2.32.0.rc1.229.g3e70b5a671-goog


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v3 3/4] kunit: test: Add example tests which are always skipped
  2021-06-08  6:48 [PATCH v3 1/4] kunit: Support skipped tests David Gow
  2021-06-08  6:50 ` [PATCH v3 2/4] kunit: tool: Support skipped tests in kunit_tool David Gow
@ 2021-06-08  6:51 ` David Gow
  2021-06-08 21:22   ` Brendan Higgins
  2021-06-08  6:51 ` [PATCH v3 4/4] kasan: test: make use of kunit_skip() David Gow
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 9+ messages in thread
From: David Gow @ 2021-06-08  6:51 UTC (permalink / raw)
  To: Brendan Higgins, Alan Maguire
  Cc: David Gow, Daniel Latypov, Shuah Khan, Marco Elver, kunit-dev,
	linux-kselftest, linux-kernel

Add two new tests to the example test suite, both of which are always
skipped. This is used as an example for how to write tests which are
skipped, and to demonstrate the difference between kunit_skip() and
kunit_mark_skipped().

Note that these tests are enabled by default, so a default run of KUnit
will have two skipped tests.

Signed-off-by: David Gow <davidgow@google.com>
Reviewed-by: Daniel Latypov <dlatypov@google.com>
---
 lib/kunit/kunit-example-test.c | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/lib/kunit/kunit-example-test.c b/lib/kunit/kunit-example-test.c
index be1164ecc476..51099b0ca29c 100644
--- a/lib/kunit/kunit-example-test.c
+++ b/lib/kunit/kunit-example-test.c
@@ -40,6 +40,35 @@ static int example_test_init(struct kunit *test)
 	return 0;
 }
 
+/*
+ * This test should always be skipped.
+ */
+static void example_skip_test(struct kunit *test)
+{
+	/* This line should run */
+	kunit_info(test, "You should not see a line below.");
+
+	/* Skip (and abort) the test */
+	kunit_skip(test, "this test should be skipped");
+
+	/* This line should not execute */
+	KUNIT_FAIL(test, "You should not see this line.");
+}
+
+/*
+ * This test should always be marked skipped.
+ */
+static void example_mark_skipped_test(struct kunit *test)
+{
+	/* This line should run */
+	kunit_info(test, "You should see a line below.");
+
+	/* Skip (but do not abort) the test */
+	kunit_mark_skipped(test, "this test should be skipped");
+
+	/* This line should run */
+	kunit_info(test, "You should see this line.");
+}
 /*
  * Here we make a list of all the test cases we want to add to the test suite
  * below.
@@ -52,6 +81,8 @@ static struct kunit_case example_test_cases[] = {
 	 * test suite.
 	 */
 	KUNIT_CASE(example_simple_test),
+	KUNIT_CASE(example_skip_test),
+	KUNIT_CASE(example_mark_skipped_test),
 	{}
 };
 
-- 
2.32.0.rc1.229.g3e70b5a671-goog


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v3 4/4] kasan: test: make use of kunit_skip()
  2021-06-08  6:48 [PATCH v3 1/4] kunit: Support skipped tests David Gow
  2021-06-08  6:50 ` [PATCH v3 2/4] kunit: tool: Support skipped tests in kunit_tool David Gow
  2021-06-08  6:51 ` [PATCH v3 3/4] kunit: test: Add example tests which are always skipped David Gow
@ 2021-06-08  6:51 ` David Gow
  2021-06-08 21:23   ` Brendan Higgins
  2021-06-08  9:51 ` [PATCH v3 1/4] kunit: Support skipped tests kernel test robot
  2021-06-08 11:01 ` kernel test robot
  4 siblings, 1 reply; 9+ messages in thread
From: David Gow @ 2021-06-08  6:51 UTC (permalink / raw)
  To: Brendan Higgins, Alan Maguire
  Cc: Marco Elver, Daniel Latypov, Shuah Khan, kunit-dev, kasan-dev,
	linux-kselftest, linux-kernel, David Gow, Andrey Konovalov

From: Marco Elver <elver@google.com>

Make use of the recently added kunit_skip() to skip tests, as it permits
TAP parsers to recognize if a test was deliberately skipped.

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

No changes since v1

 lib/test_kasan.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/lib/test_kasan.c b/lib/test_kasan.c
index cacbbbdef768..0a2029d14c91 100644
--- a/lib/test_kasan.c
+++ b/lib/test_kasan.c
@@ -111,17 +111,13 @@ static void kasan_test_exit(struct kunit *test)
 } while (0)
 
 #define KASAN_TEST_NEEDS_CONFIG_ON(test, config) do {			\
-	if (!IS_ENABLED(config)) {					\
-		kunit_info((test), "skipping, " #config " required");	\
-		return;							\
-	}								\
+	if (!IS_ENABLED(config))					\
+		kunit_skip((test), "Test requires " #config "=y");	\
 } while (0)
 
 #define KASAN_TEST_NEEDS_CONFIG_OFF(test, config) do {			\
-	if (IS_ENABLED(config)) {					\
-		kunit_info((test), "skipping, " #config " enabled");	\
-		return;							\
-	}								\
+	if (IS_ENABLED(config))						\
+		kunit_skip((test), "Test requires " #config "=n");	\
 } while (0)
 
 static void kmalloc_oob_right(struct kunit *test)
-- 
2.32.0.rc1.229.g3e70b5a671-goog


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 1/4] kunit: Support skipped tests
  2021-06-08  6:48 [PATCH v3 1/4] kunit: Support skipped tests David Gow
                   ` (2 preceding siblings ...)
  2021-06-08  6:51 ` [PATCH v3 4/4] kasan: test: make use of kunit_skip() David Gow
@ 2021-06-08  9:51 ` kernel test robot
  2021-06-08 11:01 ` kernel test robot
  4 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2021-06-08  9:51 UTC (permalink / raw)
  To: David Gow, Brendan Higgins, Alan Maguire
  Cc: kbuild-all, David Gow, Daniel Latypov, Shuah Khan, Marco Elver,
	kunit-dev, linux-kselftest, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 33819 bytes --]

Hi David,

I love your patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v5.13-rc5 next-20210607]
[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/20210608-145216
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 614124bea77e452aa6df7a8714e8bc820b489922
config: i386-randconfig-s002-20210607 (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/616d7103da7386e89d71208b4df68453790e30ad
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review David-Gow/kunit-Support-skipped-tests/20210608-145216
        git checkout 616d7103da7386e89d71208b4df68453790e30ad
        # 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 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:839:9: note: in expansion of macro '__typecheck'
     839 |  ((void)__typecheck(__left, __right));           \
         |         ^~~~~~~~~~~
   include/kunit/test.h:863:2: note: in expansion of macro 'KUNIT_BASE_BINARY_ASSERTION'
     863 |  KUNIT_BASE_BINARY_ASSERTION(test,           \
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/kunit/test.h:952:2: note: in expansion of macro 'KUNIT_BASE_EQ_MSG_ASSERTION'
     952 |  KUNIT_BASE_EQ_MSG_ASSERTION(test,           \
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/kunit/test.h:962:2: note: in expansion of macro 'KUNIT_BINARY_EQ_MSG_ASSERTION'
     962 |  KUNIT_BINARY_EQ_MSG_ASSERTION(test,           \
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/kunit/test.h:1325:2: note: in expansion of macro 'KUNIT_BINARY_EQ_ASSERTION'
    1325 |  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:1193:24: error: invalid initializer
    1193 |  typeof(left) __left = (left);            \
         |                        ^
   include/kunit/test.h:1216:2: note: in expansion of macro 'KUNIT_BINARY_STR_ASSERTION'
    1216 |  KUNIT_BINARY_STR_ASSERTION(test,           \
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~
   include/kunit/test.h:1223:2: note: in expansion of macro 'KUNIT_BINARY_STR_EQ_MSG_ASSERTION'
    1223 |  KUNIT_BINARY_STR_EQ_MSG_ASSERTION(test,           \
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/kunit/test.h:1507:2: note: in expansion of macro 'KUNIT_BINARY_STR_EQ_ASSERTION'
    1507 |  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:1193:24: error: invalid initializer
    1193 |  typeof(left) __left = (left);            \
         |                        ^
   include/kunit/test.h:1216:2: note: in expansion of macro 'KUNIT_BINARY_STR_ASSERTION'
    1216 |  KUNIT_BINARY_STR_ASSERTION(test,           \
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~
   include/kunit/test.h:1223:2: note: in expansion of macro 'KUNIT_BINARY_STR_EQ_MSG_ASSERTION'
    1223 |  KUNIT_BINARY_STR_EQ_MSG_ASSERTION(test,           \
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/kunit/test.h:1507:2: note: in expansion of macro 'KUNIT_BINARY_STR_EQ_ASSERTION'
    1507 |  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 +1193 include/kunit/test.h

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

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 31291 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 1/4] kunit: Support skipped tests
  2021-06-08  6:48 [PATCH v3 1/4] kunit: Support skipped tests David Gow
                   ` (3 preceding siblings ...)
  2021-06-08  9:51 ` [PATCH v3 1/4] kunit: Support skipped tests kernel test robot
@ 2021-06-08 11:01 ` kernel test robot
  4 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2021-06-08 11:01 UTC (permalink / raw)
  To: David Gow, Brendan Higgins, Alan Maguire
  Cc: kbuild-all, clang-built-linux, David Gow, Daniel Latypov,
	Shuah Khan, Marco Elver, kunit-dev, linux-kselftest,
	linux-kernel

[-- Attachment #1: Type: text/plain, Size: 6115 bytes --]

Hi David,

I love your patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v5.13-rc5 next-20210607]
[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/20210608-145216
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 614124bea77e452aa6df7a8714e8bc820b489922
config: s390-randconfig-r021-20210608 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project d32cc150feb72f315a5bbd34f92e7beca21a50da)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install s390 cross compiling tool for clang build
        # apt-get install binutils-s390x-linux-gnu
        # https://github.com/0day-ci/linux/commit/616d7103da7386e89d71208b4df68453790e30ad
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review David-Gow/kunit-Support-skipped-tests/20210608-145216
        git checkout 616d7103da7386e89d71208b4df68453790e30ad
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=s390 

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 >>):

   lib/kunit/kunit-test.c:458:2: warning: comparison of distinct pointer types ('typeof (__left) *' (aka 'enum kunit_status *') and 'typeof (__right) *' (aka 'int *')) [-Wcompare-distinct-pointer-types]
           KUNIT_EXPECT_EQ(test, fake.status, KUNIT_SUCCESS);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/kunit/test.h:1325:2: note: expanded from macro 'KUNIT_EXPECT_EQ'
           KUNIT_BINARY_EQ_ASSERTION(test, KUNIT_EXPECTATION, left, right)
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/kunit/test.h:962:2: note: expanded from macro 'KUNIT_BINARY_EQ_ASSERTION'
           KUNIT_BINARY_EQ_MSG_ASSERTION(test,                                    \
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/kunit/test.h:952:2: note: expanded from macro 'KUNIT_BINARY_EQ_MSG_ASSERTION'
           KUNIT_BASE_EQ_MSG_ASSERTION(test,                                      \
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/kunit/test.h:863:2: note: expanded from macro 'KUNIT_BASE_EQ_MSG_ASSERTION'
           KUNIT_BASE_BINARY_ASSERTION(test,                                      \
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/kunit/test.h:839:9: note: expanded from macro 'KUNIT_BASE_BINARY_ASSERTION'
           ((void)__typecheck(__left, __right));                                  \
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/minmax.h:20:28: note: expanded from macro '__typecheck'
           (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
                      ~~~~~~~~~~~~~~ ^  ~~~~~~~~~~~~~~
>> lib/kunit/kunit-test.c:459:2: error: array initializer must be an initializer list or string literal
           KUNIT_EXPECT_STREQ(test, fake.status_comment, "");
           ^
   include/kunit/test.h:1507:2: note: expanded from macro 'KUNIT_EXPECT_STREQ'
           KUNIT_BINARY_STR_EQ_ASSERTION(test, KUNIT_EXPECTATION, left, right)
           ^
   include/kunit/test.h:1223:2: note: expanded from macro 'KUNIT_BINARY_STR_EQ_ASSERTION'
           KUNIT_BINARY_STR_EQ_MSG_ASSERTION(test,                                \
           ^
   include/kunit/test.h:1216:2: note: expanded from macro 'KUNIT_BINARY_STR_EQ_MSG_ASSERTION'
           KUNIT_BINARY_STR_ASSERTION(test,                                       \
           ^
   include/kunit/test.h:1193:15: note: expanded from macro 'KUNIT_BINARY_STR_ASSERTION'
           typeof(left) __left = (left);                                          \
                        ^
   lib/kunit/kunit-test.c:466:2: error: array initializer must be an initializer list or string literal
           KUNIT_EXPECT_STREQ(test, fake.status_comment, "Accepts format string: YES");
           ^
   include/kunit/test.h:1507:2: note: expanded from macro 'KUNIT_EXPECT_STREQ'
           KUNIT_BINARY_STR_EQ_ASSERTION(test, KUNIT_EXPECTATION, left, right)
           ^
   include/kunit/test.h:1223:2: note: expanded from macro 'KUNIT_BINARY_STR_EQ_ASSERTION'
           KUNIT_BINARY_STR_EQ_MSG_ASSERTION(test,                                \
           ^
   include/kunit/test.h:1216:2: note: expanded from macro 'KUNIT_BINARY_STR_EQ_MSG_ASSERTION'
           KUNIT_BINARY_STR_ASSERTION(test,                                       \
           ^
   include/kunit/test.h:1193:15: note: expanded from macro 'KUNIT_BINARY_STR_ASSERTION'
           typeof(left) __left = (left);                                          \
                        ^
   1 warning and 2 errors generated.


vim +459 lib/kunit/kunit-test.c

   450	
   451	static void kunit_status_mark_skipped_test(struct kunit *test)
   452	{
   453		struct kunit fake;
   454	
   455		kunit_init_test(&fake, "fake test", NULL);
   456	
   457		/* Before: Should be SUCCESS with no comment. */
   458		KUNIT_EXPECT_EQ(test, fake.status, KUNIT_SUCCESS);
 > 459		KUNIT_EXPECT_STREQ(test, fake.status_comment, "");
   460	
   461		/* Mark the test as skipped. */
   462		kunit_mark_skipped(&fake, "Accepts format string: %s", "YES");
   463	
   464		/* After: Should be SKIPPED with our comment. */
   465		KUNIT_EXPECT_EQ(test, fake.status, (enum kunit_status)KUNIT_SKIPPED);
   466		KUNIT_EXPECT_STREQ(test, fake.status_comment, "Accepts format string: YES");
   467	}
   468	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 40851 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 2/4] kunit: tool: Support skipped tests in kunit_tool
  2021-06-08  6:50 ` [PATCH v3 2/4] kunit: tool: Support skipped tests in kunit_tool David Gow
@ 2021-06-08 21:21   ` Brendan Higgins
  0 siblings, 0 replies; 9+ messages in thread
From: Brendan Higgins @ 2021-06-08 21:21 UTC (permalink / raw)
  To: David Gow
  Cc: Alan Maguire, Daniel Latypov, Shuah Khan, Marco Elver,
	KUnit Development, open list:KERNEL SELFTEST FRAMEWORK,
	Linux Kernel Mailing List

On Mon, Jun 7, 2021 at 11:50 PM David Gow <davidgow@google.com> wrote:
>
> Add support for the SKIP directive to kunit_tool's TAP parser.
>
> Skipped tests now show up as such in the printed summary. The number of
> skipped tests is counted, and if all tests in a suite are skipped, the
> suite is also marked as skipped. Otherwise, skipped tests do affect the
> suite result.
>
> Example output:
> [00:22:34] ======== [SKIPPED] example_skip ========
> [00:22:34] [SKIPPED] example_skip_test # SKIP this test should be skipped
> [00:22:34] [SKIPPED] example_mark_skipped_test # SKIP this test should be skipped
> [00:22:34] ============================================================
> [00:22:34] Testing complete. 2 tests run. 0 failed. 0 crashed. 2 skipped.
>
> Signed-off-by: David Gow <davidgow@google.com>
> Reviewed-by: Daniel Latypov <dlatypov@google.com>

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

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 3/4] kunit: test: Add example tests which are always skipped
  2021-06-08  6:51 ` [PATCH v3 3/4] kunit: test: Add example tests which are always skipped David Gow
@ 2021-06-08 21:22   ` Brendan Higgins
  0 siblings, 0 replies; 9+ messages in thread
From: Brendan Higgins @ 2021-06-08 21:22 UTC (permalink / raw)
  To: David Gow
  Cc: Alan Maguire, Daniel Latypov, Shuah Khan, Marco Elver,
	KUnit Development, open list:KERNEL SELFTEST FRAMEWORK,
	Linux Kernel Mailing List

On Mon, Jun 7, 2021 at 11:51 PM David Gow <davidgow@google.com> wrote:
>
> Add two new tests to the example test suite, both of which are always
> skipped. This is used as an example for how to write tests which are
> skipped, and to demonstrate the difference between kunit_skip() and
> kunit_mark_skipped().
>
> Note that these tests are enabled by default, so a default run of KUnit
> will have two skipped tests.
>
> Signed-off-by: David Gow <davidgow@google.com>
> Reviewed-by: Daniel Latypov <dlatypov@google.com>

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

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 4/4] kasan: test: make use of kunit_skip()
  2021-06-08  6:51 ` [PATCH v3 4/4] kasan: test: make use of kunit_skip() David Gow
@ 2021-06-08 21:23   ` Brendan Higgins
  0 siblings, 0 replies; 9+ messages in thread
From: Brendan Higgins @ 2021-06-08 21:23 UTC (permalink / raw)
  To: David Gow
  Cc: Alan Maguire, Marco Elver, Daniel Latypov, Shuah Khan,
	KUnit Development, kasan-dev,
	open list:KERNEL SELFTEST FRAMEWORK, Linux Kernel Mailing List,
	Andrey Konovalov

On Mon, Jun 7, 2021 at 11:51 PM David Gow <davidgow@google.com> wrote:
>
> From: Marco Elver <elver@google.com>
>
> Make use of the recently added kunit_skip() to skip tests, as it permits
> TAP parsers to recognize if a test was deliberately skipped.
>
> Signed-off-by: Marco Elver <elver@google.com>
> Signed-off-by: David Gow <davidgow@google.com>
> Reviewed-by: Daniel Latypov <dlatypov@google.com>
> Reviewed-by: Andrey Konovalov <andreyknvl@gmail.com>

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

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2021-06-08 21:23 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-08  6:48 [PATCH v3 1/4] kunit: Support skipped tests David Gow
2021-06-08  6:50 ` [PATCH v3 2/4] kunit: tool: Support skipped tests in kunit_tool David Gow
2021-06-08 21:21   ` Brendan Higgins
2021-06-08  6:51 ` [PATCH v3 3/4] kunit: test: Add example tests which are always skipped David Gow
2021-06-08 21:22   ` Brendan Higgins
2021-06-08  6:51 ` [PATCH v3 4/4] kasan: test: make use of kunit_skip() David Gow
2021-06-08 21:23   ` Brendan Higgins
2021-06-08  9:51 ` [PATCH v3 1/4] kunit: Support skipped tests kernel test robot
2021-06-08 11:01 ` kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).