qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 2/2] tests: add file-write-read test


From: Marc-André Lureau
Subject: Re: [Qemu-devel] [PATCH 2/2] tests: add file-write-read test
Date: Tue, 24 Nov 2015 12:58:51 -0500 (EST)

Hi

----- Original Message -----
> On 11/24/2015 09:34 AM, address@hidden wrote:
> > From: Marc-André Lureau <address@hidden>
> > 
> > This test exhibits a POSIX behaviour regarding switching between write
> > and read. It's undefined result if the application doesn't ensure a
> > flush between the two operations (with glibc, the flush can be implicit
> > when the buffer size is relatively small). The previous commit fixes
> > this test.
> > 
> > Related to:
> > https://bugzilla.redhat.com/show_bug.cgi?id=1210246
> > 
> > Signed-off-by: Marc-André Lureau <address@hidden>
> > ---
> >  tests/test-qga.c | 91
> >  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 91 insertions(+)
> > 
> > diff --git a/tests/test-qga.c b/tests/test-qga.c
> > index 6473846..6b6963e 100644
> > --- a/tests/test-qga.c
> > +++ b/tests/test-qga.c
> > @@ -496,6 +496,96 @@ static void test_qga_file_ops(gconstpointer fix)
> >      g_free(cmd);
> >  }
> >  
> > +static void test_qga_file_write_read(gconstpointer fix)
> > +{
> > +    const TestFixture *fixture = fix;
> > +    const guchar helloworld[] = "Hello World!\n";
> 
> Do we have to use guchar, or can we just stick with 'char' or 'unsigned
> char'?

We can switch to "unsigned char"

> 
> 
> > +
> > +    /* read (check implicit flush) */
> 
> Here, the term implicit is okay; while the previous patch is adding an
> explicit flush at the low level, it is doing so in order to avoid having
> to make clients need an explicit flush operation (clients can rely on an
> implicit flush).

ok

> 
> > +    cmd = g_strdup_printf("{'execute': 'guest-file-read',"
> > +                          " 'arguments': { 'handle': %" PRId64 "} }",
> > +                          id);
> > +    ret = qmp_fd(fixture->fd, cmd);
> > +    val = qdict_get_qdict(ret, "return");
> > +    count = qdict_get_int(val, "count");
> > +    eof = qdict_get_bool(val, "eof");
> > +    b64 = qdict_get_str(val, "buf-b64");
> > +    g_assert_cmpint(count, ==, 0);
> > +    g_assert(eof);
> > +    g_assert_cmpstr(b64, ==, "");
> > +    QDECREF(ret);
> > +    g_free(cmd);
> > +
> > +    /* seek to 0*/
> 
> Space before */

fixed

> 
> > +    cmd = g_strdup_printf("{'execute': 'guest-file-seek',"
> > +                          " 'arguments': { 'handle': %" PRId64 ", "
> > +                          " 'offset': %d, 'whence': %d } }",
> > +                          id, 0, SEEK_SET);
> 
> EWWWW.  We seriously released this interface as taking an integer for
> whence?  SEEK_SET is not required to be the same value on every
> platform.  Which is a severe problem if the guest and the host are on
> different OS with different choices of values for the constants (if
> SEEK_CUR on my host is 1, but 1 maps to SEEK_END on my guest OS, what
> behavior am I going to get?).
> 
> It would be worth a patch to qga to document the actual integer values
> that we have hard-coded (0 for set, 1 for cur, 2 for end; even if that
> differs from the guest's local definition of the SEEK_ constants),
> and/or to fix the interface to take symbolic names rather than integers
> for the whence argument.
> 
> Our whole guest-file-* API is lousy.

Are you going to send a patch for this?

(hopefully, we can expose a "real" filesystem protocol in the near future)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]