diff options
author | lurchi <lurchi@strangeplace.net> | 2018-01-21 13:29:20 +0100 |
---|---|---|
committer | lurchi <lurchi@strangeplace.net> | 2018-01-21 13:29:20 +0100 |
commit | f7fc4ee069592858798a94b0b9373d45024ce7b7 (patch) | |
tree | f832a3f992f5ec56167502b0ea4f0025a15722db /src/util/test_scheduler.c | |
parent | f3f76baaa34c89f39cec8d25bb72458488787205 (diff) | |
download | gnunet-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.c | 49 |
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 | ||
30 | static const struct GNUNET_DISK_FileHandle *fds[2]; | 30 | static const struct GNUNET_DISK_FileHandle *fds[2]; |
31 | 31 | ||
32 | static struct GNUNET_SCHEDULER_Task *never_run_task; | ||
33 | |||
32 | 34 | ||
33 | static void | 35 | static void |
34 | task2 (void *cls) | 36 | task2 (void *cls) |
@@ -76,7 +78,7 @@ taskNeverRun (void *cls) | |||
76 | 78 | ||
77 | 79 | ||
78 | static void | 80 | static void |
79 | taskLast (void *cls) | 81 | taskLastRd (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 | ||
88 | static void | 90 | static void |
91 | taskLastSig (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 | |||
101 | static void | ||
102 | taskLastShutdown (void *cls) | ||
103 | { | ||
104 | int *ok = cls; | ||
105 | |||
106 | GNUNET_assert (10 == *ok); | ||
107 | (*ok) = 0; | ||
108 | } | ||
109 | |||
110 | |||
111 | static void | ||
89 | taskRd (void *cls) | 112 | taskRd (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; |