1
# Copyright (C) 2010 Sun Microsystems, Inc. All rights reserved. Use
2
# is subject to license terms.
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; version 2 of the License.
8
# This program is distributed in the hope that it will be useful, but
9
# WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
# General Public License for more details.
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
18
package TestMySQLServer;
20
use base qw(Test::Unit::TestCase);
21
use lib 'lib','lib/DBServer';
24
use DBServer::DBServer;
25
use DBServer::MySQL::MySQLd;
26
use GenTest::Executor;
27
use GenTest::Properties;
28
use GenTest::Reporter;
29
use GenTest::Reporter::Backtrace;
32
use File::Path qw(mkpath rmtree);
35
my $self = shift()->SUPER::new(@_);
36
# your state for fixture here
47
## Need to ,kill leftover processes if there are some
48
foreach my $p (@pids) {
49
Win32::Process::KillProcess($p,-1);
52
## Need to ,kill leftover processes if there are some
58
sub test_create_server {
61
my $vardir= cwd()."/unit/tmp";
63
my $portbase = 20 + ($ENV{TEST_PORTBASE}?int($ENV{TEST_PORTBASE}):22120);
65
$self->assert(defined $ENV{RQG_MYSQL_BASE},"RQG_MYSQL_BASE not defined");
67
my $server = DBServer::MySQL::MySQLd->new(basedir => $ENV{RQG_MYSQL_BASE},
70
$self->assert_not_null($server);
72
my ($major, $minor, $build) = $server->versionNumbers;
74
say("Major: $major, Minor: $minor, Build: $build");
76
$self->assert(-f $vardir."/data/mysql/db.MYD","No ".$vardir."/data/mysql/db.MYD");
79
push @pids,$server->serverpid;
81
my $dsn = $server->dsn("mysql");
82
$self->assert_not_null($dsn);
84
my $executor = GenTest::Executor->newFromDSN($dsn);
85
$self->assert_not_null($executor);
88
my $result = $executor->execute("show tables");
89
$self->assert_not_null($result);
90
$self->assert_equals($result->status, 0);
92
say(join(',',map{$_->[0]} @{$result->data}));
94
$self->assert(-f $vardir."/mysql.pid") if not osWindows();
95
$self->assert(-f $vardir."/mysql.err");
99
sayFile($server->errorlog);
101
$server = DBServer::MySQL::MySQLd->new(basedir => $ENV{RQG_MYSQL_BASE},
106
$self->assert_not_null($server);
108
$server->startServer;
109
push @pids,$server->serverpid;
112
sayFile($server->errorlog);
115
sub test_crash_and_core {
116
if (not osWindows()) { ## crash is not yet implemented for windows
119
my $vardir= cwd()."/unit/tmp";
121
my $portbase = 60 + ($ENV{TEST_PORTBASE}?int($ENV{TEST_PORTBASE}):22120);
123
$self->assert(defined $ENV{RQG_MYSQL_BASE},"RQG_MYSQL_BASE not defined");
125
my $server = DBServer::MySQL::MySQLd->new(basedir => $ENV{RQG_MYSQL_BASE},
128
$self->assert_not_null($server);
130
$self->assert(-f $vardir."/data/mysql/db.MYD","No ".$vardir."/data/mysql/db.MYD");
132
$server->startServer;
133
push @pids,$server->serverpid;
135
my $dsn = $server->dsn("mysql");
136
$self->assert_not_null($dsn);
138
my $executor = GenTest::Executor->newFromDSN($dsn);
139
$self->assert_not_null($executor);
142
my $result = $executor->execute("show tables");
143
$self->assert_not_null($result);
144
$self->assert_equals($result->status, 0);
146
say(join(',',map{$_->[0]} @{$result->data}));
148
$self->assert(-f $vardir."/mysql.pid") if not osWindows();
149
$self->assert(-f $vardir."/mysql.err");
151
my $backtrace = GenTest::Reporter::Backtrace->new(
153
properties => GenTest::Properties->new()
162
sayFile($server->errorlog);
164
say("Core: ". $server->corefile);
166
$backtrace->report();