[PATCH 1/2] dinput/tests: Do not test that reports are identical when polling.
Zebediah Figura (she/her)
zfigura at codeweavers.com
Mon May 2 21:27:30 CDT 2022
On 5/2/22 18:14, Rémi Bernon wrote:
> 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.
I've found interactive tests to be useful in DirectShow and ws2_32, for
cases where it's difficult to impossible to write reliable tests, but
where a "mostly reliable" test is still valuable. In such cases the test
can't be automated, but it's already usually the case that signing off
on a patch implies running the appropriate tests for it manually.
Obviously "interactive" is a bit of a misnomer in this case, except
inasmuch as it means "requires some attention which is not automated".
>
>
>> 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.
>
Hmm, I thought I encountered the first one failing locally, but I could
be wrong. I'll just send a patch to remove the second part for now.
More information about the wine-devel
mailing list