xref: /openbmc/qemu/tests/qtest/libqtest.h (revision becd69449791c747100d57dfba24e19be82cff39)
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