diff options
Diffstat (limited to 'src/util/test_common_logging_runtime_loglevels.c')
-rw-r--r-- | src/util/test_common_logging_runtime_loglevels.c | 364 |
1 files changed, 183 insertions, 181 deletions
diff --git a/src/util/test_common_logging_runtime_loglevels.c b/src/util/test_common_logging_runtime_loglevels.c index 6485e4e4a..5b89b7221 100644 --- a/src/util/test_common_logging_runtime_loglevels.c +++ b/src/util/test_common_logging_runtime_loglevels.c | |||
@@ -42,108 +42,110 @@ static struct GNUNET_DISK_PipeHandle *pipe_stdout; | |||
42 | 42 | ||
43 | static GNUNET_SCHEDULER_TaskIdentifier die_task; | 43 | static GNUNET_SCHEDULER_TaskIdentifier die_task; |
44 | 44 | ||
45 | static void runone (); | 45 | static void |
46 | runone (); | ||
46 | 47 | ||
47 | static void | 48 | static void |
48 | end_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | 49 | end_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) |
49 | { | 50 | { |
50 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Ending phase %d, ok is %d\n", phase, | 51 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Ending phase %d, ok is %d\n", phase, |
51 | ok); | 52 | ok); |
52 | if (0 != GNUNET_OS_process_kill (proc, SIGTERM)) | 53 | if (0 != GNUNET_OS_process_kill (proc, SIGTERM)) |
53 | { | 54 | { |
54 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill"); | 55 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill"); |
55 | } | 56 | } |
56 | GNUNET_OS_process_wait (proc); | 57 | GNUNET_OS_process_wait (proc); |
57 | GNUNET_OS_process_close (proc); | 58 | GNUNET_OS_process_close (proc); |
58 | proc = NULL; | 59 | proc = NULL; |
59 | GNUNET_DISK_pipe_close (pipe_stdout); | 60 | GNUNET_DISK_pipe_close (pipe_stdout); |
60 | if (ok == 1) | 61 | if (ok == 1) |
62 | { | ||
63 | if (phase < 9) | ||
61 | { | 64 | { |
62 | if (phase < 9) | 65 | phase += 1; |
63 | { | 66 | runone (); |
64 | phase += 1; | ||
65 | runone (); | ||
66 | } | ||
67 | else | ||
68 | ok = 0; | ||
69 | } | 67 | } |
68 | else | ||
69 | ok = 0; | ||
70 | } | ||
70 | else | 71 | else |
71 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "failing\n"); | 72 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "failing\n"); |
72 | } | 73 | } |
73 | 74 | ||
74 | static char * | 75 | static char * |
75 | read_output_line (int phase_from1, int phase_to1, int phase_from2, | 76 | read_output_line (int phase_from1, int phase_to1, int phase_from2, |
76 | int phase_to2, char c, char *expect_level, | 77 | int phase_to2, char c, char *expect_level, |
77 | long delay_morethan, long delay_lessthan, int phase, | 78 | long delay_morethan, long delay_lessthan, int phase, char *p, |
78 | char *p, int *len, long *delay, char level[8]) | 79 | int *len, long *delay, char level[8]) |
79 | { | 80 | { |
80 | char *r = p; | 81 | char *r = p; |
81 | char t[7]; | 82 | char t[7]; |
82 | int i, j, stop = 0; | 83 | int i, j, stop = 0; |
84 | |||
83 | j = 0; | 85 | j = 0; |
84 | int stage = 0; | 86 | int stage = 0; |
87 | |||
85 | if (!(phase >= phase_from1 && phase <= phase_to1) && | 88 | if (!(phase >= phase_from1 && phase <= phase_to1) && |
86 | !(phase >= phase_from2 && phase <= phase_to2)) | 89 | !(phase >= phase_from2 && phase <= phase_to2)) |
87 | return p; | 90 | return p; |
88 | #if 0 | 91 | #if 0 |
89 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 92 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
90 | "Trying to match '%c%s \\d\\r\\n' on %s\n", c, expect_level, p); | 93 | "Trying to match '%c%s \\d\\r\\n' on %s\n", c, expect_level, p); |
91 | #endif | 94 | #endif |
92 | for (i = 0; i < *len && !stop; i++) | 95 | for (i = 0; i < *len && !stop; i++) |
96 | { | ||
97 | switch (stage) | ||
93 | { | 98 | { |
94 | switch (stage) | 99 | case 0: /* read first char */ |
95 | { | 100 | if (r[i] != c) |
96 | case 0: /* read first char */ | 101 | { |
97 | if (r[i] != c) | 102 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Expected '%c', but got '%c'\n", c, |
98 | { | 103 | r[i]); |
99 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 104 | GNUNET_break (0); |
100 | "Expected '%c', but got '%c'\n", c, r[i]); | 105 | return NULL; |
101 | GNUNET_break (0); | 106 | } |
102 | return NULL; | 107 | stage += 1; |
103 | } | 108 | break; |
104 | stage += 1; | 109 | case 1: /* read at most 7 char-long error level string, finished by ' ' */ |
105 | break; | 110 | if (r[i] == ' ') |
106 | case 1: /* read at most 7 char-long error level string, finished by ' ' */ | 111 | { |
107 | if (r[i] == ' ') | 112 | level[j] = '\0'; |
108 | { | 113 | stage += 1; |
109 | level[j] = '\0'; | 114 | j = 0; |
110 | stage += 1; | 115 | } |
111 | j = 0; | 116 | else if (i == 8) |
112 | } | 117 | { |
113 | else if (i == 8) | 118 | GNUNET_break (0); |
114 | { | 119 | ok = 2; |
115 | GNUNET_break (0); | 120 | return NULL; |
116 | ok = 2; | 121 | } |
117 | return NULL; | 122 | else |
118 | } | 123 | level[j++] = r[i]; |
119 | else | 124 | break; |
120 | level[j++] = r[i]; | 125 | case 2: /* read the delay, finished by '\n' */ |
121 | break; | 126 | t[j++] = r[i]; |
122 | case 2: /* read the delay, finished by '\n' */ | ||
123 | t[j++] = r[i]; | ||
124 | #if WINDOWS | 127 | #if WINDOWS |
125 | if (r[i] == '\r' && r[i + 1] == '\n') | 128 | if (r[i] == '\r' && r[i + 1] == '\n') |
126 | { | 129 | { |
127 | i += 1; | 130 | i += 1; |
128 | t[j - 1] = '\0'; | 131 | t[j - 1] = '\0'; |
129 | *delay = strtol (t, NULL, 10); | 132 | *delay = strtol (t, NULL, 10); |
130 | stop = 1; | 133 | stop = 1; |
131 | } | 134 | } |
132 | #else | 135 | #else |
133 | if (r[i] == '\n') | 136 | if (r[i] == '\n') |
134 | { | 137 | { |
135 | t[j - 1] = '\0'; | 138 | t[j - 1] = '\0'; |
136 | *delay = strtol (t, NULL, 10); | 139 | *delay = strtol (t, NULL, 10); |
137 | stop = 1; | 140 | stop = 1; |
138 | } | 141 | } |
139 | #endif | 142 | #endif |
140 | break; | 143 | break; |
141 | } | ||
142 | } | 144 | } |
143 | if (!stop || strcmp (expect_level, level) != 0 || *delay < 0 | 145 | } |
144 | || *delay > 1000 | 146 | if (!stop || strcmp (expect_level, level) != 0 || *delay < 0 || *delay > 1000 |
145 | || (!((*delay < delay_lessthan) || !(*delay > delay_morethan)) | 147 | || (!((*delay < delay_lessthan) || !(*delay > delay_morethan)) && c != '1' |
146 | && c != '1' && c != '2')) | 148 | && c != '2')) |
147 | return NULL; | 149 | return NULL; |
148 | *len = *len - i; | 150 | *len = *len - i; |
149 | return &r[i]; | 151 | return &r[i]; |
@@ -162,20 +164,20 @@ read_call (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
162 | long delays[8]; | 164 | long delays[8]; |
163 | int rd; | 165 | int rd; |
164 | 166 | ||
165 | rd = | 167 | rd = GNUNET_DISK_file_read (stdout_read_handle, buf_ptr, |
166 | GNUNET_DISK_file_read (stdout_read_handle, buf_ptr, sizeof (buf) - bytes); | 168 | sizeof (buf) - bytes); |
167 | if (rd > 0) | 169 | if (rd > 0) |
168 | { | 170 | { |
169 | buf_ptr += rd; | 171 | buf_ptr += rd; |
170 | bytes += rd; | 172 | bytes += rd; |
171 | #if VERBOSE | 173 | #if VERBOSE |
172 | fprintf (stderr, "got %d bytes, reading more\n", rd); | 174 | fprintf (stderr, "got %d bytes, reading more\n", rd); |
173 | #endif | 175 | #endif |
174 | GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, | 176 | GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, |
175 | stdout_read_handle, &read_call, | 177 | stdout_read_handle, &read_call, |
176 | (void *) stdout_read_handle); | 178 | (void *) stdout_read_handle); |
177 | return; | 179 | return; |
178 | } | 180 | } |
179 | 181 | ||
180 | #if VERBOSE | 182 | #if VERBOSE |
181 | fprintf (stderr, "bytes is %d:%s\n", bytes, buf); | 183 | fprintf (stderr, "bytes is %d:%s\n", bytes, buf); |
@@ -197,64 +199,65 @@ read_call (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
197 | * | 9 * * * * | 199 | * | 9 * * * * |
198 | */ | 200 | */ |
199 | char *p = buf; | 201 | char *p = buf; |
202 | |||
200 | if (bytes == 20 * 16 || | 203 | if (bytes == 20 * 16 || |
201 | !(p = | 204 | !(p = |
202 | read_output_line (0, 3, 4, 9, 'L', "ERROR", -1, 1, phase, p, &bytes, | 205 | read_output_line (0, 3, 4, 9, 'L', "ERROR", -1, 1, phase, p, &bytes, |
203 | &delay, level)) | 206 | &delay, level)) || |
204 | || !(p = | 207 | !(p = |
205 | read_output_line (0, 3, 4, 9, '1', "ERROR", 200, 400, phase, p, | 208 | read_output_line (0, 3, 4, 9, '1', "ERROR", 200, 400, phase, p, &bytes, |
206 | &bytes, &delays[0], level)) | 209 | &delays[0], level)) || |
207 | || !(p = | 210 | !(p = |
208 | read_output_line (1, 3, 5, 9, 'L', "WARNING", -1, 1, phase, p, | 211 | read_output_line (1, 3, 5, 9, 'L', "WARNING", -1, 1, phase, p, &bytes, |
209 | &bytes, &delay, level)) | 212 | &delay, level)) || |
210 | || !(p = | 213 | !(p = |
211 | read_output_line (0, 3, 4, 9, '1', "WARNING", 200, 400, phase, p, | 214 | read_output_line (0, 3, 4, 9, '1', "WARNING", 200, 400, phase, p, |
212 | &bytes, &delays[1], level)) | 215 | &bytes, &delays[1], level)) || |
213 | || !(p = | 216 | !(p = |
214 | read_output_line (2, 3, 6, 7, 'L', "INFO", -1, 1, phase, p, &bytes, | 217 | read_output_line (2, 3, 6, 7, 'L', "INFO", -1, 1, phase, p, &bytes, |
215 | &delay, level)) | 218 | &delay, level)) || |
216 | || !(p = | 219 | !(p = |
217 | read_output_line (0, 3, 4, 9, '1', "INFO", 200, 400, phase, p, | 220 | read_output_line (0, 3, 4, 9, '1', "INFO", 200, 400, phase, p, &bytes, |
218 | &bytes, &delays[2], level)) | 221 | &delays[2], level)) || |
219 | || !(p = | 222 | !(p = |
220 | read_output_line (3, 3, 7, 7, 'L', "DEBUG", -1, 1, phase, p, | 223 | read_output_line (3, 3, 7, 7, 'L', "DEBUG", -1, 1, phase, p, &bytes, |
221 | &bytes, &delay, level)) | 224 | &delay, level)) || |
222 | || !(p = | 225 | !(p = |
223 | read_output_line (0, 3, 4, 9, '1', "DEBUG", 200, 400, phase, p, | 226 | read_output_line (0, 3, 4, 9, '1', "DEBUG", 200, 400, phase, p, &bytes, |
224 | &bytes, &delays[3], level)) | 227 | &delays[3], level)) || |
225 | || !(p = | 228 | !(p = |
226 | read_output_line (0, 3, 4, 9, 'L', "ERROR", -1, 1, phase, p, | 229 | read_output_line (0, 3, 4, 9, 'L', "ERROR", -1, 1, phase, p, &bytes, |
227 | &bytes, &delay, level)) | 230 | &delay, level)) || |
228 | || !(p = | 231 | !(p = |
229 | read_output_line (0, 3, 4, 9, '2', "ERROR", 200, 400, phase, p, | 232 | read_output_line (0, 3, 4, 9, '2', "ERROR", 200, 400, phase, p, &bytes, |
230 | &bytes, &delays[4], level)) | 233 | &delays[4], level)) || |
231 | || !(p = | 234 | !(p = |
232 | read_output_line (0, 3, 5, 9, 'L', "WARNING", -1, 1, phase, p, | 235 | read_output_line (0, 3, 5, 9, 'L', "WARNING", -1, 1, phase, p, &bytes, |
233 | &bytes, &delay, level)) | 236 | &delay, level)) || |
234 | || !(p = | 237 | !(p = |
235 | read_output_line (0, 3, 4, 9, '2', "WARNING", 200, 400, phase, p, | 238 | read_output_line (0, 3, 4, 9, '2', "WARNING", 200, 400, phase, p, |
236 | &bytes, &delays[5], level)) | 239 | &bytes, &delays[5], level)) || |
237 | || !(p = | 240 | !(p = |
238 | read_output_line (-1, -1, 6, 7, 'L', "INFO", -1, 1, phase, p, | 241 | read_output_line (-1, -1, 6, 7, 'L', "INFO", -1, 1, phase, p, &bytes, |
239 | &bytes, &delay, level)) | 242 | &delay, level)) || |
240 | || !(p = | 243 | !(p = |
241 | read_output_line (0, 3, 4, 9, '2', "INFO", 200, 400, phase, p, | 244 | read_output_line (0, 3, 4, 9, '2', "INFO", 200, 400, phase, p, &bytes, |
242 | &bytes, &delays[6], level)) | 245 | &delays[6], level)) || |
243 | || !(p = | 246 | !(p = |
244 | read_output_line (-1, -1, 7, 7, 'L', "DEBUG", -1, 1, phase, p, | 247 | read_output_line (-1, -1, 7, 7, 'L', "DEBUG", -1, 1, phase, p, &bytes, |
245 | &bytes, &delay, level)) | 248 | &delay, level)) || |
246 | || !(p = | 249 | !(p = |
247 | read_output_line (0, 3, 4, 9, '2', "DEBUG", 200, 400, phase, p, | 250 | read_output_line (0, 3, 4, 9, '2', "DEBUG", 200, 400, phase, p, &bytes, |
248 | &bytes, &delays[7], level))) | 251 | &delays[7], level))) |
249 | { | 252 | { |
250 | if (bytes == 20 * 16) | 253 | if (bytes == 20 * 16) |
251 | fprintf (stderr, "Ran out of buffer space!\n"); | 254 | fprintf (stderr, "Ran out of buffer space!\n"); |
252 | GNUNET_break (0); | 255 | GNUNET_break (0); |
253 | ok = 2; | 256 | ok = 2; |
254 | GNUNET_SCHEDULER_cancel (die_task); | 257 | GNUNET_SCHEDULER_cancel (die_task); |
255 | GNUNET_SCHEDULER_add_now (&end_task, NULL); | 258 | GNUNET_SCHEDULER_add_now (&end_task, NULL); |
256 | return; | 259 | return; |
257 | } | 260 | } |
258 | 261 | ||
259 | GNUNET_SCHEDULER_cancel (die_task); | 262 | GNUNET_SCHEDULER_cancel (die_task); |
260 | GNUNET_SCHEDULER_add_now (&end_task, NULL); | 263 | GNUNET_SCHEDULER_add_now (&end_task, NULL); |
@@ -268,52 +271,51 @@ runone () | |||
268 | pipe_stdout = GNUNET_DISK_pipe (GNUNET_YES, GNUNET_NO, GNUNET_YES); | 271 | pipe_stdout = GNUNET_DISK_pipe (GNUNET_YES, GNUNET_NO, GNUNET_YES); |
269 | 272 | ||
270 | if (pipe_stdout == NULL) | 273 | if (pipe_stdout == NULL) |
271 | { | 274 | { |
272 | GNUNET_break (0); | 275 | GNUNET_break (0); |
273 | ok = 2; | 276 | ok = 2; |
274 | return; | 277 | return; |
275 | } | 278 | } |
276 | 279 | ||
277 | putenv ("GNUNET_LOG="); | 280 | putenv ("GNUNET_LOG="); |
278 | putenv ("GNUNET_FORCE_LOG="); | 281 | putenv ("GNUNET_FORCE_LOG="); |
279 | switch (phase) | 282 | switch (phase) |
280 | { | 283 | { |
281 | case 0: | 284 | case 0: |
282 | putenv ("GNUNET_LOG=;;;;ERROR"); | 285 | putenv ("GNUNET_LOG=;;;;ERROR"); |
283 | break; | 286 | break; |
284 | case 1: | 287 | case 1: |
285 | putenv ("GNUNET_LOG=;;;;WARNING"); | 288 | putenv ("GNUNET_LOG=;;;;WARNING"); |
286 | break; | 289 | break; |
287 | case 2: | 290 | case 2: |
288 | putenv ("GNUNET_LOG=;;;;INFO"); | 291 | putenv ("GNUNET_LOG=;;;;INFO"); |
289 | break; | 292 | break; |
290 | case 3: | 293 | case 3: |
291 | putenv ("GNUNET_LOG=;;;;DEBUG"); | 294 | putenv ("GNUNET_LOG=;;;;DEBUG"); |
292 | break; | 295 | break; |
293 | case 4: | 296 | case 4: |
294 | putenv ("GNUNET_FORCE_LOG=;;;;ERROR"); | 297 | putenv ("GNUNET_FORCE_LOG=;;;;ERROR"); |
295 | break; | 298 | break; |
296 | case 5: | 299 | case 5: |
297 | putenv ("GNUNET_FORCE_LOG=;;;;WARNING"); | 300 | putenv ("GNUNET_FORCE_LOG=;;;;WARNING"); |
298 | break; | 301 | break; |
299 | case 6: | 302 | case 6: |
300 | putenv ("GNUNET_FORCE_LOG=;;;;INFO"); | 303 | putenv ("GNUNET_FORCE_LOG=;;;;INFO"); |
301 | break; | 304 | break; |
302 | case 7: | 305 | case 7: |
303 | putenv ("GNUNET_FORCE_LOG=;;;;DEBUG"); | 306 | putenv ("GNUNET_FORCE_LOG=;;;;DEBUG"); |
304 | break; | 307 | break; |
305 | case 8: | 308 | case 8: |
306 | putenv ("GNUNET_LOG=blah;;;;ERROR"); | 309 | putenv ("GNUNET_LOG=blah;;;;ERROR"); |
307 | break; | 310 | break; |
308 | case 9: | 311 | case 9: |
309 | putenv ("GNUNET_FORCE_LOG=blah;;;;ERROR"); | 312 | putenv ("GNUNET_FORCE_LOG=blah;;;;ERROR"); |
310 | break; | 313 | break; |
311 | } | 314 | } |
312 | 315 | ||
313 | proc = | 316 | proc = |
314 | GNUNET_OS_start_process (NULL, pipe_stdout, | 317 | GNUNET_OS_start_process (NULL, pipe_stdout, "./test_common_logging_dummy", |
315 | "./test_common_logging_dummy", | 318 | "test_common_logging_dummy", NULL); |
316 | "test_common_logging_dummy", NULL); | ||
317 | putenv ("GNUNET_FORCE_LOG="); | 319 | putenv ("GNUNET_FORCE_LOG="); |
318 | putenv ("GNUNET_LOG="); | 320 | putenv ("GNUNET_LOG="); |
319 | 321 | ||
@@ -321,20 +323,20 @@ runone () | |||
321 | GNUNET_DISK_pipe_close_end (pipe_stdout, GNUNET_DISK_PIPE_END_WRITE); | 323 | GNUNET_DISK_pipe_close_end (pipe_stdout, GNUNET_DISK_PIPE_END_WRITE); |
322 | 324 | ||
323 | stdout_read_handle = | 325 | stdout_read_handle = |
324 | GNUNET_DISK_pipe_handle (pipe_stdout, GNUNET_DISK_PIPE_END_READ); | 326 | GNUNET_DISK_pipe_handle (pipe_stdout, GNUNET_DISK_PIPE_END_READ); |
325 | 327 | ||
326 | die_task = | 328 | die_task = |
327 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply | 329 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply |
328 | (GNUNET_TIME_UNIT_SECONDS, 10), &end_task, | 330 | (GNUNET_TIME_UNIT_SECONDS, 10), &end_task, |
329 | NULL); | 331 | NULL); |
330 | 332 | ||
331 | bytes = 0; | 333 | bytes = 0; |
332 | buf_ptr = buf; | 334 | buf_ptr = buf; |
333 | memset (&buf, 0, sizeof (buf)); | 335 | memset (&buf, 0, sizeof (buf)); |
334 | 336 | ||
335 | GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, | 337 | GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, |
336 | stdout_read_handle, &read_call, | 338 | stdout_read_handle, &read_call, |
337 | (void *) stdout_read_handle); | 339 | (void *) stdout_read_handle); |
338 | } | 340 | } |
339 | 341 | ||
340 | static void | 342 | static void |
@@ -364,11 +366,11 @@ main (int argc, char *argv[]) | |||
364 | 366 | ||
365 | GNUNET_log_setup ("test-common-logging-runtime-loglevels", | 367 | GNUNET_log_setup ("test-common-logging-runtime-loglevels", |
366 | #if VERBOSE | 368 | #if VERBOSE |
367 | "DEBUG", | 369 | "DEBUG", |
368 | #else | 370 | #else |
369 | "WARNING", | 371 | "WARNING", |
370 | #endif | 372 | #endif |
371 | NULL); | 373 | NULL); |
372 | ret = check (); | 374 | ret = check (); |
373 | 375 | ||
374 | return ret; | 376 | return ret; |