List:Commits« Previous MessageNext Message »
From:Guilhem Bichot Date:November 3 2009 10:27pm
Subject:port of my_atomic-t, unit tests
View as plain text  
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 testsGuilhem Bichot3 Nov