TAP version 13 # Subtest: zoned uses the IANA zone across DST ok 1 - zoned uses the IANA zone across DST --- duration_ms: 12.084421 type: 'test' ... # Subtest: each open blocking decision is DM'd once, across polls and a restart; non-blocking ones are not ok 2 - each open blocking decision is DM'd once, across polls and a restart; non-blocking ones are not --- duration_ms: 24.775164 type: 'test' ... # Subtest: two blocking decisions get two DMs with different nonces ok 3 - two blocking decisions get two DMs with different nonces --- duration_ms: 16.295584 type: 'test' ... # Subtest: the digest nonce differs per business and per day and fits Discord's 25 characters ok 4 - the digest nonce differs per business and per day and fits Discord's 25 characters --- duration_ms: 0.166736 type: 'test' ... # Subtest: a failed DM is journaled, backs off, and is retried until it lands ok 5 - a failed DM is journaled, backs off, and is retried until it lands --- duration_ms: 15.734077 type: 'test' ... # Subtest: five definite refusals stop a DM: one gave-up line, one log line, and a restart keeps the count ok 6 - five definite refusals stop a DM: one gave-up line, one log line, and a restart keeps the count --- duration_ms: 18.410139 type: 'test' ... # Subtest: 429s, 5xx-style unknowns and refusals without a status never count toward the limit ok 7 - 429s, 5xx-style unknowns and refusals without a status never count toward the limit --- duration_ms: 22.217907 type: 'test' ... # Subtest: a crash between the fifth refusal and its gave-up line: the next poll appends it and sends nothing ok 8 - a crash between the fifth refusal and its gave-up line: the next poll appends it and sends nothing --- duration_ms: 15.810942 type: 'test' ... # Subtest: polled every POLL_MS against a permanent 403, a DM is sent at 0, 30, 60, 90 and 120 min and gives up only then ok 9 - polled every POLL_MS against a permanent 403, a DM is sent at 0, 30, 60, 90 and 120 min and gives up only then --- duration_ms: 140.404174 type: 'test' ... # Subtest: a restart after the second refusal does not send before that refusal's 30 min are up ok 10 - a restart after the second refusal does not send before that refusal's 30 min are up --- duration_ms: 71.182665 type: 'test' ... # Subtest: the digest goes at 08:00 Chicago once a day, with blocking ones marked as DM'd ok 11 - the digest goes at 08:00 Chicago once a day, with blocking ones marked as DM'd --- duration_ms: 21.36317 type: 'test' ... # Subtest: a late start with no digest for the day sends one at once; an empty inbox gets one line ok 12 - a late start with no digest for the day sends one at once; an empty inbox gets one line --- duration_ms: 13.561543 type: 'test' ... # Subtest: an inbox read failure is logged and the next poll retries ok 13 - an inbox read failure is logged and the next poll retries --- duration_ms: 0.641789 type: 'test' ... # Subtest: no Discord id reaches the journal or the log ok 14 - no Discord id reaches the journal or the log --- duration_ms: 13.022069 type: 'test' ... # Subtest: the journal: a torn tail is copied out and truncated, so an append after it reopens cleanly ok 15 - the journal: a torn tail is copied out and truncated, so an append after it reopens cleanly --- duration_ms: 1.797325 type: 'test' ... # Subtest: the journal: a crash between the copy and the truncate leaves a tail the next open repairs ok 16 - the journal: a crash between the copy and the truncate leaves a tail the next open repairs --- duration_ms: 2.050203 type: 'test' ... # Subtest: the journal: a whole file that is one torn line truncates to empty ok 17 - the journal: a whole file that is one torn line truncates to empty --- duration_ms: 1.164525 type: 'test' ... # Subtest: the journal: a malformed complete line refuses and leaves the file and any torn tail alone ok 18 - the journal: a malformed complete line refuses and leaves the file and any torn tail alone --- duration_ms: 0.419581 type: 'test' ... # Subtest: the journal: a loose file mode, a loose directory or a symlinked journal refuses ok 19 - the journal: a loose file mode, a loose directory or a symlinked journal refuses --- duration_ms: 0.478589 type: 'test' ... # Subtest: the journal: a line with a wrong type refuses with exit 3 and names the field ok 20 - the journal: a line with a wrong type refuses with exit 3 and names the field --- duration_ms: 1.813933 type: 'test' ... # Subtest: the journal: a symlinked directory refuses and says it is a link ok 21 - the journal: a symlinked directory refuses and says it is a link --- duration_ms: 0.295877 type: 'test' ... # Subtest: the journal: a dangling directory link, a parent that is a file and a journal that is a directory each refuse with exit 3 ok 22 - the journal: a dangling directory link, a parent that is a file and a journal that is a directory each refuse with exit 3 --- duration_ms: 0.482061 type: 'test' ... # Subtest: the journal: an append after the file was swapped for a symlink refuses and writes nothing through it ok 23 - the journal: an append after the file was swapped for a symlink refuses and writes nothing through it --- duration_ms: 0.381135 type: 'test' ... # Subtest: the journal: a directory it cannot write or create refuses with exit 3 and names the path ok 24 - the journal: a directory it cannot write or create refuses with exit 3 and names the path --- duration_ms: 0.445075 type: 'test' ... # Subtest: digest content stays within Discord's 2000 characters ok 25 - digest content stays within Discord's 2000 characters --- duration_ms: 0.284829 type: 'test' ... # Subtest: runLoop never overlaps ticks and stops after the one in flight ok 26 - runLoop never overlaps ticks and stops after the one in flight --- duration_ms: 111.585855 type: 'test' ... # Subtest: processing halt prevents notifier reads and sends and fences the wait before delivery ok 27 - processing halt prevents notifier reads and sends and fences the wait before delivery --- duration_ms: 23.888212 type: 'test' ... 1..27 # tests 27 # suites 0 # pass 27 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 630.842891