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

Frediano Ziglio fziglio at redhat.com
Tue Sep 4 15:50:42 UTC 2018


> 
> 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.

> > 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


More information about the Spice-devel mailing list