qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

libqtest.h (23293B)


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