Skip to content
This repository was archived by the owner on Nov 6, 2024. It is now read-only.

Commit d45810f

Browse files
likebreathroypat
authored andcommitted
Test manual (De)Serialize implementations with serde_json
The 'serde_json' crate has been commonly used to (de)serialize Rust data structures in the format of JSON, such as Cloud Hyervisor uses this crate for its live migration support. This patch adds a set of unit tests to ensure our manual (De)Serialize implementations works with the 'serde_json' crate. Signed-off-by: Bo Chen <chen.bo@intel.com>
1 parent 191b059 commit d45810f

File tree

3 files changed

+50
-0
lines changed

3 files changed

+50
-0
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,4 @@ zerocopy = { version = "0.7.32", optional = true, features = ["derive"] }
2626

2727
[dev-dependencies]
2828
bincode = "1.3.3"
29+
serde_json = "1.0.125"

src/arm64/serialize.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,23 @@ mod tests {
5757
is_serde::<kvm_mp_state>();
5858
is_serde::<kvm_one_reg>();
5959
}
60+
61+
fn is_serde_json<T: Serialize + for<'de> Deserialize<'de> + Default>() {
62+
let serialized = serde_json::to_string(&T::default()).unwrap();
63+
let deserialized = serde_json::from_str::<T>(serialized.as_ref()).unwrap();
64+
let serialized_again = serde_json::to_string(&deserialized).unwrap();
65+
// Compare the serialized state after a roundtrip, to work around issues with
66+
// bindings not implementing `PartialEq`.
67+
assert_eq!(serialized, serialized_again);
68+
}
69+
70+
#[test]
71+
fn test_json_serde() {
72+
is_serde_json::<user_pt_regs>();
73+
is_serde_json::<user_fpsimd_state>();
74+
is_serde_json::<kvm_regs>();
75+
is_serde_json::<kvm_vcpu_init>();
76+
is_serde_json::<kvm_mp_state>();
77+
is_serde_json::<kvm_one_reg>();
78+
}
6079
}

src/x86_64/serialize.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,4 +123,34 @@ mod tests {
123123
is_serde::<kvm_irqchip>();
124124
is_serde::<kvm_mp_state>();
125125
}
126+
127+
fn is_serde_json<T: Serialize + for<'de> Deserialize<'de> + Default>() {
128+
let serialized = serde_json::to_string(&T::default()).unwrap();
129+
let deserialized = serde_json::from_str::<T>(serialized.as_ref()).unwrap();
130+
let serialized_again = serde_json::to_string(&deserialized).unwrap();
131+
// Compare the serialized state after a roundtrip, to work around issues with
132+
// bindings not implementing `PartialEq`.
133+
assert_eq!(serialized, serialized_again);
134+
}
135+
136+
#[test]
137+
fn test_json_serde() {
138+
is_serde_json::<kvm_clock_data>();
139+
is_serde_json::<kvm_regs>();
140+
is_serde_json::<kvm_segment>();
141+
is_serde_json::<kvm_dtable>();
142+
is_serde_json::<kvm_sregs>();
143+
is_serde_json::<kvm_msr_entry>();
144+
is_serde_json::<kvm_msrs>();
145+
is_serde_json::<kvm_cpuid_entry2>();
146+
is_serde_json::<kvm_cpuid2>();
147+
is_serde_json::<kvm_pit_channel_state>();
148+
is_serde_json::<kvm_pit_state2>();
149+
is_serde_json::<kvm_vcpu_events>();
150+
is_serde_json::<kvm_debugregs>();
151+
is_serde_json::<kvm_xcr>();
152+
is_serde_json::<kvm_xcrs>();
153+
is_serde_json::<kvm_irqchip>();
154+
is_serde_json::<kvm_mp_state>();
155+
}
126156
}

0 commit comments

Comments
 (0)