aboutsummaryrefslogtreecommitdiff
path: root/src/util/test_scheduler.c
diff options
context:
space:
mode:
authorlurchi <lurchi@strangeplace.net>2018-01-21 13:29:20 +0100
committerlurchi <lurchi@strangeplace.net>2018-01-21 13:29:20 +0100
commitf7fc4ee069592858798a94b0b9373d45024ce7b7 (patch)
treef832a3f992f5ec56167502b0ea4f0025a15722db /src/util/test_scheduler.c
parentf3f76baaa34c89f39cec8d25bb72458488787205 (diff)
downloadgnunet-f7fc4ee069592858798a94b0b9373d45024ce7b7.tar.gz
gnunet-f7fc4ee069592858798a94b0b9373d45024ce7b7.zip
actually test if signals are handled
- use a timeout task to prevent the scheduler from shutting down before the signal can be handled - test task cancellation before using the timeout task - use a different status code for each test case
Diffstat (limited to 'src/util/test_scheduler.c')
-rw-r--r--src/util/test_scheduler.c49
1 files changed, 42 insertions, 7 deletions
diff --git a/src/util/test_scheduler.c b/src/util/test_scheduler.c
index 55d4c7137..83319d2aa 100644
--- a/src/util/test_scheduler.c
+++ b/src/util/test_scheduler.c
@@ -29,6 +29,8 @@ static struct GNUNET_DISK_PipeHandle *p;
29 29
30static const struct GNUNET_DISK_FileHandle *fds[2]; 30static const struct GNUNET_DISK_FileHandle *fds[2];
31 31
32static struct GNUNET_SCHEDULER_Task *never_run_task;
33
32 34
33static void 35static void
34task2 (void *cls) 36task2 (void *cls)
@@ -76,7 +78,7 @@ taskNeverRun (void *cls)
76 78
77 79
78static void 80static void
79taskLast (void *cls) 81taskLastRd (void *cls)
80{ 82{
81 int *ok = cls; 83 int *ok = cls;
82 84
@@ -86,6 +88,27 @@ taskLast (void *cls)
86 88
87 89
88static void 90static void
91taskLastSig (void *cls)
92{
93 int *ok = cls;
94
95 GNUNET_SCHEDULER_cancel (never_run_task);
96 GNUNET_assert (9 == *ok);
97 (*ok) = 0;
98}
99
100
101static void
102taskLastShutdown (void *cls)
103{
104 int *ok = cls;
105
106 GNUNET_assert (10 == *ok);
107 (*ok) = 0;
108}
109
110
111static void
89taskRd (void *cls) 112taskRd (void *cls)
90{ 113{
91 static char c; 114 static char c;
@@ -97,7 +120,7 @@ taskRd (void *cls)
97 GNUNET_assert (GNUNET_NETWORK_fdset_handle_isset (tc->read_ready, fds[0])); 120 GNUNET_assert (GNUNET_NETWORK_fdset_handle_isset (tc->read_ready, fds[0]));
98 GNUNET_assert (1 == GNUNET_DISK_file_read (fds[0], &c, 1)); 121 GNUNET_assert (1 == GNUNET_DISK_file_read (fds[0], &c, 1));
99 (*ok) = 8; 122 (*ok) = 8;
100 GNUNET_SCHEDULER_add_shutdown (&taskLast, 123 GNUNET_SCHEDULER_add_shutdown (&taskLastRd,
101 cls); 124 cls);
102 GNUNET_SCHEDULER_shutdown (); 125 GNUNET_SCHEDULER_shutdown ();
103} 126}
@@ -151,6 +174,8 @@ check ()
151{ 174{
152 int ok; 175 int ok;
153 176
177 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
178 "[Check scheduling]\n");
154 ok = 1; 179 ok = 1;
155 GNUNET_SCHEDULER_run (&task1, &ok); 180 GNUNET_SCHEDULER_run (&task1, &ok);
156 return ok; 181 return ok;
@@ -163,8 +188,8 @@ taskShutdown (void *cls)
163 int *ok = cls; 188 int *ok = cls;
164 189
165 GNUNET_assert (1 == *ok); 190 GNUNET_assert (1 == *ok);
166 *ok = 8; 191 *ok = 10;
167 GNUNET_SCHEDULER_add_shutdown (&taskLast, cls); 192 GNUNET_SCHEDULER_add_shutdown (&taskLastShutdown, cls);
168 GNUNET_SCHEDULER_shutdown (); 193 GNUNET_SCHEDULER_shutdown ();
169} 194}
170 195
@@ -178,6 +203,8 @@ checkShutdown ()
178{ 203{
179 int ok; 204 int ok;
180 205
206 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
207 "[Check shutdown]\n");
181 ok = 1; 208 ok = 1;
182 GNUNET_SCHEDULER_run (&taskShutdown, &ok); 209 GNUNET_SCHEDULER_run (&taskShutdown, &ok);
183 return ok; 210 return ok;
@@ -191,8 +218,12 @@ taskSig (void *cls)
191 int *ok = cls; 218 int *ok = cls;
192 219
193 GNUNET_assert (1 == *ok); 220 GNUNET_assert (1 == *ok);
194 *ok = 8; 221 *ok = 9;
195 GNUNET_SCHEDULER_add_shutdown (&taskLast, cls); 222 GNUNET_SCHEDULER_add_shutdown (&taskLastSig, cls);
223 never_run_task =
224 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5),
225 &taskNeverRun,
226 NULL);
196 GNUNET_break (0 == PLIBC_KILL (getpid (), 227 GNUNET_break (0 == PLIBC_KILL (getpid (),
197 GNUNET_TERM_SIG)); 228 GNUNET_TERM_SIG));
198} 229}
@@ -207,6 +238,8 @@ checkSignal ()
207{ 238{
208 int ok; 239 int ok;
209 240
241 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
242 "[Check signal handling]\n");
210 ok = 1; 243 ok = 1;
211 GNUNET_SCHEDULER_run (&taskSig, &ok); 244 GNUNET_SCHEDULER_run (&taskSig, &ok);
212 return ok; 245 return ok;
@@ -234,6 +267,8 @@ checkCancel ()
234{ 267{
235 int ok; 268 int ok;
236 269
270 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
271 "[Check task cancellation]\n");
237 ok = 1; 272 ok = 1;
238 GNUNET_SCHEDULER_run (&taskCancel, &ok); 273 GNUNET_SCHEDULER_run (&taskCancel, &ok);
239 return ok; 274 return ok;
@@ -247,11 +282,11 @@ main (int argc, char *argv[])
247 282
248 GNUNET_log_setup ("test_scheduler", "WARNING", NULL); 283 GNUNET_log_setup ("test_scheduler", "WARNING", NULL);
249 ret += check (); 284 ret += check ();
285 ret += checkCancel ();
250#ifndef MINGW 286#ifndef MINGW
251 ret += checkSignal (); 287 ret += checkSignal ();
252#endif 288#endif
253 ret += checkShutdown (); 289 ret += checkShutdown ();
254 ret += checkCancel ();
255 GNUNET_DISK_pipe_close (p); 290 GNUNET_DISK_pipe_close (p);
256 291
257 return ret; 292 return ret;