1 /* 2 * QTest 3 * 4 * Copyright IBM, Corp. 2012 5 * Copyright Red Hat, Inc. 2012 6 * Copyright SUSE LINUX Products GmbH 2013 7 * 8 * Authors: 9 * Anthony Liguori <aliguori@us.ibm.com> 10 * Paolo Bonzini <pbonzini@redhat.com> 11 * Andreas Färber <afaerber@suse.de> 12 * 13 * This work is licensed under the terms of the GNU GPL, version 2 or later. 14 * See the COPYING file in the top-level directory. 15 * 16 */ 17 #ifndef LIBQTEST_H 18 #define LIBQTEST_H 19 20 #include "qapi/qmp/qobject.h" 21 #include "qapi/qmp/qdict.h" 22 #include "libqmp.h" 23 24 typedef struct QTestState QTestState; 25 26 /** 27 * qtest_initf: 28 * @fmt: Format for creating other arguments to pass to QEMU, formatted 29 * like sprintf(). 30 * 31 * Convenience wrapper around qtest_init(). 32 * 33 * Returns: #QTestState instance. 34 */ 35 QTestState *qtest_initf(const char *fmt, ...) G_GNUC_PRINTF(1, 2); 36 37 /** 38 * qtest_vinitf: 39 * @fmt: Format for creating other arguments to pass to QEMU, formatted 40 * like vsprintf(). 41 * @ap: Format arguments. 42 * 43 * Convenience wrapper around qtest_init(). 44 * 45 * Returns: #QTestState instance. 46 */ 47 QTestState *qtest_vinitf(const char *fmt, va_list ap) G_GNUC_PRINTF(1, 0); 48 49 /** 50 * qtest_init: 51 * @extra_args: other arguments to pass to QEMU. CAUTION: these 52 * arguments are subject to word splitting and shell evaluation. 53 * 54 * Returns: #QTestState instance. 55 */ 56 QTestState *qtest_init(const char *extra_args); 57 58 /** 59 * qtest_init_with_env: 60 * @var: Environment variable from where to take the QEMU binary 61 * @extra_args: Other arguments to pass to QEMU. CAUTION: these 62 * arguments are subject to word splitting and shell evaluation. 63 * 64 * Like qtest_init(), but use a different environment variable for the 65 * QEMU binary. 66 * 67 * Returns: #QTestState instance. 68 */ 69 QTestState *qtest_init_with_env(const char *var, const char *extra_args); 70 71 QTestState *qtest_init_with_env_no_handshake(const char *var, 72 const char *extra_args); 73 /** 74 * qtest_init_without_qmp_handshake: 75 * @extra_args: other arguments to pass to QEMU. CAUTION: these 76 * arguments are subject to word splitting and shell evaluation. 77 * 78 * Returns: #QTestState instance. 79 */ 80 QTestState *qtest_init_without_qmp_handshake(const char *extra_args); 81 82 /** 83 * qtest_init_with_serial: 84 * @extra_args: other arguments to pass to QEMU. CAUTION: these 85 * arguments are subject to word splitting and shell evaluation. 86 * @sock_fd: pointer to store the socket file descriptor for 87 * connection with serial. 88 * 89 * Returns: #QTestState instance. 90 */ 91 QTestState *qtest_init_with_serial(const char *extra_args, int *sock_fd); 92 93 /** 94 * qtest_wait_qemu: 95 * @s: #QTestState instance to operate on. 96 * 97 * Wait for the QEMU process to terminate. It is safe to call this function 98 * multiple times. 99 */ 100 void qtest_wait_qemu(QTestState *s); 101 102 /** 103 * qtest_kill_qemu: 104 * @s: #QTestState instance to operate on. 105 * 106 * Kill the QEMU process and wait for it to terminate. It is safe to call this 107 * function multiple times. Normally qtest_quit() is used instead because it 108 * also frees QTestState. Use qtest_kill_qemu() when you just want to kill QEMU 109 * and qtest_quit() will be called later. 110 */ 111 void qtest_kill_qemu(QTestState *s); 112 113 /** 114 * qtest_quit: 115 * @s: #QTestState instance to operate on. 116 * 117 * Shut down the QEMU process associated to @s. 118 */ 119 void qtest_quit(QTestState *s); 120 121 #ifndef _WIN32 122 /** 123 * qtest_qmp_fds: 124 * @s: #QTestState instance to operate on. 125 * @fds: array of file descriptors 126 * @fds_num: number of elements in @fds 127 * @fmt: QMP message to send to qemu, formatted like 128 * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 129 * supported after '%'. 130 * 131 * Sends a QMP message to QEMU with fds and returns the response. 132 */ 133 QDict *qtest_qmp_fds(QTestState *s, int *fds, size_t fds_num, 134 const char *fmt, ...) 135 G_GNUC_PRINTF(4, 5); 136 #endif /* _WIN32 */ 137 138 /** 139 * qtest_qmp: 140 * @s: #QTestState instance to operate on. 141 * @fmt: QMP message to send to qemu, formatted like 142 * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 143 * supported after '%'. 144 * 145 * Sends a QMP message to QEMU and returns the response. 146 */ 147 QDict *qtest_qmp(QTestState *s, const char *fmt, ...) 148 G_GNUC_PRINTF(2, 3); 149 150 /** 151 * qtest_qmp_send: 152 * @s: #QTestState instance to operate on. 153 * @fmt: QMP message to send to qemu, formatted like 154 * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 155 * supported after '%'. 156 * 157 * Sends a QMP message to QEMU and leaves the response in the stream. 158 */ 159 void qtest_qmp_send(QTestState *s, const char *fmt, ...) 160 G_GNUC_PRINTF(2, 3); 161 162 /** 163 * qtest_qmp_send_raw: 164 * @s: #QTestState instance to operate on. 165 * @fmt: text to send, formatted like sprintf() 166 * 167 * Sends text to the QMP monitor verbatim. Need not be valid JSON; 168 * this is useful for negative tests. 169 */ 170 void qtest_qmp_send_raw(QTestState *s, const char *fmt, ...) 171 G_GNUC_PRINTF(2, 3); 172 173 /** 174 * qtest_socket_server: 175 * @socket_path: the UNIX domain socket path 176 * 177 * Create and return a listen socket file descriptor, or abort on failure. 178 */ 179 int qtest_socket_server(const char *socket_path); 180 181 #ifndef _WIN32 182 /** 183 * qtest_vqmp_fds: 184 * @s: #QTestState instance to operate on. 185 * @fds: array of file descriptors 186 * @fds_num: number of elements in @fds 187 * @fmt: QMP message to send to QEMU, formatted like 188 * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 189 * supported after '%'. 190 * @ap: QMP message arguments 191 * 192 * Sends a QMP message to QEMU with fds and returns the response. 193 */ 194 QDict *qtest_vqmp_fds(QTestState *s, int *fds, size_t fds_num, 195 const char *fmt, va_list ap) 196 G_GNUC_PRINTF(4, 0); 197 #endif /* _WIN32 */ 198 199 /** 200 * qtest_vqmp: 201 * @s: #QTestState instance to operate on. 202 * @fmt: QMP message to send to QEMU, formatted like 203 * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 204 * supported after '%'. 205 * @ap: QMP message arguments 206 * 207 * Sends a QMP message to QEMU and returns the response. 208 */ 209 QDict *qtest_vqmp(QTestState *s, const char *fmt, va_list ap) 210 G_GNUC_PRINTF(2, 0); 211 212 #ifndef _WIN32 213 /** 214 * qtest_qmp_vsend_fds: 215 * @s: #QTestState instance to operate on. 216 * @fds: array of file descriptors 217 * @fds_num: number of elements in @fds 218 * @fmt: QMP message to send to QEMU, formatted like 219 * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 220 * supported after '%'. 221 * @ap: QMP message arguments 222 * 223 * Sends a QMP message to QEMU and leaves the response in the stream. 224 */ 225 void qtest_qmp_vsend_fds(QTestState *s, int *fds, size_t fds_num, 226 const char *fmt, va_list ap) 227 G_GNUC_PRINTF(4, 0); 228 #endif /* _WIN32 */ 229 230 /** 231 * qtest_qmp_vsend: 232 * @s: #QTestState instance to operate on. 233 * @fmt: QMP message to send to QEMU, formatted like 234 * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 235 * supported after '%'. 236 * @ap: QMP message arguments 237 * 238 * Sends a QMP message to QEMU and leaves the response in the stream. 239 */ 240 void qtest_qmp_vsend(QTestState *s, const char *fmt, va_list ap) 241 G_GNUC_PRINTF(2, 0); 242 243 /** 244 * qtest_qmp_receive_dict: 245 * @s: #QTestState instance to operate on. 246 * 247 * Reads a QMP message from QEMU and returns the response. 248 */ 249 QDict *qtest_qmp_receive_dict(QTestState *s); 250 251 /** 252 * qtest_qmp_receive: 253 * @s: #QTestState instance to operate on. 254 * 255 * Reads a QMP message from QEMU and returns the response. 256 * 257 * If a callback is registered with qtest_qmp_set_event_callback, 258 * it will be invoked for every event seen, otherwise events 259 * will be buffered until a call to one of the qtest_qmp_eventwait 260 * family of functions. 261 */ 262 QDict *qtest_qmp_receive(QTestState *s); 263 264 /* 265 * QTestQMPEventCallback: 266 * @s: #QTestState instance event was received on 267 * @name: name of the event type 268 * @event: #QDict for the event details 269 * @opaque: opaque data from time of callback registration 270 * 271 * This callback will be invoked whenever an event is received. 272 * If the callback returns true the event will be consumed, 273 * otherwise it will be put on the list of pending events. 274 * Pending events can be later handled by calling either 275 * qtest_qmp_eventwait or qtest_qmp_eventwait_ref. 276 * 277 * Return: true to consume the event, false to let it be queued 278 */ 279 typedef bool (*QTestQMPEventCallback)(QTestState *s, const char *name, 280 QDict *event, void *opaque); 281 282 /** 283 * qtest_qmp_set_event_callback: 284 * @s: #QTestSTate instance to operate on 285 * @cb: callback to invoke for events 286 * @opaque: data to pass to @cb 287 * 288 * Register a callback to be invoked whenever an event arrives 289 */ 290 void qtest_qmp_set_event_callback(QTestState *s, 291 QTestQMPEventCallback cb, void *opaque); 292 293 /** 294 * qtest_qmp_eventwait: 295 * @s: #QTestState instance to operate on. 296 * @event: event to wait for. 297 * 298 * Continuously polls for QMP responses until it receives the desired event. 299 * 300 * Any callback registered with qtest_qmp_set_event_callback will 301 * be invoked for every event seen. 302 */ 303 void qtest_qmp_eventwait(QTestState *s, const char *event); 304 305 /** 306 * qtest_qmp_eventwait_ref: 307 * @s: #QTestState instance to operate on. 308 * @event: event to wait for. 309 * 310 * Continuously polls for QMP responses until it receives the desired event. 311 * 312 * Any callback registered with qtest_qmp_set_event_callback will 313 * be invoked for every event seen. 314 * 315 * Returns a copy of the event for further investigation. 316 */ 317 QDict *qtest_qmp_eventwait_ref(QTestState *s, const char *event); 318 319 /** 320 * qtest_qmp_event_ref: 321 * @s: #QTestState instance to operate on. 322 * @event: event to return. 323 * 324 * Removes non-matching events from the buffer that was set by 325 * qtest_qmp_receive, until an event bearing the given name is found, 326 * and returns it. 327 * If no event matches, clears the buffer and returns NULL. 328 * 329 */ 330 QDict *qtest_qmp_event_ref(QTestState *s, const char *event); 331 332 /** 333 * qtest_hmp: 334 * @s: #QTestState instance to operate on. 335 * @fmt: HMP command to send to QEMU, formats arguments like sprintf(). 336 * 337 * Send HMP command to QEMU via QMP's human-monitor-command. 338 * QMP events are discarded. 339 * 340 * Returns: the command's output. The caller should g_free() it. 341 */ 342 char *qtest_hmp(QTestState *s, const char *fmt, ...) G_GNUC_PRINTF(2, 3); 343 344 /** 345 * qtest_hmpv: 346 * @s: #QTestState instance to operate on. 347 * @fmt: HMP command to send to QEMU, formats arguments like vsprintf(). 348 * @ap: HMP command arguments 349 * 350 * Send HMP command to QEMU via QMP's human-monitor-command. 351 * QMP events are discarded. 352 * 353 * Returns: the command's output. The caller should g_free() it. 354 */ 355 char *qtest_vhmp(QTestState *s, const char *fmt, va_list ap) 356 G_GNUC_PRINTF(2, 0); 357 358 void qtest_module_load(QTestState *s, const char *prefix, const char *libname); 359 360 /** 361 * qtest_get_irq: 362 * @s: #QTestState instance to operate on. 363 * @num: Interrupt to observe. 364 * 365 * Returns: The level of the @num interrupt. 366 */ 367 bool qtest_get_irq(QTestState *s, int num); 368 369 /** 370 * qtest_irq_intercept_in: 371 * @s: #QTestState instance to operate on. 372 * @string: QOM path of a device. 373 * 374 * Associate qtest irqs with the GPIO-in pins of the device 375 * whose path is specified by @string. 376 */ 377 void qtest_irq_intercept_in(QTestState *s, const char *string); 378 379 /** 380 * qtest_irq_intercept_out: 381 * @s: #QTestState instance to operate on. 382 * @string: QOM path of a device. 383 * 384 * Associate qtest irqs with the GPIO-out pins of the device 385 * whose path is specified by @string. 386 */ 387 void qtest_irq_intercept_out(QTestState *s, const char *string); 388 389 /** 390 * qtest_irq_intercept_out_named: 391 * @s: #QTestState instance to operate on. 392 * @qom_path: QOM path of a device. 393 * @name: Name of the GPIO out pin 394 * 395 * Associate a qtest irq with the named GPIO-out pin of the device 396 * whose path is specified by @string and whose name is @name. 397 */ 398 void qtest_irq_intercept_out_named(QTestState *s, const char *qom_path, const char *name); 399 400 /** 401 * qtest_set_irq_in: 402 * @s: QTestState instance to operate on. 403 * @string: QOM path of a device 404 * @name: IRQ name 405 * @irq: IRQ number 406 * @level: IRQ level 407 * 408 * Force given device/irq GPIO-in pin to the given level. 409 */ 410 void qtest_set_irq_in(QTestState *s, const char *string, const char *name, 411 int irq, int level); 412 413 /** 414 * qtest_outb: 415 * @s: #QTestState instance to operate on. 416 * @addr: I/O port to write to. 417 * @value: Value being written. 418 * 419 * Write an 8-bit value to an I/O port. 420 */ 421 void qtest_outb(QTestState *s, uint16_t addr, uint8_t value); 422 423 /** 424 * qtest_outw: 425 * @s: #QTestState instance to operate on. 426 * @addr: I/O port to write to. 427 * @value: Value being written. 428 * 429 * Write a 16-bit value to an I/O port. 430 */ 431 void qtest_outw(QTestState *s, uint16_t addr, uint16_t value); 432 433 /** 434 * qtest_outl: 435 * @s: #QTestState instance to operate on. 436 * @addr: I/O port to write to. 437 * @value: Value being written. 438 * 439 * Write a 32-bit value to an I/O port. 440 */ 441 void qtest_outl(QTestState *s, uint16_t addr, uint32_t value); 442 443 /** 444 * qtest_inb: 445 * @s: #QTestState instance to operate on. 446 * @addr: I/O port to read from. 447 * 448 * Returns an 8-bit value from an I/O port. 449 */ 450 uint8_t qtest_inb(QTestState *s, uint16_t addr); 451 452 /** 453 * qtest_inw: 454 * @s: #QTestState instance to operate on. 455 * @addr: I/O port to read from. 456 * 457 * Returns a 16-bit value from an I/O port. 458 */ 459 uint16_t qtest_inw(QTestState *s, uint16_t addr); 460 461 /** 462 * qtest_inl: 463 * @s: #QTestState instance to operate on. 464 * @addr: I/O port to read from. 465 * 466 * Returns a 32-bit value from an I/O port. 467 */ 468 uint32_t qtest_inl(QTestState *s, uint16_t addr); 469 470 /** 471 * qtest_writeb: 472 * @s: #QTestState instance to operate on. 473 * @addr: Guest address to write to. 474 * @value: Value being written. 475 * 476 * Writes an 8-bit value to memory. 477 */ 478 void qtest_writeb(QTestState *s, uint64_t addr, uint8_t value); 479 480 /** 481 * qtest_writew: 482 * @s: #QTestState instance to operate on. 483 * @addr: Guest address to write to. 484 * @value: Value being written. 485 * 486 * Writes a 16-bit value to memory. 487 */ 488 void qtest_writew(QTestState *s, uint64_t addr, uint16_t value); 489 490 /** 491 * qtest_writel: 492 * @s: #QTestState instance to operate on. 493 * @addr: Guest address to write to. 494 * @value: Value being written. 495 * 496 * Writes a 32-bit value to memory. 497 */ 498 void qtest_writel(QTestState *s, uint64_t addr, uint32_t value); 499 500 /** 501 * qtest_writeq: 502 * @s: #QTestState instance to operate on. 503 * @addr: Guest address to write to. 504 * @value: Value being written. 505 * 506 * Writes a 64-bit value to memory. 507 */ 508 void qtest_writeq(QTestState *s, uint64_t addr, uint64_t value); 509 510 /** 511 * qtest_readb: 512 * @s: #QTestState instance to operate on. 513 * @addr: Guest address to read from. 514 * 515 * Reads an 8-bit value from memory. 516 * 517 * Returns: Value read. 518 */ 519 uint8_t qtest_readb(QTestState *s, uint64_t addr); 520 521 /** 522 * qtest_readw: 523 * @s: #QTestState instance to operate on. 524 * @addr: Guest address to read from. 525 * 526 * Reads a 16-bit value from memory. 527 * 528 * Returns: Value read. 529 */ 530 uint16_t qtest_readw(QTestState *s, uint64_t addr); 531 532 /** 533 * qtest_readl: 534 * @s: #QTestState instance to operate on. 535 * @addr: Guest address to read from. 536 * 537 * Reads a 32-bit value from memory. 538 * 539 * Returns: Value read. 540 */ 541 uint32_t qtest_readl(QTestState *s, uint64_t addr); 542 543 /** 544 * qtest_readq: 545 * @s: #QTestState instance to operate on. 546 * @addr: Guest address to read from. 547 * 548 * Reads a 64-bit value from memory. 549 * 550 * Returns: Value read. 551 */ 552 uint64_t qtest_readq(QTestState *s, uint64_t addr); 553 554 /** 555 * qtest_memread: 556 * @s: #QTestState instance to operate on. 557 * @addr: Guest address to read from. 558 * @data: Pointer to where memory contents will be stored. 559 * @size: Number of bytes to read. 560 * 561 * Read guest memory into a buffer. 562 */ 563 void qtest_memread(QTestState *s, uint64_t addr, void *data, size_t size); 564 565 /** 566 * qtest_rtas_call: 567 * @s: #QTestState instance to operate on. 568 * @name: name of the command to call. 569 * @nargs: Number of args. 570 * @args: Guest address to read args from. 571 * @nret: Number of return value. 572 * @ret: Guest address to write return values to. 573 * 574 * Call an RTAS function 575 */ 576 uint64_t qtest_rtas_call(QTestState *s, const char *name, 577 uint32_t nargs, uint64_t args, 578 uint32_t nret, uint64_t ret); 579 580 /** 581 * qtest_bufread: 582 * @s: #QTestState instance to operate on. 583 * @addr: Guest address to read from. 584 * @data: Pointer to where memory contents will be stored. 585 * @size: Number of bytes to read. 586 * 587 * Read guest memory into a buffer and receive using a base64 encoding. 588 */ 589 void qtest_bufread(QTestState *s, uint64_t addr, void *data, size_t size); 590 591 /** 592 * qtest_memwrite: 593 * @s: #QTestState instance to operate on. 594 * @addr: Guest address to write to. 595 * @data: Pointer to the bytes that will be written to guest memory. 596 * @size: Number of bytes to write. 597 * 598 * Write a buffer to guest memory. 599 */ 600 void qtest_memwrite(QTestState *s, uint64_t addr, const void *data, size_t size); 601 602 /** 603 * qtest_bufwrite: 604 * @s: #QTestState instance to operate on. 605 * @addr: Guest address to write to. 606 * @data: Pointer to the bytes that will be written to guest memory. 607 * @size: Number of bytes to write. 608 * 609 * Write a buffer to guest memory and transmit using a base64 encoding. 610 */ 611 void qtest_bufwrite(QTestState *s, uint64_t addr, 612 const void *data, size_t size); 613 614 /** 615 * qtest_memset: 616 * @s: #QTestState instance to operate on. 617 * @addr: Guest address to write to. 618 * @patt: Byte pattern to fill the guest memory region with. 619 * @size: Number of bytes to write. 620 * 621 * Write a pattern to guest memory. 622 */ 623 void qtest_memset(QTestState *s, uint64_t addr, uint8_t patt, size_t size); 624 625 /** 626 * qtest_clock_step_next: 627 * @s: #QTestState instance to operate on. 628 * 629 * Advance the QEMU_CLOCK_VIRTUAL to the next deadline. 630 * 631 * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds. 632 */ 633 int64_t qtest_clock_step_next(QTestState *s); 634 635 /** 636 * qtest_clock_step: 637 * @s: QTestState instance to operate on. 638 * @step: Number of nanoseconds to advance the clock by. 639 * 640 * Advance the QEMU_CLOCK_VIRTUAL by @step nanoseconds. 641 * 642 * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds. 643 */ 644 int64_t qtest_clock_step(QTestState *s, int64_t step); 645 646 /** 647 * qtest_clock_set: 648 * @s: QTestState instance to operate on. 649 * @val: Nanoseconds value to advance the clock to. 650 * 651 * Advance the QEMU_CLOCK_VIRTUAL to @val nanoseconds since the VM was launched. 652 * 653 * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds. 654 */ 655 int64_t qtest_clock_set(QTestState *s, int64_t val); 656 657 /** 658 * qtest_big_endian: 659 * @s: QTestState instance to operate on. 660 * 661 * Returns: True if the architecture under test has a big endian configuration. 662 */ 663 bool qtest_big_endian(QTestState *s); 664 665 /** 666 * qtest_get_arch: 667 * 668 * Returns: The architecture for the QEMU executable under test. 669 */ 670 const char *qtest_get_arch(void); 671 672 /** 673 * qtest_has_accel: 674 * @accel_name: Accelerator name to check for. 675 * 676 * Returns: true if the accelerator is built in. 677 */ 678 bool qtest_has_accel(const char *accel_name); 679 680 /** 681 * qtest_add_func: 682 * @str: Test case path. 683 * @fn: Test case function 684 * 685 * Add a GTester testcase with the given name and function. 686 * The path is prefixed with the architecture under test, as 687 * returned by qtest_get_arch(). 688 */ 689 void qtest_add_func(const char *str, void (*fn)(void)); 690 691 /** 692 * qtest_add_data_func: 693 * @str: Test case path. 694 * @data: Test case data 695 * @fn: Test case function 696 * 697 * Add a GTester testcase with the given name, data and function. 698 * The path is prefixed with the architecture under test, as 699 * returned by qtest_get_arch(). 700 */ 701 void qtest_add_data_func(const char *str, const void *data, 702 void (*fn)(const void *)); 703 704 /** 705 * qtest_add_data_func_full: 706 * @str: Test case path. 707 * @data: Test case data 708 * @fn: Test case function 709 * @data_free_func: GDestroyNotify for data 710 * 711 * Add a GTester testcase with the given name, data and function. 712 * The path is prefixed with the architecture under test, as 713 * returned by qtest_get_arch(). 714 * 715 * @data is passed to @data_free_func() on test completion. 716 */ 717 void qtest_add_data_func_full(const char *str, void *data, 718 void (*fn)(const void *), 719 GDestroyNotify data_free_func); 720 721 /** 722 * qtest_add: 723 * @testpath: Test case path 724 * @Fixture: Fixture type 725 * @tdata: Test case data 726 * @fsetup: Test case setup function 727 * @ftest: Test case function 728 * @fteardown: Test case teardown function 729 * 730 * Add a GTester testcase with the given name, data and functions. 731 * The path is prefixed with the architecture under test, as 732 * returned by qtest_get_arch(). 733 */ 734 #define qtest_add(testpath, Fixture, tdata, fsetup, ftest, fteardown) \ 735 do { \ 736 char *path = g_strdup_printf("/%s/%s", qtest_get_arch(), testpath); \ 737 g_test_add(path, Fixture, tdata, fsetup, ftest, fteardown); \ 738 g_free(path); \ 739 } while (0) 740 741 /** 742 * qtest_add_abrt_handler: 743 * @fn: Handler function 744 * @data: Argument that is passed to the handler 745 * 746 * Add a handler function that is invoked on SIGABRT. This can be used to 747 * terminate processes and perform other cleanup. The handler can be removed 748 * with qtest_remove_abrt_handler(). 749 */ 750 void qtest_add_abrt_handler(GHookFunc fn, const void *data); 751 752 /** 753 * qtest_remove_abrt_handler: 754 * @data: Argument previously passed to qtest_add_abrt_handler() 755 * 756 * Remove an abrt handler that was previously added with 757 * qtest_add_abrt_handler(). 758 */ 759 void qtest_remove_abrt_handler(void *data); 760 761 /** 762 * qtest_vqmp_assert_success_ref: 763 * @qts: QTestState instance to operate on 764 * @fmt: QMP message to send to qemu, formatted like 765 * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 766 * supported after '%'. 767 * @args: variable arguments for @fmt 768 * 769 * Sends a QMP message to QEMU, asserts that a 'return' key is present in 770 * the response, and returns the response. 771 */ 772 QDict *qtest_vqmp_assert_success_ref(QTestState *qts, 773 const char *fmt, va_list args) 774 G_GNUC_PRINTF(2, 0); 775 776 /** 777 * qtest_vqmp_assert_success: 778 * @qts: QTestState instance to operate on 779 * @fmt: QMP message to send to qemu, formatted like 780 * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 781 * supported after '%'. 782 * @args: variable arguments for @fmt 783 * 784 * Sends a QMP message to QEMU and asserts that a 'return' key is present in 785 * the response. 786 */ 787 void qtest_vqmp_assert_success(QTestState *qts, 788 const char *fmt, va_list args) 789 G_GNUC_PRINTF(2, 0); 790 791 #ifndef _WIN32 792 /** 793 * qtest_vqmp_fds_assert_success_ref: 794 * @qts: QTestState instance to operate on 795 * @fds: the file descriptors to send 796 * @nfds: number of @fds to send 797 * @fmt: QMP message to send to qemu, formatted like 798 * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 799 * supported after '%'. 800 * @args: variable arguments for @fmt 801 * 802 * Sends a QMP message with file descriptors to QEMU, 803 * asserts that a 'return' key is present in the response, 804 * and returns the response. 805 */ 806 QDict *qtest_vqmp_fds_assert_success_ref(QTestState *qts, int *fds, size_t nfds, 807 const char *fmt, va_list args) 808 G_GNUC_PRINTF(4, 0); 809 810 /** 811 * qtest_vqmp_fds_assert_success: 812 * @qts: QTestState instance to operate on 813 * @fds: the file descriptors to send 814 * @nfds: number of @fds to send 815 * @fmt: QMP message to send to qemu, formatted like 816 * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 817 * supported after '%'. 818 * @args: variable arguments for @fmt 819 * 820 * Sends a QMP message with file descriptors to QEMU and 821 * asserts that a 'return' key is present in the response. 822 */ 823 void qtest_vqmp_fds_assert_success(QTestState *qts, int *fds, size_t nfds, 824 const char *fmt, va_list args) 825 G_GNUC_PRINTF(4, 0); 826 #endif /* !_WIN32 */ 827 828 /** 829 * qtest_qmp_assert_failure_ref: 830 * @qts: QTestState instance to operate on 831 * @fmt: QMP message to send to qemu, formatted like 832 * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 833 * supported after '%'. 834 * 835 * Sends a QMP message to QEMU, asserts that an 'error' key is present in 836 * the response, and returns the response. 837 */ 838 QDict *qtest_qmp_assert_failure_ref(QTestState *qts, const char *fmt, ...) 839 G_GNUC_PRINTF(2, 3); 840 841 /** 842 * qtest_vqmp_assert_failure_ref: 843 * @qts: QTestState instance to operate on 844 * @fmt: QMP message to send to qemu, formatted like 845 * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 846 * supported after '%'. 847 * @args: variable arguments for @fmt 848 * 849 * Sends a QMP message to QEMU, asserts that an 'error' key is present in 850 * the response, and returns the response. 851 */ 852 QDict *qtest_vqmp_assert_failure_ref(QTestState *qts, 853 const char *fmt, va_list args) 854 G_GNUC_PRINTF(2, 0); 855 856 /** 857 * qtest_qmp_assert_success_ref: 858 * @qts: QTestState instance to operate on 859 * @fmt: QMP message to send to qemu, formatted like 860 * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 861 * supported after '%'. 862 * 863 * Sends a QMP message to QEMU, asserts that a 'return' key is present in 864 * the response, and returns the response. 865 */ 866 QDict *qtest_qmp_assert_success_ref(QTestState *qts, const char *fmt, ...) 867 G_GNUC_PRINTF(2, 3); 868 869 /** 870 * qtest_qmp_assert_success: 871 * @qts: QTestState instance to operate on 872 * @fmt: QMP message to send to qemu, formatted like 873 * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 874 * supported after '%'. 875 * 876 * Sends a QMP message to QEMU and asserts that a 'return' key is present in 877 * the response. 878 */ 879 void qtest_qmp_assert_success(QTestState *qts, const char *fmt, ...) 880 G_GNUC_PRINTF(2, 3); 881 882 #ifndef _WIN32 883 /** 884 * qtest_qmp_fd_assert_success_ref: 885 * @qts: QTestState instance to operate on 886 * @fds: the file descriptors to send 887 * @nfds: number of @fds to send 888 * @fmt: QMP message to send to qemu, formatted like 889 * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 890 * supported after '%'. 891 * 892 * Sends a QMP message with file descriptors to QEMU, 893 * asserts that a 'return' key is present in the response, 894 * and returns the response. 895 */ 896 QDict *qtest_qmp_fds_assert_success_ref(QTestState *qts, int *fds, size_t nfds, 897 const char *fmt, ...) 898 G_GNUC_PRINTF(4, 5); 899 900 /** 901 * qtest_qmp_fd_assert_success: 902 * @qts: QTestState instance to operate on 903 * @fds: the file descriptors to send 904 * @nfds: number of @fds to send 905 * @fmt: QMP message to send to qemu, formatted like 906 * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 907 * supported after '%'. 908 * 909 * Sends a QMP message with file descriptors to QEMU and 910 * asserts that a 'return' key is present in the response. 911 */ 912 void qtest_qmp_fds_assert_success(QTestState *qts, int *fds, size_t nfds, 913 const char *fmt, ...) 914 G_GNUC_PRINTF(4, 5); 915 #endif /* !_WIN32 */ 916 917 /** 918 * qtest_cb_for_every_machine: 919 * @cb: Pointer to the callback function 920 * @skip_old_versioned: true if versioned old machine types should be skipped 921 * 922 * Call a callback function for every name of all available machines. 923 */ 924 void qtest_cb_for_every_machine(void (*cb)(const char *machine), 925 bool skip_old_versioned); 926 927 /** 928 * qtest_resolve_machine_alias: 929 * @var: Environment variable from where to take the QEMU binary 930 * @alias: The alias to resolve 931 * 932 * Returns: the machine type corresponding to the alias if any, 933 * otherwise NULL. 934 */ 935 char *qtest_resolve_machine_alias(const char *var, const char *alias); 936 937 /** 938 * qtest_has_machine: 939 * @machine: The machine to look for 940 * 941 * Returns: true if the machine is available in the target binary. 942 */ 943 bool qtest_has_machine(const char *machine); 944 945 /** 946 * qtest_has_machine_with_env: 947 * @var: Environment variable from where to take the QEMU binary 948 * @machine: The machine to look for 949 * 950 * Returns: true if the machine is available in the specified binary. 951 */ 952 bool qtest_has_machine_with_env(const char *var, const char *machine); 953 954 /** 955 * qtest_has_cpu_model: 956 * @cpu: The cpu to look for 957 * 958 * Returns: true if the cpu is available in the target binary. 959 */ 960 bool qtest_has_cpu_model(const char *cpu); 961 962 /** 963 * qtest_has_device: 964 * @device: The device to look for 965 * 966 * Returns: true if the device is available in the target binary. 967 */ 968 bool qtest_has_device(const char *device); 969 970 /** 971 * qtest_qmp_device_add_qdict: 972 * @qts: QTestState instance to operate on 973 * @drv: Name of the device that should be added 974 * @arguments: QDict with properties for the device to initialize 975 * 976 * Generic hot-plugging test via the device_add QMP command with properties 977 * supplied in form of QDict. Use NULL for empty properties list. 978 */ 979 void qtest_qmp_device_add_qdict(QTestState *qts, const char *drv, 980 const QDict *arguments); 981 982 /** 983 * qtest_qmp_device_add: 984 * @qts: QTestState instance to operate on 985 * @driver: Name of the device that should be added 986 * @id: Identification string 987 * @fmt: QMP message to send to qemu, formatted like 988 * qobject_from_jsonf_nofail(). See parse_interpolation() for what's 989 * supported after '%'. 990 * 991 * Generic hot-plugging test via the device_add QMP command. 992 */ 993 void qtest_qmp_device_add(QTestState *qts, const char *driver, const char *id, 994 const char *fmt, ...) G_GNUC_PRINTF(4, 5); 995 996 /** 997 * qtest_qmp_add_client: 998 * @qts: QTestState instance to operate on 999 * @protocol: the protocol to add to 1000 * @fd: the client file-descriptor 1001 * 1002 * Call QMP ``getfd`` (on Windows ``get-win32-socket``) followed by 1003 * ``add_client`` with the given @fd. 1004 */ 1005 void qtest_qmp_add_client(QTestState *qts, const char *protocol, int fd); 1006 1007 /** 1008 * qtest_qmp_device_del_send: 1009 * @qts: QTestState instance to operate on 1010 * @id: Identification string 1011 * 1012 * Generic hot-unplugging test via the device_del QMP command. 1013 */ 1014 void qtest_qmp_device_del_send(QTestState *qts, const char *id); 1015 1016 /** 1017 * qtest_qmp_device_del: 1018 * @qts: QTestState instance to operate on 1019 * @id: Identification string 1020 * 1021 * Generic hot-unplugging test via the device_del QMP command. 1022 * Waiting for command completion event. 1023 */ 1024 void qtest_qmp_device_del(QTestState *qts, const char *id); 1025 1026 /** 1027 * qtest_probe_child: 1028 * @s: QTestState instance to operate on. 1029 * 1030 * Returns: true if the child is still alive. 1031 */ 1032 bool qtest_probe_child(QTestState *s); 1033 1034 /** 1035 * qtest_set_expected_status: 1036 * @s: QTestState instance to operate on. 1037 * @status: an expected exit status. 1038 * 1039 * Set expected exit status of the child. 1040 */ 1041 void qtest_set_expected_status(QTestState *s, int status); 1042 1043 QTestState *qtest_inproc_init(QTestState **s, bool log, const char* arch, 1044 void (*send)(void*, const char*)); 1045 1046 void qtest_client_inproc_recv(void *opaque, const char *str); 1047 1048 /** 1049 * qtest_qom_set_bool: 1050 * @s: QTestState instance to operate on. 1051 * @path: Path to the property being set. 1052 * @property: Property being set. 1053 * @value: Value to set the property. 1054 * 1055 * Set the property with passed in value. 1056 */ 1057 void qtest_qom_set_bool(QTestState *s, const char *path, const char *property, 1058 bool value); 1059 1060 /** 1061 * qtest_qom_get_bool: 1062 * @s: QTestState instance to operate on. 1063 * @path: Path to the property being retrieved. 1064 * @property: Property from where the value is being retrieved. 1065 * 1066 * Returns: Value retrieved from property. 1067 */ 1068 bool qtest_qom_get_bool(QTestState *s, const char *path, const char *property); 1069 1070 /** 1071 * qtest_pid: 1072 * @s: QTestState instance to operate on. 1073 * 1074 * Returns: the PID of the QEMU process, or <= 0 1075 */ 1076 pid_t qtest_pid(QTestState *s); 1077 1078 /** 1079 * have_qemu_img: 1080 * 1081 * Returns: true if "qemu-img" is available. 1082 */ 1083 bool have_qemu_img(void); 1084 1085 /** 1086 * mkimg: 1087 * @file: File name of the image that should be created 1088 * @fmt: Format, e.g. "qcow2" or "raw" 1089 * @size_mb: Size of the image in megabytes 1090 * 1091 * Create a disk image with qemu-img. Note that the QTEST_QEMU_IMG 1092 * environment variable must point to the qemu-img file. 1093 * 1094 * Returns: true if the image has been created successfully. 1095 */ 1096 bool mkimg(const char *file, const char *fmt, unsigned size_mb); 1097 1098 #endif 1099