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::MySQL::MySQLd;
25
use GenTest::Executor;
26
use GenTest::Reporter;
27
use GenTest::Reporter::Backtrace;
32
my $self = shift()->SUPER::new(@_);
33
# your state for fixture here
44
## Need to ,kill leftover processes if there are some
45
foreach my $p (@pids) {
46
Win32::Process::KillProcess($p,-1);
48
system("rmdir /s /q unit\\tmp");
50
## Need to ,kill leftover processes if there are some
52
# system("rm -rf unit/tmp");
56
sub test_create_server {
59
my $vardir= cwd()."/unit/tmp";
61
my $portbase = 20 + ($ENV{TEST_PORTBASE}?int($ENV{TEST_PORTBASE}):22120);
63
$self->assert(defined $ENV{RQG_MYSQL_BASE},"RQG_MYSQL_BASE not defined");
65
my $server = DBServer::MySQL::MySQLd->new(basedir => $ENV{RQG_MYSQL_BASE},
68
$self->assert_not_null($server);
70
my ($major, $minor, $build) = $server->versionNumbers;
72
say("Major: $major, Minor: $minor, Build: $build");
74
$self->assert(-f $vardir."/data/mysql/db.MYD","No ".$vardir."/data/mysql/db.MYD");
77
push @pids,$server->serverpid;
79
my $dsn = $server->dsn("mysql");
80
$self->assert_not_null($dsn);
82
my $executor = GenTest::Executor->newFromDSN($dsn);
83
$self->assert_not_null($executor);
86
my $result = $executor->execute("show tables");
87
$self->assert_not_null($result);
88
$self->assert_equals($result->status, 0);
90
say(join(',',map{$_->[0]} @{$result->data}));
92
$self->assert(-f $vardir."/mysql.pid") if not osWindows();
93
$self->assert(-f $vardir."/mysql.err");
97
sayFile($server->logfile);
99
$server = DBServer::MySQL::MySQLd->new(basedir => $ENV{RQG_MYSQL_BASE},
104
$self->assert_not_null($server);
106
$server->startServer;
107
push @pids,$server->serverpid;
110
sayFile($server->logfile);
113
sub test_crash_and_core {
114
if (not osWindows()) { ## crash is not yet implemented for windows
117
my $vardir= cwd()."/unit/tmp";
119
my $portbase = 60 + ($ENV{TEST_PORTBASE}?int($ENV{TEST_PORTBASE}):22120);
121
$self->assert(defined $ENV{RQG_MYSQL_BASE},"RQG_MYSQL_BASE not defined");
123
my $server = DBServer::MySQL::MySQLd->new(basedir => $ENV{RQG_MYSQL_BASE},
126
$self->assert_not_null($server);
128
$self->assert(-f $vardir."/data/mysql/db.MYD","No ".$vardir."/data/mysql/db.MYD");
130
$server->startServer;
131
push @pids,$server->serverpid;
133
my $dsn = $server->dsn("mysql");
134
$self->assert_not_null($dsn);
136
my $executor = GenTest::Executor->newFromDSN($dsn);
137
$self->assert_not_null($executor);
140
my $result = $executor->execute("show tables");
141
$self->assert_not_null($result);
142
$self->assert_equals($result->status, 0);
144
say(join(',',map{$_->[0]} @{$result->data}));
146
$self->assert(-f $vardir."/mysql.pid") if not osWindows();
147
$self->assert(-f $vardir."/mysql.err");
149
my $backtrace = GenTest::Reporter::Backtrace->new(dsn => $server->dsn);
157
sayFile($server->logfile);
159
say("Core: ". $server->corefile);
161
$backtrace->report();