Hello Marc,
Your my_atomic port looks ok (it is identical to what is in
6.0-codebase-bufixing - expected to be the best - plus your
SAFE_MUTEX/rwlock fix).
As pushbuild2 doesn't run unit tests yet, I wanted to build and run
my_atomic-t on Windows, so I tried a Windows build of trunk-perfschema
(32-bit Windows, VS2008).
That led me to rediscover the work which I had already pushed to 6.0 in
2007 in order to make unittest/mytap and unittest/mysys test, build and
work under Windows (I had done this when working on WL#866, online
backup for MyISAM which uses my_atomic).
All that work is needed again in trunk-perfschema in order to have unit
tests build and work under Windows (example: mytap library is not built
currently under Windows).
Fortunately, it was easy to port my work (just had to copy many unittest
files from 6.0-codebase-bugfixing, as well as mysys/my_getncpus() which
my_atomic-t uses and which I remember I also had to fix).
I tested the result, and at least with the attached patch all unit tests
(unittest/[mytap|examples|lf-t] and perfschema) build and pass, except
that pfs-t crashes and pfs_timer-t has some "not ok", which also happens
under Linux.
I ran each test one by one.
I also ran them in groups, like this
cd unittest
perl unit.pl run mysys
perl unit.pl run ..\storage\perfschema\unittest
This works fine only if using ActiveState Perl, not Cygwin Perl; I
remember I had bumped on this already in the past; one problem at least
is the fact that the -x test in unit.pl has strange behaviours with
cygwin perl, there's something in Google about this. So, nothing to
worry about.
Something which does not work: in Unix, at configure time, we make sure
that "make test-unit" will run unit tests in unittest and in any
unittest subdirectory of any engine directory; this isn't done here...
there is no "make"... I think pushbuild1 used to have a hardcoded "perl
unit.pl run <all_relevant_directories>" line. Again, nothing to worry
about now.
I hope you could include the attached patch in trunk-perfschema.
This patch is a bzr bundle: save it into a tmp file and do
cd your_trunk_perfschema
bzr merge the_tmp_file
Then you can inspect my changes ("bzr gdiff").
If you like them you can commit the merge (the changes will have my
name); if you prefer the changes to have your name, you can revert the
merge mark ("bzr revert --forget-merges") and commit (they will then
have your name), I don't care.
It may also be possible to apply them with "patch" using the diff which
is at start of the bundle.
--
Mr. Guilhem Bichot <guilhem@stripped>
Sun Microsystems / MySQL, Lead Software Engineer
Bordeaux, France
www.sun.com / www.mysql.com
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: guilhem@stripped
# target_branch: bzr+ssh://gbichot@stripped/bzrroot\
# /server/mysql-trunk-perfschema/
# testament_sha1: 35a36c34edcc2cdfc5305ef1b5aab9ce7ada3871
# timestamp: 2009-11-03 23:17:40 +0100
# base_revision_id: marc.alff@stripped
#
# Begin patch
=== modified file 'CMakeLists.txt'
--- CMakeLists.txt 2009-10-25 22:58:52 +0000
+++ CMakeLists.txt 2009-11-03 22:16:41 +0000
@@ -284,10 +284,16 @@
SET (ENGINE_BUILD_TYPE "STATIC")
FOREACH(DIR ${STATIC_ENGINE_DIRECTORIES})
ADD_SUBDIRECTORY(${DIR})
+ IF(EXISTS ${DIR}/unittest)
+ ADD_SUBDIRECTORY(${DIR}/unittest)
+ ENDIF(EXISTS ${DIR}/unittest)
ENDFOREACH(DIR ${STATIC_ENGINE_DIRECTORIES})
SET (ENGINE_BUILD_TYPE "DYNAMIC")
FOREACH(DIR ${DYNAMIC_ENGINE_DIRECTORIES})
+ IF(EXISTS ${DIR}/unittest)
+ ADD_SUBDIRECTORY(${DIR}/unittest)
+ ENDIF(EXISTS ${DIR}/unittest)
ADD_SUBDIRECTORY(${DIR})
ENDFOREACH(DIR ${DYNAMIC_ENGINE_DIRECTORIES})
@@ -312,6 +318,9 @@
ADD_SUBDIRECTORY(sql)
ADD_SUBDIRECTORY(libmysql)
ADD_SUBDIRECTORY(tests)
+ADD_SUBDIRECTORY(unittest/mytap)
+ADD_SUBDIRECTORY(unittest/examples)
+ADD_SUBDIRECTORY(unittest/mysys)
IF(WITH_EMBEDDED_SERVER)
ADD_SUBDIRECTORY(libmysqld)
ADD_SUBDIRECTORY(libmysqld/examples)
=== modified file 'mysys/CMakeLists.txt'
--- mysys/CMakeLists.txt 2009-10-23 00:46:44 +0000
+++ mysys/CMakeLists.txt 2009-11-03 22:16:41 +0000
@@ -41,7 +41,7 @@
rijndael.c safemalloc.c sha1.c string.c thr_alarm.c thr_lock.c thr_mutex.c
thr_rwlock.c tree.c typelib.c my_vle.c base64.c my_memmem.c my_getpagesize.c
lf_alloc-pin.c lf_dynarray.c lf_hash.c
- my_atomic.c
+ my_atomic.c my_getncpus.c
my_rdtsc.c)
IF(NOT SOURCE_SUBLIBS)
=== modified file 'mysys/my_getncpus.c'
--- mysys/my_getncpus.c 2006-12-27 01:23:51 +0000
+++ mysys/my_getncpus.c 2009-11-03 22:16:41 +0000
@@ -16,24 +16,34 @@
/* get the number of (online) CPUs */
#include "mysys_priv.h"
+#ifdef HAVE_UNISTD_H
#include <unistd.h>
+#endif
static int ncpus=0;
+int my_getncpus()
+{
+ if (!ncpus)
+ {
#ifdef _SC_NPROCESSORS_ONLN
-int my_getncpus()
-{
- if (!ncpus)
ncpus= sysconf(_SC_NPROCESSORS_ONLN);
+#elif defined(__WIN__)
+ SYSTEM_INFO sysinfo;
+
+ /*
+ * We are not calling GetNativeSystemInfo here because (1) we
+ * don't believe that they return different values for number
+ * of processors and (2) if WOW64 limits processors for Win32
+ * then we don't want to try to override that.
+ */
+ GetSystemInfo(&sysinfo);
+
+ ncpus= sysinfo.dwNumberOfProcessors;
+#else
+/* unknown so play safe: assume SMP and forbid uniprocessor build */
+ ncpus= 2;
+#endif
+ }
return ncpus;
}
-
-#else
-/* unknown */
-int my_getncpus()
-{
- return 2;
-}
-
-#endif
-
=== added file 'unittest/examples/CMakeLists.txt'
--- unittest/examples/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ unittest/examples/CMakeLists.txt 2009-11-03 22:16:41 +0000
@@ -0,0 +1,38 @@
+# Copyright (C) 2007 MySQL AB
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/zlib
+ ${CMAKE_SOURCE_DIR}/sql
+ ${CMAKE_SOURCE_DIR}/regex
+ ${CMAKE_SOURCE_DIR}/extra/yassl/include
+ ${CMAKE_SOURCE_DIR}/unittest/mytap)
+ADD_EXECUTABLE(simple-t simple-t.c)
+TARGET_LINK_LIBRARIES(simple-t mytap)
+
+ADD_EXECUTABLE(skip-t skip-t.c)
+TARGET_LINK_LIBRARIES(skip-t mytap)
+
+ADD_EXECUTABLE(todo-t todo-t.c)
+TARGET_LINK_LIBRARIES(todo-t mytap)
+
+ADD_EXECUTABLE(skip_all-t skip_all-t.c)
+TARGET_LINK_LIBRARIES(skip_all-t mytap)
+
+ADD_EXECUTABLE(no_plan-t no_plan-t.c)
+TARGET_LINK_LIBRARIES(no_plan-t mytap)
+
+ADD_EXECUTABLE(core-t core-t.c)
+TARGET_LINK_LIBRARIES(core-t mytap)
=== modified file 'unittest/examples/core-t.c'
--- unittest/examples/core-t.c 2006-12-31 01:29:11 +0000
+++ unittest/examples/core-t.c 2009-11-03 22:16:41 +0000
@@ -13,7 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
-#include "my_config.h"
+#include <my_global.h>
#include <stdlib.h>
#include <tap.h>
=== modified file 'unittest/examples/no_plan-t.c'
--- unittest/examples/no_plan-t.c 2006-12-31 01:29:11 +0000
+++ unittest/examples/no_plan-t.c 2009-11-03 22:16:41 +0000
@@ -13,7 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
-#include "my_config.h"
+#include <my_global.h>
#include <stdlib.h>
#include <tap.h>
=== modified file 'unittest/examples/skip_all-t.c'
--- unittest/examples/skip_all-t.c 2006-12-31 01:29:11 +0000
+++ unittest/examples/skip_all-t.c 2009-11-03 22:16:41 +0000
@@ -13,7 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
-#include "my_config.h"
+#include <my_global.h>
#include <stdlib.h>
#include <tap.h>
=== modified file 'unittest/examples/todo-t.c'
--- unittest/examples/todo-t.c 2006-12-31 01:29:11 +0000
+++ unittest/examples/todo-t.c 2009-11-03 22:16:41 +0000
@@ -13,7 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
-#include "my_config.h"
+#include <my_global.h>
#include <stdlib.h>
#include <tap.h>
=== added file 'unittest/mytap/CMakeLists.txt'
--- unittest/mytap/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ unittest/mytap/CMakeLists.txt 2009-11-03 22:16:41 +0000
@@ -0,0 +1,21 @@
+# Copyright (C) 2007 MySQL AB
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/zlib
+ ${CMAKE_SOURCE_DIR}/sql
+ ${CMAKE_SOURCE_DIR}/regex
+ ${CMAKE_SOURCE_DIR}/extra/yassl/include)
+ADD_LIBRARY(mytap tap.c)
=== modified file 'unittest/mytap/Makefile.am'
--- unittest/mytap/Makefile.am 2007-05-28 20:18:51 +0000
+++ unittest/mytap/Makefile.am 2009-11-03 22:16:41 +0000
@@ -13,14 +13,13 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir)
+AM_CPPFLAGS = -I$(top_srcdir)/include
noinst_LIBRARIES = libmytap.a
noinst_HEADERS = tap.h
libmytap_a_SOURCES = tap.c
+EXTRA_DIST = CMakeLists.txt
+
SUBDIRS = . t
-
-# Don't update the files from bitkeeper
-%::SCCS/s.%
=== modified file 'unittest/mytap/tap.c'
--- unittest/mytap/tap.c 2006-12-27 01:23:51 +0000
+++ unittest/mytap/tap.c 2009-11-03 22:16:41 +0000
@@ -19,7 +19,7 @@
#include "tap.h"
-#include "my_config.h"
+#include "my_global.h"
#include <stdlib.h>
#include <stdarg.h>
@@ -27,6 +27,16 @@
#include <string.h>
#include <signal.h>
+/*
+ Visual Studio 2003 does not know vsnprintf but knows _vsnprintf.
+ We don't put this #define in config-win.h because we prefer
+ my_vsnprintf everywhere instead, except when linking with libmysys
+ is not desirable - the case here.
+*/
+#if defined(_MSC_VER) && ( _MSC_VER == 1310 )
+#define vsnprintf _vsnprintf
+#endif
+
/**
@defgroup MyTAP_Internal MyTAP Internals
@@ -150,8 +160,10 @@
{ SIGILL, handle_core_signal },
{ SIGABRT, handle_core_signal },
{ SIGFPE, handle_core_signal },
- { SIGSEGV, handle_core_signal },
- { SIGBUS, handle_core_signal }
+ { SIGSEGV, handle_core_signal }
+#ifdef SIGBUS
+ , { SIGBUS, handle_core_signal }
+#endif
#ifdef SIGXCPU
, { SIGXCPU, handle_core_signal }
#endif
@@ -166,13 +178,22 @@
#endif
};
+int skip_big_tests= 1;
+
void
plan(int const count)
{
+ char *config= getenv("MYTAP_CONFIG");
+ size_t i;
+
+ if (config)
+ skip_big_tests= strcmp(config, "big");
+
+ setvbuf(tapout, 0, _IONBF, 0); /* provide output at once */
/*
Install signal handler
*/
- size_t i;
+
for (i= 0; i < sizeof(install_signal)/sizeof(*install_signal); ++i)
signal(install_signal[i].signo, install_signal[i].handler);
=== modified file 'unittest/mytap/tap.h'
--- unittest/mytap/tap.h 2006-12-27 01:23:51 +0000
+++ unittest/mytap/tap.h 2009-11-03 22:16:41 +0000
@@ -62,6 +62,24 @@
#endif
/**
+ Defines whether "big" tests should be skipped.
+
+ This variable is set by plan() function unless MYTAP_CONFIG environment
+ variable is set to the string "big". It is supposed to be used as
+
+ @code
+ if (skip_big_tests) {
+ skip(1, "Big test skipped");
+ } else {
+ ok(life_universe_and_everything() == 42, "The answer is CORRECT");
+ }
+ @endcode
+
+ @see SKIP_BIG_TESTS
+*/
+extern int skip_big_tests;
+
+/**
@defgroup MyTAP_API MyTAP API
MySQL support for performing unit tests according to TAP.
@@ -81,10 +99,15 @@
that generate a core, so if you want to override these signals, do
it <em>after</em> you have called the plan() function.
- @param count The planned number of tests to run.
+ It will also set skip_big_tests variable if MYTAP_CONFIG environment
+ variable is defined.
+
+ @see skip_big_tests
+
+ @param count The planned number of tests to run.
*/
-void plan(int count);
+void plan(int const count);
/**
@@ -103,7 +126,7 @@
which case nothing is printed.
*/
-void ok(int pass, char const *fmt, ...)
+void ok(int const pass, char const *fmt, ...)
__attribute__((format(printf,2,3)));
@@ -135,7 +158,7 @@
@param reason A reason for skipping the tests
*/
-void skip(int how_many, char const *reason, ...)
+void skip(int how_many, char const *const reason, ...)
__attribute__((format(printf,2,3)));
@@ -161,6 +184,24 @@
/**
+ Helper macro to skip a group of "big" tests. It is used in the following
+ manner:
+
+ @code
+ SKIP_BIG_TESTS(1)
+ {
+ ok(life_universe_and_everything() == 42, "The answer is CORRECT");
+ }
+ @endcode
+
+ @see skip_big_tests
+ */
+
+#define SKIP_BIG_TESTS(COUNT) \
+ if (skip_big_tests) skip((COUNT), "big test"); else
+
+
+/**
Print a diagnostics message.
@param fmt Diagnostics message in printf() format.
=== modified file 'unittest/unit.pl'
--- unittest/unit.pl 2006-12-31 01:29:11 +0000
+++ unittest/unit.pl 2009-11-03 22:16:41 +0000
@@ -14,8 +14,9 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-use Test::Harness qw(&runtests $verbose);
+use Test::Harness;
use File::Find;
+use Getopt::Long;
use strict;
@@ -31,10 +32,19 @@
=head1 SYNOPSIS
- unit run
+ unit [--[no]big] [--[no]verbose] run [tests to run]
=cut
+my $big= $ENV{'MYTAP_CONFIG'} eq 'big';
+
+my $result = GetOptions (
+ "big!" => \$big,
+ "verbose!" => \$Test::Harness::verbose,
+);
+
+$ENV{'MYTAP_CONFIG'} = $big ? 'big' : '';
+
my $cmd = shift;
if (defined $cmd && exists $dispatch{$cmd}) {
@@ -56,7 +66,7 @@
my @files;
find sub {
$File::Find::prune = 1 if /^SCCS$/;
- push(@files, $File::Find::name) if -x _ && /-t\z/;
+ push(@files, $File::Find::name) if -x _ && (/-t\z/ || /-t\.exe\z/);
}, @dirs;
return @files;
}
@@ -92,7 +102,7 @@
if (@files > 0) {
# Removing the first './' from the file names
foreach (@files) { s!^\./!! }
- $ENV{'HARNESS_PERL_SWITCHES'} .= q" -e 'exec @ARGV'";
+ $ENV{'HARNESS_PERL_SWITCHES'} .= ' -e "exec @ARGV"';
runtests @files;
}
}
# Begin bundle
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
| Thread |
|---|
| • port of my_atomic-t, unit tests | Guilhem Bichot | 3 Nov |