1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3 * Base unit test (KUnit) API.
4 *
5 * Copyright (C) 2019, Google LLC.
6 * Author: Brendan Higgins <brendanhiggins@google.com>
7 */
8
9 #ifndef _KUNIT_TEST_H
10 #define _KUNIT_TEST_H
11
12 #include <kunit/assert.h>
13 #include <kunit/try-catch.h>
14
15 #include <linux/compiler.h>
16 #include <linux/container_of.h>
17 #include <linux/err.h>
18 #include <linux/init.h>
19 #include <linux/jump_label.h>
20 #include <linux/kconfig.h>
21 #include <linux/kref.h>
22 #include <linux/list.h>
23 #include <linux/module.h>
24 #include <linux/slab.h>
25 #include <linux/spinlock.h>
26 #include <linux/string.h>
27 #include <linux/types.h>
28
29 #include <asm/rwonce.h>
30
31 /* Static key: true if any KUnit tests are currently running */
32 DECLARE_STATIC_KEY_FALSE(kunit_running);
33
34 struct kunit;
35
36 /* Size of log associated with test. */
37 #define KUNIT_LOG_SIZE 512
38
39 /* Maximum size of parameter description string. */
40 #define KUNIT_PARAM_DESC_SIZE 128
41
42 /* Maximum size of a status comment. */
43 #define KUNIT_STATUS_COMMENT_SIZE 256
44
45 /*
46 * TAP specifies subtest stream indentation of 4 spaces, 8 spaces for a
47 * sub-subtest. See the "Subtests" section in
48 * https://node-tap.org/tap-protocol/
49 */
50 #define KUNIT_SUBTEST_INDENT " "
51 #define KUNIT_SUBSUBTEST_INDENT " "
52
53 /**
54 * enum kunit_status - Type of result for a test or test suite
55 * @KUNIT_SUCCESS: Denotes the test suite has not failed nor been skipped
56 * @KUNIT_FAILURE: Denotes the test has failed.
57 * @KUNIT_SKIPPED: Denotes the test has been skipped.
58 */
59 enum kunit_status {
60 KUNIT_SUCCESS,
61 KUNIT_FAILURE,
62 KUNIT_SKIPPED,
63 };
64
65 /**
66 * struct kunit_case - represents an individual test case.
67 *
68 * @run_case: the function representing the actual test case.
69 * @name: the name of the test case.
70 * @generate_params: the generator function for parameterized tests.
71 *
72 * A test case is a function with the signature,
73 * ``void (*)(struct kunit *)``
74 * that makes expectations and assertions (see KUNIT_EXPECT_TRUE() and
75 * KUNIT_ASSERT_TRUE()) about code under test. Each test case is associated
76 * with a &struct kunit_suite and will be run after the suite's init
77 * function and followed by the suite's exit function.
78 *
79 * A test case should be static and should only be created with the
80 * KUNIT_CASE() macro; additionally, every array of test cases should be
81 * terminated with an empty test case.
82 *
83 * Example:
84 *
85 * .. code-block:: c
86 *
87 * void add_test_basic(struct kunit *test)
88 * {
89 * KUNIT_EXPECT_EQ(test, 1, add(1, 0));
90 * KUNIT_EXPECT_EQ(test, 2, add(1, 1));
91 * KUNIT_EXPECT_EQ(test, 0, add(-1, 1));
92 * KUNIT_EXPECT_EQ(test, INT_MAX, add(0, INT_MAX));
93 * KUNIT_EXPECT_EQ(test, -1, add(INT_MAX, INT_MIN));
94 * }
95 *
96 * static struct kunit_case example_test_cases[] = {
97 * KUNIT_CASE(add_test_basic),
98 * {}
99 * };
100 *
101 */
102 struct kunit_case {
103 void (*run_case)(struct kunit *test);
104 const char *name;
105 const void* (*generate_params)(const void *prev, char *desc);
106
107 /* private: internal use only. */
108 enum kunit_status status;
109 char *log;
110 };
111
kunit_status_to_ok_not_ok(enum kunit_status status)112 static inline char *kunit_status_to_ok_not_ok(enum kunit_status status)
113 {
114 switch (status) {
115 case KUNIT_SKIPPED:
116 case KUNIT_SUCCESS:
117 return "ok";
118 case KUNIT_FAILURE:
119 return "not ok";
120 }
121 return "invalid";
122 }
123
124 /**
125 * KUNIT_CASE - A helper for creating a &struct kunit_case
126 *
127 * @test_name: a reference to a test case function.
128 *
129 * Takes a symbol for a function representing a test case and creates a
130 * &struct kunit_case object from it. See the documentation for
131 * &struct kunit_case for an example on how to use it.
132 */
133 #define KUNIT_CASE(test_name) { .run_case = test_name, .name = #test_name }
134
135 /**
136 * KUNIT_CASE_PARAM - A helper for creation a parameterized &struct kunit_case
137 *
138 * @test_name: a reference to a test case function.
139 * @gen_params: a reference to a parameter generator function.
140 *
141 * The generator function::
142 *
143 * const void* gen_params(const void *prev, char *desc)
144 *
145 * is used to lazily generate a series of arbitrarily typed values that fit into
146 * a void*. The argument @prev is the previously returned value, which should be
147 * used to derive the next value; @prev is set to NULL on the initial generator
148 * call. When no more values are available, the generator must return NULL.
149 * Optionally write a string into @desc (size of KUNIT_PARAM_DESC_SIZE)
150 * describing the parameter.
151 */
152 #define KUNIT_CASE_PARAM(test_name, gen_params) \
153 { .run_case = test_name, .name = #test_name, \
154 .generate_params = gen_params }
155
156 /**
157 * struct kunit_suite - describes a related collection of &struct kunit_case
158 *
159 * @name: the name of the test. Purely informational.
160 * @suite_init: called once per test suite before the test cases.
161 * @suite_exit: called once per test suite after all test cases.
162 * @init: called before every test case.
163 * @exit: called after every test case.
164 * @test_cases: a null terminated array of test cases.
165 *
166 * A kunit_suite is a collection of related &struct kunit_case s, such that
167 * @init is called before every test case and @exit is called after every
168 * test case, similar to the notion of a *test fixture* or a *test class*
169 * in other unit testing frameworks like JUnit or Googletest.
170 *
171 * Every &struct kunit_case must be associated with a kunit_suite for KUnit
172 * to run it.
173 */
174 struct kunit_suite {
175 const char name[256];
176 int (*suite_init)(struct kunit_suite *suite);
177 void (*suite_exit)(struct kunit_suite *suite);
178 int (*init)(struct kunit *test);
179 void (*exit)(struct kunit *test);
180 struct kunit_case *test_cases;
181
182 /* private: internal use only */
183 char status_comment[KUNIT_STATUS_COMMENT_SIZE];
184 struct dentry *debugfs;
185 char *log;
186 int suite_init_err;
187 };
188
189 /**
190 * struct kunit - represents a running instance of a test.
191 *
192 * @priv: for user to store arbitrary data. Commonly used to pass data
193 * created in the init function (see &struct kunit_suite).
194 *
195 * Used to store information about the current context under which the test
196 * is running. Most of this data is private and should only be accessed
197 * indirectly via public functions; the one exception is @priv which can be
198 * used by the test writer to store arbitrary data.
199 */
200 struct kunit {
201 void *priv;
202
203 /* private: internal use only. */
204 const char *name; /* Read only after initialization! */
205 char *log; /* Points at case log after initialization */
206 struct kunit_try_catch try_catch;
207 /* param_value is the current parameter value for a test case. */
208 const void *param_value;
209 /* param_index stores the index of the parameter in parameterized tests. */
210 int param_index;
211 /*
212 * success starts as true, and may only be set to false during a
213 * test case; thus, it is safe to update this across multiple
214 * threads using WRITE_ONCE; however, as a consequence, it may only
215 * be read after the test case finishes once all threads associated
216 * with the test case have terminated.
217 */
218 spinlock_t lock; /* Guards all mutable test state. */
219 enum kunit_status status; /* Read only after test_case finishes! */
220 /*
221 * Because resources is a list that may be updated multiple times (with
222 * new resources) from any thread associated with a test case, we must
223 * protect it with some type of lock.
224 */
225 struct list_head resources; /* Protected by lock. */
226
227 char status_comment[KUNIT_STATUS_COMMENT_SIZE];
228 };
229
kunit_set_failure(struct kunit * test)230 static inline void kunit_set_failure(struct kunit *test)
231 {
232 WRITE_ONCE(test->status, KUNIT_FAILURE);
233 }
234
235 bool kunit_enabled(void);
236
237 void kunit_init_test(struct kunit *test, const char *name, char *log);
238
239 int kunit_run_tests(struct kunit_suite *suite);
240
241 size_t kunit_suite_num_test_cases(struct kunit_suite *suite);
242
243 unsigned int kunit_test_case_num(struct kunit_suite *suite,
244 struct kunit_case *test_case);
245
246 int __kunit_test_suites_init(struct kunit_suite * const * const suites, int num_suites);
247
248 void __kunit_test_suites_exit(struct kunit_suite **suites, int num_suites);
249
250 #if IS_BUILTIN(CONFIG_KUNIT)
251 int kunit_run_all_tests(void);
252 #else
kunit_run_all_tests(void)253 static inline int kunit_run_all_tests(void)
254 {
255 return 0;
256 }
257 #endif /* IS_BUILTIN(CONFIG_KUNIT) */
258
259 #define __kunit_test_suites(unique_array, ...) \
260 static struct kunit_suite *unique_array[] \
261 __aligned(sizeof(struct kunit_suite *)) \
262 __used __section(".kunit_test_suites") = { __VA_ARGS__ }
263
264 /**
265 * kunit_test_suites() - used to register one or more &struct kunit_suite
266 * with KUnit.
267 *
268 * @__suites: a statically allocated list of &struct kunit_suite.
269 *
270 * Registers @suites with the test framework.
271 * This is done by placing the array of struct kunit_suite * in the
272 * .kunit_test_suites ELF section.
273 *
274 * When builtin, KUnit tests are all run via the executor at boot, and when
275 * built as a module, they run on module load.
276 *
277 */
278 #define kunit_test_suites(__suites...) \
279 __kunit_test_suites(__UNIQUE_ID(array), \
280 ##__suites)
281
282 #define kunit_test_suite(suite) kunit_test_suites(&suite)
283
284 /**
285 * kunit_test_init_section_suites() - used to register one or more &struct
286 * kunit_suite containing init functions or
287 * init data.
288 *
289 * @__suites: a statically allocated list of &struct kunit_suite.
290 *
291 * This functions identically as kunit_test_suites() except that it suppresses
292 * modpost warnings for referencing functions marked __init or data marked
293 * __initdata; this is OK because currently KUnit only runs tests upon boot
294 * during the init phase or upon loading a module during the init phase.
295 *
296 * NOTE TO KUNIT DEVS: If we ever allow KUnit tests to be run after boot, these
297 * tests must be excluded.
298 *
299 * The only thing this macro does that's different from kunit_test_suites is
300 * that it suffixes the array and suite declarations it makes with _probe;
301 * modpost suppresses warnings about referencing init data for symbols named in
302 * this manner.
303 */
304 #define kunit_test_init_section_suites(__suites...) \
305 __kunit_test_suites(CONCATENATE(__UNIQUE_ID(array), _probe), \
306 ##__suites)
307
308 #define kunit_test_init_section_suite(suite) \
309 kunit_test_init_section_suites(&suite)
310
311 #define kunit_suite_for_each_test_case(suite, test_case) \
312 for (test_case = suite->test_cases; test_case->run_case; test_case++)
313
314 enum kunit_status kunit_suite_has_succeeded(struct kunit_suite *suite);
315
316 /**
317 * kunit_kmalloc_array() - Like kmalloc_array() except the allocation is *test managed*.
318 * @test: The test context object.
319 * @n: number of elements.
320 * @size: The size in bytes of the desired memory.
321 * @gfp: flags passed to underlying kmalloc().
322 *
323 * Just like `kmalloc_array(...)`, except the allocation is managed by the test case
324 * and is automatically cleaned up after the test case concludes. See &struct
325 * kunit_resource for more information.
326 */
327 void *kunit_kmalloc_array(struct kunit *test, size_t n, size_t size, gfp_t gfp);
328
329 /**
330 * kunit_kmalloc() - Like kmalloc() except the allocation is *test managed*.
331 * @test: The test context object.
332 * @size: The size in bytes of the desired memory.
333 * @gfp: flags passed to underlying kmalloc().
334 *
335 * See kmalloc() and kunit_kmalloc_array() for more information.
336 */
kunit_kmalloc(struct kunit * test,size_t size,gfp_t gfp)337 static inline void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp)
338 {
339 return kunit_kmalloc_array(test, 1, size, gfp);
340 }
341
342 /**
343 * kunit_kfree() - Like kfree except for allocations managed by KUnit.
344 * @test: The test case to which the resource belongs.
345 * @ptr: The memory allocation to free.
346 */
347 void kunit_kfree(struct kunit *test, const void *ptr);
348
349 /**
350 * kunit_kzalloc() - Just like kunit_kmalloc(), but zeroes the allocation.
351 * @test: The test context object.
352 * @size: The size in bytes of the desired memory.
353 * @gfp: flags passed to underlying kmalloc().
354 *
355 * See kzalloc() and kunit_kmalloc_array() for more information.
356 */
kunit_kzalloc(struct kunit * test,size_t size,gfp_t gfp)357 static inline void *kunit_kzalloc(struct kunit *test, size_t size, gfp_t gfp)
358 {
359 return kunit_kmalloc(test, size, gfp | __GFP_ZERO);
360 }
361
362 /**
363 * kunit_kcalloc() - Just like kunit_kmalloc_array(), but zeroes the allocation.
364 * @test: The test context object.
365 * @n: number of elements.
366 * @size: The size in bytes of the desired memory.
367 * @gfp: flags passed to underlying kmalloc().
368 *
369 * See kcalloc() and kunit_kmalloc_array() for more information.
370 */
kunit_kcalloc(struct kunit * test,size_t n,size_t size,gfp_t gfp)371 static inline void *kunit_kcalloc(struct kunit *test, size_t n, size_t size, gfp_t gfp)
372 {
373 return kunit_kmalloc_array(test, n, size, gfp | __GFP_ZERO);
374 }
375
376 void kunit_cleanup(struct kunit *test);
377
378 void __printf(2, 3) kunit_log_append(char *log, const char *fmt, ...);
379
380 /**
381 * kunit_mark_skipped() - Marks @test_or_suite as skipped
382 *
383 * @test_or_suite: The test context object.
384 * @fmt: A printk() style format string.
385 *
386 * Marks the test as skipped. @fmt is given output as the test status
387 * comment, typically the reason the test was skipped.
388 *
389 * Test execution continues after kunit_mark_skipped() is called.
390 */
391 #define kunit_mark_skipped(test_or_suite, fmt, ...) \
392 do { \
393 WRITE_ONCE((test_or_suite)->status, KUNIT_SKIPPED); \
394 scnprintf((test_or_suite)->status_comment, \
395 KUNIT_STATUS_COMMENT_SIZE, \
396 fmt, ##__VA_ARGS__); \
397 } while (0)
398
399 /**
400 * kunit_skip() - Marks @test_or_suite as skipped
401 *
402 * @test_or_suite: The test context object.
403 * @fmt: A printk() style format string.
404 *
405 * Skips the test. @fmt is given output as the test status
406 * comment, typically the reason the test was skipped.
407 *
408 * Test execution is halted after kunit_skip() is called.
409 */
410 #define kunit_skip(test_or_suite, fmt, ...) \
411 do { \
412 kunit_mark_skipped((test_or_suite), fmt, ##__VA_ARGS__);\
413 kunit_try_catch_throw(&((test_or_suite)->try_catch)); \
414 } while (0)
415
416 /*
417 * printk and log to per-test or per-suite log buffer. Logging only done
418 * if CONFIG_KUNIT_DEBUGFS is 'y'; if it is 'n', no log is allocated/used.
419 */
420 #define kunit_log(lvl, test_or_suite, fmt, ...) \
421 do { \
422 printk(lvl fmt, ##__VA_ARGS__); \
423 kunit_log_append((test_or_suite)->log, fmt "\n", \
424 ##__VA_ARGS__); \
425 } while (0)
426
427 #define kunit_printk(lvl, test, fmt, ...) \
428 kunit_log(lvl, test, KUNIT_SUBTEST_INDENT "# %s: " fmt, \
429 (test)->name, ##__VA_ARGS__)
430
431 /**
432 * kunit_info() - Prints an INFO level message associated with @test.
433 *
434 * @test: The test context object.
435 * @fmt: A printk() style format string.
436 *
437 * Prints an info level message associated with the test suite being run.
438 * Takes a variable number of format parameters just like printk().
439 */
440 #define kunit_info(test, fmt, ...) \
441 kunit_printk(KERN_INFO, test, fmt, ##__VA_ARGS__)
442
443 /**
444 * kunit_warn() - Prints a WARN level message associated with @test.
445 *
446 * @test: The test context object.
447 * @fmt: A printk() style format string.
448 *
449 * Prints a warning level message.
450 */
451 #define kunit_warn(test, fmt, ...) \
452 kunit_printk(KERN_WARNING, test, fmt, ##__VA_ARGS__)
453
454 /**
455 * kunit_err() - Prints an ERROR level message associated with @test.
456 *
457 * @test: The test context object.
458 * @fmt: A printk() style format string.
459 *
460 * Prints an error level message.
461 */
462 #define kunit_err(test, fmt, ...) \
463 kunit_printk(KERN_ERR, test, fmt, ##__VA_ARGS__)
464
465 /**
466 * KUNIT_SUCCEED() - A no-op expectation. Only exists for code clarity.
467 * @test: The test context object.
468 *
469 * The opposite of KUNIT_FAIL(), it is an expectation that cannot fail. In other
470 * words, it does nothing and only exists for code clarity. See
471 * KUNIT_EXPECT_TRUE() for more information.
472 */
473 #define KUNIT_SUCCEED(test) do {} while (0)
474
475 void kunit_do_failed_assertion(struct kunit *test,
476 const struct kunit_loc *loc,
477 enum kunit_assert_type type,
478 const struct kunit_assert *assert,
479 assert_format_t assert_format,
480 const char *fmt, ...);
481
482 #define _KUNIT_FAILED(test, assert_type, assert_class, assert_format, INITIALIZER, fmt, ...) do { \
483 static const struct kunit_loc __loc = KUNIT_CURRENT_LOC; \
484 const struct assert_class __assertion = INITIALIZER; \
485 kunit_do_failed_assertion(test, \
486 &__loc, \
487 assert_type, \
488 &__assertion.assert, \
489 assert_format, \
490 fmt, \
491 ##__VA_ARGS__); \
492 } while (0)
493
494
495 #define KUNIT_FAIL_ASSERTION(test, assert_type, fmt, ...) \
496 _KUNIT_FAILED(test, \
497 assert_type, \
498 kunit_fail_assert, \
499 kunit_fail_assert_format, \
500 {}, \
501 fmt, \
502 ##__VA_ARGS__)
503
504 /**
505 * KUNIT_FAIL() - Always causes a test to fail when evaluated.
506 * @test: The test context object.
507 * @fmt: an informational message to be printed when the assertion is made.
508 * @...: string format arguments.
509 *
510 * The opposite of KUNIT_SUCCEED(), it is an expectation that always fails. In
511 * other words, it always results in a failed expectation, and consequently
512 * always causes the test case to fail when evaluated. See KUNIT_EXPECT_TRUE()
513 * for more information.
514 */
515 #define KUNIT_FAIL(test, fmt, ...) \
516 KUNIT_FAIL_ASSERTION(test, \
517 KUNIT_EXPECTATION, \
518 fmt, \
519 ##__VA_ARGS__)
520
521 /* Helper to safely pass around an initializer list to other macros. */
522 #define KUNIT_INIT_ASSERT(initializers...) { initializers }
523
524 #define KUNIT_UNARY_ASSERTION(test, \
525 assert_type, \
526 condition_, \
527 expected_true_, \
528 fmt, \
529 ...) \
530 do { \
531 if (likely(!!(condition_) == !!expected_true_)) \
532 break; \
533 \
534 _KUNIT_FAILED(test, \
535 assert_type, \
536 kunit_unary_assert, \
537 kunit_unary_assert_format, \
538 KUNIT_INIT_ASSERT(.condition = #condition_, \
539 .expected_true = expected_true_), \
540 fmt, \
541 ##__VA_ARGS__); \
542 } while (0)
543
544 #define KUNIT_TRUE_MSG_ASSERTION(test, assert_type, condition, fmt, ...) \
545 KUNIT_UNARY_ASSERTION(test, \
546 assert_type, \
547 condition, \
548 true, \
549 fmt, \
550 ##__VA_ARGS__)
551
552 #define KUNIT_FALSE_MSG_ASSERTION(test, assert_type, condition, fmt, ...) \
553 KUNIT_UNARY_ASSERTION(test, \
554 assert_type, \
555 condition, \
556 false, \
557 fmt, \
558 ##__VA_ARGS__)
559
560 /*
561 * A factory macro for defining the assertions and expectations for the basic
562 * comparisons defined for the built in types.
563 *
564 * Unfortunately, there is no common type that all types can be promoted to for
565 * which all the binary operators behave the same way as for the actual types
566 * (for example, there is no type that long long and unsigned long long can
567 * both be cast to where the comparison result is preserved for all values). So
568 * the best we can do is do the comparison in the original types and then coerce
569 * everything to long long for printing; this way, the comparison behaves
570 * correctly and the printed out value usually makes sense without
571 * interpretation, but can always be interpreted to figure out the actual
572 * value.
573 */
574 #define KUNIT_BASE_BINARY_ASSERTION(test, \
575 assert_class, \
576 format_func, \
577 assert_type, \
578 left, \
579 op, \
580 right, \
581 fmt, \
582 ...) \
583 do { \
584 const typeof(left) __left = (left); \
585 const typeof(right) __right = (right); \
586 static const struct kunit_binary_assert_text __text = { \
587 .operation = #op, \
588 .left_text = #left, \
589 .right_text = #right, \
590 }; \
591 \
592 if (likely(__left op __right)) \
593 break; \
594 \
595 _KUNIT_FAILED(test, \
596 assert_type, \
597 assert_class, \
598 format_func, \
599 KUNIT_INIT_ASSERT(.text = &__text, \
600 .left_value = __left, \
601 .right_value = __right), \
602 fmt, \
603 ##__VA_ARGS__); \
604 } while (0)
605
606 #define KUNIT_BINARY_INT_ASSERTION(test, \
607 assert_type, \
608 left, \
609 op, \
610 right, \
611 fmt, \
612 ...) \
613 KUNIT_BASE_BINARY_ASSERTION(test, \
614 kunit_binary_assert, \
615 kunit_binary_assert_format, \
616 assert_type, \
617 left, op, right, \
618 fmt, \
619 ##__VA_ARGS__)
620
621 #define KUNIT_BINARY_PTR_ASSERTION(test, \
622 assert_type, \
623 left, \
624 op, \
625 right, \
626 fmt, \
627 ...) \
628 KUNIT_BASE_BINARY_ASSERTION(test, \
629 kunit_binary_ptr_assert, \
630 kunit_binary_ptr_assert_format, \
631 assert_type, \
632 left, op, right, \
633 fmt, \
634 ##__VA_ARGS__)
635
636 #define KUNIT_BINARY_STR_ASSERTION(test, \
637 assert_type, \
638 left, \
639 op, \
640 right, \
641 fmt, \
642 ...) \
643 do { \
644 const char *__left = (left); \
645 const char *__right = (right); \
646 static const struct kunit_binary_assert_text __text = { \
647 .operation = #op, \
648 .left_text = #left, \
649 .right_text = #right, \
650 }; \
651 \
652 if (likely(strcmp(__left, __right) op 0)) \
653 break; \
654 \
655 \
656 _KUNIT_FAILED(test, \
657 assert_type, \
658 kunit_binary_str_assert, \
659 kunit_binary_str_assert_format, \
660 KUNIT_INIT_ASSERT(.text = &__text, \
661 .left_value = __left, \
662 .right_value = __right), \
663 fmt, \
664 ##__VA_ARGS__); \
665 } while (0)
666
667 #define KUNIT_MEM_ASSERTION(test, \
668 assert_type, \
669 left, \
670 op, \
671 right, \
672 size_, \
673 fmt, \
674 ...) \
675 do { \
676 const void *__left = (left); \
677 const void *__right = (right); \
678 const size_t __size = (size_); \
679 static const struct kunit_binary_assert_text __text = { \
680 .operation = #op, \
681 .left_text = #left, \
682 .right_text = #right, \
683 }; \
684 \
685 if (likely(__left && __right)) \
686 if (likely(memcmp(__left, __right, __size) op 0)) \
687 break; \
688 \
689 _KUNIT_FAILED(test, \
690 assert_type, \
691 kunit_mem_assert, \
692 kunit_mem_assert_format, \
693 KUNIT_INIT_ASSERT(.text = &__text, \
694 .left_value = __left, \
695 .right_value = __right, \
696 .size = __size), \
697 fmt, \
698 ##__VA_ARGS__); \
699 } while (0)
700
701 #define KUNIT_PTR_NOT_ERR_OR_NULL_MSG_ASSERTION(test, \
702 assert_type, \
703 ptr, \
704 fmt, \
705 ...) \
706 do { \
707 const typeof(ptr) __ptr = (ptr); \
708 \
709 if (!IS_ERR_OR_NULL(__ptr)) \
710 break; \
711 \
712 _KUNIT_FAILED(test, \
713 assert_type, \
714 kunit_ptr_not_err_assert, \
715 kunit_ptr_not_err_assert_format, \
716 KUNIT_INIT_ASSERT(.text = #ptr, .value = __ptr), \
717 fmt, \
718 ##__VA_ARGS__); \
719 } while (0)
720
721 /**
722 * KUNIT_EXPECT_TRUE() - Causes a test failure when the expression is not true.
723 * @test: The test context object.
724 * @condition: an arbitrary boolean expression. The test fails when this does
725 * not evaluate to true.
726 *
727 * This and expectations of the form `KUNIT_EXPECT_*` will cause the test case
728 * to fail when the specified condition is not met; however, it will not prevent
729 * the test case from continuing to run; this is otherwise known as an
730 * *expectation failure*.
731 */
732 #define KUNIT_EXPECT_TRUE(test, condition) \
733 KUNIT_EXPECT_TRUE_MSG(test, condition, NULL)
734
735 #define KUNIT_EXPECT_TRUE_MSG(test, condition, fmt, ...) \
736 KUNIT_TRUE_MSG_ASSERTION(test, \
737 KUNIT_EXPECTATION, \
738 condition, \
739 fmt, \
740 ##__VA_ARGS__)
741
742 /**
743 * KUNIT_EXPECT_FALSE() - Makes a test failure when the expression is not false.
744 * @test: The test context object.
745 * @condition: an arbitrary boolean expression. The test fails when this does
746 * not evaluate to false.
747 *
748 * Sets an expectation that @condition evaluates to false. See
749 * KUNIT_EXPECT_TRUE() for more information.
750 */
751 #define KUNIT_EXPECT_FALSE(test, condition) \
752 KUNIT_EXPECT_FALSE_MSG(test, condition, NULL)
753
754 #define KUNIT_EXPECT_FALSE_MSG(test, condition, fmt, ...) \
755 KUNIT_FALSE_MSG_ASSERTION(test, \
756 KUNIT_EXPECTATION, \
757 condition, \
758 fmt, \
759 ##__VA_ARGS__)
760
761 /**
762 * KUNIT_EXPECT_EQ() - Sets an expectation that @left and @right are equal.
763 * @test: The test context object.
764 * @left: an arbitrary expression that evaluates to a primitive C type.
765 * @right: an arbitrary expression that evaluates to a primitive C type.
766 *
767 * Sets an expectation that the values that @left and @right evaluate to are
768 * equal. This is semantically equivalent to
769 * KUNIT_EXPECT_TRUE(@test, (@left) == (@right)). See KUNIT_EXPECT_TRUE() for
770 * more information.
771 */
772 #define KUNIT_EXPECT_EQ(test, left, right) \
773 KUNIT_EXPECT_EQ_MSG(test, left, right, NULL)
774
775 #define KUNIT_EXPECT_EQ_MSG(test, left, right, fmt, ...) \
776 KUNIT_BINARY_INT_ASSERTION(test, \
777 KUNIT_EXPECTATION, \
778 left, ==, right, \
779 fmt, \
780 ##__VA_ARGS__)
781
782 /**
783 * KUNIT_EXPECT_PTR_EQ() - Expects that pointers @left and @right are equal.
784 * @test: The test context object.
785 * @left: an arbitrary expression that evaluates to a pointer.
786 * @right: an arbitrary expression that evaluates to a pointer.
787 *
788 * Sets an expectation that the values that @left and @right evaluate to are
789 * equal. This is semantically equivalent to
790 * KUNIT_EXPECT_TRUE(@test, (@left) == (@right)). See KUNIT_EXPECT_TRUE() for
791 * more information.
792 */
793 #define KUNIT_EXPECT_PTR_EQ(test, left, right) \
794 KUNIT_EXPECT_PTR_EQ_MSG(test, left, right, NULL)
795
796 #define KUNIT_EXPECT_PTR_EQ_MSG(test, left, right, fmt, ...) \
797 KUNIT_BINARY_PTR_ASSERTION(test, \
798 KUNIT_EXPECTATION, \
799 left, ==, right, \
800 fmt, \
801 ##__VA_ARGS__)
802
803 /**
804 * KUNIT_EXPECT_NE() - An expectation that @left and @right are not equal.
805 * @test: The test context object.
806 * @left: an arbitrary expression that evaluates to a primitive C type.
807 * @right: an arbitrary expression that evaluates to a primitive C type.
808 *
809 * Sets an expectation that the values that @left and @right evaluate to are not
810 * equal. This is semantically equivalent to
811 * KUNIT_EXPECT_TRUE(@test, (@left) != (@right)). See KUNIT_EXPECT_TRUE() for
812 * more information.
813 */
814 #define KUNIT_EXPECT_NE(test, left, right) \
815 KUNIT_EXPECT_NE_MSG(test, left, right, NULL)
816
817 #define KUNIT_EXPECT_NE_MSG(test, left, right, fmt, ...) \
818 KUNIT_BINARY_INT_ASSERTION(test, \
819 KUNIT_EXPECTATION, \
820 left, !=, right, \
821 fmt, \
822 ##__VA_ARGS__)
823
824 /**
825 * KUNIT_EXPECT_PTR_NE() - Expects that pointers @left and @right are not equal.
826 * @test: The test context object.
827 * @left: an arbitrary expression that evaluates to a pointer.
828 * @right: an arbitrary expression that evaluates to a pointer.
829 *
830 * Sets an expectation that the values that @left and @right evaluate to are not
831 * equal. This is semantically equivalent to
832 * KUNIT_EXPECT_TRUE(@test, (@left) != (@right)). See KUNIT_EXPECT_TRUE() for
833 * more information.
834 */
835 #define KUNIT_EXPECT_PTR_NE(test, left, right) \
836 KUNIT_EXPECT_PTR_NE_MSG(test, left, right, NULL)
837
838 #define KUNIT_EXPECT_PTR_NE_MSG(test, left, right, fmt, ...) \
839 KUNIT_BINARY_PTR_ASSERTION(test, \
840 KUNIT_EXPECTATION, \
841 left, !=, right, \
842 fmt, \
843 ##__VA_ARGS__)
844
845 /**
846 * KUNIT_EXPECT_LT() - An expectation that @left is less than @right.
847 * @test: The test context object.
848 * @left: an arbitrary expression that evaluates to a primitive C type.
849 * @right: an arbitrary expression that evaluates to a primitive C type.
850 *
851 * Sets an expectation that the value that @left evaluates to is less than the
852 * value that @right evaluates to. This is semantically equivalent to
853 * KUNIT_EXPECT_TRUE(@test, (@left) < (@right)). See KUNIT_EXPECT_TRUE() for
854 * more information.
855 */
856 #define KUNIT_EXPECT_LT(test, left, right) \
857 KUNIT_EXPECT_LT_MSG(test, left, right, NULL)
858
859 #define KUNIT_EXPECT_LT_MSG(test, left, right, fmt, ...) \
860 KUNIT_BINARY_INT_ASSERTION(test, \
861 KUNIT_EXPECTATION, \
862 left, <, right, \
863 fmt, \
864 ##__VA_ARGS__)
865
866 /**
867 * KUNIT_EXPECT_LE() - Expects that @left is less than or equal to @right.
868 * @test: The test context object.
869 * @left: an arbitrary expression that evaluates to a primitive C type.
870 * @right: an arbitrary expression that evaluates to a primitive C type.
871 *
872 * Sets an expectation that the value that @left evaluates to is less than or
873 * equal to the value that @right evaluates to. Semantically this is equivalent
874 * to KUNIT_EXPECT_TRUE(@test, (@left) <= (@right)). See KUNIT_EXPECT_TRUE() for
875 * more information.
876 */
877 #define KUNIT_EXPECT_LE(test, left, right) \
878 KUNIT_EXPECT_LE_MSG(test, left, right, NULL)
879
880 #define KUNIT_EXPECT_LE_MSG(test, left, right, fmt, ...) \
881 KUNIT_BINARY_INT_ASSERTION(test, \
882 KUNIT_EXPECTATION, \
883 left, <=, right, \
884 fmt, \
885 ##__VA_ARGS__)
886
887 /**
888 * KUNIT_EXPECT_GT() - An expectation that @left is greater than @right.
889 * @test: The test context object.
890 * @left: an arbitrary expression that evaluates to a primitive C type.
891 * @right: an arbitrary expression that evaluates to a primitive C type.
892 *
893 * Sets an expectation that the value that @left evaluates to is greater than
894 * the value that @right evaluates to. This is semantically equivalent to
895 * KUNIT_EXPECT_TRUE(@test, (@left) > (@right)). See KUNIT_EXPECT_TRUE() for
896 * more information.
897 */
898 #define KUNIT_EXPECT_GT(test, left, right) \
899 KUNIT_EXPECT_GT_MSG(test, left, right, NULL)
900
901 #define KUNIT_EXPECT_GT_MSG(test, left, right, fmt, ...) \
902 KUNIT_BINARY_INT_ASSERTION(test, \
903 KUNIT_EXPECTATION, \
904 left, >, right, \
905 fmt, \
906 ##__VA_ARGS__)
907
908 /**
909 * KUNIT_EXPECT_GE() - Expects that @left is greater than or equal to @right.
910 * @test: The test context object.
911 * @left: an arbitrary expression that evaluates to a primitive C type.
912 * @right: an arbitrary expression that evaluates to a primitive C type.
913 *
914 * Sets an expectation that the value that @left evaluates to is greater than
915 * the value that @right evaluates to. This is semantically equivalent to
916 * KUNIT_EXPECT_TRUE(@test, (@left) >= (@right)). See KUNIT_EXPECT_TRUE() for
917 * more information.
918 */
919 #define KUNIT_EXPECT_GE(test, left, right) \
920 KUNIT_EXPECT_GE_MSG(test, left, right, NULL)
921
922 #define KUNIT_EXPECT_GE_MSG(test, left, right, fmt, ...) \
923 KUNIT_BINARY_INT_ASSERTION(test, \
924 KUNIT_EXPECTATION, \
925 left, >=, right, \
926 fmt, \
927 ##__VA_ARGS__)
928
929 /**
930 * KUNIT_EXPECT_STREQ() - Expects that strings @left and @right are equal.
931 * @test: The test context object.
932 * @left: an arbitrary expression that evaluates to a null terminated string.
933 * @right: an arbitrary expression that evaluates to a null terminated string.
934 *
935 * Sets an expectation that the values that @left and @right evaluate to are
936 * equal. This is semantically equivalent to
937 * KUNIT_EXPECT_TRUE(@test, !strcmp((@left), (@right))). See KUNIT_EXPECT_TRUE()
938 * for more information.
939 */
940 #define KUNIT_EXPECT_STREQ(test, left, right) \
941 KUNIT_EXPECT_STREQ_MSG(test, left, right, NULL)
942
943 #define KUNIT_EXPECT_STREQ_MSG(test, left, right, fmt, ...) \
944 KUNIT_BINARY_STR_ASSERTION(test, \
945 KUNIT_EXPECTATION, \
946 left, ==, right, \
947 fmt, \
948 ##__VA_ARGS__)
949
950 /**
951 * KUNIT_EXPECT_STRNEQ() - Expects that strings @left and @right are not equal.
952 * @test: The test context object.
953 * @left: an arbitrary expression that evaluates to a null terminated string.
954 * @right: an arbitrary expression that evaluates to a null terminated string.
955 *
956 * Sets an expectation that the values that @left and @right evaluate to are
957 * not equal. This is semantically equivalent to
958 * KUNIT_EXPECT_TRUE(@test, strcmp((@left), (@right))). See KUNIT_EXPECT_TRUE()
959 * for more information.
960 */
961 #define KUNIT_EXPECT_STRNEQ(test, left, right) \
962 KUNIT_EXPECT_STRNEQ_MSG(test, left, right, NULL)
963
964 #define KUNIT_EXPECT_STRNEQ_MSG(test, left, right, fmt, ...) \
965 KUNIT_BINARY_STR_ASSERTION(test, \
966 KUNIT_EXPECTATION, \
967 left, !=, right, \
968 fmt, \
969 ##__VA_ARGS__)
970
971 /**
972 * KUNIT_EXPECT_MEMEQ() - Expects that the first @size bytes of @left and @right are equal.
973 * @test: The test context object.
974 * @left: An arbitrary expression that evaluates to the specified size.
975 * @right: An arbitrary expression that evaluates to the specified size.
976 * @size: Number of bytes compared.
977 *
978 * Sets an expectation that the values that @left and @right evaluate to are
979 * equal. This is semantically equivalent to
980 * KUNIT_EXPECT_TRUE(@test, !memcmp((@left), (@right), (@size))). See
981 * KUNIT_EXPECT_TRUE() for more information.
982 *
983 * Although this expectation works for any memory block, it is not recommended
984 * for comparing more structured data, such as structs. This expectation is
985 * recommended for comparing, for example, data arrays.
986 */
987 #define KUNIT_EXPECT_MEMEQ(test, left, right, size) \
988 KUNIT_EXPECT_MEMEQ_MSG(test, left, right, size, NULL)
989
990 #define KUNIT_EXPECT_MEMEQ_MSG(test, left, right, size, fmt, ...) \
991 KUNIT_MEM_ASSERTION(test, \
992 KUNIT_EXPECTATION, \
993 left, ==, right, \
994 size, \
995 fmt, \
996 ##__VA_ARGS__)
997
998 /**
999 * KUNIT_EXPECT_MEMNEQ() - Expects that the first @size bytes of @left and @right are not equal.
1000 * @test: The test context object.
1001 * @left: An arbitrary expression that evaluates to the specified size.
1002 * @right: An arbitrary expression that evaluates to the specified size.
1003 * @size: Number of bytes compared.
1004 *
1005 * Sets an expectation that the values that @left and @right evaluate to are
1006 * not equal. This is semantically equivalent to
1007 * KUNIT_EXPECT_TRUE(@test, memcmp((@left), (@right), (@size))). See
1008 * KUNIT_EXPECT_TRUE() for more information.
1009 *
1010 * Although this expectation works for any memory block, it is not recommended
1011 * for comparing more structured data, such as structs. This expectation is
1012 * recommended for comparing, for example, data arrays.
1013 */
1014 #define KUNIT_EXPECT_MEMNEQ(test, left, right, size) \
1015 KUNIT_EXPECT_MEMNEQ_MSG(test, left, right, size, NULL)
1016
1017 #define KUNIT_EXPECT_MEMNEQ_MSG(test, left, right, size, fmt, ...) \
1018 KUNIT_MEM_ASSERTION(test, \
1019 KUNIT_EXPECTATION, \
1020 left, !=, right, \
1021 size, \
1022 fmt, \
1023 ##__VA_ARGS__)
1024
1025 /**
1026 * KUNIT_EXPECT_NULL() - Expects that @ptr is null.
1027 * @test: The test context object.
1028 * @ptr: an arbitrary pointer.
1029 *
1030 * Sets an expectation that the value that @ptr evaluates to is null. This is
1031 * semantically equivalent to KUNIT_EXPECT_PTR_EQ(@test, ptr, NULL).
1032 * See KUNIT_EXPECT_TRUE() for more information.
1033 */
1034 #define KUNIT_EXPECT_NULL(test, ptr) \
1035 KUNIT_EXPECT_NULL_MSG(test, \
1036 ptr, \
1037 NULL)
1038
1039 #define KUNIT_EXPECT_NULL_MSG(test, ptr, fmt, ...) \
1040 KUNIT_BINARY_PTR_ASSERTION(test, \
1041 KUNIT_EXPECTATION, \
1042 ptr, ==, NULL, \
1043 fmt, \
1044 ##__VA_ARGS__)
1045
1046 /**
1047 * KUNIT_EXPECT_NOT_NULL() - Expects that @ptr is not null.
1048 * @test: The test context object.
1049 * @ptr: an arbitrary pointer.
1050 *
1051 * Sets an expectation that the value that @ptr evaluates to is not null. This
1052 * is semantically equivalent to KUNIT_EXPECT_PTR_NE(@test, ptr, NULL).
1053 * See KUNIT_EXPECT_TRUE() for more information.
1054 */
1055 #define KUNIT_EXPECT_NOT_NULL(test, ptr) \
1056 KUNIT_EXPECT_NOT_NULL_MSG(test, \
1057 ptr, \
1058 NULL)
1059
1060 #define KUNIT_EXPECT_NOT_NULL_MSG(test, ptr, fmt, ...) \
1061 KUNIT_BINARY_PTR_ASSERTION(test, \
1062 KUNIT_EXPECTATION, \
1063 ptr, !=, NULL, \
1064 fmt, \
1065 ##__VA_ARGS__)
1066
1067 /**
1068 * KUNIT_EXPECT_NOT_ERR_OR_NULL() - Expects that @ptr is not null and not err.
1069 * @test: The test context object.
1070 * @ptr: an arbitrary pointer.
1071 *
1072 * Sets an expectation that the value that @ptr evaluates to is not null and not
1073 * an errno stored in a pointer. This is semantically equivalent to
1074 * KUNIT_EXPECT_TRUE(@test, !IS_ERR_OR_NULL(@ptr)). See KUNIT_EXPECT_TRUE() for
1075 * more information.
1076 */
1077 #define KUNIT_EXPECT_NOT_ERR_OR_NULL(test, ptr) \
1078 KUNIT_EXPECT_NOT_ERR_OR_NULL_MSG(test, ptr, NULL)
1079
1080 #define KUNIT_EXPECT_NOT_ERR_OR_NULL_MSG(test, ptr, fmt, ...) \
1081 KUNIT_PTR_NOT_ERR_OR_NULL_MSG_ASSERTION(test, \
1082 KUNIT_EXPECTATION, \
1083 ptr, \
1084 fmt, \
1085 ##__VA_ARGS__)
1086
1087 #define KUNIT_ASSERT_FAILURE(test, fmt, ...) \
1088 KUNIT_FAIL_ASSERTION(test, KUNIT_ASSERTION, fmt, ##__VA_ARGS__)
1089
1090 /**
1091 * KUNIT_ASSERT_TRUE() - Sets an assertion that @condition is true.
1092 * @test: The test context object.
1093 * @condition: an arbitrary boolean expression. The test fails and aborts when
1094 * this does not evaluate to true.
1095 *
1096 * This and assertions of the form `KUNIT_ASSERT_*` will cause the test case to
1097 * fail *and immediately abort* when the specified condition is not met. Unlike
1098 * an expectation failure, it will prevent the test case from continuing to run;
1099 * this is otherwise known as an *assertion failure*.
1100 */
1101 #define KUNIT_ASSERT_TRUE(test, condition) \
1102 KUNIT_ASSERT_TRUE_MSG(test, condition, NULL)
1103
1104 #define KUNIT_ASSERT_TRUE_MSG(test, condition, fmt, ...) \
1105 KUNIT_TRUE_MSG_ASSERTION(test, \
1106 KUNIT_ASSERTION, \
1107 condition, \
1108 fmt, \
1109 ##__VA_ARGS__)
1110
1111 /**
1112 * KUNIT_ASSERT_FALSE() - Sets an assertion that @condition is false.
1113 * @test: The test context object.
1114 * @condition: an arbitrary boolean expression.
1115 *
1116 * Sets an assertion that the value that @condition evaluates to is false. This
1117 * is the same as KUNIT_EXPECT_FALSE(), except it causes an assertion failure
1118 * (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
1119 */
1120 #define KUNIT_ASSERT_FALSE(test, condition) \
1121 KUNIT_ASSERT_FALSE_MSG(test, condition, NULL)
1122
1123 #define KUNIT_ASSERT_FALSE_MSG(test, condition, fmt, ...) \
1124 KUNIT_FALSE_MSG_ASSERTION(test, \
1125 KUNIT_ASSERTION, \
1126 condition, \
1127 fmt, \
1128 ##__VA_ARGS__)
1129
1130 /**
1131 * KUNIT_ASSERT_EQ() - Sets an assertion that @left and @right are equal.
1132 * @test: The test context object.
1133 * @left: an arbitrary expression that evaluates to a primitive C type.
1134 * @right: an arbitrary expression that evaluates to a primitive C type.
1135 *
1136 * Sets an assertion that the values that @left and @right evaluate to are
1137 * equal. This is the same as KUNIT_EXPECT_EQ(), except it causes an assertion
1138 * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
1139 */
1140 #define KUNIT_ASSERT_EQ(test, left, right) \
1141 KUNIT_ASSERT_EQ_MSG(test, left, right, NULL)
1142
1143 #define KUNIT_ASSERT_EQ_MSG(test, left, right, fmt, ...) \
1144 KUNIT_BINARY_INT_ASSERTION(test, \
1145 KUNIT_ASSERTION, \
1146 left, ==, right, \
1147 fmt, \
1148 ##__VA_ARGS__)
1149
1150 /**
1151 * KUNIT_ASSERT_PTR_EQ() - Asserts that pointers @left and @right are equal.
1152 * @test: The test context object.
1153 * @left: an arbitrary expression that evaluates to a pointer.
1154 * @right: an arbitrary expression that evaluates to a pointer.
1155 *
1156 * Sets an assertion that the values that @left and @right evaluate to are
1157 * equal. This is the same as KUNIT_EXPECT_EQ(), except it causes an assertion
1158 * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
1159 */
1160 #define KUNIT_ASSERT_PTR_EQ(test, left, right) \
1161 KUNIT_ASSERT_PTR_EQ_MSG(test, left, right, NULL)
1162
1163 #define KUNIT_ASSERT_PTR_EQ_MSG(test, left, right, fmt, ...) \
1164 KUNIT_BINARY_PTR_ASSERTION(test, \
1165 KUNIT_ASSERTION, \
1166 left, ==, right, \
1167 fmt, \
1168 ##__VA_ARGS__)
1169
1170 /**
1171 * KUNIT_ASSERT_NE() - An assertion that @left and @right are not equal.
1172 * @test: The test context object.
1173 * @left: an arbitrary expression that evaluates to a primitive C type.
1174 * @right: an arbitrary expression that evaluates to a primitive C type.
1175 *
1176 * Sets an assertion that the values that @left and @right evaluate to are not
1177 * equal. This is the same as KUNIT_EXPECT_NE(), except it causes an assertion
1178 * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
1179 */
1180 #define KUNIT_ASSERT_NE(test, left, right) \
1181 KUNIT_ASSERT_NE_MSG(test, left, right, NULL)
1182
1183 #define KUNIT_ASSERT_NE_MSG(test, left, right, fmt, ...) \
1184 KUNIT_BINARY_INT_ASSERTION(test, \
1185 KUNIT_ASSERTION, \
1186 left, !=, right, \
1187 fmt, \
1188 ##__VA_ARGS__)
1189
1190 /**
1191 * KUNIT_ASSERT_PTR_NE() - Asserts that pointers @left and @right are not equal.
1192 * KUNIT_ASSERT_PTR_EQ() - Asserts that pointers @left and @right are equal.
1193 * @test: The test context object.
1194 * @left: an arbitrary expression that evaluates to a pointer.
1195 * @right: an arbitrary expression that evaluates to a pointer.
1196 *
1197 * Sets an assertion that the values that @left and @right evaluate to are not
1198 * equal. This is the same as KUNIT_EXPECT_NE(), except it causes an assertion
1199 * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
1200 */
1201 #define KUNIT_ASSERT_PTR_NE(test, left, right) \
1202 KUNIT_ASSERT_PTR_NE_MSG(test, left, right, NULL)
1203
1204 #define KUNIT_ASSERT_PTR_NE_MSG(test, left, right, fmt, ...) \
1205 KUNIT_BINARY_PTR_ASSERTION(test, \
1206 KUNIT_ASSERTION, \
1207 left, !=, right, \
1208 fmt, \
1209 ##__VA_ARGS__)
1210 /**
1211 * KUNIT_ASSERT_LT() - An assertion that @left is less than @right.
1212 * @test: The test context object.
1213 * @left: an arbitrary expression that evaluates to a primitive C type.
1214 * @right: an arbitrary expression that evaluates to a primitive C type.
1215 *
1216 * Sets an assertion that the value that @left evaluates to is less than the
1217 * value that @right evaluates to. This is the same as KUNIT_EXPECT_LT(), except
1218 * it causes an assertion failure (see KUNIT_ASSERT_TRUE()) when the assertion
1219 * is not met.
1220 */
1221 #define KUNIT_ASSERT_LT(test, left, right) \
1222 KUNIT_ASSERT_LT_MSG(test, left, right, NULL)
1223
1224 #define KUNIT_ASSERT_LT_MSG(test, left, right, fmt, ...) \
1225 KUNIT_BINARY_INT_ASSERTION(test, \
1226 KUNIT_ASSERTION, \
1227 left, <, right, \
1228 fmt, \
1229 ##__VA_ARGS__)
1230 /**
1231 * KUNIT_ASSERT_LE() - An assertion that @left is less than or equal to @right.
1232 * @test: The test context object.
1233 * @left: an arbitrary expression that evaluates to a primitive C type.
1234 * @right: an arbitrary expression that evaluates to a primitive C type.
1235 *
1236 * Sets an assertion that the value that @left evaluates to is less than or
1237 * equal to the value that @right evaluates to. This is the same as
1238 * KUNIT_EXPECT_LE(), except it causes an assertion failure (see
1239 * KUNIT_ASSERT_TRUE()) when the assertion is not met.
1240 */
1241 #define KUNIT_ASSERT_LE(test, left, right) \
1242 KUNIT_ASSERT_LE_MSG(test, left, right, NULL)
1243
1244 #define KUNIT_ASSERT_LE_MSG(test, left, right, fmt, ...) \
1245 KUNIT_BINARY_INT_ASSERTION(test, \
1246 KUNIT_ASSERTION, \
1247 left, <=, right, \
1248 fmt, \
1249 ##__VA_ARGS__)
1250
1251 /**
1252 * KUNIT_ASSERT_GT() - An assertion that @left is greater than @right.
1253 * @test: The test context object.
1254 * @left: an arbitrary expression that evaluates to a primitive C type.
1255 * @right: an arbitrary expression that evaluates to a primitive C type.
1256 *
1257 * Sets an assertion that the value that @left evaluates to is greater than the
1258 * value that @right evaluates to. This is the same as KUNIT_EXPECT_GT(), except
1259 * it causes an assertion failure (see KUNIT_ASSERT_TRUE()) when the assertion
1260 * is not met.
1261 */
1262 #define KUNIT_ASSERT_GT(test, left, right) \
1263 KUNIT_ASSERT_GT_MSG(test, left, right, NULL)
1264
1265 #define KUNIT_ASSERT_GT_MSG(test, left, right, fmt, ...) \
1266 KUNIT_BINARY_INT_ASSERTION(test, \
1267 KUNIT_ASSERTION, \
1268 left, >, right, \
1269 fmt, \
1270 ##__VA_ARGS__)
1271
1272 /**
1273 * KUNIT_ASSERT_GE() - Assertion that @left is greater than or equal to @right.
1274 * @test: The test context object.
1275 * @left: an arbitrary expression that evaluates to a primitive C type.
1276 * @right: an arbitrary expression that evaluates to a primitive C type.
1277 *
1278 * Sets an assertion that the value that @left evaluates to is greater than the
1279 * value that @right evaluates to. This is the same as KUNIT_EXPECT_GE(), except
1280 * it causes an assertion failure (see KUNIT_ASSERT_TRUE()) when the assertion
1281 * is not met.
1282 */
1283 #define KUNIT_ASSERT_GE(test, left, right) \
1284 KUNIT_ASSERT_GE_MSG(test, left, right, NULL)
1285
1286 #define KUNIT_ASSERT_GE_MSG(test, left, right, fmt, ...) \
1287 KUNIT_BINARY_INT_ASSERTION(test, \
1288 KUNIT_ASSERTION, \
1289 left, >=, right, \
1290 fmt, \
1291 ##__VA_ARGS__)
1292
1293 /**
1294 * KUNIT_ASSERT_STREQ() - An assertion that strings @left and @right are equal.
1295 * @test: The test context object.
1296 * @left: an arbitrary expression that evaluates to a null terminated string.
1297 * @right: an arbitrary expression that evaluates to a null terminated string.
1298 *
1299 * Sets an assertion that the values that @left and @right evaluate to are
1300 * equal. This is the same as KUNIT_EXPECT_STREQ(), except it causes an
1301 * assertion failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
1302 */
1303 #define KUNIT_ASSERT_STREQ(test, left, right) \
1304 KUNIT_ASSERT_STREQ_MSG(test, left, right, NULL)
1305
1306 #define KUNIT_ASSERT_STREQ_MSG(test, left, right, fmt, ...) \
1307 KUNIT_BINARY_STR_ASSERTION(test, \
1308 KUNIT_ASSERTION, \
1309 left, ==, right, \
1310 fmt, \
1311 ##__VA_ARGS__)
1312
1313 /**
1314 * KUNIT_ASSERT_STRNEQ() - Expects that strings @left and @right are not equal.
1315 * @test: The test context object.
1316 * @left: an arbitrary expression that evaluates to a null terminated string.
1317 * @right: an arbitrary expression that evaluates to a null terminated string.
1318 *
1319 * Sets an expectation that the values that @left and @right evaluate to are
1320 * not equal. This is semantically equivalent to
1321 * KUNIT_ASSERT_TRUE(@test, strcmp((@left), (@right))). See KUNIT_ASSERT_TRUE()
1322 * for more information.
1323 */
1324 #define KUNIT_ASSERT_STRNEQ(test, left, right) \
1325 KUNIT_ASSERT_STRNEQ_MSG(test, left, right, NULL)
1326
1327 #define KUNIT_ASSERT_STRNEQ_MSG(test, left, right, fmt, ...) \
1328 KUNIT_BINARY_STR_ASSERTION(test, \
1329 KUNIT_ASSERTION, \
1330 left, !=, right, \
1331 fmt, \
1332 ##__VA_ARGS__)
1333
1334 /**
1335 * KUNIT_ASSERT_NULL() - Asserts that pointers @ptr is null.
1336 * @test: The test context object.
1337 * @ptr: an arbitrary pointer.
1338 *
1339 * Sets an assertion that the values that @ptr evaluates to is null. This is
1340 * the same as KUNIT_EXPECT_NULL(), except it causes an assertion
1341 * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
1342 */
1343 #define KUNIT_ASSERT_NULL(test, ptr) \
1344 KUNIT_ASSERT_NULL_MSG(test, \
1345 ptr, \
1346 NULL)
1347
1348 #define KUNIT_ASSERT_NULL_MSG(test, ptr, fmt, ...) \
1349 KUNIT_BINARY_PTR_ASSERTION(test, \
1350 KUNIT_ASSERTION, \
1351 ptr, ==, NULL, \
1352 fmt, \
1353 ##__VA_ARGS__)
1354
1355 /**
1356 * KUNIT_ASSERT_NOT_NULL() - Asserts that pointers @ptr is not null.
1357 * @test: The test context object.
1358 * @ptr: an arbitrary pointer.
1359 *
1360 * Sets an assertion that the values that @ptr evaluates to is not null. This
1361 * is the same as KUNIT_EXPECT_NOT_NULL(), except it causes an assertion
1362 * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
1363 */
1364 #define KUNIT_ASSERT_NOT_NULL(test, ptr) \
1365 KUNIT_ASSERT_NOT_NULL_MSG(test, \
1366 ptr, \
1367 NULL)
1368
1369 #define KUNIT_ASSERT_NOT_NULL_MSG(test, ptr, fmt, ...) \
1370 KUNIT_BINARY_PTR_ASSERTION(test, \
1371 KUNIT_ASSERTION, \
1372 ptr, !=, NULL, \
1373 fmt, \
1374 ##__VA_ARGS__)
1375
1376 /**
1377 * KUNIT_ASSERT_NOT_ERR_OR_NULL() - Assertion that @ptr is not null and not err.
1378 * @test: The test context object.
1379 * @ptr: an arbitrary pointer.
1380 *
1381 * Sets an assertion that the value that @ptr evaluates to is not null and not
1382 * an errno stored in a pointer. This is the same as
1383 * KUNIT_EXPECT_NOT_ERR_OR_NULL(), except it causes an assertion failure (see
1384 * KUNIT_ASSERT_TRUE()) when the assertion is not met.
1385 */
1386 #define KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr) \
1387 KUNIT_ASSERT_NOT_ERR_OR_NULL_MSG(test, ptr, NULL)
1388
1389 #define KUNIT_ASSERT_NOT_ERR_OR_NULL_MSG(test, ptr, fmt, ...) \
1390 KUNIT_PTR_NOT_ERR_OR_NULL_MSG_ASSERTION(test, \
1391 KUNIT_ASSERTION, \
1392 ptr, \
1393 fmt, \
1394 ##__VA_ARGS__)
1395
1396 /**
1397 * KUNIT_ARRAY_PARAM() - Define test parameter generator from an array.
1398 * @name: prefix for the test parameter generator function.
1399 * @array: array of test parameters.
1400 * @get_desc: function to convert param to description; NULL to use default
1401 *
1402 * Define function @name_gen_params which uses @array to generate parameters.
1403 */
1404 #define KUNIT_ARRAY_PARAM(name, array, get_desc) \
1405 static const void *name##_gen_params(const void *prev, char *desc) \
1406 { \
1407 typeof((array)[0]) *__next = prev ? ((typeof(__next)) prev) + 1 : (array); \
1408 if (__next - (array) < ARRAY_SIZE((array))) { \
1409 void (*__get_desc)(typeof(__next), char *) = get_desc; \
1410 if (__get_desc) \
1411 __get_desc(__next, desc); \
1412 return __next; \
1413 } \
1414 return NULL; \
1415 }
1416
1417 // TODO(dlatypov@google.com): consider eventually migrating users to explicitly
1418 // include resource.h themselves if they need it.
1419 #include <kunit/resource.h>
1420
1421 #endif /* _KUNIT_TEST_H */
1422