summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gnu/local.mk1
-rw-r--r--gnu/packages/databases.scm19
-rw-r--r--gnu/packages/patches/mariadb-client-test-32bit.patch37
3 files changed, 55 insertions, 2 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index 4ed341df8f..adae0f3d23 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -930,6 +930,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/make-glibc-compat.patch			\
   %D%/packages/patches/make-impure-dirs.patch			\
   %D%/packages/patches/mariadb-gcc-ice.patch			\
+  %D%/packages/patches/mariadb-client-test-32bit.patch		\
   %D%/packages/patches/mars-install.patch			\
   %D%/packages/patches/mars-sfml-2.3.patch			\
   %D%/packages/patches/maxima-defsystem-mkdir.patch		\
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 4c9382ce6d..48c75bbba8 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -636,7 +636,8 @@ Language.")
               (sha256
                (base32
                 "0j2mdpyvj41vkq2rwrzky88b7170hzz6gy2vb2bc1447s2gp3q67"))
-              (patches (search-patches "mariadb-gcc-ice.patch"))
+              (patches (search-patches "mariadb-gcc-ice.patch"
+                                       "mariadb-client-test-32bit.patch"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -713,7 +714,18 @@ Language.")
                       ;; See <https://jira.mariadb.org/browse/MDEV-7761>.
                       "main.join_cache"
                       "main.explain_non_select"
-                      "roles.acl_statistics"))
+                      "roles.acl_statistics"
+
+                      ;; FIXME: This test fails on i686:
+                      ;; -myisampack: Can't create/write to file (Errcode: 17 "File exists")
+                      ;; +myisampack: Can't create/write to file (Errcode: 17 "File exists)
+                      ;; When running "myisampack --join=foo/t3 foo/t1 foo/t2"
+                      ;; (all three tables must exist and be identical)
+                      ;; in a loop it produces the same error around 1/240 times.
+                      ;; montywi on #maria suggested removing the real_end check in
+                      ;; "strings/my_vsnprintf.c" on line 503, yet it still does not
+                      ;; reach the ending quote occasionally.  Disable it for now.
+                      "main.myisampack"))
 
                    ;; This file contains a list of known-flaky tests for this
                    ;; release.  Append our own items.
@@ -745,6 +757,9 @@ Language.")
              (if tests?
                  (with-directory-excursion "mysql-test"
                    (invoke "./mtr" "--verbose"
+                           "--retry=3"
+                           "--testcase-timeout=30"
+                           "--suite-timeout=540"
                            "--parallel" (number->string (parallel-job-count))
                            "--skip-test-list=unstable-tests"))
                  (format #t "test suite not run~%"))
diff --git a/gnu/packages/patches/mariadb-client-test-32bit.patch b/gnu/packages/patches/mariadb-client-test-32bit.patch
new file mode 100644
index 0000000000..02017e324d
--- /dev/null
+++ b/gnu/packages/patches/mariadb-client-test-32bit.patch
@@ -0,0 +1,37 @@
+From 93efa48a7b972fc463406603574a4d508eefe792 Mon Sep 17 00:00:00 2001
+From: Sergei Golubchik <serg@mariadb.org>
+Date: Sun, 13 May 2018 18:50:21 +0200
+Subject: [PATCH] fix failing main.mysql_client_test test on 32bit
+
+in `ulonglong=ulong*uint` multiplication
+is done in ulong, wrapping around on 32bit.
+
+This became visible after C/C changed the
+default charset to utf8, thus changing
+mbmaxlem from 1 to 3.
+---
+ tests/mysql_client_fw.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/tests/mysql_client_fw.c b/tests/mysql_client_fw.c
+index f69eb28a2871..4d036887629a 100644
+--- a/tests/mysql_client_fw.c
++++ b/tests/mysql_client_fw.c
+@@ -768,7 +768,7 @@ static void do_verify_prepare_field(MYSQL_RES *result,
+ {
+   MYSQL_FIELD *field;
+   CHARSET_INFO *cs;
+-  ulonglong expected_field_length;
++  ulonglong expected_field_length= length;
+ 
+   if (!(field= mysql_fetch_field_direct(result, no)))
+   {
+@@ -777,7 +777,7 @@ static void do_verify_prepare_field(MYSQL_RES *result,
+   }
+   cs= get_charset(field->charsetnr, 0);
+   DIE_UNLESS(cs);
+-  if ((expected_field_length= length * cs->mbmaxlen) > UINT_MAX32)
++  if ((expected_field_length*= cs->mbmaxlen) > UINT_MAX32)
+     expected_field_length= UINT_MAX32;
+   if (!opt_silent)
+   {