qemu/tests/qtest/libqos/libqtest.h
<<
>>
Prefs
   1/*
   2 * QTest
   3 *
   4 * Copyright IBM, Corp. 2012
   5 * Copyright Red Hat, Inc. 2012
   6 * Copyright SUSE LINUX Products GmbH 2013
   7 *
   8 * Authors:
   9 *  Anthony Liguori   <aliguori@us.ibm.com>
  10 *  Paolo Bonzini     <pbonzini@redhat.com>
  11 *  Andreas Färber    <afaerber@suse.de>
  12 *
  13 * This work is licensed under the terms of the GNU GPL, version 2 or later.
  14 * See the COPYING file in the top-level directory.
  15 *
  16 */
  17#ifndef LIBQTEST_H
  18#define LIBQTEST_H
  19
  20#include "qapi/qmp/qobject.h"
  21#include "qapi/qmp/qdict.h"
  22
  23typedef struct QTestState QTestState;
  24
  25/**
  26 * qtest_initf:
  27 * @fmt: Format for creating other arguments to pass to QEMU, formatted
  28 * like sprintf().
  29 *
  30 * Convenience wrapper around qtest_init().
  31 *
  32 * Returns: #QTestState instance.
  33 */
  34QTestState *qtest_initf(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
  35
  36/**
  37 * qtest_vinitf:
  38 * @fmt: Format for creating other arguments to pass to QEMU, formatted
  39 * like vsprintf().
  40 * @ap: Format arguments.
  41 *
  42 * Convenience wrapper around qtest_init().
  43 *
  44 * Returns: #QTestState instance.
  45 */
  46QTestState *qtest_vinitf(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
  47
  48/**
  49 * qtest_init:
  50 * @extra_args: other arguments to pass to QEMU.  CAUTION: these
  51 * arguments are subject to word splitting and shell evaluation.
  52 *
  53 * Returns: #QTestState instance.
  54 */
  55QTestState *qtest_init(const char *extra_args);
  56
  57/**
  58 * qtest_init_without_qmp_handshake:
  59 * @extra_args: other arguments to pass to QEMU.  CAUTION: these
  60 * arguments are subject to word splitting and shell evaluation.
  61 *
  62 * Returns: #QTestState instance.
  63 */
  64QTestState *qtest_init_without_qmp_handshake(const char *extra_args);
  65
  66/**
  67 * qtest_init_with_serial:
  68 * @extra_args: other arguments to pass to QEMU.  CAUTION: these
  69 * arguments are subject to word splitting and shell evaluation.
  70 * @sock_fd: pointer to store the socket file descriptor for
  71 * connection with serial.
  72 *
  73 * Returns: #QTestState instance.
  74 */
  75QTestState *qtest_init_with_serial(const char *extra_args, int *sock_fd);
  76
  77/**
  78 * qtest_kill_qemu:
  79 * @s: #QTestState instance to operate on.
  80 *
  81 * Kill the QEMU process and wait for it to terminate. It is safe to call this
  82 * function multiple times. Normally qtest_quit() is used instead because it
  83 * also frees QTestState. Use qtest_kill_qemu() when you just want to kill QEMU
  84 * and qtest_quit() will be called later.
  85 */
  86void qtest_kill_qemu(QTestState *s);
  87
  88/**
  89 * qtest_quit:
  90 * @s: #QTestState instance to operate on.
  91 *
  92 * Shut down the QEMU process associated to @s.
  93 */
  94void qtest_quit(QTestState *s);
  95
  96/**
  97 * qtest_qmp_fds:
  98 * @s: #QTestState instance to operate on.
  99 * @fds: array of file descriptors
 100 * @fds_num: number of elements in @fds
 101 * @fmt: QMP message to send to qemu, formatted like
 102 * qobject_from_jsonf_nofail().  See parse_interpolation() for what's
 103 * supported after '%'.
 104 *
 105 * Sends a QMP message to QEMU with fds and returns the response.
 106 */
 107QDict *qtest_qmp_fds(QTestState *s, int *fds, size_t fds_num,
 108                     const char *fmt, ...)
 109    GCC_FMT_ATTR(4, 5);
 110
 111/**
 112 * qtest_qmp:
 113 * @s: #QTestState instance to operate on.
 114 * @fmt: QMP message to send to qemu, formatted like
 115 * qobject_from_jsonf_nofail().  See parse_interpolation() for what's
 116 * supported after '%'.
 117 *
 118 * Sends a QMP message to QEMU and returns the response.
 119 */
 120QDict *qtest_qmp(QTestState *s, const char *fmt, ...)
 121    GCC_FMT_ATTR(2, 3);
 122
 123/**
 124 * qtest_qmp_send:
 125 * @s: #QTestState instance to operate on.
 126 * @fmt: QMP message to send to qemu, formatted like
 127 * qobject_from_jsonf_nofail().  See parse_interpolation() for what's
 128 * supported after '%'.
 129 *
 130 * Sends a QMP message to QEMU and leaves the response in the stream.
 131 */
 132void qtest_qmp_send(QTestState *s, const char *fmt, ...)
 133    GCC_FMT_ATTR(2, 3);
 134
 135/**
 136 * qtest_qmp_send_raw:
 137 * @s: #QTestState instance to operate on.
 138 * @fmt: text to send, formatted like sprintf()
 139 *
 140 * Sends text to the QMP monitor verbatim.  Need not be valid JSON;
 141 * this is useful for negative tests.
 142 */
 143void qtest_qmp_send_raw(QTestState *s, const char *fmt, ...)
 144    GCC_FMT_ATTR(2, 3);
 145
 146/**
 147 * qtest_socket_server:
 148 * @socket_path: the UNIX domain socket path
 149 *
 150 * Create and return a listen socket file descriptor, or abort on failure.
 151 */
 152int qtest_socket_server(const char *socket_path);
 153
 154/**
 155 * qtest_vqmp_fds:
 156 * @s: #QTestState instance to operate on.
 157 * @fds: array of file descriptors
 158 * @fds_num: number of elements in @fds
 159 * @fmt: QMP message to send to QEMU, formatted like
 160 * qobject_from_jsonf_nofail().  See parse_interpolation() for what's
 161 * supported after '%'.
 162 * @ap: QMP message arguments
 163 *
 164 * Sends a QMP message to QEMU with fds and returns the response.
 165 */
 166QDict *qtest_vqmp_fds(QTestState *s, int *fds, size_t fds_num,
 167                      const char *fmt, va_list ap)
 168    GCC_FMT_ATTR(4, 0);
 169
 170/**
 171 * qtest_vqmp:
 172 * @s: #QTestState instance to operate on.
 173 * @fmt: QMP message to send to QEMU, formatted like
 174 * qobject_from_jsonf_nofail().  See parse_interpolation() for what's
 175 * supported after '%'.
 176 * @ap: QMP message arguments
 177 *
 178 * Sends a QMP message to QEMU and returns the response.
 179 */
 180QDict *qtest_vqmp(QTestState *s, const char *fmt, va_list ap)
 181    GCC_FMT_ATTR(2, 0);
 182
 183/**
 184 * qtest_qmp_vsend_fds:
 185 * @s: #QTestState instance to operate on.
 186 * @fds: array of file descriptors
 187 * @fds_num: number of elements in @fds
 188 * @fmt: QMP message to send to QEMU, formatted like
 189 * qobject_from_jsonf_nofail().  See parse_interpolation() for what's
 190 * supported after '%'.
 191 * @ap: QMP message arguments
 192 *
 193 * Sends a QMP message to QEMU and leaves the response in the stream.
 194 */
 195void qtest_qmp_vsend_fds(QTestState *s, int *fds, size_t fds_num,
 196                         const char *fmt, va_list ap)
 197    GCC_FMT_ATTR(4, 0);
 198
 199/**
 200 * qtest_qmp_vsend:
 201 * @s: #QTestState instance to operate on.
 202 * @fmt: QMP message to send to QEMU, formatted like
 203 * qobject_from_jsonf_nofail().  See parse_interpolation() for what's
 204 * supported after '%'.
 205 * @ap: QMP message arguments
 206 *
 207 * Sends a QMP message to QEMU and leaves the response in the stream.
 208 */
 209void qtest_qmp_vsend(QTestState *s, const char *fmt, va_list ap)
 210    GCC_FMT_ATTR(2, 0);
 211
 212/**
 213 * qtest_qmp_receive_dict:
 214 * @s: #QTestState instance to operate on.
 215 *
 216 * Reads a QMP message from QEMU and returns the response.
 217 */
 218QDict *qtest_qmp_receive_dict(QTestState *s);
 219
 220/**
 221 * qtest_qmp_receive:
 222 * @s: #QTestState instance to operate on.
 223 *
 224 * Reads a QMP message from QEMU and returns the response.
 225 * Buffers all the events received meanwhile, until a
 226 * call to qtest_qmp_eventwait
 227 */
 228QDict *qtest_qmp_receive(QTestState *s);
 229
 230/**
 231 * qtest_qmp_eventwait:
 232 * @s: #QTestState instance to operate on.
 233 * @event: event to wait for.
 234 *
 235 * Continuously polls for QMP responses until it receives the desired event.
 236 */
 237void qtest_qmp_eventwait(QTestState *s, const char *event);
 238
 239/**
 240 * qtest_qmp_eventwait_ref:
 241 * @s: #QTestState instance to operate on.
 242 * @event: event to wait for.
 243 *
 244 * Continuously polls for QMP responses until it receives the desired event.
 245 * Returns a copy of the event for further investigation.
 246 */
 247QDict *qtest_qmp_eventwait_ref(QTestState *s, const char *event);
 248
 249/**
 250 * qtest_qmp_event_ref:
 251 * @s: #QTestState instance to operate on.
 252 * @event: event to return.
 253 *
 254 * Removes non-matching events from the buffer that was set by
 255 * qtest_qmp_receive, until an event bearing the given name is found,
 256 * and returns it.
 257 * If no event matches, clears the buffer and returns NULL.
 258 *
 259 */
 260QDict *qtest_qmp_event_ref(QTestState *s, const char *event);
 261
 262/**
 263 * qtest_hmp:
 264 * @s: #QTestState instance to operate on.
 265 * @fmt: HMP command to send to QEMU, formats arguments like sprintf().
 266 *
 267 * Send HMP command to QEMU via QMP's human-monitor-command.
 268 * QMP events are discarded.
 269 *
 270 * Returns: the command's output.  The caller should g_free() it.
 271 */
 272char *qtest_hmp(QTestState *s, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
 273
 274/**
 275 * qtest_hmpv:
 276 * @s: #QTestState instance to operate on.
 277 * @fmt: HMP command to send to QEMU, formats arguments like vsprintf().
 278 * @ap: HMP command arguments
 279 *
 280 * Send HMP command to QEMU via QMP's human-monitor-command.
 281 * QMP events are discarded.
 282 *
 283 * Returns: the command's output.  The caller should g_free() it.
 284 */
 285char *qtest_vhmp(QTestState *s, const char *fmt, va_list ap)
 286    GCC_FMT_ATTR(2, 0);
 287
 288void qtest_module_load(QTestState *s, const char *prefix, const char *libname);
 289
 290/**
 291 * qtest_get_irq:
 292 * @s: #QTestState instance to operate on.
 293 * @num: Interrupt to observe.
 294 *
 295 * Returns: The level of the @num interrupt.
 296 */
 297bool qtest_get_irq(QTestState *s, int num);
 298
 299/**
 300 * qtest_irq_intercept_in:
 301 * @s: #QTestState instance to operate on.
 302 * @string: QOM path of a device.
 303 *
 304 * Associate qtest irqs with the GPIO-in pins of the device
 305 * whose path is specified by @string.
 306 */
 307void qtest_irq_intercept_in(QTestState *s, const char *string);
 308
 309/**
 310 * qtest_irq_intercept_out:
 311 * @s: #QTestState instance to operate on.
 312 * @string: QOM path of a device.
 313 *
 314 * Associate qtest irqs with the GPIO-out pins of the device
 315 * whose path is specified by @string.
 316 */
 317void qtest_irq_intercept_out(QTestState *s, const char *string);
 318
 319/**
 320 * qtest_set_irq_in:
 321 * @s: QTestState instance to operate on.
 322 * @string: QOM path of a device
 323 * @name: IRQ name
 324 * @irq: IRQ number
 325 * @level: IRQ level
 326 *
 327 * Force given device/irq GPIO-in pin to the given level.
 328 */
 329void qtest_set_irq_in(QTestState *s, const char *string, const char *name,
 330                      int irq, int level);
 331
 332/**
 333 * qtest_outb:
 334 * @s: #QTestState instance to operate on.
 335 * @addr: I/O port to write to.
 336 * @value: Value being written.
 337 *
 338 * Write an 8-bit value to an I/O port.
 339 */
 340void qtest_outb(QTestState *s, uint16_t addr, uint8_t value);
 341
 342/**
 343 * qtest_outw:
 344 * @s: #QTestState instance to operate on.
 345 * @addr: I/O port to write to.
 346 * @value: Value being written.
 347 *
 348 * Write a 16-bit value to an I/O port.
 349 */
 350void qtest_outw(QTestState *s, uint16_t addr, uint16_t value);
 351
 352/**
 353 * qtest_outl:
 354 * @s: #QTestState instance to operate on.
 355 * @addr: I/O port to write to.
 356 * @value: Value being written.
 357 *
 358 * Write a 32-bit value to an I/O port.
 359 */
 360void qtest_outl(QTestState *s, uint16_t addr, uint32_t value);
 361
 362/**
 363 * qtest_inb:
 364 * @s: #QTestState instance to operate on.
 365 * @addr: I/O port to read from.
 366 *
 367 * Returns an 8-bit value from an I/O port.
 368 */
 369uint8_t qtest_inb(QTestState *s, uint16_t addr);
 370
 371/**
 372 * qtest_inw:
 373 * @s: #QTestState instance to operate on.
 374 * @addr: I/O port to read from.
 375 *
 376 * Returns a 16-bit value from an I/O port.
 377 */
 378uint16_t qtest_inw(QTestState *s, uint16_t addr);
 379
 380/**
 381 * qtest_inl:
 382 * @s: #QTestState instance to operate on.
 383 * @addr: I/O port to read from.
 384 *
 385 * Returns a 32-bit value from an I/O port.
 386 */
 387uint32_t qtest_inl(QTestState *s, uint16_t addr);
 388
 389/**
 390 * qtest_writeb:
 391 * @s: #QTestState instance to operate on.
 392 * @addr: Guest address to write to.
 393 * @value: Value being written.
 394 *
 395 * Writes an 8-bit value to memory.
 396 */
 397void qtest_writeb(QTestState *s, uint64_t addr, uint8_t value);
 398
 399/**
 400 * qtest_writew:
 401 * @s: #QTestState instance to operate on.
 402 * @addr: Guest address to write to.
 403 * @value: Value being written.
 404 *
 405 * Writes a 16-bit value to memory.
 406 */
 407void qtest_writew(QTestState *s, uint64_t addr, uint16_t value);
 408
 409/**
 410 * qtest_writel:
 411 * @s: #QTestState instance to operate on.
 412 * @addr: Guest address to write to.
 413 * @value: Value being written.
 414 *
 415 * Writes a 32-bit value to memory.
 416 */
 417void qtest_writel(QTestState *s, uint64_t addr, uint32_t value);
 418
 419/**
 420 * qtest_writeq:
 421 * @s: #QTestState instance to operate on.
 422 * @addr: Guest address to write to.
 423 * @value: Value being written.
 424 *
 425 * Writes a 64-bit value to memory.
 426 */
 427void qtest_writeq(QTestState *s, uint64_t addr, uint64_t value);
 428
 429/**
 430 * qtest_readb:
 431 * @s: #QTestState instance to operate on.
 432 * @addr: Guest address to read from.
 433 *
 434 * Reads an 8-bit value from memory.
 435 *
 436 * Returns: Value read.
 437 */
 438uint8_t qtest_readb(QTestState *s, uint64_t addr);
 439
 440/**
 441 * qtest_readw:
 442 * @s: #QTestState instance to operate on.
 443 * @addr: Guest address to read from.
 444 *
 445 * Reads a 16-bit value from memory.
 446 *
 447 * Returns: Value read.
 448 */
 449uint16_t qtest_readw(QTestState *s, uint64_t addr);
 450
 451/**
 452 * qtest_readl:
 453 * @s: #QTestState instance to operate on.
 454 * @addr: Guest address to read from.
 455 *
 456 * Reads a 32-bit value from memory.
 457 *
 458 * Returns: Value read.
 459 */
 460uint32_t qtest_readl(QTestState *s, uint64_t addr);
 461
 462/**
 463 * qtest_readq:
 464 * @s: #QTestState instance to operate on.
 465 * @addr: Guest address to read from.
 466 *
 467 * Reads a 64-bit value from memory.
 468 *
 469 * Returns: Value read.
 470 */
 471uint64_t qtest_readq(QTestState *s, uint64_t addr);
 472
 473/**
 474 * qtest_memread:
 475 * @s: #QTestState instance to operate on.
 476 * @addr: Guest address to read from.
 477 * @data: Pointer to where memory contents will be stored.
 478 * @size: Number of bytes to read.
 479 *
 480 * Read guest memory into a buffer.
 481 */
 482void qtest_memread(QTestState *s, uint64_t addr, void *data, size_t size);
 483
 484/**
 485 * qtest_rtas_call:
 486 * @s: #QTestState instance to operate on.
 487 * @name: name of the command to call.
 488 * @nargs: Number of args.
 489 * @args: Guest address to read args from.
 490 * @nret: Number of return value.
 491 * @ret: Guest address to write return values to.
 492 *
 493 * Call an RTAS function
 494 */
 495uint64_t qtest_rtas_call(QTestState *s, const char *name,
 496                         uint32_t nargs, uint64_t args,
 497                         uint32_t nret, uint64_t ret);
 498
 499/**
 500 * qtest_bufread:
 501 * @s: #QTestState instance to operate on.
 502 * @addr: Guest address to read from.
 503 * @data: Pointer to where memory contents will be stored.
 504 * @size: Number of bytes to read.
 505 *
 506 * Read guest memory into a buffer and receive using a base64 encoding.
 507 */
 508void qtest_bufread(QTestState *s, uint64_t addr, void *data, size_t size);
 509
 510/**
 511 * qtest_memwrite:
 512 * @s: #QTestState instance to operate on.
 513 * @addr: Guest address to write to.
 514 * @data: Pointer to the bytes that will be written to guest memory.
 515 * @size: Number of bytes to write.
 516 *
 517 * Write a buffer to guest memory.
 518 */
 519void qtest_memwrite(QTestState *s, uint64_t addr, const void *data, size_t size);
 520
 521/**
 522 * qtest_bufwrite:
 523 * @s: #QTestState instance to operate on.
 524 * @addr: Guest address to write to.
 525 * @data: Pointer to the bytes that will be written to guest memory.
 526 * @size: Number of bytes to write.
 527 *
 528 * Write a buffer to guest memory and transmit using a base64 encoding.
 529 */
 530void qtest_bufwrite(QTestState *s, uint64_t addr,
 531                    const void *data, size_t size);
 532
 533/**
 534 * qtest_memset:
 535 * @s: #QTestState instance to operate on.
 536 * @addr: Guest address to write to.
 537 * @patt: Byte pattern to fill the guest memory region with.
 538 * @size: Number of bytes to write.
 539 *
 540 * Write a pattern to guest memory.
 541 */
 542void qtest_memset(QTestState *s, uint64_t addr, uint8_t patt, size_t size);
 543
 544/**
 545 * qtest_clock_step_next:
 546 * @s: #QTestState instance to operate on.
 547 *
 548 * Advance the QEMU_CLOCK_VIRTUAL to the next deadline.
 549 *
 550 * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
 551 */
 552int64_t qtest_clock_step_next(QTestState *s);
 553
 554/**
 555 * qtest_clock_step:
 556 * @s: QTestState instance to operate on.
 557 * @step: Number of nanoseconds to advance the clock by.
 558 *
 559 * Advance the QEMU_CLOCK_VIRTUAL by @step nanoseconds.
 560 *
 561 * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
 562 */
 563int64_t qtest_clock_step(QTestState *s, int64_t step);
 564
 565/**
 566 * qtest_clock_set:
 567 * @s: QTestState instance to operate on.
 568 * @val: Nanoseconds value to advance the clock to.
 569 *
 570 * Advance the QEMU_CLOCK_VIRTUAL to @val nanoseconds since the VM was launched.
 571 *
 572 * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
 573 */
 574int64_t qtest_clock_set(QTestState *s, int64_t val);
 575
 576/**
 577 * qtest_big_endian:
 578 * @s: QTestState instance to operate on.
 579 *
 580 * Returns: True if the architecture under test has a big endian configuration.
 581 */
 582bool qtest_big_endian(QTestState *s);
 583
 584/**
 585 * qtest_get_arch:
 586 *
 587 * Returns: The architecture for the QEMU executable under test.
 588 */
 589const char *qtest_get_arch(void);
 590
 591/**
 592 * qtest_add_func:
 593 * @str: Test case path.
 594 * @fn: Test case function
 595 *
 596 * Add a GTester testcase with the given name and function.
 597 * The path is prefixed with the architecture under test, as
 598 * returned by qtest_get_arch().
 599 */
 600void qtest_add_func(const char *str, void (*fn)(void));
 601
 602/**
 603 * qtest_add_data_func:
 604 * @str: Test case path.
 605 * @data: Test case data
 606 * @fn: Test case function
 607 *
 608 * Add a GTester testcase with the given name, data and function.
 609 * The path is prefixed with the architecture under test, as
 610 * returned by qtest_get_arch().
 611 */
 612void qtest_add_data_func(const char *str, const void *data,
 613                         void (*fn)(const void *));
 614
 615/**
 616 * qtest_add_data_func_full:
 617 * @str: Test case path.
 618 * @data: Test case data
 619 * @fn: Test case function
 620 * @data_free_func: GDestroyNotify for data
 621 *
 622 * Add a GTester testcase with the given name, data and function.
 623 * The path is prefixed with the architecture under test, as
 624 * returned by qtest_get_arch().
 625 *
 626 * @data is passed to @data_free_func() on test completion.
 627 */
 628void qtest_add_data_func_full(const char *str, void *data,
 629                              void (*fn)(const void *),
 630                              GDestroyNotify data_free_func);
 631
 632/**
 633 * qtest_add:
 634 * @testpath: Test case path
 635 * @Fixture: Fixture type
 636 * @tdata: Test case data
 637 * @fsetup: Test case setup function
 638 * @ftest: Test case function
 639 * @fteardown: Test case teardown function
 640 *
 641 * Add a GTester testcase with the given name, data and functions.
 642 * The path is prefixed with the architecture under test, as
 643 * returned by qtest_get_arch().
 644 */
 645#define qtest_add(testpath, Fixture, tdata, fsetup, ftest, fteardown) \
 646    do { \
 647        char *path = g_strdup_printf("/%s/%s", qtest_get_arch(), testpath); \
 648        g_test_add(path, Fixture, tdata, fsetup, ftest, fteardown); \
 649        g_free(path); \
 650    } while (0)
 651
 652/**
 653 * qtest_add_abrt_handler:
 654 * @fn: Handler function
 655 * @data: Argument that is passed to the handler
 656 *
 657 * Add a handler function that is invoked on SIGABRT. This can be used to
 658 * terminate processes and perform other cleanup. The handler can be removed
 659 * with qtest_remove_abrt_handler().
 660 */
 661void qtest_add_abrt_handler(GHookFunc fn, const void *data);
 662
 663/**
 664 * qtest_remove_abrt_handler:
 665 * @data: Argument previously passed to qtest_add_abrt_handler()
 666 *
 667 * Remove an abrt handler that was previously added with
 668 * qtest_add_abrt_handler().
 669 */
 670void qtest_remove_abrt_handler(void *data);
 671
 672/**
 673 * qtest_qmp_assert_success:
 674 * @qts: QTestState instance to operate on
 675 * @fmt: QMP message to send to qemu, formatted like
 676 * qobject_from_jsonf_nofail().  See parse_interpolation() for what's
 677 * supported after '%'.
 678 *
 679 * Sends a QMP message to QEMU and asserts that a 'return' key is present in
 680 * the response.
 681 */
 682void qtest_qmp_assert_success(QTestState *qts, const char *fmt, ...)
 683    GCC_FMT_ATTR(2, 3);
 684
 685QDict *qmp_fd_receive(int fd);
 686void qmp_fd_vsend_fds(int fd, int *fds, size_t fds_num,
 687                      const char *fmt, va_list ap) GCC_FMT_ATTR(4, 0);
 688void qmp_fd_vsend(int fd, const char *fmt, va_list ap) GCC_FMT_ATTR(2, 0);
 689void qmp_fd_send(int fd, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
 690void qmp_fd_send_raw(int fd, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
 691void qmp_fd_vsend_raw(int fd, const char *fmt, va_list ap) GCC_FMT_ATTR(2, 0);
 692QDict *qmp_fdv(int fd, const char *fmt, va_list ap) GCC_FMT_ATTR(2, 0);
 693QDict *qmp_fd(int fd, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
 694
 695/**
 696 * qtest_cb_for_every_machine:
 697 * @cb: Pointer to the callback function
 698 * @skip_old_versioned: true if versioned old machine types should be skipped
 699 *
 700 *  Call a callback function for every name of all available machines.
 701 */
 702void qtest_cb_for_every_machine(void (*cb)(const char *machine),
 703                                bool skip_old_versioned);
 704
 705/**
 706 * qtest_qmp_device_add_qdict:
 707 * @qts: QTestState instance to operate on
 708 * @drv: Name of the device that should be added
 709 * @arguments: QDict with properties for the device to intialize
 710 *
 711 * Generic hot-plugging test via the device_add QMP command with properties
 712 * supplied in form of QDict. Use NULL for empty properties list.
 713 */
 714void qtest_qmp_device_add_qdict(QTestState *qts, const char *drv,
 715                                const QDict *arguments);
 716
 717/**
 718 * qtest_qmp_device_add:
 719 * @qts: QTestState instance to operate on
 720 * @driver: Name of the device that should be added
 721 * @id: Identification string
 722 * @fmt: QMP message to send to qemu, formatted like
 723 * qobject_from_jsonf_nofail().  See parse_interpolation() for what's
 724 * supported after '%'.
 725 *
 726 * Generic hot-plugging test via the device_add QMP command.
 727 */
 728void qtest_qmp_device_add(QTestState *qts, const char *driver, const char *id,
 729                          const char *fmt, ...) GCC_FMT_ATTR(4, 5);
 730
 731/**
 732 * qtest_qmp_device_del:
 733 * @qts: QTestState instance to operate on
 734 * @id: Identification string
 735 *
 736 * Generic hot-unplugging test via the device_del QMP command.
 737 */
 738void qtest_qmp_device_del(QTestState *qts, const char *id);
 739
 740/**
 741 * qmp_rsp_is_err:
 742 * @rsp: QMP response to check for error
 743 *
 744 * Test @rsp for error and discard @rsp.
 745 * Returns 'true' if there is error in @rsp and 'false' otherwise.
 746 */
 747bool qmp_rsp_is_err(QDict *rsp);
 748
 749/**
 750 * qmp_expect_error_and_unref:
 751 * @rsp: QMP response to check for error
 752 * @class: an error class
 753 *
 754 * Assert the response has the given error class and discard @rsp.
 755 */
 756void qmp_expect_error_and_unref(QDict *rsp, const char *class);
 757
 758/**
 759 * qtest_probe_child:
 760 * @s: QTestState instance to operate on.
 761 *
 762 * Returns: true if the child is still alive.
 763 */
 764bool qtest_probe_child(QTestState *s);
 765
 766/**
 767 * qtest_set_expected_status:
 768 * @s: QTestState instance to operate on.
 769 * @status: an expected exit status.
 770 *
 771 * Set expected exit status of the child.
 772 */
 773void qtest_set_expected_status(QTestState *s, int status);
 774
 775QTestState *qtest_inproc_init(QTestState **s, bool log, const char* arch,
 776                    void (*send)(void*, const char*));
 777
 778void qtest_client_inproc_recv(void *opaque, const char *str);
 779#endif
 780