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