[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 21/26] rust: tests: allow writing more than one test
From: |
Paolo Bonzini |
Subject: |
[PATCH 21/26] rust: tests: allow writing more than one test |
Date: |
Mon, 9 Dec 2024 13:37:12 +0100 |
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
rust/qemu-api/tests/tests.rs | 109 ++++++++++++++++++++---------------
1 file changed, 61 insertions(+), 48 deletions(-)
diff --git a/rust/qemu-api/tests/tests.rs b/rust/qemu-api/tests/tests.rs
index 68557fb85c7..18738a80008 100644
--- a/rust/qemu-api/tests/tests.rs
+++ b/rust/qemu-api/tests/tests.rs
@@ -2,7 +2,7 @@
// Author(s): Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
// SPDX-License-Identifier: GPL-2.0-or-later
-use std::ffi::CStr;
+use std::{cell::Cell, ffi::CStr, sync::Mutex};
use qemu_api::{
bindings::*,
@@ -14,55 +14,68 @@
zeroable::Zeroable,
};
+// Test that macros can compile.
+pub static VMSTATE: VMStateDescription = VMStateDescription {
+ name: c_str!("name").as_ptr(),
+ unmigratable: true,
+ ..Zeroable::ZERO
+};
+
+#[derive(qemu_api_macros::offsets)]
+#[repr(C)]
+#[derive(qemu_api_macros::Object)]
+pub struct DummyState {
+ parent: DeviceState,
+ migrate_clock: bool,
+}
+
+declare_properties! {
+ DUMMY_PROPERTIES,
+ define_property!(
+ c_str!("migrate-clk"),
+ DummyState,
+ migrate_clock,
+ unsafe { &qdev_prop_bool },
+ bool
+ ),
+}
+
+unsafe impl ObjectType for DummyState {
+ type Class = <DeviceState as ObjectType>::Class;
+ const TYPE_NAME: &'static CStr = c_str!("dummy");
+}
+
+impl ObjectImpl for DummyState {
+ type ParentType = DeviceState;
+ const ABSTRACT: bool = false;
+}
+
+impl DeviceImpl for DummyState {
+ fn properties() -> &'static [Property] {
+ &DUMMY_PROPERTIES
+ }
+ fn vmsd() -> Option<&'static VMStateDescription> {
+ Some(&VMSTATE)
+ }
+}
+
+fn init_qom() {
+ static ONCE: Mutex<Cell<bool>> = Mutex::new(Cell::new(false));
+
+ let g = ONCE.lock().unwrap();
+ if !g.get() {
+ unsafe {
+ module_call_init(module_init_type::MODULE_INIT_QOM);
+ }
+ g.set(true);
+ }
+}
+
#[test]
-fn test_device_decl_macros() {
- // Test that macros can compile.
- pub static VMSTATE: VMStateDescription = VMStateDescription {
- name: c_str!("name").as_ptr(),
- unmigratable: true,
- ..Zeroable::ZERO
- };
-
- #[derive(qemu_api_macros::offsets)]
- #[repr(C)]
- #[derive(qemu_api_macros::Object)]
- pub struct DummyState {
- pub _parent: DeviceState,
- pub migrate_clock: bool,
- }
-
- declare_properties! {
- DUMMY_PROPERTIES,
- define_property!(
- c_str!("migrate-clk"),
- DummyState,
- migrate_clock,
- unsafe { &qdev_prop_bool },
- bool
- ),
- }
-
- unsafe impl ObjectType for DummyState {
- type Class = <DeviceState as ObjectType>::Class;
- const TYPE_NAME: &'static CStr = c_str!("dummy");
- }
-
- impl ObjectImpl for DummyState {
- type ParentType = DeviceState;
- const ABSTRACT: bool = false;
- }
-
- impl DeviceImpl for DummyState {
- fn properties() -> &'static [Property] {
- &DUMMY_PROPERTIES
- }
- fn vmsd() -> Option<&'static VMStateDescription> {
- Some(&VMSTATE)
- }
- }
-
+/// Create and immediately drop an instance.
+fn test_object_new() {
+ init_qom();
unsafe {
- module_call_init(module_init_type::MODULE_INIT_QOM);
object_unref(object_new(DummyState::TYPE_NAME.as_ptr()).cast());
}
}
--
2.47.1
- Re: [PATCH 24/26] rust: qom: move device_id to PL011 class side, (continued)
[PATCH 23/26] rust: qom: add initial subset of methods on Object, Paolo Bonzini, 2024/12/09
[PATCH 21/26] rust: tests: allow writing more than one test,
Paolo Bonzini <=
[PATCH 12/26] rust: qdev: move bridge for realize and reset functions out of pl011, Paolo Bonzini, 2024/12/09
[PATCH 18/26] rust: qom: add possibility of overriding unparent, Paolo Bonzini, 2024/12/09
[PATCH 25/26] rust: qemu-api: add a module to wrap functions and zero-sized closures, Paolo Bonzini, 2024/12/09
[PATCH 19/26] rust: rename qemu-api modules to follow C code a bit more, Paolo Bonzini, 2024/12/09