File: standard_options.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 (138 lines) | stat: -rw-r--r-- 4,305 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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/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;

use PerconaTest;
use Sandbox;
require "$trunk/bin/pt-table-checksum";

my $dp = new DSNParser(opts=>$dsn_opts);
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $master_dbh = $sb->get_dbh_for('master');
my $slave_dbh  = $sb->get_dbh_for('slave1');

if ( !$master_dbh ) {
   plan skip_all => 'Cannot connect to sandbox master';
}
elsif ( !$slave_dbh ) {
   plan skip_all => 'Cannot connect to sandbox slave1';
}

# The sandbox servers run with lock_wait_timeout=3 and it's not dynamic
# so we need to specify --set-vars innodb_lock_wait_timeout=3 else the tool will die.
# And --max-load "" prevents waiting for status variables.
my @args     = (qw(--set-vars innodb_lock_wait_timeout=3 --explain --tables sakila.country),
                '--max-load', ''); 
my $cnf      = "/tmp/12345/my.sandbox.cnf";
my $pid_file = "/tmp/mk-table-checksum-test.pid";
my $output;
my $exit_status;

# ############################################################################
# Tool should connect to localhost without any options.
# ############################################################################

# This may not work because the sandbox servers aren't on localhost,
# but if your box has MySQL running on localhost then maybe it will,
# so we'll account for both of these possibilities.

eval {
   $exit_status = pt_table_checksum::main(@args);
};
if ( $EVAL_ERROR ) {
   # It's ok that this fails.  It means that your box, like mine, doesn't
   # have MySQL on localhost:3306:/tmp/mysql.socket/etc.
   like(
      $EVAL_ERROR,
      qr/connect\(';host=localhost;/,
      'Default DSN is h=localhost'
   );
}
else {
   # Apparently, your box is running MySQL on default ports.  That
   # means the tool ran, so it should run without errors.
   is(
      $exit_status,
      0,
      'Default DSN is h=localhost'
   );
}

# ############################################################################
# DSN should inherit connection options (--port, etc.)
# ############################################################################

$output = output(
   sub { pt_table_checksum::main(@args, 'h=127.1',
      qw(--port 12345 --user msandbox --password msandbox)) },
);
like(
   $output,
   qr/-- sakila\.country/,
   'DSN inherits values from --port, etc. (issue 248)'
);

# Same test but this time intentionally use the wrong port so the connection
# fails so we know that the previous test didn't work because your system
# has a .my.cnf file or something.
eval {
   pt_table_checksum::main(@args, 'h=127.1',
      qw(--port 4 --user msandbox --password msandbox));
};
like(
   $EVAL_ERROR,
   qr/port=4.+failed/,
   'DSN truly inherits values from --port, etc. (issue 248)'
);

# #############################################################################
# Issue 947: mk-table-checksum crashes if h DSN part is not given
# #############################################################################

$output = output(
   sub { pt_table_checksum::main(@args, "F=$cnf") },
);
like(
   $output,
   qr/-- sakila\.country/,
   "Doesn't crash if no h DSN part (issue 947)"
);

# #########################################################################
# Issue 391: Add --pid option to all scripts
# #########################################################################
diag(`rm -rf $pid_file >/dev/null 2>&1`);
diag(`touch $pid_file`);

$output = output(
   sub { $exit_status = pt_table_checksum::main(@args, $cnf, '--pid', $pid_file) },
   stderr => 1,
);
like(
   $output,
   qr/PID file $pid_file exists/,
   'Dies if PID file already exists (issue 391)'
);

is(
   $exit_status,
   2,
   "Exit status 2 if if PID file already exist (bug 944051)"
);

diag(`rm -rf $pid_file >/dev/null 2>&1`);

# #############################################################################
# Done.
# #############################################################################
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
done_testing;