[Spice-devel] [PATCH spice-gtk] build: Make usb-acl-helper test work under Meson

Eduardo Lima (Etrunko) etrunko at redhat.com
Wed Sep 5 14:06:48 UTC 2018


On 09/04/2018 12:50 PM, Frediano Ziglio wrote:
>>
>> On 09/03/2018 01:34 PM, Frediano Ziglio wrote:
>>> Meson waits for pipes (stdout and stderr) to be not readable but
>>> our mocking helper does not close these handles causing Meson
>>> to give some problems.
>>>
>>
>> Can you elaborate on the "some problems"? Also this patch looks more
>> like a workaround from our side for a real bug in meson?
>>
> 
> Where autoconf succeed Meson give:
> 
> 
> 
> Traceback (most recent call last):
>   File "/usr/bin/meson", line 29, in <module>
>     sys.exit(mesonmain.main())
>   File "/usr/lib/python3.6/site-packages/mesonbuild/mesonmain.py", line 379, in main
>     return run(sys.argv[1:], launcher)
>   File "/usr/lib/python3.6/site-packages/mesonbuild/mesonmain.py", line 278, in run
>     return mtest.run(remaining_args)
>   File "/usr/lib/python3.6/site-packages/mesonbuild/mtest.py", line 760, in run
>     return th.doit()
>   File "/usr/lib/python3.6/site-packages/mesonbuild/mtest.py", line 511, in doit
>     self.run_tests(tests)
>   File "/usr/lib/python3.6/site-packages/mesonbuild/mtest.py", line 669, in run_tests
>     self.drain_futures(futures)
>   File "/usr/lib/python3.6/site-packages/mesonbuild/mtest.py", line 685, in drain_futures
>     self.process_test_result(result.result())
>   File "/usr/lib64/python3.6/concurrent/futures/_base.py", line 425, in result
>     return self.__get_result()
>   File "/usr/lib64/python3.6/concurrent/futures/_base.py", line 384, in __get_result
>     raise self._exception
>   File "/usr/lib64/python3.6/concurrent/futures/thread.py", line 56, in run
>     result = self.fn(*self.args, **self.kwargs)
>   File "/usr/lib/python3.6/site-packages/mesonbuild/mtest.py", line 258, in run
>     return self._run_cmd(wrap + cmd + self.test.cmd_args + self.options.test_args)
>   File "/usr/lib/python3.6/site-packages/mesonbuild/mtest.py", line 356, in _run_cmd
>     (stdo, stde) = p.communicate()
>   File "/usr/lib64/python3.6/subprocess.py", line 843, in communicate
>     stdout, stderr = self._communicate(input, endtime, timeout)
>   File "/usr/lib64/python3.6/subprocess.py", line 1505, in _communicate
>     selector.register(self.stdout, selectors.EVENT_READ)
>   File "/usr/lib64/python3.6/selectors.py", line 351, in register
>     key = super().register(fileobj, events, data)
>   File "/usr/lib64/python3.6/selectors.py", line 237, in register
>     key = SelectorKey(fileobj, self._fileobj_lookup(fileobj), events, data)
>   File "/usr/lib64/python3.6/selectors.py", line 224, in _fileobj_lookup
>     return _fileobj_to_fd(fileobj)
>   File "/usr/lib64/python3.6/selectors.py", line 39, in _fileobj_to_fd
>     "{!r}".format(fileobj)) from None
> ValueError: Invalid file object: <_io.BufferedReader name=14>
> 
> 
> 
> without any logs on its log files.
> 
> I didn't investigate much but I think Meson is trying to use
> a closed file.
> 
> The helper is supposed to be SUID so trying to kill it from
> spice-client-lib code would be a no-op.
> 
> In the real (no mock) helper is specified that writing to
> standard error is the wanted behaviour so using /dev/null
> (or similar) would be a regression in spice-client-lib.
> 
> Maybe should be
> 
> "Meson waits for pipes (stdout and stderr) to be not readable but
> our mocking helper does not close these handles causing Meson
> to exit with a stack trace."
> 
> Note that the fact that the helper is not closing the handles
> is a wanted behaviour.


Okay with this explanation, can you also put this last sentence about
not closing the handles on the commit message? If possible, a link to a
bug in meson issue tracker? https://github.com/mesonbuild/meson/issues

Acked-by: Eduardo Lima (Etrunko) <etrunko at redhat.com>



> 
>>> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
>>> ---
>>>  tests/usb-acl-helper.c | 8 ++++++++
>>>  1 file changed, 8 insertions(+)
>>>
>>> diff --git a/tests/usb-acl-helper.c b/tests/usb-acl-helper.c
>>> index 06f8036..310bdaf 100644
>>> --- a/tests/usb-acl-helper.c
>>> +++ b/tests/usb-acl-helper.c
>>> @@ -15,6 +15,7 @@
>>>     License along with this library; if not, see
>>>     <http://www.gnu.org/licenses/>.
>>>  */
>>>  
>>> +#include <stdio.h>
>>>  #include <glib.h>
>>>  #include "usb-acl-helper.h"
>>>  
>>> @@ -198,6 +199,13 @@ static void test_acl_helper_no_response(Fixture
>>> *fixture, gconstpointer user_dat
>>>  
>>>  int main(int argc, char* argv[])
>>>  {
>>> +    /* Meson wait for stderr to be not readable so make sure the
> 
> Typo: wait -> waits
> 
>>> +     * helper does not keep the pipe open (this happens with current
>>> +     * mock helper) */
>>> +    if (freopen("usb-acl-helper-error.log", "w", stderr) == NULL) {
>>> +        return 1;
>>> +    }
>>> +
>>>      g_test_init(&argc, &argv, NULL);
>>>  
>>>      g_test_add("/usb-acl-helper/success", Fixture, NULL,
>>>
>>
> 
> Frediano
> 


-- 
Eduardo de Barros Lima (Etrunko)
Software Engineer - RedHat
etrunko at redhat.com


More information about the Spice-devel mailing list