Skip to content

Commit bc4e643

Browse files
committed
refactor(test): Use mock regions in atomic.rs tests
These tests only test properties of the GuestMemoryAtomic implementation that are independent of the actual M: GuestMemory being used. So simplify it to drop the dependency on backend-mmap. Signed-off-by: Patrick Roy <[email protected]>
1 parent 90247c1 commit bc4e643

File tree

2 files changed

+40
-36
lines changed

2 files changed

+40
-36
lines changed

src/atomic.rs

+34-30
Original file line numberDiff line numberDiff line change
@@ -140,14 +140,12 @@ impl<M: GuestMemory> GuestMemoryExclusiveGuard<'_, M> {
140140
}
141141

142142
#[cfg(test)]
143-
#[cfg(feature = "backend-mmap")]
144143
mod tests {
145144
use super::*;
146-
use crate::{GuestAddress, GuestMemory, GuestMemoryRegion, GuestUsize, MmapRegion};
145+
use crate::region::tests::{new_guest_memory_collection_from_regions, Collection, MockRegion};
146+
use crate::{GuestAddress, GuestMemory, GuestMemoryRegion, GuestUsize};
147147

148-
type GuestMemoryMmap = crate::GuestMemoryMmap<()>;
149-
type GuestRegionMmap = crate::GuestRegionMmap<()>;
150-
type GuestMemoryMmapAtomic = GuestMemoryAtomic<GuestMemoryMmap>;
148+
type GuestMemoryMmapAtomic = GuestMemoryAtomic<Collection>;
151149

152150
#[test]
153151
fn test_atomic_memory() {
@@ -157,7 +155,7 @@ mod tests {
157155
(GuestAddress(0x1000), region_size),
158156
];
159157
let mut iterated_regions = Vec::new();
160-
let gmm = GuestMemoryMmap::from_ranges(&regions).unwrap();
158+
let gmm = new_guest_memory_collection_from_regions(&regions).unwrap();
161159
let gm = GuestMemoryMmapAtomic::new(gmm);
162160
let mem = gm.memory();
163161

@@ -166,7 +164,7 @@ mod tests {
166164
}
167165

168166
for region in mem.iter() {
169-
iterated_regions.push((region.start_addr(), region.len() as usize));
167+
iterated_regions.push((region.start_addr(), region.len()));
170168
}
171169
assert_eq!(regions, iterated_regions);
172170
assert_eq!(mem.num_regions(), 2);
@@ -207,7 +205,7 @@ mod tests {
207205
(GuestAddress(0x0), region_size),
208206
(GuestAddress(0x1000), region_size),
209207
];
210-
let gmm = GuestMemoryMmap::from_ranges(&regions).unwrap();
208+
let gmm = new_guest_memory_collection_from_regions(&regions).unwrap();
211209
let gm = GuestMemoryMmapAtomic::new(gmm);
212210
let mem = {
213211
let guard1 = gm.memory();
@@ -219,38 +217,44 @@ mod tests {
219217
#[test]
220218
fn test_atomic_hotplug() {
221219
let region_size = 0x1000;
222-
let regions = vec![
220+
let regions = [
223221
(GuestAddress(0x0), region_size),
224222
(GuestAddress(0x10_0000), region_size),
225223
];
226-
let mut gmm = Arc::new(GuestMemoryMmap::from_ranges(&regions).unwrap());
224+
let mut gmm = Arc::new(new_guest_memory_collection_from_regions(&regions).unwrap());
227225
let gm: GuestMemoryAtomic<_> = gmm.clone().into();
228226
let mem_orig = gm.memory();
229227
assert_eq!(mem_orig.num_regions(), 2);
230228

231229
{
232230
let guard = gm.lock().unwrap();
233231
let new_gmm = Arc::make_mut(&mut gmm);
234-
let mmap = Arc::new(
235-
GuestRegionMmap::new(MmapRegion::new(0x1000).unwrap(), GuestAddress(0x8000))
236-
.unwrap(),
237-
);
238-
let new_gmm = new_gmm.insert_region(mmap).unwrap();
239-
let mmap = Arc::new(
240-
GuestRegionMmap::new(MmapRegion::new(0x1000).unwrap(), GuestAddress(0x4000))
241-
.unwrap(),
242-
);
243-
let new_gmm = new_gmm.insert_region(mmap).unwrap();
244-
let mmap = Arc::new(
245-
GuestRegionMmap::new(MmapRegion::new(0x1000).unwrap(), GuestAddress(0xc000))
246-
.unwrap(),
247-
);
248-
let new_gmm = new_gmm.insert_region(mmap).unwrap();
249-
let mmap = Arc::new(
250-
GuestRegionMmap::new(MmapRegion::new(0x1000).unwrap(), GuestAddress(0xc000))
251-
.unwrap(),
252-
);
253-
new_gmm.insert_region(mmap).unwrap_err();
232+
let new_gmm = new_gmm
233+
.insert_region(Arc::new(MockRegion {
234+
start: GuestAddress(0x8000),
235+
len: 0x1000,
236+
}))
237+
.unwrap();
238+
let new_gmm = new_gmm
239+
.insert_region(Arc::new(MockRegion {
240+
start: GuestAddress(0x4000),
241+
len: 0x1000,
242+
}))
243+
.unwrap();
244+
let new_gmm = new_gmm
245+
.insert_region(Arc::new(MockRegion {
246+
start: GuestAddress(0xc000),
247+
len: 0x1000,
248+
}))
249+
.unwrap();
250+
251+
new_gmm
252+
.insert_region(Arc::new(MockRegion {
253+
start: GuestAddress(0x8000),
254+
len: 0x1000,
255+
}))
256+
.unwrap_err();
257+
254258
guard.replace(new_gmm);
255259
}
256260

src/region.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -451,17 +451,17 @@ impl<R: GuestMemoryRegionBytes> Bytes<MemoryRegionAddress> for R {
451451
}
452452

453453
#[cfg(test)]
454-
mod tests {
454+
pub(crate) mod tests {
455455
use crate::region::{GuestMemoryRegionBytes, GuestRegionError};
456456
use crate::{
457457
Address, GuestAddress, GuestMemory, GuestMemoryRegion, GuestRegionCollection, GuestUsize,
458458
};
459459
use std::sync::Arc;
460460

461461
#[derive(Debug, PartialEq, Eq)]
462-
struct MockRegion {
463-
start: GuestAddress,
464-
len: GuestUsize,
462+
pub(crate) struct MockRegion {
463+
pub(crate) start: GuestAddress,
464+
pub(crate) len: GuestUsize,
465465
}
466466

467467
impl GuestMemoryRegion for MockRegion {
@@ -482,7 +482,7 @@ mod tests {
482482

483483
impl GuestMemoryRegionBytes for MockRegion {}
484484

485-
type Collection = GuestRegionCollection<MockRegion>;
485+
pub(crate) type Collection = GuestRegionCollection<MockRegion>;
486486

487487
fn check_guest_memory_mmap(
488488
maybe_guest_mem: Result<Collection, GuestRegionError>,
@@ -510,7 +510,7 @@ mod tests {
510510
}
511511
}
512512

513-
fn new_guest_memory_collection_from_regions(
513+
pub(crate) fn new_guest_memory_collection_from_regions(
514514
regions_summary: &[(GuestAddress, u64)],
515515
) -> Result<Collection, GuestRegionError> {
516516
Collection::from_regions(

0 commit comments

Comments
 (0)