1
2
3
4
5
6
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#include <linux/kernel.h>
15#include <linux/module.h>
16#include <linux/slab.h>
17#include <linux/types.h>
18#include <linux/kref.h>
19
20struct kunit_resource;
21
22typedef int (*kunit_resource_init_t)(struct kunit_resource *, void *);
23typedef void (*kunit_resource_free_t)(struct kunit_resource *);
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82struct kunit_resource {
83 void *data;
84 const char *name;
85 kunit_resource_free_t free;
86
87
88 struct kref refcount;
89 struct list_head node;
90};
91
92struct kunit;
93
94
95#define KUNIT_LOG_SIZE 512
96
97
98
99
100
101
102#define KUNIT_SUBTEST_INDENT " "
103#define KUNIT_SUBSUBTEST_INDENT " "
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141struct kunit_case {
142 void (*run_case)(struct kunit *test);
143 const char *name;
144
145
146 bool success;
147 char *log;
148};
149
150static inline char *kunit_status_to_string(bool status)
151{
152 return status ? "ok" : "not ok";
153}
154
155
156
157
158
159
160
161
162
163
164#define KUNIT_CASE(test_name) { .run_case = test_name, .name = #test_name }
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182struct kunit_suite {
183 const char name[256];
184 int (*init)(struct kunit *test);
185 void (*exit)(struct kunit *test);
186 struct kunit_case *test_cases;
187
188
189 struct dentry *debugfs;
190 char *log;
191};
192
193
194
195
196
197
198
199
200
201
202
203
204struct kunit {
205 void *priv;
206
207
208 const char *name;
209 char *log;
210 struct kunit_try_catch try_catch;
211
212
213
214
215
216
217
218 bool success;
219 spinlock_t lock;
220
221
222
223
224
225 struct list_head resources;
226};
227
228static inline void kunit_set_failure(struct kunit *test)
229{
230 WRITE_ONCE(test->success, false);
231}
232
233void kunit_init_test(struct kunit *test, const char *name, char *log);
234
235int kunit_run_tests(struct kunit_suite *suite);
236
237size_t kunit_suite_num_test_cases(struct kunit_suite *suite);
238
239unsigned int kunit_test_case_num(struct kunit_suite *suite,
240 struct kunit_case *test_case);
241
242int __kunit_test_suites_init(struct kunit_suite * const * const suites);
243
244void __kunit_test_suites_exit(struct kunit_suite **suites);
245
246#if IS_BUILTIN(CONFIG_KUNIT)
247int kunit_run_all_tests(void);
248#else
249static inline int kunit_run_all_tests(void)
250{
251 return 0;
252}
253#endif
254
255#ifdef MODULE
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271#define kunit_test_suites_for_module(__suites) \
272 static int __init kunit_test_suites_init(void) \
273 { \
274 return __kunit_test_suites_init(__suites); \
275 } \
276 module_init(kunit_test_suites_init); \
277 \
278 static void __exit kunit_test_suites_exit(void) \
279 { \
280 return __kunit_test_suites_exit(__suites); \
281 } \
282 module_exit(kunit_test_suites_exit)
283#else
284#define kunit_test_suites_for_module(__suites)
285#endif
286
287#define __kunit_test_suites(unique_array, unique_suites, ...) \
288 static struct kunit_suite *unique_array[] = { __VA_ARGS__, NULL }; \
289 kunit_test_suites_for_module(unique_array); \
290 static struct kunit_suite **unique_suites \
291 __used __section(".kunit_test_suites") = unique_array
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311#define kunit_test_suites(__suites...) \
312 __kunit_test_suites(__UNIQUE_ID(array), \
313 __UNIQUE_ID(suites), \
314 ##__suites)
315
316#define kunit_test_suite(suite) kunit_test_suites(&suite)
317
318#define kunit_suite_for_each_test_case(suite, test_case) \
319 for (test_case = suite->test_cases; test_case->run_case; test_case++)
320
321bool kunit_suite_has_succeeded(struct kunit_suite *suite);
322
323
324
325
326
327struct kunit_resource *kunit_alloc_and_get_resource(struct kunit *test,
328 kunit_resource_init_t init,
329 kunit_resource_free_t free,
330 gfp_t internal_gfp,
331 void *context);
332
333
334
335
336
337
338
339static inline void kunit_get_resource(struct kunit_resource *res)
340{
341 kref_get(&res->refcount);
342}
343
344
345
346
347
348static inline void kunit_release_resource(struct kref *kref)
349{
350 struct kunit_resource *res = container_of(kref, struct kunit_resource,
351 refcount);
352
353
354 if (res->free) {
355 res->free(res);
356 kfree(res);
357 }
358}
359
360
361
362
363
364
365
366
367
368
369
370
371
372static inline void kunit_put_resource(struct kunit_resource *res)
373{
374 kref_put(&res->refcount, kunit_release_resource);
375}
376
377
378
379
380
381
382
383
384
385
386
387int kunit_add_resource(struct kunit *test,
388 kunit_resource_init_t init,
389 kunit_resource_free_t free,
390 struct kunit_resource *res,
391 void *data);
392
393
394
395
396
397
398
399
400
401
402int kunit_add_named_resource(struct kunit *test,
403 kunit_resource_init_t init,
404 kunit_resource_free_t free,
405 struct kunit_resource *res,
406 const char *name,
407 void *data);
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425static inline void *kunit_alloc_resource(struct kunit *test,
426 kunit_resource_init_t init,
427 kunit_resource_free_t free,
428 gfp_t internal_gfp,
429 void *context)
430{
431 struct kunit_resource *res;
432
433 res = kzalloc(sizeof(*res), internal_gfp);
434 if (!res)
435 return NULL;
436
437 if (!kunit_add_resource(test, init, free, res, context))
438 return res->data;
439
440 return NULL;
441}
442
443typedef bool (*kunit_resource_match_t)(struct kunit *test,
444 struct kunit_resource *res,
445 void *match_data);
446
447
448
449
450
451
452
453
454
455
456static inline bool kunit_resource_instance_match(struct kunit *test,
457 struct kunit_resource *res,
458 void *match_data)
459{
460 return res->data == match_data;
461}
462
463
464
465
466
467
468
469static inline bool kunit_resource_name_match(struct kunit *test,
470 struct kunit_resource *res,
471 void *match_name)
472{
473 return res->name && strcmp(res->name, match_name) == 0;
474}
475
476
477
478
479
480
481
482static inline struct kunit_resource *
483kunit_find_resource(struct kunit *test,
484 kunit_resource_match_t match,
485 void *match_data)
486{
487 struct kunit_resource *res, *found = NULL;
488
489 spin_lock(&test->lock);
490
491 list_for_each_entry_reverse(res, &test->resources, node) {
492 if (match(test, res, (void *)match_data)) {
493 found = res;
494 kunit_get_resource(found);
495 break;
496 }
497 }
498
499 spin_unlock(&test->lock);
500
501 return found;
502}
503
504
505
506
507
508
509static inline struct kunit_resource *
510kunit_find_named_resource(struct kunit *test,
511 const char *name)
512{
513 return kunit_find_resource(test, kunit_resource_name_match,
514 (void *)name);
515}
516
517
518
519
520
521
522
523
524
525
526int kunit_destroy_resource(struct kunit *test,
527 kunit_resource_match_t match,
528 void *match_data);
529
530static inline int kunit_destroy_named_resource(struct kunit *test,
531 const char *name)
532{
533 return kunit_destroy_resource(test, kunit_resource_name_match,
534 (void *)name);
535}
536
537
538
539
540
541
542
543
544
545
546
547void kunit_remove_resource(struct kunit *test, struct kunit_resource *res);
548
549
550
551
552
553
554
555
556
557
558
559void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp);
560
561
562
563
564
565
566void kunit_kfree(struct kunit *test, const void *ptr);
567
568
569
570
571
572
573
574
575
576static inline void *kunit_kzalloc(struct kunit *test, size_t size, gfp_t gfp)
577{
578 return kunit_kmalloc(test, size, gfp | __GFP_ZERO);
579}
580
581void kunit_cleanup(struct kunit *test);
582
583void kunit_log_append(char *log, const char *fmt, ...);
584
585
586
587
588
589#define kunit_log(lvl, test_or_suite, fmt, ...) \
590 do { \
591 printk(lvl fmt, ##__VA_ARGS__); \
592 kunit_log_append((test_or_suite)->log, fmt "\n", \
593 ##__VA_ARGS__); \
594 } while (0)
595
596#define kunit_printk(lvl, test, fmt, ...) \
597 kunit_log(lvl, test, KUNIT_SUBTEST_INDENT "# %s: " fmt, \
598 (test)->name, ##__VA_ARGS__)
599
600
601
602
603
604
605
606
607
608
609#define kunit_info(test, fmt, ...) \
610 kunit_printk(KERN_INFO, test, fmt, ##__VA_ARGS__)
611
612
613
614
615
616
617
618
619
620#define kunit_warn(test, fmt, ...) \
621 kunit_printk(KERN_WARNING, test, fmt, ##__VA_ARGS__)
622
623
624
625
626
627
628
629
630
631#define kunit_err(test, fmt, ...) \
632 kunit_printk(KERN_ERR, test, fmt, ##__VA_ARGS__)
633
634
635
636
637
638
639
640
641
642#define KUNIT_SUCCEED(test) do {} while (0)
643
644void kunit_do_assertion(struct kunit *test,
645 struct kunit_assert *assert,
646 bool pass,
647 const char *fmt, ...);
648
649#define KUNIT_ASSERTION(test, pass, assert_class, INITIALIZER, fmt, ...) do { \
650 struct assert_class __assertion = INITIALIZER; \
651 kunit_do_assertion(test, \
652 &__assertion.assert, \
653 pass, \
654 fmt, \
655 ##__VA_ARGS__); \
656} while (0)
657
658
659#define KUNIT_FAIL_ASSERTION(test, assert_type, fmt, ...) \
660 KUNIT_ASSERTION(test, \
661 false, \
662 kunit_fail_assert, \
663 KUNIT_INIT_FAIL_ASSERT_STRUCT(test, assert_type), \
664 fmt, \
665 ##__VA_ARGS__)
666
667
668
669
670
671
672
673
674
675
676
677
678#define KUNIT_FAIL(test, fmt, ...) \
679 KUNIT_FAIL_ASSERTION(test, \
680 KUNIT_EXPECTATION, \
681 fmt, \
682 ##__VA_ARGS__)
683
684#define KUNIT_UNARY_ASSERTION(test, \
685 assert_type, \
686 condition, \
687 expected_true, \
688 fmt, \
689 ...) \
690 KUNIT_ASSERTION(test, \
691 !!(condition) == !!expected_true, \
692 kunit_unary_assert, \
693 KUNIT_INIT_UNARY_ASSERT_STRUCT(test, \
694 assert_type, \
695 #condition, \
696 expected_true), \
697 fmt, \
698 ##__VA_ARGS__)
699
700#define KUNIT_TRUE_MSG_ASSERTION(test, assert_type, condition, fmt, ...) \
701 KUNIT_UNARY_ASSERTION(test, \
702 assert_type, \
703 condition, \
704 true, \
705 fmt, \
706 ##__VA_ARGS__)
707
708#define KUNIT_TRUE_ASSERTION(test, assert_type, condition) \
709 KUNIT_TRUE_MSG_ASSERTION(test, assert_type, condition, NULL)
710
711#define KUNIT_FALSE_MSG_ASSERTION(test, assert_type, condition, fmt, ...) \
712 KUNIT_UNARY_ASSERTION(test, \
713 assert_type, \
714 condition, \
715 false, \
716 fmt, \
717 ##__VA_ARGS__)
718
719#define KUNIT_FALSE_ASSERTION(test, assert_type, condition) \
720 KUNIT_FALSE_MSG_ASSERTION(test, assert_type, condition, NULL)
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736#define KUNIT_BASE_BINARY_ASSERTION(test, \
737 assert_class, \
738 ASSERT_CLASS_INIT, \
739 assert_type, \
740 left, \
741 op, \
742 right, \
743 fmt, \
744 ...) \
745do { \
746 typeof(left) __left = (left); \
747 typeof(right) __right = (right); \
748 ((void)__typecheck(__left, __right)); \
749 \
750 KUNIT_ASSERTION(test, \
751 __left op __right, \
752 assert_class, \
753 ASSERT_CLASS_INIT(test, \
754 assert_type, \
755 #op, \
756 #left, \
757 __left, \
758 #right, \
759 __right), \
760 fmt, \
761 ##__VA_ARGS__); \
762} while (0)
763
764#define KUNIT_BASE_EQ_MSG_ASSERTION(test, \
765 assert_class, \
766 ASSERT_CLASS_INIT, \
767 assert_type, \
768 left, \
769 right, \
770 fmt, \
771 ...) \
772 KUNIT_BASE_BINARY_ASSERTION(test, \
773 assert_class, \
774 ASSERT_CLASS_INIT, \
775 assert_type, \
776 left, ==, right, \
777 fmt, \
778 ##__VA_ARGS__)
779
780#define KUNIT_BASE_NE_MSG_ASSERTION(test, \
781 assert_class, \
782 ASSERT_CLASS_INIT, \
783 assert_type, \
784 left, \
785 right, \
786 fmt, \
787 ...) \
788 KUNIT_BASE_BINARY_ASSERTION(test, \
789 assert_class, \
790 ASSERT_CLASS_INIT, \
791 assert_type, \
792 left, !=, right, \
793 fmt, \
794 ##__VA_ARGS__)
795
796#define KUNIT_BASE_LT_MSG_ASSERTION(test, \
797 assert_class, \
798 ASSERT_CLASS_INIT, \
799 assert_type, \
800 left, \
801 right, \
802 fmt, \
803 ...) \
804 KUNIT_BASE_BINARY_ASSERTION(test, \
805 assert_class, \
806 ASSERT_CLASS_INIT, \
807 assert_type, \
808 left, <, right, \
809 fmt, \
810 ##__VA_ARGS__)
811
812#define KUNIT_BASE_LE_MSG_ASSERTION(test, \
813 assert_class, \
814 ASSERT_CLASS_INIT, \
815 assert_type, \
816 left, \
817 right, \
818 fmt, \
819 ...) \
820 KUNIT_BASE_BINARY_ASSERTION(test, \
821 assert_class, \
822 ASSERT_CLASS_INIT, \
823 assert_type, \
824 left, <=, right, \
825 fmt, \
826 ##__VA_ARGS__)
827
828#define KUNIT_BASE_GT_MSG_ASSERTION(test, \
829 assert_class, \
830 ASSERT_CLASS_INIT, \
831 assert_type, \
832 left, \
833 right, \
834 fmt, \
835 ...) \
836 KUNIT_BASE_BINARY_ASSERTION(test, \
837 assert_class, \
838 ASSERT_CLASS_INIT, \
839 assert_type, \
840 left, >, right, \
841 fmt, \
842 ##__VA_ARGS__)
843
844#define KUNIT_BASE_GE_MSG_ASSERTION(test, \
845 assert_class, \
846 ASSERT_CLASS_INIT, \
847 assert_type, \
848 left, \
849 right, \
850 fmt, \
851 ...) \
852 KUNIT_BASE_BINARY_ASSERTION(test, \
853 assert_class, \
854 ASSERT_CLASS_INIT, \
855 assert_type, \
856 left, >=, right, \
857 fmt, \
858 ##__VA_ARGS__)
859
860#define KUNIT_BINARY_EQ_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
861 KUNIT_BASE_EQ_MSG_ASSERTION(test, \
862 kunit_binary_assert, \
863 KUNIT_INIT_BINARY_ASSERT_STRUCT, \
864 assert_type, \
865 left, \
866 right, \
867 fmt, \
868 ##__VA_ARGS__)
869
870#define KUNIT_BINARY_EQ_ASSERTION(test, assert_type, left, right) \
871 KUNIT_BINARY_EQ_MSG_ASSERTION(test, \
872 assert_type, \
873 left, \
874 right, \
875 NULL)
876
877#define KUNIT_BINARY_PTR_EQ_MSG_ASSERTION(test, \
878 assert_type, \
879 left, \
880 right, \
881 fmt, \
882 ...) \
883 KUNIT_BASE_EQ_MSG_ASSERTION(test, \
884 kunit_binary_ptr_assert, \
885 KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT, \
886 assert_type, \
887 left, \
888 right, \
889 fmt, \
890 ##__VA_ARGS__)
891
892#define KUNIT_BINARY_PTR_EQ_ASSERTION(test, assert_type, left, right) \
893 KUNIT_BINARY_PTR_EQ_MSG_ASSERTION(test, \
894 assert_type, \
895 left, \
896 right, \
897 NULL)
898
899#define KUNIT_BINARY_NE_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
900 KUNIT_BASE_NE_MSG_ASSERTION(test, \
901 kunit_binary_assert, \
902 KUNIT_INIT_BINARY_ASSERT_STRUCT, \
903 assert_type, \
904 left, \
905 right, \
906 fmt, \
907 ##__VA_ARGS__)
908
909#define KUNIT_BINARY_NE_ASSERTION(test, assert_type, left, right) \
910 KUNIT_BINARY_NE_MSG_ASSERTION(test, \
911 assert_type, \
912 left, \
913 right, \
914 NULL)
915
916#define KUNIT_BINARY_PTR_NE_MSG_ASSERTION(test, \
917 assert_type, \
918 left, \
919 right, \
920 fmt, \
921 ...) \
922 KUNIT_BASE_NE_MSG_ASSERTION(test, \
923 kunit_binary_ptr_assert, \
924 KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT, \
925 assert_type, \
926 left, \
927 right, \
928 fmt, \
929 ##__VA_ARGS__)
930
931#define KUNIT_BINARY_PTR_NE_ASSERTION(test, assert_type, left, right) \
932 KUNIT_BINARY_PTR_NE_MSG_ASSERTION(test, \
933 assert_type, \
934 left, \
935 right, \
936 NULL)
937
938#define KUNIT_BINARY_LT_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
939 KUNIT_BASE_LT_MSG_ASSERTION(test, \
940 kunit_binary_assert, \
941 KUNIT_INIT_BINARY_ASSERT_STRUCT, \
942 assert_type, \
943 left, \
944 right, \
945 fmt, \
946 ##__VA_ARGS__)
947
948#define KUNIT_BINARY_LT_ASSERTION(test, assert_type, left, right) \
949 KUNIT_BINARY_LT_MSG_ASSERTION(test, \
950 assert_type, \
951 left, \
952 right, \
953 NULL)
954
955#define KUNIT_BINARY_PTR_LT_MSG_ASSERTION(test, \
956 assert_type, \
957 left, \
958 right, \
959 fmt, \
960 ...) \
961 KUNIT_BASE_LT_MSG_ASSERTION(test, \
962 kunit_binary_ptr_assert, \
963 KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT, \
964 assert_type, \
965 left, \
966 right, \
967 fmt, \
968 ##__VA_ARGS__)
969
970#define KUNIT_BINARY_PTR_LT_ASSERTION(test, assert_type, left, right) \
971 KUNIT_BINARY_PTR_LT_MSG_ASSERTION(test, \
972 assert_type, \
973 left, \
974 right, \
975 NULL)
976
977#define KUNIT_BINARY_LE_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
978 KUNIT_BASE_LE_MSG_ASSERTION(test, \
979 kunit_binary_assert, \
980 KUNIT_INIT_BINARY_ASSERT_STRUCT, \
981 assert_type, \
982 left, \
983 right, \
984 fmt, \
985 ##__VA_ARGS__)
986
987#define KUNIT_BINARY_LE_ASSERTION(test, assert_type, left, right) \
988 KUNIT_BINARY_LE_MSG_ASSERTION(test, \
989 assert_type, \
990 left, \
991 right, \
992 NULL)
993
994#define KUNIT_BINARY_PTR_LE_MSG_ASSERTION(test, \
995 assert_type, \
996 left, \
997 right, \
998 fmt, \
999 ...) \
1000 KUNIT_BASE_LE_MSG_ASSERTION(test, \
1001 kunit_binary_ptr_assert, \
1002 KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT, \
1003 assert_type, \
1004 left, \
1005 right, \
1006 fmt, \
1007 ##__VA_ARGS__)
1008
1009#define KUNIT_BINARY_PTR_LE_ASSERTION(test, assert_type, left, right) \
1010 KUNIT_BINARY_PTR_LE_MSG_ASSERTION(test, \
1011 assert_type, \
1012 left, \
1013 right, \
1014 NULL)
1015
1016#define KUNIT_BINARY_GT_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
1017 KUNIT_BASE_GT_MSG_ASSERTION(test, \
1018 kunit_binary_assert, \
1019 KUNIT_INIT_BINARY_ASSERT_STRUCT, \
1020 assert_type, \
1021 left, \
1022 right, \
1023 fmt, \
1024 ##__VA_ARGS__)
1025
1026#define KUNIT_BINARY_GT_ASSERTION(test, assert_type, left, right) \
1027 KUNIT_BINARY_GT_MSG_ASSERTION(test, \
1028 assert_type, \
1029 left, \
1030 right, \
1031 NULL)
1032
1033#define KUNIT_BINARY_PTR_GT_MSG_ASSERTION(test, \
1034 assert_type, \
1035 left, \
1036 right, \
1037 fmt, \
1038 ...) \
1039 KUNIT_BASE_GT_MSG_ASSERTION(test, \
1040 kunit_binary_ptr_assert, \
1041 KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT, \
1042 assert_type, \
1043 left, \
1044 right, \
1045 fmt, \
1046 ##__VA_ARGS__)
1047
1048#define KUNIT_BINARY_PTR_GT_ASSERTION(test, assert_type, left, right) \
1049 KUNIT_BINARY_PTR_GT_MSG_ASSERTION(test, \
1050 assert_type, \
1051 left, \
1052 right, \
1053 NULL)
1054
1055#define KUNIT_BINARY_GE_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
1056 KUNIT_BASE_GE_MSG_ASSERTION(test, \
1057 kunit_binary_assert, \
1058 KUNIT_INIT_BINARY_ASSERT_STRUCT, \
1059 assert_type, \
1060 left, \
1061 right, \
1062 fmt, \
1063 ##__VA_ARGS__)
1064
1065#define KUNIT_BINARY_GE_ASSERTION(test, assert_type, left, right) \
1066 KUNIT_BINARY_GE_MSG_ASSERTION(test, \
1067 assert_type, \
1068 left, \
1069 right, \
1070 NULL)
1071
1072#define KUNIT_BINARY_PTR_GE_MSG_ASSERTION(test, \
1073 assert_type, \
1074 left, \
1075 right, \
1076 fmt, \
1077 ...) \
1078 KUNIT_BASE_GE_MSG_ASSERTION(test, \
1079 kunit_binary_ptr_assert, \
1080 KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT, \
1081 assert_type, \
1082 left, \
1083 right, \
1084 fmt, \
1085 ##__VA_ARGS__)
1086
1087#define KUNIT_BINARY_PTR_GE_ASSERTION(test, assert_type, left, right) \
1088 KUNIT_BINARY_PTR_GE_MSG_ASSERTION(test, \
1089 assert_type, \
1090 left, \
1091 right, \
1092 NULL)
1093
1094#define KUNIT_BINARY_STR_ASSERTION(test, \
1095 assert_type, \
1096 left, \
1097 op, \
1098 right, \
1099 fmt, \
1100 ...) \
1101do { \
1102 typeof(left) __left = (left); \
1103 typeof(right) __right = (right); \
1104 \
1105 KUNIT_ASSERTION(test, \
1106 strcmp(__left, __right) op 0, \
1107 kunit_binary_str_assert, \
1108 KUNIT_INIT_BINARY_STR_ASSERT_STRUCT(test, \
1109 assert_type, \
1110 #op, \
1111 #left, \
1112 __left, \
1113 #right, \
1114 __right), \
1115 fmt, \
1116 ##__VA_ARGS__); \
1117} while (0)
1118
1119#define KUNIT_BINARY_STR_EQ_MSG_ASSERTION(test, \
1120 assert_type, \
1121 left, \
1122 right, \
1123 fmt, \
1124 ...) \
1125 KUNIT_BINARY_STR_ASSERTION(test, \
1126 assert_type, \
1127 left, ==, right, \
1128 fmt, \
1129 ##__VA_ARGS__)
1130
1131#define KUNIT_BINARY_STR_EQ_ASSERTION(test, assert_type, left, right) \
1132 KUNIT_BINARY_STR_EQ_MSG_ASSERTION(test, \
1133 assert_type, \
1134 left, \
1135 right, \
1136 NULL)
1137
1138#define KUNIT_BINARY_STR_NE_MSG_ASSERTION(test, \
1139 assert_type, \
1140 left, \
1141 right, \
1142 fmt, \
1143 ...) \
1144 KUNIT_BINARY_STR_ASSERTION(test, \
1145 assert_type, \
1146 left, !=, right, \
1147 fmt, \
1148 ##__VA_ARGS__)
1149
1150#define KUNIT_BINARY_STR_NE_ASSERTION(test, assert_type, left, right) \
1151 KUNIT_BINARY_STR_NE_MSG_ASSERTION(test, \
1152 assert_type, \
1153 left, \
1154 right, \
1155 NULL)
1156
1157#define KUNIT_PTR_NOT_ERR_OR_NULL_MSG_ASSERTION(test, \
1158 assert_type, \
1159 ptr, \
1160 fmt, \
1161 ...) \
1162do { \
1163 typeof(ptr) __ptr = (ptr); \
1164 \
1165 KUNIT_ASSERTION(test, \
1166 !IS_ERR_OR_NULL(__ptr), \
1167 kunit_ptr_not_err_assert, \
1168 KUNIT_INIT_PTR_NOT_ERR_STRUCT(test, \
1169 assert_type, \
1170 #ptr, \
1171 __ptr), \
1172 fmt, \
1173 ##__VA_ARGS__); \
1174} while (0)
1175
1176#define KUNIT_PTR_NOT_ERR_OR_NULL_ASSERTION(test, assert_type, ptr) \
1177 KUNIT_PTR_NOT_ERR_OR_NULL_MSG_ASSERTION(test, \
1178 assert_type, \
1179 ptr, \
1180 NULL)
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193#define KUNIT_EXPECT_TRUE(test, condition) \
1194 KUNIT_TRUE_ASSERTION(test, KUNIT_EXPECTATION, condition)
1195
1196#define KUNIT_EXPECT_TRUE_MSG(test, condition, fmt, ...) \
1197 KUNIT_TRUE_MSG_ASSERTION(test, \
1198 KUNIT_EXPECTATION, \
1199 condition, \
1200 fmt, \
1201 ##__VA_ARGS__)
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212#define KUNIT_EXPECT_FALSE(test, condition) \
1213 KUNIT_FALSE_ASSERTION(test, KUNIT_EXPECTATION, condition)
1214
1215#define KUNIT_EXPECT_FALSE_MSG(test, condition, fmt, ...) \
1216 KUNIT_FALSE_MSG_ASSERTION(test, \
1217 KUNIT_EXPECTATION, \
1218 condition, \
1219 fmt, \
1220 ##__VA_ARGS__)
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233#define KUNIT_EXPECT_EQ(test, left, right) \
1234 KUNIT_BINARY_EQ_ASSERTION(test, KUNIT_EXPECTATION, left, right)
1235
1236#define KUNIT_EXPECT_EQ_MSG(test, left, right, fmt, ...) \
1237 KUNIT_BINARY_EQ_MSG_ASSERTION(test, \
1238 KUNIT_EXPECTATION, \
1239 left, \
1240 right, \
1241 fmt, \
1242 ##__VA_ARGS__)
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255#define KUNIT_EXPECT_PTR_EQ(test, left, right) \
1256 KUNIT_BINARY_PTR_EQ_ASSERTION(test, \
1257 KUNIT_EXPECTATION, \
1258 left, \
1259 right)
1260
1261#define KUNIT_EXPECT_PTR_EQ_MSG(test, left, right, fmt, ...) \
1262 KUNIT_BINARY_PTR_EQ_MSG_ASSERTION(test, \
1263 KUNIT_EXPECTATION, \
1264 left, \
1265 right, \
1266 fmt, \
1267 ##__VA_ARGS__)
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280#define KUNIT_EXPECT_NE(test, left, right) \
1281 KUNIT_BINARY_NE_ASSERTION(test, KUNIT_EXPECTATION, left, right)
1282
1283#define KUNIT_EXPECT_NE_MSG(test, left, right, fmt, ...) \
1284 KUNIT_BINARY_NE_MSG_ASSERTION(test, \
1285 KUNIT_EXPECTATION, \
1286 left, \
1287 right, \
1288 fmt, \
1289 ##__VA_ARGS__)
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302#define KUNIT_EXPECT_PTR_NE(test, left, right) \
1303 KUNIT_BINARY_PTR_NE_ASSERTION(test, \
1304 KUNIT_EXPECTATION, \
1305 left, \
1306 right)
1307
1308#define KUNIT_EXPECT_PTR_NE_MSG(test, left, right, fmt, ...) \
1309 KUNIT_BINARY_PTR_NE_MSG_ASSERTION(test, \
1310 KUNIT_EXPECTATION, \
1311 left, \
1312 right, \
1313 fmt, \
1314 ##__VA_ARGS__)
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327#define KUNIT_EXPECT_LT(test, left, right) \
1328 KUNIT_BINARY_LT_ASSERTION(test, KUNIT_EXPECTATION, left, right)
1329
1330#define KUNIT_EXPECT_LT_MSG(test, left, right, fmt, ...) \
1331 KUNIT_BINARY_LT_MSG_ASSERTION(test, \
1332 KUNIT_EXPECTATION, \
1333 left, \
1334 right, \
1335 fmt, \
1336 ##__VA_ARGS__)
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349#define KUNIT_EXPECT_LE(test, left, right) \
1350 KUNIT_BINARY_LE_ASSERTION(test, KUNIT_EXPECTATION, left, right)
1351
1352#define KUNIT_EXPECT_LE_MSG(test, left, right, fmt, ...) \
1353 KUNIT_BINARY_LE_MSG_ASSERTION(test, \
1354 KUNIT_EXPECTATION, \
1355 left, \
1356 right, \
1357 fmt, \
1358 ##__VA_ARGS__)
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371#define KUNIT_EXPECT_GT(test, left, right) \
1372 KUNIT_BINARY_GT_ASSERTION(test, KUNIT_EXPECTATION, left, right)
1373
1374#define KUNIT_EXPECT_GT_MSG(test, left, right, fmt, ...) \
1375 KUNIT_BINARY_GT_MSG_ASSERTION(test, \
1376 KUNIT_EXPECTATION, \
1377 left, \
1378 right, \
1379 fmt, \
1380 ##__VA_ARGS__)
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393#define KUNIT_EXPECT_GE(test, left, right) \
1394 KUNIT_BINARY_GE_ASSERTION(test, KUNIT_EXPECTATION, left, right)
1395
1396#define KUNIT_EXPECT_GE_MSG(test, left, right, fmt, ...) \
1397 KUNIT_BINARY_GE_MSG_ASSERTION(test, \
1398 KUNIT_EXPECTATION, \
1399 left, \
1400 right, \
1401 fmt, \
1402 ##__VA_ARGS__)
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415#define KUNIT_EXPECT_STREQ(test, left, right) \
1416 KUNIT_BINARY_STR_EQ_ASSERTION(test, KUNIT_EXPECTATION, left, right)
1417
1418#define KUNIT_EXPECT_STREQ_MSG(test, left, right, fmt, ...) \
1419 KUNIT_BINARY_STR_EQ_MSG_ASSERTION(test, \
1420 KUNIT_EXPECTATION, \
1421 left, \
1422 right, \
1423 fmt, \
1424 ##__VA_ARGS__)
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437#define KUNIT_EXPECT_STRNEQ(test, left, right) \
1438 KUNIT_BINARY_STR_NE_ASSERTION(test, KUNIT_EXPECTATION, left, right)
1439
1440#define KUNIT_EXPECT_STRNEQ_MSG(test, left, right, fmt, ...) \
1441 KUNIT_BINARY_STR_NE_MSG_ASSERTION(test, \
1442 KUNIT_EXPECTATION, \
1443 left, \
1444 right, \
1445 fmt, \
1446 ##__VA_ARGS__)
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458#define KUNIT_EXPECT_NOT_ERR_OR_NULL(test, ptr) \
1459 KUNIT_PTR_NOT_ERR_OR_NULL_ASSERTION(test, KUNIT_EXPECTATION, ptr)
1460
1461#define KUNIT_EXPECT_NOT_ERR_OR_NULL_MSG(test, ptr, fmt, ...) \
1462 KUNIT_PTR_NOT_ERR_OR_NULL_MSG_ASSERTION(test, \
1463 KUNIT_EXPECTATION, \
1464 ptr, \
1465 fmt, \
1466 ##__VA_ARGS__)
1467
1468#define KUNIT_ASSERT_FAILURE(test, fmt, ...) \
1469 KUNIT_FAIL_ASSERTION(test, KUNIT_ASSERTION, fmt, ##__VA_ARGS__)
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482#define KUNIT_ASSERT_TRUE(test, condition) \
1483 KUNIT_TRUE_ASSERTION(test, KUNIT_ASSERTION, condition)
1484
1485#define KUNIT_ASSERT_TRUE_MSG(test, condition, fmt, ...) \
1486 KUNIT_TRUE_MSG_ASSERTION(test, \
1487 KUNIT_ASSERTION, \
1488 condition, \
1489 fmt, \
1490 ##__VA_ARGS__)
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501#define KUNIT_ASSERT_FALSE(test, condition) \
1502 KUNIT_FALSE_ASSERTION(test, KUNIT_ASSERTION, condition)
1503
1504#define KUNIT_ASSERT_FALSE_MSG(test, condition, fmt, ...) \
1505 KUNIT_FALSE_MSG_ASSERTION(test, \
1506 KUNIT_ASSERTION, \
1507 condition, \
1508 fmt, \
1509 ##__VA_ARGS__)
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521#define KUNIT_ASSERT_EQ(test, left, right) \
1522 KUNIT_BINARY_EQ_ASSERTION(test, KUNIT_ASSERTION, left, right)
1523
1524#define KUNIT_ASSERT_EQ_MSG(test, left, right, fmt, ...) \
1525 KUNIT_BINARY_EQ_MSG_ASSERTION(test, \
1526 KUNIT_ASSERTION, \
1527 left, \
1528 right, \
1529 fmt, \
1530 ##__VA_ARGS__)
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542#define KUNIT_ASSERT_PTR_EQ(test, left, right) \
1543 KUNIT_BINARY_PTR_EQ_ASSERTION(test, KUNIT_ASSERTION, left, right)
1544
1545#define KUNIT_ASSERT_PTR_EQ_MSG(test, left, right, fmt, ...) \
1546 KUNIT_BINARY_PTR_EQ_MSG_ASSERTION(test, \
1547 KUNIT_ASSERTION, \
1548 left, \
1549 right, \
1550 fmt, \
1551 ##__VA_ARGS__)
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563#define KUNIT_ASSERT_NE(test, left, right) \
1564 KUNIT_BINARY_NE_ASSERTION(test, KUNIT_ASSERTION, left, right)
1565
1566#define KUNIT_ASSERT_NE_MSG(test, left, right, fmt, ...) \
1567 KUNIT_BINARY_NE_MSG_ASSERTION(test, \
1568 KUNIT_ASSERTION, \
1569 left, \
1570 right, \
1571 fmt, \
1572 ##__VA_ARGS__)
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585#define KUNIT_ASSERT_PTR_NE(test, left, right) \
1586 KUNIT_BINARY_PTR_NE_ASSERTION(test, KUNIT_ASSERTION, left, right)
1587
1588#define KUNIT_ASSERT_PTR_NE_MSG(test, left, right, fmt, ...) \
1589 KUNIT_BINARY_PTR_NE_MSG_ASSERTION(test, \
1590 KUNIT_ASSERTION, \
1591 left, \
1592 right, \
1593 fmt, \
1594 ##__VA_ARGS__)
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606#define KUNIT_ASSERT_LT(test, left, right) \
1607 KUNIT_BINARY_LT_ASSERTION(test, KUNIT_ASSERTION, left, right)
1608
1609#define KUNIT_ASSERT_LT_MSG(test, left, right, fmt, ...) \
1610 KUNIT_BINARY_LT_MSG_ASSERTION(test, \
1611 KUNIT_ASSERTION, \
1612 left, \
1613 right, \
1614 fmt, \
1615 ##__VA_ARGS__)
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627#define KUNIT_ASSERT_LE(test, left, right) \
1628 KUNIT_BINARY_LE_ASSERTION(test, KUNIT_ASSERTION, left, right)
1629
1630#define KUNIT_ASSERT_LE_MSG(test, left, right, fmt, ...) \
1631 KUNIT_BINARY_LE_MSG_ASSERTION(test, \
1632 KUNIT_ASSERTION, \
1633 left, \
1634 right, \
1635 fmt, \
1636 ##__VA_ARGS__)
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649#define KUNIT_ASSERT_GT(test, left, right) \
1650 KUNIT_BINARY_GT_ASSERTION(test, KUNIT_ASSERTION, left, right)
1651
1652#define KUNIT_ASSERT_GT_MSG(test, left, right, fmt, ...) \
1653 KUNIT_BINARY_GT_MSG_ASSERTION(test, \
1654 KUNIT_ASSERTION, \
1655 left, \
1656 right, \
1657 fmt, \
1658 ##__VA_ARGS__)
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671#define KUNIT_ASSERT_GE(test, left, right) \
1672 KUNIT_BINARY_GE_ASSERTION(test, KUNIT_ASSERTION, left, right)
1673
1674#define KUNIT_ASSERT_GE_MSG(test, left, right, fmt, ...) \
1675 KUNIT_BINARY_GE_MSG_ASSERTION(test, \
1676 KUNIT_ASSERTION, \
1677 left, \
1678 right, \
1679 fmt, \
1680 ##__VA_ARGS__)
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692#define KUNIT_ASSERT_STREQ(test, left, right) \
1693 KUNIT_BINARY_STR_EQ_ASSERTION(test, KUNIT_ASSERTION, left, right)
1694
1695#define KUNIT_ASSERT_STREQ_MSG(test, left, right, fmt, ...) \
1696 KUNIT_BINARY_STR_EQ_MSG_ASSERTION(test, \
1697 KUNIT_ASSERTION, \
1698 left, \
1699 right, \
1700 fmt, \
1701 ##__VA_ARGS__)
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714#define KUNIT_ASSERT_STRNEQ(test, left, right) \
1715 KUNIT_BINARY_STR_NE_ASSERTION(test, KUNIT_ASSERTION, left, right)
1716
1717#define KUNIT_ASSERT_STRNEQ_MSG(test, left, right, fmt, ...) \
1718 KUNIT_BINARY_STR_NE_MSG_ASSERTION(test, \
1719 KUNIT_ASSERTION, \
1720 left, \
1721 right, \
1722 fmt, \
1723 ##__VA_ARGS__)
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735#define KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr) \
1736 KUNIT_PTR_NOT_ERR_OR_NULL_ASSERTION(test, KUNIT_ASSERTION, ptr)
1737
1738#define KUNIT_ASSERT_NOT_ERR_OR_NULL_MSG(test, ptr, fmt, ...) \
1739 KUNIT_PTR_NOT_ERR_OR_NULL_MSG_ASSERTION(test, \
1740 KUNIT_ASSERTION, \
1741 ptr, \
1742 fmt, \
1743 ##__VA_ARGS__)
1744
1745#endif
1746