← Back to team overview

maria-discuss team mailing list archive

Re: Maria/Aria unit test failures

 

Hi,

(I wasn't subscribed to the list when the thread started, so the reply might get misplaced, sorry about it. I'm answering this: https://lists.launchpad.net/maria-discuss/msg00601.html)


>> My build tool runs 'make test-unit' and the following errors appear.

>> [16:34:05] ../storage/maria/unittest/ma_test_all-t
>> .....................
>> 73/830
>> Failed test '../storage/maria/unittest/../ma_test2 -s -htmp -m10000
>> -e4096 -K ' (loop iteration 8.) at line 316
>> (errcode: 256, test: 83)


From what I see, ma_test2 has the array key3[5000], used in a loop which sets
n3=rnd(5000);
and then reads
key3[n3] == ...

while rnd(uint max_value) is
return (uint) ((rand() & 32767)/32767.0*max_value);

which means with some luck it can return max_value itself.
Luck happens, rnd returns 5000, key3[n3] reads something entirely wrong (in my case the value of 'silent' variable which is int and set to 1 as the unit test is launched with -s), the entire condition check with key3[n3] gets twisted, the bogus error occurs.

The following change fixes the problem for me, although maybe there are more elegant solutions.

=== modified file 'storage/maria/ma_test2.c'
--- storage/maria/ma_test2.c  2011-02-25 12:55:40 +0000
+++ storage/maria/ma_test2.c  2012-04-20 10:05:45 +0000
@@ -259,7 +259,7 @@
   for (i=0 ; i < recant ; i++)
   {
     ulong blob_length;
-    n1=rnd(1000); n2=rnd(100); n3=rnd(5000);
+    n1=rnd(1000); n2=rnd(100); n3=rnd(4999);
     sprintf((char*) record,"%6d:%4d:%8d:Pos: %4d ",n1,n2,n3,write_count);
     int4store(record+STANDARD_LENGTH-4,(long) i);
     fix_length(record,(uint) STANDARD_LENGTH+rnd(60));


Regards,
Elena


Follow ups