[PATCH 1/2] dinput/tests: Do not test that reports are identical when polling.

Rémi Bernon rbernon at codeweavers.com
Mon May 2 18:14:30 CDT 2022


On 5/3/22 01:09, Zebediah Figura (she/her) wrote:
> On 5/2/22 17:06, Rémi Bernon wrote:
>> On 5/2/22 23:48, Zebediah Figura wrote:
>>> This is dependent on timing, and currently fails occasionally both on 
>>> Windows
>>> and Wine.
>>>
>>> Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
>>> ---
>>> For examples of failures:
>>>
>>> http://test.winehq.org/data/4ec67b7a6447dfc4af8c03c141c600b41b90ef53/win81_newtb-w8/dinput:hid.html 
>>>
>>> http://test.winehq.org/data/64b96eec7d0aea470f897a3ed0ac9e1b3a680cc5/linux_fgtb-debian11-win32/dinput:hid.html 
>>>
>>>
>>>   dlls/dinput/tests/hid.c | 6 ++----
>>>   1 file changed, 2 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/dlls/dinput/tests/hid.c b/dlls/dinput/tests/hid.c
>>> index 4e107625064..1162f154f8e 100644
>>> --- a/dlls/dinput/tests/hid.c
>>> +++ b/dlls/dinput/tests/hid.c
>>> @@ -2312,14 +2312,13 @@ static void test_hidp( HANDLE file, HANDLE 
>>> async_file, int report_id, BOOL polle
>>>           ok( ret, "GetOverlappedResult failed, last error %lu\n", 
>>> GetLastError() );
>>>           ok( value == (report_id ? 3 : 4), "GetOverlappedResult 
>>> returned length %lu, expected %u\n",
>>>               value, (report_id ? 3 : 4) );
>>> -        /* first report should be ready and the same */
>>> +        /* first report should be ready */
>>>           ret = GetOverlappedResult( async_file, &overlapped, &value, 
>>> FALSE );
>>>           ok( ret, "GetOverlappedResult failed, last error %lu\n", 
>>> GetLastError() );
>>>           ok( value == (report_id ? 3 : 4), "GetOverlappedResult 
>>> returned length %lu, expected %u\n",
>>>               value, (report_id ? 3 : 4) );
>>>           ok( memcmp( report, buffer + caps.InputReportByteLength, 
>>> caps.InputReportByteLength ),
>>>               "expected different report\n" );
>>> -        ok( !memcmp( report, buffer, caps.InputReportByteLength ), 
>>> "expected identical reports\n" );
>>>           value = 10;
>>>           SetLastError( 0xdeadbeef );
>>
>>
>> This defeats a bit the purpose of the test, which is to validate that 
>> in polled mode all pending reads should be completed at once when 
>> device poll completes, whereas in non-polled mode, only one pending 
>> read should complete for each received report.
> 
> I figured as much, and my inclination is that the test just isn't worth 
> keeping around in that case.
> 
> Perhaps it can be marked interactive instead.
> 


I don't think interactive tests are useful, especially not here where 
there's no need for user input.


> Alternatively, as I'm sitting here trying to brainstorm, maybe we could, 
> say, set the poll interval to 100 ms, queue 10 reads, and verify that 
> they all complete in less than 200 ms. That'd also allow us to avoid 
> infinite waits.
> 
>> I don't think this one is failing so often.
> 
> It's not often, but we really shouldn't be letting tests fail at all.
> 

It actually never failed, only the second one does.

-- 
Rémi Bernon <rbernon at codeweavers.com>



More information about the wine-devel mailing list