aboutsummaryrefslogtreecommitdiff
path: root/src/util/test_common_logging_runtime_loglevels.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/test_common_logging_runtime_loglevels.c')
-rw-r--r--src/util/test_common_logging_runtime_loglevels.c364
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
43static GNUNET_SCHEDULER_TaskIdentifier die_task; 43static GNUNET_SCHEDULER_TaskIdentifier die_task;
44 44
45static void runone (); 45static void
46runone ();
46 47
47static void 48static void
48end_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) 49end_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
74static char * 75static char *
75read_output_line (int phase_from1, int phase_to1, int phase_from2, 76read_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
340static void 342static 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;