]> Git Repo - qemu.git/blob - tests/libqtest.h
qemu-img: Print error if check failed
[qemu.git] / tests / libqtest.h
1 /*
2  * QTest
3  *
4  * Copyright IBM, Corp. 2012
5  * Copyright Red Hat, Inc. 2012
6  * Copyright SUSE LINUX Products GmbH 2013
7  *
8  * Authors:
9  *  Anthony Liguori   <[email protected]>
10  *  Paolo Bonzini     <[email protected]>
11  *  Andreas Färber    <[email protected]>
12  *
13  * This work is licensed under the terms of the GNU GPL, version 2 or later.
14  * See the COPYING file in the top-level directory.
15  *
16  */
17 #ifndef LIBQTEST_H
18 #define LIBQTEST_H
19
20 #include <stddef.h>
21 #include <stdint.h>
22 #include <stdbool.h>
23 #include <stdarg.h>
24 #include <sys/types.h>
25 #include "qapi/qmp/qdict.h"
26 #include "glib-compat.h"
27
28 typedef struct QTestState QTestState;
29
30 extern QTestState *global_qtest;
31
32 /**
33  * qtest_init:
34  * @extra_args: other arguments to pass to QEMU.
35  *
36  * Returns: #QTestState instance.
37  */
38 QTestState *qtest_init(const char *extra_args);
39
40 /**
41  * qtest_quit:
42  * @s: #QTestState instance to operate on.
43  *
44  * Shut down the QEMU process associated to @s.
45  */
46 void qtest_quit(QTestState *s);
47
48 /**
49  * qtest_qmp_discard_response:
50  * @s: #QTestState instance to operate on.
51  * @fmt...: QMP message to send to qemu
52  *
53  * Sends a QMP message to QEMU and consumes the response.
54  */
55 void qtest_qmp_discard_response(QTestState *s, const char *fmt, ...);
56
57 /**
58  * qtest_qmp:
59  * @s: #QTestState instance to operate on.
60  * @fmt...: QMP message to send to qemu
61  *
62  * Sends a QMP message to QEMU and returns the response.
63  */
64 QDict *qtest_qmp(QTestState *s, const char *fmt, ...);
65
66 /**
67  * qtest_qmpv_discard_response:
68  * @s: #QTestState instance to operate on.
69  * @fmt: QMP message to send to QEMU
70  * @ap: QMP message arguments
71  *
72  * Sends a QMP message to QEMU and consumes the response.
73  */
74 void qtest_qmpv_discard_response(QTestState *s, const char *fmt, va_list ap);
75
76 /**
77  * qtest_qmpv:
78  * @s: #QTestState instance to operate on.
79  * @fmt: QMP message to send to QEMU
80  * @ap: QMP message arguments
81  *
82  * Sends a QMP message to QEMU and returns the response.
83  */
84 QDict *qtest_qmpv(QTestState *s, const char *fmt, va_list ap);
85
86 /**
87  * qtest_receive:
88  * @s: #QTestState instance to operate on.
89  *
90  * Reads a QMP message from QEMU and returns the response.
91  */
92 QDict *qtest_qmp_receive(QTestState *s);
93
94 /**
95  * qtest_get_irq:
96  * @s: #QTestState instance to operate on.
97  * @num: Interrupt to observe.
98  *
99  * Returns: The level of the @num interrupt.
100  */
101 bool qtest_get_irq(QTestState *s, int num);
102
103 /**
104  * qtest_irq_intercept_in:
105  * @s: #QTestState instance to operate on.
106  * @string: QOM path of a device.
107  *
108  * Associate qtest irqs with the GPIO-in pins of the device
109  * whose path is specified by @string.
110  */
111 void qtest_irq_intercept_in(QTestState *s, const char *string);
112
113 /**
114  * qtest_irq_intercept_out:
115  * @s: #QTestState instance to operate on.
116  * @string: QOM path of a device.
117  *
118  * Associate qtest irqs with the GPIO-out pins of the device
119  * whose path is specified by @string.
120  */
121 void qtest_irq_intercept_out(QTestState *s, const char *string);
122
123 /**
124  * qtest_outb:
125  * @s: #QTestState instance to operate on.
126  * @addr: I/O port to write to.
127  * @value: Value being written.
128  *
129  * Write an 8-bit value to an I/O port.
130  */
131 void qtest_outb(QTestState *s, uint16_t addr, uint8_t value);
132
133 /**
134  * qtest_outw:
135  * @s: #QTestState instance to operate on.
136  * @addr: I/O port to write to.
137  * @value: Value being written.
138  *
139  * Write a 16-bit value to an I/O port.
140  */
141 void qtest_outw(QTestState *s, uint16_t addr, uint16_t value);
142
143 /**
144  * qtest_outl:
145  * @s: #QTestState instance to operate on.
146  * @addr: I/O port to write to.
147  * @value: Value being written.
148  *
149  * Write a 32-bit value to an I/O port.
150  */
151 void qtest_outl(QTestState *s, uint16_t addr, uint32_t value);
152
153 /**
154  * qtest_inb:
155  * @s: #QTestState instance to operate on.
156  * @addr: I/O port to read from.
157  *
158  * Returns an 8-bit value from an I/O port.
159  */
160 uint8_t qtest_inb(QTestState *s, uint16_t addr);
161
162 /**
163  * qtest_inw:
164  * @s: #QTestState instance to operate on.
165  * @addr: I/O port to read from.
166  *
167  * Returns a 16-bit value from an I/O port.
168  */
169 uint16_t qtest_inw(QTestState *s, uint16_t addr);
170
171 /**
172  * qtest_inl:
173  * @s: #QTestState instance to operate on.
174  * @addr: I/O port to read from.
175  *
176  * Returns a 32-bit value from an I/O port.
177  */
178 uint32_t qtest_inl(QTestState *s, uint16_t addr);
179
180 /**
181  * qtest_writeb:
182  * @s: #QTestState instance to operate on.
183  * @addr: Guest address to write to.
184  * @value: Value being written.
185  *
186  * Writes an 8-bit value to memory.
187  */
188 void qtest_writeb(QTestState *s, uint64_t addr, uint8_t value);
189
190 /**
191  * qtest_writew:
192  * @s: #QTestState instance to operate on.
193  * @addr: Guest address to write to.
194  * @value: Value being written.
195  *
196  * Writes a 16-bit value to memory.
197  */
198 void qtest_writew(QTestState *s, uint64_t addr, uint16_t value);
199
200 /**
201  * qtest_writel:
202  * @s: #QTestState instance to operate on.
203  * @addr: Guest address to write to.
204  * @value: Value being written.
205  *
206  * Writes a 32-bit value to memory.
207  */
208 void qtest_writel(QTestState *s, uint64_t addr, uint32_t value);
209
210 /**
211  * qtest_writeq:
212  * @s: #QTestState instance to operate on.
213  * @addr: Guest address to write to.
214  * @value: Value being written.
215  *
216  * Writes a 64-bit value to memory.
217  */
218 void qtest_writeq(QTestState *s, uint64_t addr, uint64_t value);
219
220 /**
221  * qtest_readb:
222  * @s: #QTestState instance to operate on.
223  * @addr: Guest address to read from.
224  *
225  * Reads an 8-bit value from memory.
226  *
227  * Returns: Value read.
228  */
229 uint8_t qtest_readb(QTestState *s, uint64_t addr);
230
231 /**
232  * qtest_readw:
233  * @s: #QTestState instance to operate on.
234  * @addr: Guest address to read from.
235  *
236  * Reads a 16-bit value from memory.
237  *
238  * Returns: Value read.
239  */
240 uint16_t qtest_readw(QTestState *s, uint64_t addr);
241
242 /**
243  * qtest_readl:
244  * @s: #QTestState instance to operate on.
245  * @addr: Guest address to read from.
246  *
247  * Reads a 32-bit value from memory.
248  *
249  * Returns: Value read.
250  */
251 uint32_t qtest_readl(QTestState *s, uint64_t addr);
252
253 /**
254  * qtest_readq:
255  * @s: #QTestState instance to operate on.
256  * @addr: Guest address to read from.
257  *
258  * Reads a 64-bit value from memory.
259  *
260  * Returns: Value read.
261  */
262 uint64_t qtest_readq(QTestState *s, uint64_t addr);
263
264 /**
265  * qtest_memread:
266  * @s: #QTestState instance to operate on.
267  * @addr: Guest address to read from.
268  * @data: Pointer to where memory contents will be stored.
269  * @size: Number of bytes to read.
270  *
271  * Read guest memory into a buffer.
272  */
273 void qtest_memread(QTestState *s, uint64_t addr, void *data, size_t size);
274
275 /**
276  * qtest_memwrite:
277  * @s: #QTestState instance to operate on.
278  * @addr: Guest address to write to.
279  * @data: Pointer to the bytes that will be written to guest memory.
280  * @size: Number of bytes to write.
281  *
282  * Write a buffer to guest memory.
283  */
284 void qtest_memwrite(QTestState *s, uint64_t addr, const void *data, size_t size);
285
286 /**
287  * qtest_memset:
288  * @s: #QTestState instance to operate on.
289  * @addr: Guest address to write to.
290  * @patt: Byte pattern to fill the guest memory region with.
291  * @size: Number of bytes to write.
292  *
293  * Write a pattern to guest memory.
294  */
295 void qtest_memset(QTestState *s, uint64_t addr, uint8_t patt, size_t size);
296
297 /**
298  * qtest_clock_step_next:
299  * @s: #QTestState instance to operate on.
300  *
301  * Advance the QEMU_CLOCK_VIRTUAL to the next deadline.
302  *
303  * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
304  */
305 int64_t qtest_clock_step_next(QTestState *s);
306
307 /**
308  * qtest_clock_step:
309  * @s: QTestState instance to operate on.
310  * @step: Number of nanoseconds to advance the clock by.
311  *
312  * Advance the QEMU_CLOCK_VIRTUAL by @step nanoseconds.
313  *
314  * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
315  */
316 int64_t qtest_clock_step(QTestState *s, int64_t step);
317
318 /**
319  * qtest_clock_set:
320  * @s: QTestState instance to operate on.
321  * @val: Nanoseconds value to advance the clock to.
322  *
323  * Advance the QEMU_CLOCK_VIRTUAL to @val nanoseconds since the VM was launched.
324  *
325  * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
326  */
327 int64_t qtest_clock_set(QTestState *s, int64_t val);
328
329 /**
330  * qtest_get_arch:
331  *
332  * Returns: The architecture for the QEMU executable under test.
333  */
334 const char *qtest_get_arch(void);
335
336 /**
337  * qtest_add_func:
338  * @str: Test case path.
339  * @fn: Test case function
340  *
341  * Add a GTester testcase with the given name and function.
342  * The path is prefixed with the architecture under test, as
343  * returned by qtest_get_arch().
344  */
345 void qtest_add_func(const char *str, void (*fn));
346
347 /**
348  * qtest_start:
349  * @args: other arguments to pass to QEMU
350  *
351  * Start QEMU and assign the resulting #QTestState to a global variable.
352  * The global variable is used by "shortcut" functions documented below.
353  *
354  * Returns: #QTestState instance.
355  */
356 static inline QTestState *qtest_start(const char *args)
357 {
358     global_qtest = qtest_init(args);
359     return global_qtest;
360 }
361
362 /**
363  * qtest_end:
364  *
365  * Shut down the QEMU process started by qtest_start().
366  */
367 static inline void qtest_end(void)
368 {
369     qtest_quit(global_qtest);
370     global_qtest = NULL;
371 }
372
373 /**
374  * qmp:
375  * @fmt...: QMP message to send to qemu
376  *
377  * Sends a QMP message to QEMU and returns the response.
378  */
379 QDict *qmp(const char *fmt, ...);
380
381 /**
382  * qmp_discard_response:
383  * @fmt...: QMP message to send to qemu
384  *
385  * Sends a QMP message to QEMU and consumes the response.
386  */
387 void qmp_discard_response(const char *fmt, ...);
388
389 /**
390  * qmp_receive:
391  *
392  * Reads a QMP message from QEMU and returns the response.
393  */
394 static inline QDict *qmp_receive(void)
395 {
396     return qtest_qmp_receive(global_qtest);
397 }
398
399 /**
400  * get_irq:
401  * @num: Interrupt to observe.
402  *
403  * Returns: The level of the @num interrupt.
404  */
405 static inline bool get_irq(int num)
406 {
407     return qtest_get_irq(global_qtest, num);
408 }
409
410 /**
411  * irq_intercept_in:
412  * @string: QOM path of a device.
413  *
414  * Associate qtest irqs with the GPIO-in pins of the device
415  * whose path is specified by @string.
416  */
417 static inline void irq_intercept_in(const char *string)
418 {
419     qtest_irq_intercept_in(global_qtest, string);
420 }
421
422 /**
423  * qtest_irq_intercept_out:
424  * @string: QOM path of a device.
425  *
426  * Associate qtest irqs with the GPIO-out pins of the device
427  * whose path is specified by @string.
428  */
429 static inline void irq_intercept_out(const char *string)
430 {
431     qtest_irq_intercept_out(global_qtest, string);
432 }
433
434 /**
435  * outb:
436  * @addr: I/O port to write to.
437  * @value: Value being written.
438  *
439  * Write an 8-bit value to an I/O port.
440  */
441 static inline void outb(uint16_t addr, uint8_t value)
442 {
443     qtest_outb(global_qtest, addr, value);
444 }
445
446 /**
447  * outw:
448  * @addr: I/O port to write to.
449  * @value: Value being written.
450  *
451  * Write a 16-bit value to an I/O port.
452  */
453 static inline void outw(uint16_t addr, uint16_t value)
454 {
455     qtest_outw(global_qtest, addr, value);
456 }
457
458 /**
459  * outl:
460  * @addr: I/O port to write to.
461  * @value: Value being written.
462  *
463  * Write a 32-bit value to an I/O port.
464  */
465 static inline void outl(uint16_t addr, uint32_t value)
466 {
467     qtest_outl(global_qtest, addr, value);
468 }
469
470 /**
471  * inb:
472  * @addr: I/O port to read from.
473  *
474  * Reads an 8-bit value from an I/O port.
475  *
476  * Returns: Value read.
477  */
478 static inline uint8_t inb(uint16_t addr)
479 {
480     return qtest_inb(global_qtest, addr);
481 }
482
483 /**
484  * inw:
485  * @addr: I/O port to read from.
486  *
487  * Reads a 16-bit value from an I/O port.
488  *
489  * Returns: Value read.
490  */
491 static inline uint16_t inw(uint16_t addr)
492 {
493     return qtest_inw(global_qtest, addr);
494 }
495
496 /**
497  * inl:
498  * @addr: I/O port to read from.
499  *
500  * Reads a 32-bit value from an I/O port.
501  *
502  * Returns: Value read.
503  */
504 static inline uint32_t inl(uint16_t addr)
505 {
506     return qtest_inl(global_qtest, addr);
507 }
508
509 /**
510  * writeb:
511  * @addr: Guest address to write to.
512  * @value: Value being written.
513  *
514  * Writes an 8-bit value to guest memory.
515  */
516 static inline void writeb(uint64_t addr, uint8_t value)
517 {
518     qtest_writeb(global_qtest, addr, value);
519 }
520
521 /**
522  * writew:
523  * @addr: Guest address to write to.
524  * @value: Value being written.
525  *
526  * Writes a 16-bit value to guest memory.
527  */
528 static inline void writew(uint64_t addr, uint16_t value)
529 {
530     qtest_writew(global_qtest, addr, value);
531 }
532
533 /**
534  * writel:
535  * @addr: Guest address to write to.
536  * @value: Value being written.
537  *
538  * Writes a 32-bit value to guest memory.
539  */
540 static inline void writel(uint64_t addr, uint32_t value)
541 {
542     qtest_writel(global_qtest, addr, value);
543 }
544
545 /**
546  * writeq:
547  * @addr: Guest address to write to.
548  * @value: Value being written.
549  *
550  * Writes a 64-bit value to guest memory.
551  */
552 static inline void writeq(uint64_t addr, uint64_t value)
553 {
554     qtest_writeq(global_qtest, addr, value);
555 }
556
557 /**
558  * readb:
559  * @addr: Guest address to read from.
560  *
561  * Reads an 8-bit value from guest memory.
562  *
563  * Returns: Value read.
564  */
565 static inline uint8_t readb(uint64_t addr)
566 {
567     return qtest_readb(global_qtest, addr);
568 }
569
570 /**
571  * readw:
572  * @addr: Guest address to read from.
573  *
574  * Reads a 16-bit value from guest memory.
575  *
576  * Returns: Value read.
577  */
578 static inline uint16_t readw(uint64_t addr)
579 {
580     return qtest_readw(global_qtest, addr);
581 }
582
583 /**
584  * readl:
585  * @addr: Guest address to read from.
586  *
587  * Reads a 32-bit value from guest memory.
588  *
589  * Returns: Value read.
590  */
591 static inline uint32_t readl(uint64_t addr)
592 {
593     return qtest_readl(global_qtest, addr);
594 }
595
596 /**
597  * readq:
598  * @addr: Guest address to read from.
599  *
600  * Reads a 64-bit value from guest memory.
601  *
602  * Returns: Value read.
603  */
604 static inline uint64_t readq(uint64_t addr)
605 {
606     return qtest_readq(global_qtest, addr);
607 }
608
609 /**
610  * memread:
611  * @addr: Guest address to read from.
612  * @data: Pointer to where memory contents will be stored.
613  * @size: Number of bytes to read.
614  *
615  * Read guest memory into a buffer.
616  */
617 static inline void memread(uint64_t addr, void *data, size_t size)
618 {
619     qtest_memread(global_qtest, addr, data, size);
620 }
621
622 /**
623  * memwrite:
624  * @addr: Guest address to write to.
625  * @data: Pointer to the bytes that will be written to guest memory.
626  * @size: Number of bytes to write.
627  *
628  * Write a buffer to guest memory.
629  */
630 static inline void memwrite(uint64_t addr, const void *data, size_t size)
631 {
632     qtest_memwrite(global_qtest, addr, data, size);
633 }
634
635 /**
636  * qmemset:
637  * @addr: Guest address to write to.
638  * @patt: Byte pattern to fill the guest memory region with.
639  * @size: Number of bytes to write.
640  *
641  * Write a pattern to guest memory.
642  */
643 static inline void qmemset(uint64_t addr, uint8_t patt, size_t size)
644 {
645     qtest_memset(global_qtest, addr, patt, size);
646 }
647
648 /**
649  * clock_step_next:
650  *
651  * Advance the QEMU_CLOCK_VIRTUAL to the next deadline.
652  *
653  * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
654  */
655 static inline int64_t clock_step_next(void)
656 {
657     return qtest_clock_step_next(global_qtest);
658 }
659
660 /**
661  * clock_step:
662  * @step: Number of nanoseconds to advance the clock by.
663  *
664  * Advance the QEMU_CLOCK_VIRTUAL by @step nanoseconds.
665  *
666  * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
667  */
668 static inline int64_t clock_step(int64_t step)
669 {
670     return qtest_clock_step(global_qtest, step);
671 }
672
673 /**
674  * clock_set:
675  * @val: Nanoseconds value to advance the clock to.
676  *
677  * Advance the QEMU_CLOCK_VIRTUAL to @val nanoseconds since the VM was launched.
678  *
679  * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
680  */
681 static inline int64_t clock_set(int64_t val)
682 {
683     return qtest_clock_set(global_qtest, val);
684 }
685
686 /**
687  * qtest_big_endian:
688  *
689  * Returns: True if the architecture under test has a big endian configuration.
690  */
691 bool qtest_big_endian(void);
692
693 #endif
This page took 0.06128 seconds and 4 git commands to generate.