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