On 200103 1745, Philippe Mathieu-Daudé wrote: > On 11/29/19 10:34 PM, Oleinik, Alexander wrote: > > When using qtest "in-process" communication, qtest_sendf directly calls > > a function in the server (qtest.c). Previously, bufwrite used > > socket_send, which bypasses the TransportOps enabling the call into > > qtest.c. This change replaces the socket_send calls with ops->send, > > maintaining the benefits of the direct socket_send call, while adding > > support for in-process qtest calls. > > > > Signed-off-by: Alexander Bulekov <alx...@bu.edu> > > --- > > tests/libqtest.c | 4 ++-- > > tests/libqtest.h | 3 +++ > > 2 files changed, 5 insertions(+), 2 deletions(-) > > > > diff --git a/tests/libqtest.c b/tests/libqtest.c > > index ac4b6ab5f0..a7df92319a 100644 > > --- a/tests/libqtest.c > > +++ b/tests/libqtest.c > > @@ -1080,8 +1080,8 @@ void qtest_bufwrite(QTestState *s, uint64_t addr, > > const void *data, size_t size) > > bdata = g_base64_encode(data, size); > > qtest_sendf(s, "b64write 0x%" PRIx64 " 0x%zx ", addr, size); > > - socket_send(s->fd, bdata, strlen(bdata)); > > - socket_send(s->fd, "\n", 1); > > + s->ops.send(s, bdata); > > + s->ops.send(s, "\n"); > > Ah, is this the send_line() from patch #5? > > Now it makes sense to move the send("\n") there and call it send_line(). > > Moving the send(\n) we get this in patch #5: > > static void qtest_client_socket_send_line(QTestState *s, > const char *bufline) > { > socket_send(s->fd, bufline, strlen(bufline)); > socket_send(s->fd, "\n", 1); > }
Would this also involve changing all of the qtest_{clock_step,in,out,read,write...} functions to remove the '\n' from the calls to qtest_sendf? Not that it matters much, but it also seems to double the number of syscalls needed to send each qtest command. > > qtest_rsp(s, 0); > > g_free(bdata); > > } > > diff --git a/tests/libqtest.h b/tests/libqtest.h > > index c9e21e05b3..0e9b8908ef 100644 > > --- a/tests/libqtest.h > > +++ b/tests/libqtest.h > > @@ -729,4 +729,7 @@ bool qtest_probe_child(QTestState *s); > > */ > > void qtest_set_expected_status(QTestState *s, int status); > > +QTestState *qtest_inproc_init(bool log, const char* arch, > > + void (*send)(void*, const char*)); > > +void qtest_client_inproc_recv(void *opaque, const char *str); > > #endif > > >