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