xref: /qemu/rust/qemu-api/tests/tests.rs (revision 716d89f9cc14faf784d83c945c40b7e8256ae525)
1 // Copyright 2024, Linaro Limited
2 // Author(s): Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
3 // SPDX-License-Identifier: GPL-2.0-or-later
4 
5 use std::ffi::CStr;
6 
7 use qemu_api::{
8     bindings::*,
9     c_str, declare_properties, define_property,
10     prelude::*,
11     qdev::{DeviceImpl, DeviceState, Property},
12     qom::ObjectImpl,
13     vmstate::VMStateDescription,
14     zeroable::Zeroable,
15 };
16 
17 #[test]
18 fn test_device_decl_macros() {
19     // Test that macros can compile.
20     pub static VMSTATE: VMStateDescription = VMStateDescription {
21         name: c_str!("name").as_ptr(),
22         unmigratable: true,
23         ..Zeroable::ZERO
24     };
25 
26     #[derive(qemu_api_macros::offsets)]
27     #[repr(C)]
28     #[derive(qemu_api_macros::Object)]
29     pub struct DummyState {
30         pub _parent: DeviceState,
31         pub migrate_clock: bool,
32     }
33 
34     declare_properties! {
35         DUMMY_PROPERTIES,
36             define_property!(
37                 c_str!("migrate-clk"),
38                 DummyState,
39                 migrate_clock,
40                 unsafe { &qdev_prop_bool },
41                 bool
42             ),
43     }
44 
45     unsafe impl ObjectType for DummyState {
46         type Class = <DeviceState as ObjectType>::Class;
47         const TYPE_NAME: &'static CStr = c_str!("dummy");
48     }
49 
50     impl ObjectImpl for DummyState {
51         type ParentType = DeviceState;
52         const ABSTRACT: bool = false;
53     }
54 
55     impl DeviceImpl for DummyState {
56         fn properties() -> &'static [Property] {
57             &DUMMY_PROPERTIES
58         }
59         fn vmsd() -> Option<&'static VMStateDescription> {
60             Some(&VMSTATE)
61         }
62     }
63 
64     unsafe {
65         module_call_init(module_init_type::MODULE_INIT_QOM);
66         object_unref(object_new(DummyState::TYPE_NAME.as_ptr()).cast());
67     }
68 }
69