1 /*
2 * Nsock regression test suite
3 * Same license as nmap -- see https://nmap.org/book/man-legal.html
4 */
5
6 #include "test-common.h"
7
8
9 struct log_test_data {
10 nsock_pool nsp;
11 nsock_loglevel_t current_level;
12 unsigned int got_dbgfull: 1;
13 unsigned int got_dbg: 1;
14 unsigned int got_info: 1;
15 unsigned int got_error: 1;
16 unsigned int total;
17 int errcode;
18 };
19
20 static struct log_test_data *GlobalLTD;
21
log_handler(const struct nsock_log_rec * rec)22 static void log_handler(const struct nsock_log_rec *rec) {
23 GlobalLTD->total++;
24 switch(rec->level) {
25 case NSOCK_LOG_DBG_ALL:
26 GlobalLTD->got_dbgfull = 1;
27 break;
28
29 case NSOCK_LOG_DBG:
30 GlobalLTD->got_dbg = 1;
31 break;
32
33 case NSOCK_LOG_INFO:
34 GlobalLTD->got_info = 1;
35 break;
36
37 case NSOCK_LOG_ERROR:
38 GlobalLTD->got_error = 1;
39 break;
40
41 default:
42 fprintf(stderr, "UNEXPECTED LOG LEVEL (%d)!\n", (int)rec->level);
43 GlobalLTD->errcode = -EINVAL;
44 }
45 }
46
nop_handler(nsock_pool nsp,nsock_event nse,void * udata)47 static void nop_handler(nsock_pool nsp, nsock_event nse, void *udata) {
48 }
49
check_loglevel(struct log_test_data * ltd,nsock_loglevel_t level)50 static int check_loglevel(struct log_test_data *ltd, nsock_loglevel_t level) {
51 int rc = 0;
52 nsock_event_id id;
53
54 nsock_set_loglevel(level);
55
56 ltd->current_level = level;
57
58 ltd->got_dbgfull = 0;
59 ltd->got_dbg = 0;
60 ltd->got_info = 0;
61 ltd->got_error = 0;
62
63 ltd->total = 0;
64 ltd->errcode = 0;
65
66 id = nsock_timer_create(ltd->nsp, nop_handler, 200, NULL);
67 nsock_event_cancel(ltd->nsp, id, 0);
68
69 if (ltd->errcode)
70 return ltd->errcode;
71
72 if (ltd->total < 1)
73 return -EINVAL;
74
75 return rc;
76 }
77
check_errlevel(struct log_test_data * ltd,nsock_loglevel_t level)78 static int check_errlevel(struct log_test_data *ltd, nsock_loglevel_t level) {
79 nsock_event_id id;
80
81 nsock_set_loglevel(level);
82
83 ltd->current_level = level;
84
85 ltd->got_dbgfull = 0;
86 ltd->got_dbg = 0;
87 ltd->got_info = 0;
88 ltd->got_error = 0;
89
90 ltd->total = 0;
91 ltd->errcode = 0;
92
93 id = nsock_timer_create(ltd->nsp, nop_handler, 200, NULL);
94 nsock_event_cancel(ltd->nsp, id, 0);
95
96 if (ltd->errcode)
97 return ltd->errcode;
98
99 if (ltd->total > 0)
100 return -EINVAL;
101
102 return 0;
103 }
104
log_setup(void ** tdata)105 static int log_setup(void **tdata) {
106 struct log_test_data *ltd;
107
108 ltd = calloc(1, sizeof(struct log_test_data));
109 if (ltd == NULL)
110 return -ENOMEM;
111
112 ltd->nsp = nsock_pool_new(ltd);
113 AssertNonNull(ltd->nsp);
114
115 *tdata = GlobalLTD = ltd;
116 return 0;
117 }
118
log_teardown(void * tdata)119 static int log_teardown(void *tdata) {
120 struct log_test_data *ltd = (struct log_test_data *)tdata;
121
122 if (tdata) {
123 nsock_pool_delete(ltd->nsp);
124 free(tdata);
125 }
126 GlobalLTD = NULL;
127 return 0;
128 }
129
log_check_std_levels(void * tdata)130 static int log_check_std_levels(void *tdata) {
131 struct log_test_data *ltd = (struct log_test_data *)tdata;
132 nsock_loglevel_t lvl;
133 int rc = 0;
134
135 nsock_set_log_function(log_handler);
136
137 for (lvl = NSOCK_LOG_DBG_ALL; lvl < NSOCK_LOG_ERROR; lvl++) {
138 rc = check_loglevel(ltd, lvl);
139 if (rc)
140 return rc;
141 }
142
143 return 0;
144 }
145
log_check_err_levels(void * tdata)146 static int log_check_err_levels(void *tdata) {
147 struct log_test_data *ltd = (struct log_test_data *)tdata;
148 nsock_loglevel_t lvl;
149 int rc = 0;
150
151 nsock_set_log_function(log_handler);
152
153 for (lvl = NSOCK_LOG_ERROR; lvl <= NSOCK_LOG_NONE; lvl++) {
154 rc = check_errlevel(ltd, NSOCK_LOG_ERROR);
155 if (rc)
156 return rc;
157 }
158
159 return 0;
160 }
161
162
163 const struct test_case TestLogLevels = {
164 .t_name = "set standard log levels",
165 .t_setup = log_setup,
166 .t_run = log_check_std_levels,
167 .t_teardown = log_teardown
168 };
169
170 const struct test_case TestErrLevels = {
171 .t_name = "check error log levels",
172 .t_setup = log_setup,
173 .t_run = log_check_err_levels,
174 .t_teardown = log_teardown
175 };
176