File: read_timeout.t

package info (click to toggle)
percona-toolkit 3.2.1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 68,916 kB
  • sloc: perl: 241,287; sql: 22,868; sh: 19,746; javascript: 6,799; makefile: 353; awk: 38; python: 30; sed: 1
file content (87 lines) | stat: -rw-r--r-- 2,322 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/usr/bin/env perl

BEGIN {
   die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
      unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
   unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
};

use strict;
use warnings FATAL => 'all';
use English qw(-no_match_vars);
use Test::More tests => 2;

use PerconaTest;

use Time::HiRes qw(sleep time);
use POSIX qw(mkfifo);

# #########################################################################
# Issue 226: Fix mk-query-digest signal handling
# #########################################################################
my $pid_file = '/tmp/mqd.pid';
my $fifo     = '/tmp/mqd.fifo';

unlink $pid_file if -f $pid_file;
unlink $fifo     if -f $fifo;

my ($start, $end, $waited, $timeout);
SKIP: {
    skip("Not connected to a tty won't test --read-timeout with STDIN", 1)
        if !-t STDIN;
    use IO::File;
    STDIN->blocking(1);
    $timeout = wait_for(
        sub {
            $start = time;
            `$trunk/bin/pt-query-digest --read-timeout 2 --pid $pid_file 2>/dev/null`;
            return;
        },
        5,
    );
    $end    = time;
    $waited = $end - $start;
    if ( $timeout && -f $pid_file ) {
        # mqd ran longer than --read-timeout
        chomp(my $pid = slurp_file($pid_file));
        kill SIGTERM => $pid if $pid;
    }

    ok(
        $waited >= 2 && int($waited) <= 4,
        sprintf("--read-timeout 2 waited %.1f seconds reading STDIN", $waited)
    );
}

unlink $pid_file if -f $pid_file;
mkfifo $fifo, 0700;
system("$trunk/t/pt-query-digest/samples/write-to-fifo.pl $fifo 4 &");

$timeout = wait_for(
   sub {
      $start = time;
      `$trunk/bin/pt-query-digest --read-timeout 2 --pid $pid_file $fifo`;
      return;
   },
   5,
);
$end    = time;
$waited = $end - $start;
if ( $timeout && -f $pid_file ) {
   # mqd ran longer than --read-timeout
   chomp(my $pid = slurp_file($pid_file));
   kill SIGTERM => $pid if $pid;
}

ok(
   $waited >= 2 && int($waited) <= 4,
   sprintf("--read-timeout 2 waited %.1f seconds reading a file", $waited)
);

unlink $pid_file if -f $pid_file;
unlink $fifo if -f $fifo;

# #############################################################################
# Done.
# #############################################################################
exit;