~percona-toolkit-dev/percona-toolkit/fix-password-comma-bug-886077

« back to all changes in this revision

Viewing changes to t/lib/MySQLDump.t

  • Committer: Daniel Nichter
  • Date: 2012-02-07 20:10:11 UTC
  • mfrom: (174 2.0)
  • mto: This revision was merged to the branch mainline in revision 189.
  • Revision ID: daniel@percona.com-20120207201011-sok2c1f2ay9qr3gm
Merge trunk r174.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/perl
2
 
 
3
 
BEGIN {
4
 
   die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
5
 
      unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
6
 
   unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
7
 
};
8
 
 
9
 
use strict;
10
 
use warnings FATAL => 'all';
11
 
use English qw(-no_match_vars);
12
 
use Test::More;
13
 
 
14
 
use MySQLDump;
15
 
use Quoter;
16
 
use DSNParser;
17
 
use Sandbox;
18
 
use PerconaTest;
19
 
 
20
 
my $dp = new DSNParser(opts=>$dsn_opts);
21
 
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
22
 
 
23
 
my $dbh = $sb->get_dbh_for('master');
24
 
 
25
 
if ( !$dbh ) {
26
 
   plan skip_all => "Cannot connect to sandbox master";
27
 
}
28
 
else { 
29
 
   plan tests => 12;
30
 
}
31
 
 
32
 
$sb->create_dbs($dbh, ['test']);
33
 
 
34
 
my $du = new MySQLDump();
35
 
my $q  = new Quoter();
36
 
 
37
 
my $dump;
38
 
 
39
 
# TODO: get_create_table() seems to return an arrayref sometimes!
40
 
 
41
 
SKIP: {
42
 
   skip 'Sandbox master does not have the sakila database', 10
43
 
      unless @{$dbh->selectcol_arrayref('SHOW DATABASES LIKE "sakila"')};
44
 
 
45
 
   $dump = $du->dump($dbh, $q, 'sakila', 'film', 'table');
46
 
   like($dump, qr/language_id/, 'Dump sakila.film');
47
 
 
48
 
   $dump = $du->dump($dbh, $q, 'mysql', 'film', 'triggers');
49
 
   ok(!defined $dump, 'no triggers in mysql');
50
 
 
51
 
   $dump = $du->dump($dbh, $q, 'sakila', 'film', 'triggers');
52
 
   like($dump, qr/AFTER INSERT/, 'dump triggers');
53
 
 
54
 
   $dump = $du->dump($dbh, $q, 'sakila', 'customer_list', 'table');
55
 
   like($dump, qr/CREATE TABLE/, 'Temp table def for view/table');
56
 
   like($dump, qr/DROP TABLE/, 'Drop temp table def for view/table');
57
 
   like($dump, qr/DROP VIEW/, 'Drop view def for view/table');
58
 
   unlike($dump, qr/ALGORITHM/, 'No view def');
59
 
 
60
 
   $dump = $du->dump($dbh, $q, 'sakila', 'customer_list', 'view');
61
 
   like($dump, qr/DROP TABLE/, 'Drop temp table def for view');
62
 
   like($dump, qr/DROP VIEW/, 'Drop view def for view');
63
 
   like($dump, qr/ALGORITHM/, 'View def');
64
 
};
65
 
 
66
 
# #############################################################################
67
 
# Issue 170: mk-parallel-dump dies when table-status Data_length is NULL
68
 
# #############################################################################
69
 
 
70
 
# The underlying problem for issue 170 is that MySQLDump doesn't eval some
71
 
# of its queries so when MySQLFind uses it and hits a broken table it dies.
72
 
 
73
 
diag(`cp $trunk/t/lib/samples/broken_tbl.frm /tmp/12345/data/test/broken_tbl.frm`);
74
 
my $output = '';
75
 
eval {
76
 
   local *STDERR;
77
 
   open STDERR, '>', \$output;
78
 
   $dump = $du->dump($dbh, $q, 'test', 'broken_tbl', 'table');
79
 
};
80
 
is(
81
 
   $EVAL_ERROR,
82
 
   '',
83
 
   'No error dumping broken table'
84
 
);
85
 
like(
86
 
   $output,
87
 
   qr/table may be damaged.+selectrow_hashref failed/s,
88
 
   'Warns about possibly damaged table'
89
 
);
90
 
 
91
 
$sb->wipe_clean($dbh);
92
 
exit;