From 3e5b650384f3363c012a23dbd77130ed98a9b1dd Mon Sep 17 00:00:00 2001 From: Jitka Plesnikova Date: Wed, 10 Jul 2019 16:30:38 +0200 Subject: [PATCH] Run setup as part tests --- ...ariaDB-1.21-Run-test-setup-and-clean.patch | 14 +++++ perl-DBD-MariaDB.spec | 23 ++++--- test-clean | 6 -- test-clean.t | 15 +++++ test-env.sh | 15 +++++ test-setup | 44 ------------- test-setup.t | 62 +++++++++++++++++++ 7 files changed, 121 insertions(+), 58 deletions(-) create mode 100644 DBD-MariaDB-1.21-Run-test-setup-and-clean.patch delete mode 100755 test-clean create mode 100755 test-clean.t create mode 100755 test-env.sh delete mode 100755 test-setup create mode 100755 test-setup.t diff --git a/DBD-MariaDB-1.21-Run-test-setup-and-clean.patch b/DBD-MariaDB-1.21-Run-test-setup-and-clean.patch new file mode 100644 index 0000000..f07a6cb --- /dev/null +++ b/DBD-MariaDB-1.21-Run-test-setup-and-clean.patch @@ -0,0 +1,14 @@ +diff -up DBD-MariaDB-1.21/t/testrules.yml.orig DBD-MariaDB-1.21/t/testrules.yml +--- DBD-MariaDB-1.21/t/testrules.yml.orig 2019-07-03 11:38:30.204870398 +0200 ++++ DBD-MariaDB-1.21/t/testrules.yml 2019-07-03 11:38:41.334062976 +0200 +@@ -1,4 +1,5 @@ + seq: ++ - seq: t/test-setup.t + - seq: t/00base.t + - seq: t/05dbcreate.t + - seq: t/10connect.t +@@ -8,3 +9,4 @@ seq: + - seq: t/rt75353-innodb-lock-timeout.t + - seq: t/rt85919-fetch-lost-connection.t + - par: ** ++ - seq: t/test-clean.t diff --git a/perl-DBD-MariaDB.spec b/perl-DBD-MariaDB.spec index bc171e8..d3d05d7 100644 --- a/perl-DBD-MariaDB.spec +++ b/perl-DBD-MariaDB.spec @@ -1,12 +1,14 @@ Name: perl-DBD-MariaDB Version: 1.21 -Release: 2%{?dist} +Release: 3%{?dist} Summary: MariaDB and MySQL driver for the Perl5 Database Interface (DBI) License: GPL+ or Artistic URL: https://metacpan.org/release/DBD-MariaDB/ Source0: https://cpan.metacpan.org/authors/id/P/PA/PALI/DBD-MariaDB-%{version}.tar.gz -Source1: test-setup -Source2: test-clean +Source1: test-setup.t +Source2: test-clean.t +Source3: test-env.sh +Patch0: DBD-MariaDB-1.21-Run-test-setup-and-clean.patch BuildRequires: findutils BuildRequires: gcc BuildRequires: make @@ -30,11 +32,14 @@ BuildRequires: perl(strict) BuildRequires: perl(utf8) BuildRequires: perl(warnings) # Tests +BuildRequires: hostname BuildRequires: mariadb BuildRequires: mariadb-server BuildRequires: perl(B) BuildRequires: perl(bigint) BuildRequires: perl(constant) +# Required to process t/testrules.yml +BuildRequires: perl(CPAN::Meta::YAML) BuildRequires: perl(DBI::Const::GetInfoType) BuildRequires: perl(Encode) BuildRequires: perl(File::Temp) @@ -60,6 +65,8 @@ are missing, mainly because no-one ever requested them. %prep %setup -q -n DBD-MariaDB-%{version} +%patch0 -p1 +cp %{SOURCE1} %{SOURCE2} t/ %build perl Makefile.PL INSTALLDIRS=vendor OPTIMIZE="$RPM_OPT_FLAGS" NO_PACKLIST=1 NO_PERLLOCAL=1 @@ -71,14 +78,11 @@ find $RPM_BUILD_ROOT -type f -name '*.bs' -size 0 -delete %{_fixperms} $RPM_BUILD_ROOT/* %check -# Setup environment and start database -. %{SOURCE1} +# Set MariaDB and DBD::MariaDB test environment +. %{SOURCE3} make test -# Stop database -. %{SOURCE2} - %files %license LICENSE %doc Changes Changes.historic @@ -87,6 +91,9 @@ make test %{_mandir}/man3/* %changelog +* Wed Jul 10 2019 Jitka Plesnikova - 1.21-3 +- Run setup as part of tests + * Wed Jun 26 2019 Jitka Plesnikova - 1.21-2 - Enable tests diff --git a/test-clean b/test-clean deleted file mode 100755 index 138a820..0000000 --- a/test-clean +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -/usr/bin/mysqladmin --user=root --socket=${MYSQL_UNIX_PORT} shutdown 2>&1 || \ -[ ! -s "${MYSQL_PIDFILE}" ] || /bin/kill `cat "${MYSQL_PIDFILE}"` || true -rm -rf ${MYSQL_DIR} - diff --git a/test-clean.t b/test-clean.t new file mode 100755 index 0000000..76050a0 --- /dev/null +++ b/test-clean.t @@ -0,0 +1,15 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Test::More tests => 2; +use Cwd qw(getcwd); + +my $MYSQL_DIR = $ENV{'MYSQL_DIR'}; +my $MYSQL_UNIX_PORT = $ENV{'MYSQL_UNIX_PORT'}; +my $MYSQL_PIDFILE = $ENV{'MYSQL_PIDFILE'}; + +ok(system("/usr/bin/mysqladmin --user=root --socket=$MYSQL_UNIX_PORT shutdown 2>&1 || [ ! -s \"$MYSQL_PIDFILE\" ] || /bin/kill `cat \"$MYSQL_PIDFILE\"`") == 0); +ok(system("rm -rf $MYSQL_DIR") == 0); + diff --git a/test-env.sh b/test-env.sh new file mode 100755 index 0000000..c95a494 --- /dev/null +++ b/test-env.sh @@ -0,0 +1,15 @@ +#!/usr/bin/bash + +# MariaDB setup +export MYSQL_DIR=$PWD/t/testdb +export MYSQL_UNIX_PORT=$MYSQL_DIR/mysql.sock +export MYSQL_PIDFILE=$MYSQL_DIR/mysql.pid +export MYSQL_USER=`whoami` + +# DBD::MariaDB test setup +export DBD_MARIADB_TESTDB=testdb +export DBD_MARIADB_TESTHOST=localhost +export DBD_MARIADB_TESTSOCKET=$MYSQL_UNIX_PORT +export DBD_MARIADB_TESTUSER=testuser +export DBD_MARIADB_TESTPASSWORD=testpassword + diff --git a/test-setup b/test-setup deleted file mode 100755 index 424fda2..0000000 --- a/test-setup +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash - -# MySQL setup -export MYSQL_DIR=$PWD/t/testdb -export MYSQL_UNIX_PORT=$MYSQL_DIR/mysql.sock -export MYSQL_PIDFILE=$MYSQL_DIR/mysql.pid -export MYSQL_USER=`whoami` - -# DBD::MariaDB test setup -export DBD_MARIADB_TESTDB=testdb -export DBD_MARIADB_TESTHOST=localhost -export DBD_MARIADB_TESTSOCKET=$MYSQL_UNIX_PORT -export DBD_MARIADB_TESTUSER=testuser -export DBD_MARIADB_TESTPASSWORD=testpassword - -if mysql --version | grep -q MariaDB; then - mysql_install_db --no-defaults --datadir=${MYSQL_DIR} --force --skip-name-resolve --explicit_defaults_for_timestamp --user=${MYSQL_USER} 2>&1 - #mysqld_safe --no-defaults --user=${MYSQL_USER} --socket=${MYSQL_UNIX_PORT} --datadir=${MYSQL_DIR} --pid-file=${MYSQL_PIDFILE} 2>&1 & - MYSQLD=/usr/libexec/mysqld -else - MYSQLD=/usr/sbin/mysqld - $MYSQLD --no-defaults --initialize-insecure --datadir=${MYSQL_DIR} --explicit_defaults_for_timestamp --user=${MYSQL_USER} 2>&1 -fi - -$MYSQLD --no-defaults --user=${MYSQL_USER} --socket=${MYSQL_UNIX_PORT} --datadir=${MYSQL_DIR} --pid-file=${MYSQL_PIDFILE} --explicit_defaults_for_timestamp --skip-networking 2>&1 & -attempts=0 -while ! /usr/bin/mysqladmin --user=root --socket=${MYSQL_UNIX_PORT} ping 2>&1 ; do - sleep 3 - attempts=$((attempts+1)) - if [ ${attempts} -gt 10 ] ; then - echo "skipping test, mariadb/mysql server could not be contacted after 30 seconds" - exit 1 - fi -done - -mysql --user=root --socket=${MYSQL_UNIX_PORT} --execute "CREATE USER '${DBD_MARIADB_TESTUSER}'@'localhost';" 2>&1 -mysql --user=root --socket=${MYSQL_UNIX_PORT} --execute "CREATE DATABASE IF NOT EXISTS ${DBD_MARIADB_TESTDB} CHARACTER SET='utf8mb4';" 2>&1 -mysql --user=root --socket=${MYSQL_UNIX_PORT} --execute "GRANT ALL PRIVILEGES ON ${DBD_MARIADB_TESTDB}.* TO '${DBD_MARIADB_TESTUSER}'@'localhost' IDENTIFIED BY '${DBD_MARIADB_TESTPASSWORD}';" 2>&1 - -if ! /usr/bin/mysqladmin --user=${DBD_MARIADB_TESTUSER} --password=${DBD_MARIADB_TESTPASSWORD} --socket=${DBD_MARIADB_TESTSOCKET} ping 2>&1; then - echo "skipping test, cannot connect to server with test user" - exit 1 -fi - diff --git a/test-setup.t b/test-setup.t new file mode 100755 index 0000000..e77f370 --- /dev/null +++ b/test-setup.t @@ -0,0 +1,62 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Test::More tests => 6; + +use Cwd qw(getcwd); + +# MySQL setup +my $MYSQL_DIR = $ENV{'MYSQL_DIR'}; +my $MYSQL_UNIX_PORT = $ENV{'MYSQL_UNIX_PORT'}; +my $MYSQL_PIDFILE = $ENV{'MYSQL_PIDFILE'}; +my $MYSQL_USER = $ENV{'MYSQL_USER'}; +chomp($MYSQL_USER); + +# DBD::MariaDB test setup +my $DBD_MARIADB_TESTDB = $ENV{'DBD_MARIADB_TESTDB'}; +my $DBD_MARIADB_TESTHOST = $ENV{'DBD_MARIADB_TESTHOST'}; +my $DBD_MARIADB_TESTSOCKET = $ENV{'DBD_MARIADB_TESTSOCKET'}; +my $DBD_MARIADB_TESTUSER = $ENV{'DBD_MARIADB_TESTUSER'}; +my $DBD_MARIADB_TESTPASSWORD = $ENV{'DBD_MARIADB_TESTPASSWORD'}; + +my $MYSQLD = ''; +my $mysql_version = readpipe("mysql --version"); +if ($mysql_version =~ /MariaDB/) { + system("mysql_install_db --no-defaults --datadir=$MYSQL_DIR --force --skip-name-resolve --explicit_defaults_for_timestamp --user=$MYSQL_USER >/dev/null 2>&1"); + ok($? >> 8 == 0); + $MYSQLD = '/usr/libexec/mysqld'; +} else { + $MYSQLD = '/usr/sbin/mysqld'; + system("$MYSQLD --no-defaults --initialize-insecure --datadir=$MYSQL_DIR --explicit_defaults_for_timestamp --user=$MYSQL_USER >/dev/null 2>&1"); + ok($? >> 8 == 0); +} + +my $cmd = "$MYSQLD --no-defaults --user=$MYSQL_USER --socket=$MYSQL_UNIX_PORT --datadir=$MYSQL_DIR --pid-file=$MYSQL_PIDFILE --explicit_defaults_for_timestamp --skip-networking >/dev/null 2>&1 &"; +my $pid = fork(); +if (defined($pid) && $pid==0) { + # background process + system($cmd); + exit $? >> 8; +} + +my $attempts = 0; +while (system("/usr/bin/mysqladmin --user=root --socket=$MYSQL_UNIX_PORT ping >/dev/null 2>&1") != 0) { + sleep 3; + $attempts++; + if ($attempts > 10) { + printf "skipping test, mariadb/mysql server could not be contacted after 30 seconds\n"; + ok(0); + } +} +ok(1); + +system("mysql --user=root --socket=$MYSQL_UNIX_PORT --execute \"CREATE USER '$DBD_MARIADB_TESTUSER\@localhost';\" 2>&1"); +ok($? >> 8 == 0); +system("mysql --user=root --socket=$MYSQL_UNIX_PORT --execute \"CREATE DATABASE IF NOT EXISTS $DBD_MARIADB_TESTDB CHARACTER SET='utf8mb4';\" 2>&1"); +ok($? >> 8 == 0); +system("mysql --user=root --socket=$MYSQL_UNIX_PORT --execute \"GRANT ALL PRIVILEGES ON $DBD_MARIADB_TESTDB.* TO '$DBD_MARIADB_TESTUSER\@localhost' IDENTIFIED BY '$DBD_MARIADB_TESTPASSWORD';\" 2>&1"); +ok($? >> 8 == 0); +system("/usr/bin/mysqladmin --user=$DBD_MARIADB_TESTUSER --password=$DBD_MARIADB_TESTPASSWORD --socket=$DBD_MARIADB_TESTSOCKET ping >/dev/null 2>&1"); +ok($? >> 8 == 0);