[Gluster-devel] Improve EXPECT/EXPECT_WITHIN result check in tests

Xavier Hernandez xhernandez at datalab.es
Mon May 2 11:49:08 UTC 2016


Hi,

I've found an spurious failure caused by an incorrect check of the 
expected value in EXPECT_WITHIN.

The problem is that the value passed to EXPECT_WITHIN (EXPECT also has 
the same problem) is considered a regular expression but most tests do 
not pass a full/valid regular expression.

For example, most tests expect a '0' result and they pass "0" as an 
argument to EXPECT/EXPECT_WITHIN. This will match with "0", that's ok, 
but it will also match with 10, 20, 102, ... and that's bad.

There are also some tests that do use a regular expression, like "^0$" 
to correctly match only "0", however current implementation of 
EXPECT_WITHIN uses the following check:

     if [[ "$a" =~ "$e" ]]; then

Where "$e" is the regular expression. However putting $e between 
quotation marks (") makes special regular expression characters to not 
be considered. This means that "^0$" will be searched literally and it 
won't never match. When the timeout expires, test_expect_footer is 
called, which does the same check but without using quotation marks. At 
this time the check succeeds, but we have waited an unnecessary amount 
of time.

This is not the first time that I've found something similar.

Would it be ok to change all regular expression checks to something like 
this in include.rc ?

     if [[ "$a" =~ ^$e$ ]]; then

This will allow using regular expressions in EXPECT and EXPECT_WITHIN, 
but will enforce full answer match in all cases, avoiding some possible 
side effects.

This needs some changes in many tests, but I think it's worth doing.

What do you think ?

Xavi


More information about the Gluster-devel mailing list