1 /* Copyright (C) 2007-2010 Open Information Security Foundation
2  *
3  * You can copy, redistribute or modify this Program under the terms of
4  * the GNU General Public License version 2 as published by the Free
5  * Software Foundation.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * version 2 along with this program; if not, write to the Free Software
14  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
15  * 02110-1301, USA.
16  */
17 
18 /**
19  * \file
20  *
21  * \author Victor Julien <victor@inliniac.net>
22  * \author Breno Silva <breno.silva@gmail.com>
23  *
24  * Unit test framework
25  */
26 
27 /**
28  * \addtogroup Testing
29  *
30  * @{
31  */
32 
33 #ifndef __UTIL_UNITTEST_H__
34 #define __UTIL_UNITTEST_H__
35 
36 #ifdef UNITTESTS
37 
38 typedef struct UtTest_
39 {
40     const char *name;
41     int(*TestFn)(void);
42 
43     struct UtTest_ *next;
44 
45 } UtTest;
46 
47 void UtRegisterTest(const char *name, int(*TestFn)(void));
48 uint32_t UtRunTests(const char *regex_arg);
49 void UtInitialize(void);
50 void UtCleanup(void);
51 int UtRunSelftest (const char *regex_arg);
52 void UtListTests(const char *regex_arg);
53 void UtRunModeRegister(void);
54 
55 extern int unittests_fatal;
56 
57 /**
58  * \brief Fail a test.
59  */
60 #define FAIL do {                                      \
61         if (unittests_fatal) {                         \
62             BUG_ON(1);                                 \
63         } else {                                       \
64             return 0;                                  \
65         }                                              \
66     } while (0)
67 
68 /**
69  * \brief Fail a test if expression evaluates to false.
70  */
71 #define FAIL_IF(expr) do {                             \
72         if (unittests_fatal) {                         \
73             BUG_ON(expr);                              \
74         } else if (expr) {                             \
75             return 0;                                  \
76         }                                              \
77     } while (0)
78 
79 /**
80  * \brief Fail a test if expression to true.
81  */
82 #define FAIL_IF_NOT(expr) do { \
83         FAIL_IF(!(expr));      \
84     } while (0)
85 
86 /**
87  * \brief Fail a test if expression evaluates to NULL.
88  */
89 #define FAIL_IF_NULL(expr) do {                 \
90         FAIL_IF(NULL == expr);                  \
91     } while (0)
92 
93 /**
94  * \brief Fail a test if expression evaluates to non-NULL.
95  */
96 #define FAIL_IF_NOT_NULL(expr) do { \
97         FAIL_IF(NULL != expr);      \
98     } while (0)
99 
100 /**
101  * \brief Pass the test.
102  *
103  * Only to be used at the end of a function instead instead of "return 1."
104  */
105 #define PASS do { \
106         return 1; \
107     } while (0)
108 
109 #endif
110 
111 /**
112  * \brief Pass the test if expression evaluates to true.
113  *
114  * Only to be used at the end of a function instead of returning the
115  * result of an expression.
116  */
117 #define PASS_IF(expr) do { \
118         FAIL_IF(!(expr));  \
119         PASS;              \
120     } while (0)
121 
122 #endif /* __UTIL_UNITTEST_H__ */
123 
124 /**
125  * @}
126  */
127