1907b5105SMarc-André Lureau /* 2907b5105SMarc-André Lureau * QTest 3907b5105SMarc-André Lureau * 4907b5105SMarc-André Lureau * Copyright IBM, Corp. 2012 5907b5105SMarc-André Lureau * Copyright Red Hat, Inc. 2012 6907b5105SMarc-André Lureau * Copyright SUSE LINUX Products GmbH 2013 7907b5105SMarc-André Lureau * 8907b5105SMarc-André Lureau * Authors: 9907b5105SMarc-André Lureau * Anthony Liguori <aliguori@us.ibm.com> 10907b5105SMarc-André Lureau * Paolo Bonzini <pbonzini@redhat.com> 11907b5105SMarc-André Lureau * Andreas Färber <afaerber@suse.de> 12907b5105SMarc-André Lureau * 13907b5105SMarc-André Lureau * This work is licensed under the terms of the GNU GPL, version 2 or later. 14907b5105SMarc-André Lureau * See the COPYING file in the top-level directory. 15907b5105SMarc-André Lureau * 16907b5105SMarc-André Lureau */ 17907b5105SMarc-André Lureau #ifndef LIBQTEST_H 18907b5105SMarc-André Lureau #define LIBQTEST_H 19907b5105SMarc-André Lureau 20907b5105SMarc-André Lureau #include "qapi/qmp/qobject.h" 21907b5105SMarc-André Lureau #include "qapi/qmp/qdict.h" 22c6d3bcb4SMarc-André Lureau #include "libqmp.h" 23907b5105SMarc-André Lureau 24907b5105SMarc-André Lureau typedef struct QTestState QTestState; 25907b5105SMarc-André Lureau 26907b5105SMarc-André Lureau /** 27907b5105SMarc-André Lureau * qtest_initf: 28907b5105SMarc-André Lureau * @fmt: Format for creating other arguments to pass to QEMU, formatted 29907b5105SMarc-André Lureau * like sprintf(). 30907b5105SMarc-André Lureau * 31907b5105SMarc-André Lureau * Convenience wrapper around qtest_init(). 32907b5105SMarc-André Lureau * 33907b5105SMarc-André Lureau * Returns: #QTestState instance. 34907b5105SMarc-André Lureau */ 35907b5105SMarc-André Lureau QTestState *qtest_initf(const char *fmt, ...) G_GNUC_PRINTF(1, 2); 36907b5105SMarc-André Lureau 37907b5105SMarc-André Lureau /** 38907b5105SMarc-André Lureau * qtest_vinitf: 39907b5105SMarc-André Lureau * @fmt: Format for creating other arguments to pass to QEMU, formatted 40907b5105SMarc-André Lureau * like vsprintf(). 41907b5105SMarc-André Lureau * @ap: Format arguments. 42907b5105SMarc-André Lureau * 43907b5105SMarc-André Lureau * Convenience wrapper around qtest_init(). 44907b5105SMarc-André Lureau * 45907b5105SMarc-André Lureau * Returns: #QTestState instance. 46907b5105SMarc-André Lureau */ 47907b5105SMarc-André Lureau QTestState *qtest_vinitf(const char *fmt, va_list ap) G_GNUC_PRINTF(1, 0); 48907b5105SMarc-André Lureau 49907b5105SMarc-André Lureau /** 50907b5105SMarc-André Lureau * qtest_init: 51907b5105SMarc-André Lureau * @extra_args: other arguments to pass to QEMU. CAUTION: these 52907b5105SMarc-André Lureau * arguments are subject to word splitting and shell evaluation. 53907b5105SMarc-André Lureau * 54907b5105SMarc-André Lureau * Returns: #QTestState instance. 55907b5105SMarc-André Lureau */ 56907b5105SMarc-André Lureau QTestState *qtest_init(const char *extra_args); 57907b5105SMarc-André Lureau 58907b5105SMarc-André Lureau /** 599931215bSFabiano Rosas * qtest_init_with_env: 609931215bSFabiano Rosas * @var: Environment variable from where to take the QEMU binary 619931215bSFabiano Rosas * @extra_args: Other arguments to pass to QEMU. CAUTION: these 629931215bSFabiano Rosas * arguments are subject to word splitting and shell evaluation. 639931215bSFabiano Rosas * 649931215bSFabiano Rosas * Like qtest_init(), but use a different environment variable for the 659931215bSFabiano Rosas * QEMU binary. 669931215bSFabiano Rosas * 679931215bSFabiano Rosas * Returns: #QTestState instance. 689931215bSFabiano Rosas */ 699931215bSFabiano Rosas QTestState *qtest_init_with_env(const char *var, const char *extra_args); 709931215bSFabiano Rosas 719931215bSFabiano Rosas /** 72907b5105SMarc-André Lureau * qtest_init_without_qmp_handshake: 73907b5105SMarc-André Lureau * @extra_args: other arguments to pass to QEMU. CAUTION: these 74907b5105SMarc-André Lureau * arguments are subject to word splitting and shell evaluation. 75907b5105SMarc-André Lureau * 76907b5105SMarc-André Lureau * Returns: #QTestState instance. 77907b5105SMarc-André Lureau */ 78907b5105SMarc-André Lureau QTestState *qtest_init_without_qmp_handshake(const char *extra_args); 79907b5105SMarc-André Lureau 80907b5105SMarc-André Lureau /** 81907b5105SMarc-André Lureau * qtest_init_with_serial: 82907b5105SMarc-André Lureau * @extra_args: other arguments to pass to QEMU. CAUTION: these 83907b5105SMarc-André Lureau * arguments are subject to word splitting and shell evaluation. 84907b5105SMarc-André Lureau * @sock_fd: pointer to store the socket file descriptor for 85907b5105SMarc-André Lureau * connection with serial. 86907b5105SMarc-André Lureau * 87907b5105SMarc-André Lureau * Returns: #QTestState instance. 88907b5105SMarc-André Lureau */ 89907b5105SMarc-André Lureau QTestState *qtest_init_with_serial(const char *extra_args, int *sock_fd); 90907b5105SMarc-André Lureau 91907b5105SMarc-André Lureau /** 9269c056fbSBin Meng * qtest_wait_qemu: 9369c056fbSBin Meng * @s: #QTestState instance to operate on. 9469c056fbSBin Meng * 9569c056fbSBin Meng * Wait for the QEMU process to terminate. It is safe to call this function 9669c056fbSBin Meng * multiple times. 9769c056fbSBin Meng */ 9869c056fbSBin Meng void qtest_wait_qemu(QTestState *s); 9969c056fbSBin Meng 10069c056fbSBin Meng /** 101907b5105SMarc-André Lureau * qtest_kill_qemu: 102907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 103907b5105SMarc-André Lureau * 104907b5105SMarc-André Lureau * Kill the QEMU process and wait for it to terminate. It is safe to call this 105907b5105SMarc-André Lureau * function multiple times. Normally qtest_quit() is used instead because it 106907b5105SMarc-André Lureau * also frees QTestState. Use qtest_kill_qemu() when you just want to kill QEMU 107907b5105SMarc-André Lureau * and qtest_quit() will be called later. 108907b5105SMarc-André Lureau */ 109907b5105SMarc-André Lureau void qtest_kill_qemu(QTestState *s); 110907b5105SMarc-André Lureau 111907b5105SMarc-André Lureau /** 112907b5105SMarc-André Lureau * qtest_quit: 113907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 114907b5105SMarc-André Lureau * 115907b5105SMarc-André Lureau * Shut down the QEMU process associated to @s. 116907b5105SMarc-André Lureau */ 117907b5105SMarc-André Lureau void qtest_quit(QTestState *s); 118907b5105SMarc-André Lureau 119490081b2SBin Meng #ifndef _WIN32 120907b5105SMarc-André Lureau /** 121907b5105SMarc-André Lureau * qtest_qmp_fds: 122907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 123907b5105SMarc-André Lureau * @fds: array of file descriptors 124907b5105SMarc-André Lureau * @fds_num: number of elements in @fds 125907b5105SMarc-André Lureau * @fmt: QMP message to send to qemu, formatted like 126907b5105SMarc-André Lureau * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 127907b5105SMarc-André Lureau * supported after '%'. 128907b5105SMarc-André Lureau * 129907b5105SMarc-André Lureau * Sends a QMP message to QEMU with fds and returns the response. 130907b5105SMarc-André Lureau */ 131907b5105SMarc-André Lureau QDict *qtest_qmp_fds(QTestState *s, int *fds, size_t fds_num, 132907b5105SMarc-André Lureau const char *fmt, ...) 133907b5105SMarc-André Lureau G_GNUC_PRINTF(4, 5); 134490081b2SBin Meng #endif /* _WIN32 */ 135907b5105SMarc-André Lureau 136907b5105SMarc-André Lureau /** 137907b5105SMarc-André Lureau * qtest_qmp: 138907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 139907b5105SMarc-André Lureau * @fmt: QMP message to send to qemu, formatted like 140907b5105SMarc-André Lureau * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 141907b5105SMarc-André Lureau * supported after '%'. 142907b5105SMarc-André Lureau * 143907b5105SMarc-André Lureau * Sends a QMP message to QEMU and returns the response. 144907b5105SMarc-André Lureau */ 145907b5105SMarc-André Lureau QDict *qtest_qmp(QTestState *s, const char *fmt, ...) 146907b5105SMarc-André Lureau G_GNUC_PRINTF(2, 3); 147907b5105SMarc-André Lureau 148907b5105SMarc-André Lureau /** 149907b5105SMarc-André Lureau * qtest_qmp_send: 150907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 151907b5105SMarc-André Lureau * @fmt: QMP message to send to qemu, formatted like 152907b5105SMarc-André Lureau * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 153907b5105SMarc-André Lureau * supported after '%'. 154907b5105SMarc-André Lureau * 155907b5105SMarc-André Lureau * Sends a QMP message to QEMU and leaves the response in the stream. 156907b5105SMarc-André Lureau */ 157907b5105SMarc-André Lureau void qtest_qmp_send(QTestState *s, const char *fmt, ...) 158907b5105SMarc-André Lureau G_GNUC_PRINTF(2, 3); 159907b5105SMarc-André Lureau 160907b5105SMarc-André Lureau /** 161907b5105SMarc-André Lureau * qtest_qmp_send_raw: 162907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 163907b5105SMarc-André Lureau * @fmt: text to send, formatted like sprintf() 164907b5105SMarc-André Lureau * 165907b5105SMarc-André Lureau * Sends text to the QMP monitor verbatim. Need not be valid JSON; 166907b5105SMarc-André Lureau * this is useful for negative tests. 167907b5105SMarc-André Lureau */ 168907b5105SMarc-André Lureau void qtest_qmp_send_raw(QTestState *s, const char *fmt, ...) 169907b5105SMarc-André Lureau G_GNUC_PRINTF(2, 3); 170907b5105SMarc-André Lureau 171907b5105SMarc-André Lureau /** 172907b5105SMarc-André Lureau * qtest_socket_server: 173907b5105SMarc-André Lureau * @socket_path: the UNIX domain socket path 174907b5105SMarc-André Lureau * 175907b5105SMarc-André Lureau * Create and return a listen socket file descriptor, or abort on failure. 176907b5105SMarc-André Lureau */ 177907b5105SMarc-André Lureau int qtest_socket_server(const char *socket_path); 178907b5105SMarc-André Lureau 179490081b2SBin Meng #ifndef _WIN32 180907b5105SMarc-André Lureau /** 181907b5105SMarc-André Lureau * qtest_vqmp_fds: 182907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 183907b5105SMarc-André Lureau * @fds: array of file descriptors 184907b5105SMarc-André Lureau * @fds_num: number of elements in @fds 185907b5105SMarc-André Lureau * @fmt: QMP message to send to QEMU, formatted like 186907b5105SMarc-André Lureau * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 187907b5105SMarc-André Lureau * supported after '%'. 188907b5105SMarc-André Lureau * @ap: QMP message arguments 189907b5105SMarc-André Lureau * 190907b5105SMarc-André Lureau * Sends a QMP message to QEMU with fds and returns the response. 191907b5105SMarc-André Lureau */ 192907b5105SMarc-André Lureau QDict *qtest_vqmp_fds(QTestState *s, int *fds, size_t fds_num, 193907b5105SMarc-André Lureau const char *fmt, va_list ap) 194907b5105SMarc-André Lureau G_GNUC_PRINTF(4, 0); 195490081b2SBin Meng #endif /* _WIN32 */ 196907b5105SMarc-André Lureau 197907b5105SMarc-André Lureau /** 198907b5105SMarc-André Lureau * qtest_vqmp: 199907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 200907b5105SMarc-André Lureau * @fmt: QMP message to send to QEMU, formatted like 201907b5105SMarc-André Lureau * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 202907b5105SMarc-André Lureau * supported after '%'. 203907b5105SMarc-André Lureau * @ap: QMP message arguments 204907b5105SMarc-André Lureau * 205907b5105SMarc-André Lureau * Sends a QMP message to QEMU and returns the response. 206907b5105SMarc-André Lureau */ 207907b5105SMarc-André Lureau QDict *qtest_vqmp(QTestState *s, const char *fmt, va_list ap) 208907b5105SMarc-André Lureau G_GNUC_PRINTF(2, 0); 209907b5105SMarc-André Lureau 210490081b2SBin Meng #ifndef _WIN32 211907b5105SMarc-André Lureau /** 212907b5105SMarc-André Lureau * qtest_qmp_vsend_fds: 213907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 214907b5105SMarc-André Lureau * @fds: array of file descriptors 215907b5105SMarc-André Lureau * @fds_num: number of elements in @fds 216907b5105SMarc-André Lureau * @fmt: QMP message to send to QEMU, formatted like 217907b5105SMarc-André Lureau * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 218907b5105SMarc-André Lureau * supported after '%'. 219907b5105SMarc-André Lureau * @ap: QMP message arguments 220907b5105SMarc-André Lureau * 221907b5105SMarc-André Lureau * Sends a QMP message to QEMU and leaves the response in the stream. 222907b5105SMarc-André Lureau */ 223907b5105SMarc-André Lureau void qtest_qmp_vsend_fds(QTestState *s, int *fds, size_t fds_num, 224907b5105SMarc-André Lureau const char *fmt, va_list ap) 225907b5105SMarc-André Lureau G_GNUC_PRINTF(4, 0); 226490081b2SBin Meng #endif /* _WIN32 */ 227907b5105SMarc-André Lureau 228907b5105SMarc-André Lureau /** 229907b5105SMarc-André Lureau * qtest_qmp_vsend: 230907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 231907b5105SMarc-André Lureau * @fmt: QMP message to send to QEMU, formatted like 232907b5105SMarc-André Lureau * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 233907b5105SMarc-André Lureau * supported after '%'. 234907b5105SMarc-André Lureau * @ap: QMP message arguments 235907b5105SMarc-André Lureau * 236907b5105SMarc-André Lureau * Sends a QMP message to QEMU and leaves the response in the stream. 237907b5105SMarc-André Lureau */ 238907b5105SMarc-André Lureau void qtest_qmp_vsend(QTestState *s, const char *fmt, va_list ap) 239907b5105SMarc-André Lureau G_GNUC_PRINTF(2, 0); 240907b5105SMarc-André Lureau 241907b5105SMarc-André Lureau /** 242907b5105SMarc-André Lureau * qtest_qmp_receive_dict: 243907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 244907b5105SMarc-André Lureau * 245907b5105SMarc-André Lureau * Reads a QMP message from QEMU and returns the response. 246907b5105SMarc-André Lureau */ 247907b5105SMarc-André Lureau QDict *qtest_qmp_receive_dict(QTestState *s); 248907b5105SMarc-André Lureau 249907b5105SMarc-André Lureau /** 250907b5105SMarc-André Lureau * qtest_qmp_receive: 251907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 252907b5105SMarc-André Lureau * 253907b5105SMarc-André Lureau * Reads a QMP message from QEMU and returns the response. 2540150e75dSDaniel P. Berrangé * 2550150e75dSDaniel P. Berrangé * If a callback is registered with qtest_qmp_set_event_callback, 2560150e75dSDaniel P. Berrangé * it will be invoked for every event seen, otherwise events 2570150e75dSDaniel P. Berrangé * will be buffered until a call to one of the qtest_qmp_eventwait 2580150e75dSDaniel P. Berrangé * family of functions. 259907b5105SMarc-André Lureau */ 260907b5105SMarc-André Lureau QDict *qtest_qmp_receive(QTestState *s); 261907b5105SMarc-André Lureau 2620150e75dSDaniel P. Berrangé /* 2630150e75dSDaniel P. Berrangé * QTestQMPEventCallback: 2640150e75dSDaniel P. Berrangé * @s: #QTestState instance event was received on 2650150e75dSDaniel P. Berrangé * @name: name of the event type 2660150e75dSDaniel P. Berrangé * @event: #QDict for the event details 2670150e75dSDaniel P. Berrangé * @opaque: opaque data from time of callback registration 2680150e75dSDaniel P. Berrangé * 2690150e75dSDaniel P. Berrangé * This callback will be invoked whenever an event is received. 2700150e75dSDaniel P. Berrangé * If the callback returns true the event will be consumed, 2710150e75dSDaniel P. Berrangé * otherwise it will be put on the list of pending events. 2720150e75dSDaniel P. Berrangé * Pending events can be later handled by calling either 2730150e75dSDaniel P. Berrangé * qtest_qmp_eventwait or qtest_qmp_eventwait_ref. 2740150e75dSDaniel P. Berrangé * 2750150e75dSDaniel P. Berrangé * Return: true to consume the event, false to let it be queued 2760150e75dSDaniel P. Berrangé */ 2770150e75dSDaniel P. Berrangé typedef bool (*QTestQMPEventCallback)(QTestState *s, const char *name, 2780150e75dSDaniel P. Berrangé QDict *event, void *opaque); 2790150e75dSDaniel P. Berrangé 2800150e75dSDaniel P. Berrangé /** 2810150e75dSDaniel P. Berrangé * qtest_qmp_set_event_callback: 2820150e75dSDaniel P. Berrangé * @s: #QTestSTate instance to operate on 2830150e75dSDaniel P. Berrangé * @cb: callback to invoke for events 2840150e75dSDaniel P. Berrangé * @opaque: data to pass to @cb 2850150e75dSDaniel P. Berrangé * 2860150e75dSDaniel P. Berrangé * Register a callback to be invoked whenever an event arrives 2870150e75dSDaniel P. Berrangé */ 2880150e75dSDaniel P. Berrangé void qtest_qmp_set_event_callback(QTestState *s, 2890150e75dSDaniel P. Berrangé QTestQMPEventCallback cb, void *opaque); 2900150e75dSDaniel P. Berrangé 291907b5105SMarc-André Lureau /** 292907b5105SMarc-André Lureau * qtest_qmp_eventwait: 293907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 294907b5105SMarc-André Lureau * @event: event to wait for. 295907b5105SMarc-André Lureau * 296907b5105SMarc-André Lureau * Continuously polls for QMP responses until it receives the desired event. 2970150e75dSDaniel P. Berrangé * 2980150e75dSDaniel P. Berrangé * Any callback registered with qtest_qmp_set_event_callback will 2990150e75dSDaniel P. Berrangé * be invoked for every event seen. 300907b5105SMarc-André Lureau */ 301907b5105SMarc-André Lureau void qtest_qmp_eventwait(QTestState *s, const char *event); 302907b5105SMarc-André Lureau 303907b5105SMarc-André Lureau /** 304907b5105SMarc-André Lureau * qtest_qmp_eventwait_ref: 305907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 306907b5105SMarc-André Lureau * @event: event to wait for. 307907b5105SMarc-André Lureau * 308907b5105SMarc-André Lureau * Continuously polls for QMP responses until it receives the desired event. 3090150e75dSDaniel P. Berrangé * 3100150e75dSDaniel P. Berrangé * Any callback registered with qtest_qmp_set_event_callback will 3110150e75dSDaniel P. Berrangé * be invoked for every event seen. 3120150e75dSDaniel P. Berrangé * 313907b5105SMarc-André Lureau * Returns a copy of the event for further investigation. 314907b5105SMarc-André Lureau */ 315907b5105SMarc-André Lureau QDict *qtest_qmp_eventwait_ref(QTestState *s, const char *event); 316907b5105SMarc-André Lureau 317907b5105SMarc-André Lureau /** 318907b5105SMarc-André Lureau * qtest_qmp_event_ref: 319907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 320907b5105SMarc-André Lureau * @event: event to return. 321907b5105SMarc-André Lureau * 322907b5105SMarc-André Lureau * Removes non-matching events from the buffer that was set by 323907b5105SMarc-André Lureau * qtest_qmp_receive, until an event bearing the given name is found, 324907b5105SMarc-André Lureau * and returns it. 325907b5105SMarc-André Lureau * If no event matches, clears the buffer and returns NULL. 326907b5105SMarc-André Lureau * 327907b5105SMarc-André Lureau */ 328907b5105SMarc-André Lureau QDict *qtest_qmp_event_ref(QTestState *s, const char *event); 329907b5105SMarc-André Lureau 330907b5105SMarc-André Lureau /** 331907b5105SMarc-André Lureau * qtest_hmp: 332907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 333907b5105SMarc-André Lureau * @fmt: HMP command to send to QEMU, formats arguments like sprintf(). 334907b5105SMarc-André Lureau * 335907b5105SMarc-André Lureau * Send HMP command to QEMU via QMP's human-monitor-command. 336907b5105SMarc-André Lureau * QMP events are discarded. 337907b5105SMarc-André Lureau * 338907b5105SMarc-André Lureau * Returns: the command's output. The caller should g_free() it. 339907b5105SMarc-André Lureau */ 340907b5105SMarc-André Lureau char *qtest_hmp(QTestState *s, const char *fmt, ...) G_GNUC_PRINTF(2, 3); 341907b5105SMarc-André Lureau 342907b5105SMarc-André Lureau /** 343907b5105SMarc-André Lureau * qtest_hmpv: 344907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 345907b5105SMarc-André Lureau * @fmt: HMP command to send to QEMU, formats arguments like vsprintf(). 346907b5105SMarc-André Lureau * @ap: HMP command arguments 347907b5105SMarc-André Lureau * 348907b5105SMarc-André Lureau * Send HMP command to QEMU via QMP's human-monitor-command. 349907b5105SMarc-André Lureau * QMP events are discarded. 350907b5105SMarc-André Lureau * 351907b5105SMarc-André Lureau * Returns: the command's output. The caller should g_free() it. 352907b5105SMarc-André Lureau */ 353907b5105SMarc-André Lureau char *qtest_vhmp(QTestState *s, const char *fmt, va_list ap) 354907b5105SMarc-André Lureau G_GNUC_PRINTF(2, 0); 355907b5105SMarc-André Lureau 356907b5105SMarc-André Lureau void qtest_module_load(QTestState *s, const char *prefix, const char *libname); 357907b5105SMarc-André Lureau 358907b5105SMarc-André Lureau /** 359907b5105SMarc-André Lureau * qtest_get_irq: 360907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 361907b5105SMarc-André Lureau * @num: Interrupt to observe. 362907b5105SMarc-André Lureau * 363907b5105SMarc-André Lureau * Returns: The level of the @num interrupt. 364907b5105SMarc-André Lureau */ 365907b5105SMarc-André Lureau bool qtest_get_irq(QTestState *s, int num); 366907b5105SMarc-André Lureau 367907b5105SMarc-André Lureau /** 368907b5105SMarc-André Lureau * qtest_irq_intercept_in: 369907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 370907b5105SMarc-André Lureau * @string: QOM path of a device. 371907b5105SMarc-André Lureau * 372907b5105SMarc-André Lureau * Associate qtest irqs with the GPIO-in pins of the device 373907b5105SMarc-André Lureau * whose path is specified by @string. 374907b5105SMarc-André Lureau */ 375907b5105SMarc-André Lureau void qtest_irq_intercept_in(QTestState *s, const char *string); 376907b5105SMarc-André Lureau 377907b5105SMarc-André Lureau /** 378907b5105SMarc-André Lureau * qtest_irq_intercept_out: 379907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 380907b5105SMarc-André Lureau * @string: QOM path of a device. 381907b5105SMarc-André Lureau * 382907b5105SMarc-André Lureau * Associate qtest irqs with the GPIO-out pins of the device 383907b5105SMarc-André Lureau * whose path is specified by @string. 384907b5105SMarc-André Lureau */ 385907b5105SMarc-André Lureau void qtest_irq_intercept_out(QTestState *s, const char *string); 386907b5105SMarc-André Lureau 387907b5105SMarc-André Lureau /** 388a8610f8bSChris Laplante * qtest_irq_intercept_out_named: 389a8610f8bSChris Laplante * @s: #QTestState instance to operate on. 390a8610f8bSChris Laplante * @qom_path: QOM path of a device. 391a8610f8bSChris Laplante * @name: Name of the GPIO out pin 392a8610f8bSChris Laplante * 393a8610f8bSChris Laplante * Associate a qtest irq with the named GPIO-out pin of the device 394a8610f8bSChris Laplante * whose path is specified by @string and whose name is @name. 395a8610f8bSChris Laplante */ 396a8610f8bSChris Laplante void qtest_irq_intercept_out_named(QTestState *s, const char *qom_path, const char *name); 397a8610f8bSChris Laplante 398a8610f8bSChris Laplante /** 399907b5105SMarc-André Lureau * qtest_set_irq_in: 400907b5105SMarc-André Lureau * @s: QTestState instance to operate on. 401907b5105SMarc-André Lureau * @string: QOM path of a device 402907b5105SMarc-André Lureau * @name: IRQ name 403907b5105SMarc-André Lureau * @irq: IRQ number 404907b5105SMarc-André Lureau * @level: IRQ level 405907b5105SMarc-André Lureau * 406907b5105SMarc-André Lureau * Force given device/irq GPIO-in pin to the given level. 407907b5105SMarc-André Lureau */ 408907b5105SMarc-André Lureau void qtest_set_irq_in(QTestState *s, const char *string, const char *name, 409907b5105SMarc-André Lureau int irq, int level); 410907b5105SMarc-André Lureau 411907b5105SMarc-André Lureau /** 412907b5105SMarc-André Lureau * qtest_outb: 413907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 414907b5105SMarc-André Lureau * @addr: I/O port to write to. 415907b5105SMarc-André Lureau * @value: Value being written. 416907b5105SMarc-André Lureau * 417907b5105SMarc-André Lureau * Write an 8-bit value to an I/O port. 418907b5105SMarc-André Lureau */ 419907b5105SMarc-André Lureau void qtest_outb(QTestState *s, uint16_t addr, uint8_t value); 420907b5105SMarc-André Lureau 421907b5105SMarc-André Lureau /** 422907b5105SMarc-André Lureau * qtest_outw: 423907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 424907b5105SMarc-André Lureau * @addr: I/O port to write to. 425907b5105SMarc-André Lureau * @value: Value being written. 426907b5105SMarc-André Lureau * 427907b5105SMarc-André Lureau * Write a 16-bit value to an I/O port. 428907b5105SMarc-André Lureau */ 429907b5105SMarc-André Lureau void qtest_outw(QTestState *s, uint16_t addr, uint16_t value); 430907b5105SMarc-André Lureau 431907b5105SMarc-André Lureau /** 432907b5105SMarc-André Lureau * qtest_outl: 433907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 434907b5105SMarc-André Lureau * @addr: I/O port to write to. 435907b5105SMarc-André Lureau * @value: Value being written. 436907b5105SMarc-André Lureau * 437907b5105SMarc-André Lureau * Write a 32-bit value to an I/O port. 438907b5105SMarc-André Lureau */ 439907b5105SMarc-André Lureau void qtest_outl(QTestState *s, uint16_t addr, uint32_t value); 440907b5105SMarc-André Lureau 441907b5105SMarc-André Lureau /** 442907b5105SMarc-André Lureau * qtest_inb: 443907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 444907b5105SMarc-André Lureau * @addr: I/O port to read from. 445907b5105SMarc-André Lureau * 446907b5105SMarc-André Lureau * Returns an 8-bit value from an I/O port. 447907b5105SMarc-André Lureau */ 448907b5105SMarc-André Lureau uint8_t qtest_inb(QTestState *s, uint16_t addr); 449907b5105SMarc-André Lureau 450907b5105SMarc-André Lureau /** 451907b5105SMarc-André Lureau * qtest_inw: 452907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 453907b5105SMarc-André Lureau * @addr: I/O port to read from. 454907b5105SMarc-André Lureau * 455907b5105SMarc-André Lureau * Returns a 16-bit value from an I/O port. 456907b5105SMarc-André Lureau */ 457907b5105SMarc-André Lureau uint16_t qtest_inw(QTestState *s, uint16_t addr); 458907b5105SMarc-André Lureau 459907b5105SMarc-André Lureau /** 460907b5105SMarc-André Lureau * qtest_inl: 461907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 462907b5105SMarc-André Lureau * @addr: I/O port to read from. 463907b5105SMarc-André Lureau * 464907b5105SMarc-André Lureau * Returns a 32-bit value from an I/O port. 465907b5105SMarc-André Lureau */ 466907b5105SMarc-André Lureau uint32_t qtest_inl(QTestState *s, uint16_t addr); 467907b5105SMarc-André Lureau 468907b5105SMarc-André Lureau /** 469907b5105SMarc-André Lureau * qtest_writeb: 470907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 471907b5105SMarc-André Lureau * @addr: Guest address to write to. 472907b5105SMarc-André Lureau * @value: Value being written. 473907b5105SMarc-André Lureau * 474907b5105SMarc-André Lureau * Writes an 8-bit value to memory. 475907b5105SMarc-André Lureau */ 476907b5105SMarc-André Lureau void qtest_writeb(QTestState *s, uint64_t addr, uint8_t value); 477907b5105SMarc-André Lureau 478907b5105SMarc-André Lureau /** 479907b5105SMarc-André Lureau * qtest_writew: 480907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 481907b5105SMarc-André Lureau * @addr: Guest address to write to. 482907b5105SMarc-André Lureau * @value: Value being written. 483907b5105SMarc-André Lureau * 484907b5105SMarc-André Lureau * Writes a 16-bit value to memory. 485907b5105SMarc-André Lureau */ 486907b5105SMarc-André Lureau void qtest_writew(QTestState *s, uint64_t addr, uint16_t value); 487907b5105SMarc-André Lureau 488907b5105SMarc-André Lureau /** 489907b5105SMarc-André Lureau * qtest_writel: 490907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 491907b5105SMarc-André Lureau * @addr: Guest address to write to. 492907b5105SMarc-André Lureau * @value: Value being written. 493907b5105SMarc-André Lureau * 494907b5105SMarc-André Lureau * Writes a 32-bit value to memory. 495907b5105SMarc-André Lureau */ 496907b5105SMarc-André Lureau void qtest_writel(QTestState *s, uint64_t addr, uint32_t value); 497907b5105SMarc-André Lureau 498907b5105SMarc-André Lureau /** 499907b5105SMarc-André Lureau * qtest_writeq: 500907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 501907b5105SMarc-André Lureau * @addr: Guest address to write to. 502907b5105SMarc-André Lureau * @value: Value being written. 503907b5105SMarc-André Lureau * 504907b5105SMarc-André Lureau * Writes a 64-bit value to memory. 505907b5105SMarc-André Lureau */ 506907b5105SMarc-André Lureau void qtest_writeq(QTestState *s, uint64_t addr, uint64_t value); 507907b5105SMarc-André Lureau 508907b5105SMarc-André Lureau /** 509907b5105SMarc-André Lureau * qtest_readb: 510907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 511907b5105SMarc-André Lureau * @addr: Guest address to read from. 512907b5105SMarc-André Lureau * 513907b5105SMarc-André Lureau * Reads an 8-bit value from memory. 514907b5105SMarc-André Lureau * 515907b5105SMarc-André Lureau * Returns: Value read. 516907b5105SMarc-André Lureau */ 517907b5105SMarc-André Lureau uint8_t qtest_readb(QTestState *s, uint64_t addr); 518907b5105SMarc-André Lureau 519907b5105SMarc-André Lureau /** 520907b5105SMarc-André Lureau * qtest_readw: 521907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 522907b5105SMarc-André Lureau * @addr: Guest address to read from. 523907b5105SMarc-André Lureau * 524907b5105SMarc-André Lureau * Reads a 16-bit value from memory. 525907b5105SMarc-André Lureau * 526907b5105SMarc-André Lureau * Returns: Value read. 527907b5105SMarc-André Lureau */ 528907b5105SMarc-André Lureau uint16_t qtest_readw(QTestState *s, uint64_t addr); 529907b5105SMarc-André Lureau 530907b5105SMarc-André Lureau /** 531907b5105SMarc-André Lureau * qtest_readl: 532907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 533907b5105SMarc-André Lureau * @addr: Guest address to read from. 534907b5105SMarc-André Lureau * 535907b5105SMarc-André Lureau * Reads a 32-bit value from memory. 536907b5105SMarc-André Lureau * 537907b5105SMarc-André Lureau * Returns: Value read. 538907b5105SMarc-André Lureau */ 539907b5105SMarc-André Lureau uint32_t qtest_readl(QTestState *s, uint64_t addr); 540907b5105SMarc-André Lureau 541907b5105SMarc-André Lureau /** 542907b5105SMarc-André Lureau * qtest_readq: 543907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 544907b5105SMarc-André Lureau * @addr: Guest address to read from. 545907b5105SMarc-André Lureau * 546907b5105SMarc-André Lureau * Reads a 64-bit value from memory. 547907b5105SMarc-André Lureau * 548907b5105SMarc-André Lureau * Returns: Value read. 549907b5105SMarc-André Lureau */ 550907b5105SMarc-André Lureau uint64_t qtest_readq(QTestState *s, uint64_t addr); 551907b5105SMarc-André Lureau 552907b5105SMarc-André Lureau /** 553907b5105SMarc-André Lureau * qtest_memread: 554907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 555907b5105SMarc-André Lureau * @addr: Guest address to read from. 556907b5105SMarc-André Lureau * @data: Pointer to where memory contents will be stored. 557907b5105SMarc-André Lureau * @size: Number of bytes to read. 558907b5105SMarc-André Lureau * 559907b5105SMarc-André Lureau * Read guest memory into a buffer. 560907b5105SMarc-André Lureau */ 561907b5105SMarc-André Lureau void qtest_memread(QTestState *s, uint64_t addr, void *data, size_t size); 562907b5105SMarc-André Lureau 563907b5105SMarc-André Lureau /** 564907b5105SMarc-André Lureau * qtest_rtas_call: 565907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 566907b5105SMarc-André Lureau * @name: name of the command to call. 567907b5105SMarc-André Lureau * @nargs: Number of args. 568907b5105SMarc-André Lureau * @args: Guest address to read args from. 569907b5105SMarc-André Lureau * @nret: Number of return value. 570907b5105SMarc-André Lureau * @ret: Guest address to write return values to. 571907b5105SMarc-André Lureau * 572907b5105SMarc-André Lureau * Call an RTAS function 573907b5105SMarc-André Lureau */ 574907b5105SMarc-André Lureau uint64_t qtest_rtas_call(QTestState *s, const char *name, 575907b5105SMarc-André Lureau uint32_t nargs, uint64_t args, 576907b5105SMarc-André Lureau uint32_t nret, uint64_t ret); 577907b5105SMarc-André Lureau 578907b5105SMarc-André Lureau /** 579907b5105SMarc-André Lureau * qtest_bufread: 580907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 581907b5105SMarc-André Lureau * @addr: Guest address to read from. 582907b5105SMarc-André Lureau * @data: Pointer to where memory contents will be stored. 583907b5105SMarc-André Lureau * @size: Number of bytes to read. 584907b5105SMarc-André Lureau * 585907b5105SMarc-André Lureau * Read guest memory into a buffer and receive using a base64 encoding. 586907b5105SMarc-André Lureau */ 587907b5105SMarc-André Lureau void qtest_bufread(QTestState *s, uint64_t addr, void *data, size_t size); 588907b5105SMarc-André Lureau 589907b5105SMarc-André Lureau /** 590907b5105SMarc-André Lureau * qtest_memwrite: 591907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 592907b5105SMarc-André Lureau * @addr: Guest address to write to. 593907b5105SMarc-André Lureau * @data: Pointer to the bytes that will be written to guest memory. 594907b5105SMarc-André Lureau * @size: Number of bytes to write. 595907b5105SMarc-André Lureau * 596907b5105SMarc-André Lureau * Write a buffer to guest memory. 597907b5105SMarc-André Lureau */ 598907b5105SMarc-André Lureau void qtest_memwrite(QTestState *s, uint64_t addr, const void *data, size_t size); 599907b5105SMarc-André Lureau 600907b5105SMarc-André Lureau /** 601907b5105SMarc-André Lureau * qtest_bufwrite: 602907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 603907b5105SMarc-André Lureau * @addr: Guest address to write to. 604907b5105SMarc-André Lureau * @data: Pointer to the bytes that will be written to guest memory. 605907b5105SMarc-André Lureau * @size: Number of bytes to write. 606907b5105SMarc-André Lureau * 607907b5105SMarc-André Lureau * Write a buffer to guest memory and transmit using a base64 encoding. 608907b5105SMarc-André Lureau */ 609907b5105SMarc-André Lureau void qtest_bufwrite(QTestState *s, uint64_t addr, 610907b5105SMarc-André Lureau const void *data, size_t size); 611907b5105SMarc-André Lureau 612907b5105SMarc-André Lureau /** 613907b5105SMarc-André Lureau * qtest_memset: 614907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 615907b5105SMarc-André Lureau * @addr: Guest address to write to. 616907b5105SMarc-André Lureau * @patt: Byte pattern to fill the guest memory region with. 617907b5105SMarc-André Lureau * @size: Number of bytes to write. 618907b5105SMarc-André Lureau * 619907b5105SMarc-André Lureau * Write a pattern to guest memory. 620907b5105SMarc-André Lureau */ 621907b5105SMarc-André Lureau void qtest_memset(QTestState *s, uint64_t addr, uint8_t patt, size_t size); 622907b5105SMarc-André Lureau 623907b5105SMarc-André Lureau /** 624907b5105SMarc-André Lureau * qtest_clock_step_next: 625907b5105SMarc-André Lureau * @s: #QTestState instance to operate on. 626907b5105SMarc-André Lureau * 627907b5105SMarc-André Lureau * Advance the QEMU_CLOCK_VIRTUAL to the next deadline. 628907b5105SMarc-André Lureau * 629907b5105SMarc-André Lureau * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds. 630907b5105SMarc-André Lureau */ 631907b5105SMarc-André Lureau int64_t qtest_clock_step_next(QTestState *s); 632907b5105SMarc-André Lureau 633907b5105SMarc-André Lureau /** 634907b5105SMarc-André Lureau * qtest_clock_step: 635907b5105SMarc-André Lureau * @s: QTestState instance to operate on. 636907b5105SMarc-André Lureau * @step: Number of nanoseconds to advance the clock by. 637907b5105SMarc-André Lureau * 638907b5105SMarc-André Lureau * Advance the QEMU_CLOCK_VIRTUAL by @step nanoseconds. 639907b5105SMarc-André Lureau * 640907b5105SMarc-André Lureau * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds. 641907b5105SMarc-André Lureau */ 642907b5105SMarc-André Lureau int64_t qtest_clock_step(QTestState *s, int64_t step); 643907b5105SMarc-André Lureau 644907b5105SMarc-André Lureau /** 645907b5105SMarc-André Lureau * qtest_clock_set: 646907b5105SMarc-André Lureau * @s: QTestState instance to operate on. 647907b5105SMarc-André Lureau * @val: Nanoseconds value to advance the clock to. 648907b5105SMarc-André Lureau * 649907b5105SMarc-André Lureau * Advance the QEMU_CLOCK_VIRTUAL to @val nanoseconds since the VM was launched. 650907b5105SMarc-André Lureau * 651907b5105SMarc-André Lureau * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds. 652907b5105SMarc-André Lureau */ 653907b5105SMarc-André Lureau int64_t qtest_clock_set(QTestState *s, int64_t val); 654907b5105SMarc-André Lureau 655907b5105SMarc-André Lureau /** 656907b5105SMarc-André Lureau * qtest_big_endian: 657907b5105SMarc-André Lureau * @s: QTestState instance to operate on. 658907b5105SMarc-André Lureau * 659907b5105SMarc-André Lureau * Returns: True if the architecture under test has a big endian configuration. 660907b5105SMarc-André Lureau */ 661907b5105SMarc-André Lureau bool qtest_big_endian(QTestState *s); 662907b5105SMarc-André Lureau 663907b5105SMarc-André Lureau /** 664907b5105SMarc-André Lureau * qtest_get_arch: 665907b5105SMarc-André Lureau * 666907b5105SMarc-André Lureau * Returns: The architecture for the QEMU executable under test. 667907b5105SMarc-André Lureau */ 668907b5105SMarc-André Lureau const char *qtest_get_arch(void); 669907b5105SMarc-André Lureau 670907b5105SMarc-André Lureau /** 671907b5105SMarc-André Lureau * qtest_has_accel: 672907b5105SMarc-André Lureau * @accel_name: Accelerator name to check for. 673907b5105SMarc-André Lureau * 674907b5105SMarc-André Lureau * Returns: true if the accelerator is built in. 675907b5105SMarc-André Lureau */ 676907b5105SMarc-André Lureau bool qtest_has_accel(const char *accel_name); 677907b5105SMarc-André Lureau 678907b5105SMarc-André Lureau /** 679907b5105SMarc-André Lureau * qtest_add_func: 680907b5105SMarc-André Lureau * @str: Test case path. 681907b5105SMarc-André Lureau * @fn: Test case function 682907b5105SMarc-André Lureau * 683907b5105SMarc-André Lureau * Add a GTester testcase with the given name and function. 684907b5105SMarc-André Lureau * The path is prefixed with the architecture under test, as 685907b5105SMarc-André Lureau * returned by qtest_get_arch(). 686907b5105SMarc-André Lureau */ 687907b5105SMarc-André Lureau void qtest_add_func(const char *str, void (*fn)(void)); 688907b5105SMarc-André Lureau 689907b5105SMarc-André Lureau /** 690907b5105SMarc-André Lureau * qtest_add_data_func: 691907b5105SMarc-André Lureau * @str: Test case path. 692907b5105SMarc-André Lureau * @data: Test case data 693907b5105SMarc-André Lureau * @fn: Test case function 694907b5105SMarc-André Lureau * 695907b5105SMarc-André Lureau * Add a GTester testcase with the given name, data and function. 696907b5105SMarc-André Lureau * The path is prefixed with the architecture under test, as 697907b5105SMarc-André Lureau * returned by qtest_get_arch(). 698907b5105SMarc-André Lureau */ 699907b5105SMarc-André Lureau void qtest_add_data_func(const char *str, const void *data, 700907b5105SMarc-André Lureau void (*fn)(const void *)); 701907b5105SMarc-André Lureau 702907b5105SMarc-André Lureau /** 703907b5105SMarc-André Lureau * qtest_add_data_func_full: 704907b5105SMarc-André Lureau * @str: Test case path. 705907b5105SMarc-André Lureau * @data: Test case data 706907b5105SMarc-André Lureau * @fn: Test case function 707907b5105SMarc-André Lureau * @data_free_func: GDestroyNotify for data 708907b5105SMarc-André Lureau * 709907b5105SMarc-André Lureau * Add a GTester testcase with the given name, data and function. 710907b5105SMarc-André Lureau * The path is prefixed with the architecture under test, as 711907b5105SMarc-André Lureau * returned by qtest_get_arch(). 712907b5105SMarc-André Lureau * 713907b5105SMarc-André Lureau * @data is passed to @data_free_func() on test completion. 714907b5105SMarc-André Lureau */ 715907b5105SMarc-André Lureau void qtest_add_data_func_full(const char *str, void *data, 716907b5105SMarc-André Lureau void (*fn)(const void *), 717907b5105SMarc-André Lureau GDestroyNotify data_free_func); 718907b5105SMarc-André Lureau 719907b5105SMarc-André Lureau /** 720907b5105SMarc-André Lureau * qtest_add: 721907b5105SMarc-André Lureau * @testpath: Test case path 722907b5105SMarc-André Lureau * @Fixture: Fixture type 723907b5105SMarc-André Lureau * @tdata: Test case data 724907b5105SMarc-André Lureau * @fsetup: Test case setup function 725907b5105SMarc-André Lureau * @ftest: Test case function 726907b5105SMarc-André Lureau * @fteardown: Test case teardown function 727907b5105SMarc-André Lureau * 728907b5105SMarc-André Lureau * Add a GTester testcase with the given name, data and functions. 729907b5105SMarc-André Lureau * The path is prefixed with the architecture under test, as 730907b5105SMarc-André Lureau * returned by qtest_get_arch(). 731907b5105SMarc-André Lureau */ 732907b5105SMarc-André Lureau #define qtest_add(testpath, Fixture, tdata, fsetup, ftest, fteardown) \ 733907b5105SMarc-André Lureau do { \ 734907b5105SMarc-André Lureau char *path = g_strdup_printf("/%s/%s", qtest_get_arch(), testpath); \ 735907b5105SMarc-André Lureau g_test_add(path, Fixture, tdata, fsetup, ftest, fteardown); \ 736907b5105SMarc-André Lureau g_free(path); \ 737907b5105SMarc-André Lureau } while (0) 738907b5105SMarc-André Lureau 739907b5105SMarc-André Lureau /** 740907b5105SMarc-André Lureau * qtest_add_abrt_handler: 741907b5105SMarc-André Lureau * @fn: Handler function 742907b5105SMarc-André Lureau * @data: Argument that is passed to the handler 743907b5105SMarc-André Lureau * 744907b5105SMarc-André Lureau * Add a handler function that is invoked on SIGABRT. This can be used to 745907b5105SMarc-André Lureau * terminate processes and perform other cleanup. The handler can be removed 746907b5105SMarc-André Lureau * with qtest_remove_abrt_handler(). 747907b5105SMarc-André Lureau */ 748907b5105SMarc-André Lureau void qtest_add_abrt_handler(GHookFunc fn, const void *data); 749907b5105SMarc-André Lureau 750907b5105SMarc-André Lureau /** 751907b5105SMarc-André Lureau * qtest_remove_abrt_handler: 752907b5105SMarc-André Lureau * @data: Argument previously passed to qtest_add_abrt_handler() 753907b5105SMarc-André Lureau * 754907b5105SMarc-André Lureau * Remove an abrt handler that was previously added with 755907b5105SMarc-André Lureau * qtest_add_abrt_handler(). 756907b5105SMarc-André Lureau */ 757907b5105SMarc-André Lureau void qtest_remove_abrt_handler(void *data); 758907b5105SMarc-André Lureau 759907b5105SMarc-André Lureau /** 76028760edcSDaniel P. Berrangé * qtest_vqmp_assert_success_ref: 76128760edcSDaniel P. Berrangé * @qts: QTestState instance to operate on 76228760edcSDaniel P. Berrangé * @fmt: QMP message to send to qemu, formatted like 76328760edcSDaniel P. Berrangé * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 76428760edcSDaniel P. Berrangé * supported after '%'. 76528760edcSDaniel P. Berrangé * @args: variable arguments for @fmt 76628760edcSDaniel P. Berrangé * 76728760edcSDaniel P. Berrangé * Sends a QMP message to QEMU, asserts that a 'return' key is present in 76828760edcSDaniel P. Berrangé * the response, and returns the response. 76928760edcSDaniel P. Berrangé */ 77028760edcSDaniel P. Berrangé QDict *qtest_vqmp_assert_success_ref(QTestState *qts, 77128760edcSDaniel P. Berrangé const char *fmt, va_list args) 77228760edcSDaniel P. Berrangé G_GNUC_PRINTF(2, 0); 77328760edcSDaniel P. Berrangé 77428760edcSDaniel P. Berrangé /** 77528760edcSDaniel P. Berrangé * qtest_vqmp_assert_success: 77628760edcSDaniel P. Berrangé * @qts: QTestState instance to operate on 77728760edcSDaniel P. Berrangé * @fmt: QMP message to send to qemu, formatted like 77828760edcSDaniel P. Berrangé * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 77928760edcSDaniel P. Berrangé * supported after '%'. 78028760edcSDaniel P. Berrangé * @args: variable arguments for @fmt 78128760edcSDaniel P. Berrangé * 78228760edcSDaniel P. Berrangé * Sends a QMP message to QEMU and asserts that a 'return' key is present in 78328760edcSDaniel P. Berrangé * the response. 78428760edcSDaniel P. Berrangé */ 78528760edcSDaniel P. Berrangé void qtest_vqmp_assert_success(QTestState *qts, 78628760edcSDaniel P. Berrangé const char *fmt, va_list args) 78728760edcSDaniel P. Berrangé G_GNUC_PRINTF(2, 0); 78828760edcSDaniel P. Berrangé 78928760edcSDaniel P. Berrangé #ifndef _WIN32 79028760edcSDaniel P. Berrangé /** 79128760edcSDaniel P. Berrangé * qtest_vqmp_fds_assert_success_ref: 79228760edcSDaniel P. Berrangé * @qts: QTestState instance to operate on 79328760edcSDaniel P. Berrangé * @fds: the file descriptors to send 79428760edcSDaniel P. Berrangé * @nfds: number of @fds to send 79528760edcSDaniel P. Berrangé * @fmt: QMP message to send to qemu, formatted like 79628760edcSDaniel P. Berrangé * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 79728760edcSDaniel P. Berrangé * supported after '%'. 79828760edcSDaniel P. Berrangé * @args: variable arguments for @fmt 79928760edcSDaniel P. Berrangé * 80028760edcSDaniel P. Berrangé * Sends a QMP message with file descriptors to QEMU, 80128760edcSDaniel P. Berrangé * asserts that a 'return' key is present in the response, 80228760edcSDaniel P. Berrangé * and returns the response. 80328760edcSDaniel P. Berrangé */ 80428760edcSDaniel P. Berrangé QDict *qtest_vqmp_fds_assert_success_ref(QTestState *qts, int *fds, size_t nfds, 80528760edcSDaniel P. Berrangé const char *fmt, va_list args) 80628760edcSDaniel P. Berrangé G_GNUC_PRINTF(4, 0); 80728760edcSDaniel P. Berrangé 80828760edcSDaniel P. Berrangé /** 80928760edcSDaniel P. Berrangé * qtest_vqmp_fds_assert_success: 81028760edcSDaniel P. Berrangé * @qts: QTestState instance to operate on 81128760edcSDaniel P. Berrangé * @fds: the file descriptors to send 81228760edcSDaniel P. Berrangé * @nfds: number of @fds to send 81328760edcSDaniel P. Berrangé * @fmt: QMP message to send to qemu, formatted like 81428760edcSDaniel P. Berrangé * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 81528760edcSDaniel P. Berrangé * supported after '%'. 81628760edcSDaniel P. Berrangé * @args: variable arguments for @fmt 81728760edcSDaniel P. Berrangé * 81828760edcSDaniel P. Berrangé * Sends a QMP message with file descriptors to QEMU and 81928760edcSDaniel P. Berrangé * asserts that a 'return' key is present in the response. 82028760edcSDaniel P. Berrangé */ 82128760edcSDaniel P. Berrangé void qtest_vqmp_fds_assert_success(QTestState *qts, int *fds, size_t nfds, 82228760edcSDaniel P. Berrangé const char *fmt, va_list args) 82328760edcSDaniel P. Berrangé G_GNUC_PRINTF(4, 0); 82428760edcSDaniel P. Berrangé #endif /* !_WIN32 */ 82528760edcSDaniel P. Berrangé 82628760edcSDaniel P. Berrangé /** 8275274274cSFabiano Rosas * qtest_qmp_assert_failure_ref: 8285274274cSFabiano Rosas * @qts: QTestState instance to operate on 8295274274cSFabiano Rosas * @fmt: QMP message to send to qemu, formatted like 8305274274cSFabiano Rosas * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 8315274274cSFabiano Rosas * supported after '%'. 8325274274cSFabiano Rosas * 8335274274cSFabiano Rosas * Sends a QMP message to QEMU, asserts that an 'error' key is present in 8345274274cSFabiano Rosas * the response, and returns the response. 8355274274cSFabiano Rosas */ 8365274274cSFabiano Rosas QDict *qtest_qmp_assert_failure_ref(QTestState *qts, const char *fmt, ...) 8375274274cSFabiano Rosas G_GNUC_PRINTF(2, 3); 8385274274cSFabiano Rosas 8395274274cSFabiano Rosas /** 8405274274cSFabiano Rosas * qtest_vqmp_assert_failure_ref: 8415274274cSFabiano Rosas * @qts: QTestState instance to operate on 8425274274cSFabiano Rosas * @fmt: QMP message to send to qemu, formatted like 8435274274cSFabiano Rosas * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 8445274274cSFabiano Rosas * supported after '%'. 8455274274cSFabiano Rosas * @args: variable arguments for @fmt 8465274274cSFabiano Rosas * 8475274274cSFabiano Rosas * Sends a QMP message to QEMU, asserts that an 'error' key is present in 8485274274cSFabiano Rosas * the response, and returns the response. 8495274274cSFabiano Rosas */ 8505274274cSFabiano Rosas QDict *qtest_vqmp_assert_failure_ref(QTestState *qts, 8515274274cSFabiano Rosas const char *fmt, va_list args) 8525274274cSFabiano Rosas G_GNUC_PRINTF(2, 0); 8535274274cSFabiano Rosas 8545274274cSFabiano Rosas /** 85528760edcSDaniel P. Berrangé * qtest_qmp_assert_success_ref: 85628760edcSDaniel P. Berrangé * @qts: QTestState instance to operate on 85728760edcSDaniel P. Berrangé * @fmt: QMP message to send to qemu, formatted like 85828760edcSDaniel P. Berrangé * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 85928760edcSDaniel P. Berrangé * supported after '%'. 86028760edcSDaniel P. Berrangé * 86128760edcSDaniel P. Berrangé * Sends a QMP message to QEMU, asserts that a 'return' key is present in 86228760edcSDaniel P. Berrangé * the response, and returns the response. 86328760edcSDaniel P. Berrangé */ 86428760edcSDaniel P. Berrangé QDict *qtest_qmp_assert_success_ref(QTestState *qts, const char *fmt, ...) 86528760edcSDaniel P. Berrangé G_GNUC_PRINTF(2, 3); 86628760edcSDaniel P. Berrangé 86728760edcSDaniel P. Berrangé /** 868907b5105SMarc-André Lureau * qtest_qmp_assert_success: 869907b5105SMarc-André Lureau * @qts: QTestState instance to operate on 870907b5105SMarc-André Lureau * @fmt: QMP message to send to qemu, formatted like 871907b5105SMarc-André Lureau * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 872907b5105SMarc-André Lureau * supported after '%'. 873907b5105SMarc-André Lureau * 874907b5105SMarc-André Lureau * Sends a QMP message to QEMU and asserts that a 'return' key is present in 875907b5105SMarc-André Lureau * the response. 876907b5105SMarc-André Lureau */ 877907b5105SMarc-André Lureau void qtest_qmp_assert_success(QTestState *qts, const char *fmt, ...) 878907b5105SMarc-André Lureau G_GNUC_PRINTF(2, 3); 879907b5105SMarc-André Lureau 88028760edcSDaniel P. Berrangé #ifndef _WIN32 88128760edcSDaniel P. Berrangé /** 88228760edcSDaniel P. Berrangé * qtest_qmp_fd_assert_success_ref: 88328760edcSDaniel P. Berrangé * @qts: QTestState instance to operate on 88428760edcSDaniel P. Berrangé * @fds: the file descriptors to send 88528760edcSDaniel P. Berrangé * @nfds: number of @fds to send 88628760edcSDaniel P. Berrangé * @fmt: QMP message to send to qemu, formatted like 88728760edcSDaniel P. Berrangé * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 88828760edcSDaniel P. Berrangé * supported after '%'. 88928760edcSDaniel P. Berrangé * 89028760edcSDaniel P. Berrangé * Sends a QMP message with file descriptors to QEMU, 89128760edcSDaniel P. Berrangé * asserts that a 'return' key is present in the response, 89228760edcSDaniel P. Berrangé * and returns the response. 89328760edcSDaniel P. Berrangé */ 89428760edcSDaniel P. Berrangé QDict *qtest_qmp_fds_assert_success_ref(QTestState *qts, int *fds, size_t nfds, 89528760edcSDaniel P. Berrangé const char *fmt, ...) 89628760edcSDaniel P. Berrangé G_GNUC_PRINTF(4, 5); 89728760edcSDaniel P. Berrangé 89828760edcSDaniel P. Berrangé /** 89928760edcSDaniel P. Berrangé * qtest_qmp_fd_assert_success: 90028760edcSDaniel P. Berrangé * @qts: QTestState instance to operate on 90128760edcSDaniel P. Berrangé * @fds: the file descriptors to send 90228760edcSDaniel P. Berrangé * @nfds: number of @fds to send 90328760edcSDaniel P. Berrangé * @fmt: QMP message to send to qemu, formatted like 90428760edcSDaniel P. Berrangé * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 90528760edcSDaniel P. Berrangé * supported after '%'. 90628760edcSDaniel P. Berrangé * 90728760edcSDaniel P. Berrangé * Sends a QMP message with file descriptors to QEMU and 90828760edcSDaniel P. Berrangé * asserts that a 'return' key is present in the response. 90928760edcSDaniel P. Berrangé */ 91028760edcSDaniel P. Berrangé void qtest_qmp_fds_assert_success(QTestState *qts, int *fds, size_t nfds, 91128760edcSDaniel P. Berrangé const char *fmt, ...) 91228760edcSDaniel P. Berrangé G_GNUC_PRINTF(4, 5); 91328760edcSDaniel P. Berrangé #endif /* !_WIN32 */ 91428760edcSDaniel P. Berrangé 915907b5105SMarc-André Lureau /** 916907b5105SMarc-André Lureau * qtest_cb_for_every_machine: 917907b5105SMarc-André Lureau * @cb: Pointer to the callback function 918907b5105SMarc-André Lureau * @skip_old_versioned: true if versioned old machine types should be skipped 919907b5105SMarc-André Lureau * 920907b5105SMarc-André Lureau * Call a callback function for every name of all available machines. 921907b5105SMarc-André Lureau */ 922907b5105SMarc-André Lureau void qtest_cb_for_every_machine(void (*cb)(const char *machine), 923907b5105SMarc-André Lureau bool skip_old_versioned); 924907b5105SMarc-André Lureau 925907b5105SMarc-André Lureau /** 926a3c0ebc9SFabiano Rosas * qtest_resolve_machine_alias: 927a3c0ebc9SFabiano Rosas * @var: Environment variable from where to take the QEMU binary 928a3c0ebc9SFabiano Rosas * @alias: The alias to resolve 929a3c0ebc9SFabiano Rosas * 930a3c0ebc9SFabiano Rosas * Returns: the machine type corresponding to the alias if any, 931a3c0ebc9SFabiano Rosas * otherwise NULL. 932a3c0ebc9SFabiano Rosas */ 933a3c0ebc9SFabiano Rosas char *qtest_resolve_machine_alias(const char *var, const char *alias); 934a3c0ebc9SFabiano Rosas 935a3c0ebc9SFabiano Rosas /** 936907b5105SMarc-André Lureau * qtest_has_machine: 937907b5105SMarc-André Lureau * @machine: The machine to look for 938907b5105SMarc-André Lureau * 939907b5105SMarc-André Lureau * Returns: true if the machine is available in the target binary. 940907b5105SMarc-André Lureau */ 941907b5105SMarc-André Lureau bool qtest_has_machine(const char *machine); 942907b5105SMarc-André Lureau 943907b5105SMarc-André Lureau /** 9441027fc0aSFabiano Rosas * qtest_has_machine_with_env: 9451027fc0aSFabiano Rosas * @var: Environment variable from where to take the QEMU binary 9461027fc0aSFabiano Rosas * @machine: The machine to look for 9471027fc0aSFabiano Rosas * 9481027fc0aSFabiano Rosas * Returns: true if the machine is available in the specified binary. 9491027fc0aSFabiano Rosas */ 9501027fc0aSFabiano Rosas bool qtest_has_machine_with_env(const char *var, const char *machine); 9511027fc0aSFabiano Rosas 9521027fc0aSFabiano Rosas /** 953*f43f8abeSAni Sinha * qtest_has_cpu_model: 954*f43f8abeSAni Sinha * @cpu: The cpu to look for 955*f43f8abeSAni Sinha * 956*f43f8abeSAni Sinha * Returns: true if the cpu is available in the target binary. 957*f43f8abeSAni Sinha */ 958*f43f8abeSAni Sinha bool qtest_has_cpu_model(const char *cpu); 959*f43f8abeSAni Sinha 960*f43f8abeSAni Sinha /** 961907b5105SMarc-André Lureau * qtest_has_device: 962907b5105SMarc-André Lureau * @device: The device to look for 963907b5105SMarc-André Lureau * 964907b5105SMarc-André Lureau * Returns: true if the device is available in the target binary. 965907b5105SMarc-André Lureau */ 966907b5105SMarc-André Lureau bool qtest_has_device(const char *device); 967907b5105SMarc-André Lureau 968907b5105SMarc-André Lureau /** 969907b5105SMarc-André Lureau * qtest_qmp_device_add_qdict: 970907b5105SMarc-André Lureau * @qts: QTestState instance to operate on 971907b5105SMarc-André Lureau * @drv: Name of the device that should be added 9721e458f11SStefan Weil * @arguments: QDict with properties for the device to initialize 973907b5105SMarc-André Lureau * 974907b5105SMarc-André Lureau * Generic hot-plugging test via the device_add QMP command with properties 975907b5105SMarc-André Lureau * supplied in form of QDict. Use NULL for empty properties list. 976907b5105SMarc-André Lureau */ 977907b5105SMarc-André Lureau void qtest_qmp_device_add_qdict(QTestState *qts, const char *drv, 978907b5105SMarc-André Lureau const QDict *arguments); 979907b5105SMarc-André Lureau 980907b5105SMarc-André Lureau /** 981907b5105SMarc-André Lureau * qtest_qmp_device_add: 982907b5105SMarc-André Lureau * @qts: QTestState instance to operate on 983907b5105SMarc-André Lureau * @driver: Name of the device that should be added 984907b5105SMarc-André Lureau * @id: Identification string 985907b5105SMarc-André Lureau * @fmt: QMP message to send to qemu, formatted like 986907b5105SMarc-André Lureau * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 987907b5105SMarc-André Lureau * supported after '%'. 988907b5105SMarc-André Lureau * 989907b5105SMarc-André Lureau * Generic hot-plugging test via the device_add QMP command. 990907b5105SMarc-André Lureau */ 991907b5105SMarc-André Lureau void qtest_qmp_device_add(QTestState *qts, const char *driver, const char *id, 992907b5105SMarc-André Lureau const char *fmt, ...) G_GNUC_PRINTF(4, 5); 993907b5105SMarc-André Lureau 994907b5105SMarc-André Lureau /** 995907b5105SMarc-André Lureau * qtest_qmp_add_client: 996907b5105SMarc-André Lureau * @qts: QTestState instance to operate on 997907b5105SMarc-André Lureau * @protocol: the protocol to add to 998907b5105SMarc-André Lureau * @fd: the client file-descriptor 999907b5105SMarc-André Lureau * 100061683d27SMarc-André Lureau * Call QMP ``getfd`` (on Windows ``get-win32-socket``) followed by 100161683d27SMarc-André Lureau * ``add_client`` with the given @fd. 1002907b5105SMarc-André Lureau */ 1003907b5105SMarc-André Lureau void qtest_qmp_add_client(QTestState *qts, const char *protocol, int fd); 1004907b5105SMarc-André Lureau 1005907b5105SMarc-André Lureau /** 1006ea42a6c4SMichael Labiuk * qtest_qmp_device_del_send: 1007ea42a6c4SMichael Labiuk * @qts: QTestState instance to operate on 1008ea42a6c4SMichael Labiuk * @id: Identification string 1009ea42a6c4SMichael Labiuk * 1010ea42a6c4SMichael Labiuk * Generic hot-unplugging test via the device_del QMP command. 1011ea42a6c4SMichael Labiuk */ 1012ea42a6c4SMichael Labiuk void qtest_qmp_device_del_send(QTestState *qts, const char *id); 1013ea42a6c4SMichael Labiuk 1014ea42a6c4SMichael Labiuk /** 1015907b5105SMarc-André Lureau * qtest_qmp_device_del: 1016907b5105SMarc-André Lureau * @qts: QTestState instance to operate on 1017907b5105SMarc-André Lureau * @id: Identification string 1018907b5105SMarc-André Lureau * 1019907b5105SMarc-André Lureau * Generic hot-unplugging test via the device_del QMP command. 1020ea42a6c4SMichael Labiuk * Waiting for command completion event. 1021907b5105SMarc-André Lureau */ 1022907b5105SMarc-André Lureau void qtest_qmp_device_del(QTestState *qts, const char *id); 1023907b5105SMarc-André Lureau 1024907b5105SMarc-André Lureau /** 1025907b5105SMarc-André Lureau * qtest_probe_child: 1026907b5105SMarc-André Lureau * @s: QTestState instance to operate on. 1027907b5105SMarc-André Lureau * 1028907b5105SMarc-André Lureau * Returns: true if the child is still alive. 1029907b5105SMarc-André Lureau */ 1030907b5105SMarc-André Lureau bool qtest_probe_child(QTestState *s); 1031907b5105SMarc-André Lureau 1032907b5105SMarc-André Lureau /** 1033907b5105SMarc-André Lureau * qtest_set_expected_status: 1034907b5105SMarc-André Lureau * @s: QTestState instance to operate on. 1035907b5105SMarc-André Lureau * @status: an expected exit status. 1036907b5105SMarc-André Lureau * 1037907b5105SMarc-André Lureau * Set expected exit status of the child. 1038907b5105SMarc-André Lureau */ 1039907b5105SMarc-André Lureau void qtest_set_expected_status(QTestState *s, int status); 1040907b5105SMarc-André Lureau 1041907b5105SMarc-André Lureau QTestState *qtest_inproc_init(QTestState **s, bool log, const char* arch, 1042907b5105SMarc-André Lureau void (*send)(void*, const char*)); 1043907b5105SMarc-André Lureau 1044907b5105SMarc-André Lureau void qtest_client_inproc_recv(void *opaque, const char *str); 1045188052a1SIris Chen 1046188052a1SIris Chen /** 1047188052a1SIris Chen * qtest_qom_set_bool: 1048188052a1SIris Chen * @s: QTestState instance to operate on. 1049188052a1SIris Chen * @path: Path to the property being set. 1050188052a1SIris Chen * @property: Property being set. 1051188052a1SIris Chen * @value: Value to set the property. 1052188052a1SIris Chen * 1053188052a1SIris Chen * Set the property with passed in value. 1054188052a1SIris Chen */ 1055188052a1SIris Chen void qtest_qom_set_bool(QTestState *s, const char *path, const char *property, 1056188052a1SIris Chen bool value); 1057188052a1SIris Chen 1058188052a1SIris Chen /** 1059188052a1SIris Chen * qtest_qom_get_bool: 1060188052a1SIris Chen * @s: QTestState instance to operate on. 1061188052a1SIris Chen * @path: Path to the property being retrieved. 1062188052a1SIris Chen * @property: Property from where the value is being retrieved. 1063188052a1SIris Chen * 1064188052a1SIris Chen * Returns: Value retrieved from property. 1065188052a1SIris Chen */ 1066188052a1SIris Chen bool qtest_qom_get_bool(QTestState *s, const char *path, const char *property); 1067ed097649SMarc-André Lureau 1068ed097649SMarc-André Lureau /** 1069ed097649SMarc-André Lureau * qtest_pid: 1070ed097649SMarc-André Lureau * @s: QTestState instance to operate on. 1071ed097649SMarc-André Lureau * 1072ed097649SMarc-André Lureau * Returns: the PID of the QEMU process, or <= 0 1073ed097649SMarc-André Lureau */ 1074ed097649SMarc-André Lureau pid_t qtest_pid(QTestState *s); 1075ed097649SMarc-André Lureau 107625919c40SThomas Huth /** 107725919c40SThomas Huth * have_qemu_img: 107825919c40SThomas Huth * 107925919c40SThomas Huth * Returns: true if "qemu-img" is available. 108025919c40SThomas Huth */ 108125919c40SThomas Huth bool have_qemu_img(void); 108225919c40SThomas Huth 108325919c40SThomas Huth /** 108425919c40SThomas Huth * mkimg: 108525919c40SThomas Huth * @file: File name of the image that should be created 108625919c40SThomas Huth * @fmt: Format, e.g. "qcow2" or "raw" 108725919c40SThomas Huth * @size_mb: Size of the image in megabytes 108825919c40SThomas Huth * 108925919c40SThomas Huth * Create a disk image with qemu-img. Note that the QTEST_QEMU_IMG 109025919c40SThomas Huth * environment variable must point to the qemu-img file. 109125919c40SThomas Huth * 109225919c40SThomas Huth * Returns: true if the image has been created successfully. 109325919c40SThomas Huth */ 109425919c40SThomas Huth bool mkimg(const char *file, const char *fmt, unsigned size_mb); 109525919c40SThomas Huth 1096907b5105SMarc-André Lureau #endif 1097