Skip to content

Commit f11ec80

Browse files
committed
Add tests for IOMMU functionality
This commit also adds the iommu feature to the coverage_config feature list. (I left the aarch64 coverage value unchanged; I cannot find out how to get the current value on my system, and it isn’t include in CI.) Signed-off-by: Hanna Czenczek <[email protected]>
1 parent ce6388c commit f11ec80

File tree

5 files changed

+976
-3
lines changed

5 files changed

+976
-3
lines changed

coverage_config_aarch64.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"coverage_score": 85.2,
33
"exclude_path": "mmap/windows.rs",
4-
"crate_features": "backend-mmap,backend-atomic,backend-bitmap"
4+
"crate_features": "backend-mmap,backend-atomic,backend-bitmap,iommu"
55
}

coverage_config_x86_64.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"coverage_score": 91.78,
2+
"coverage_score": 92.48,
33
"exclude_path": "mmap_windows.rs",
4-
"crate_features": "backend-mmap,backend-atomic,backend-bitmap"
4+
"crate_features": "backend-mmap,backend-atomic,backend-bitmap,iommu"
55
}

src/io_memory.rs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,3 +216,63 @@ impl<M: GuestMemory + ?Sized> IoMemory for M {
216216
Some(self)
217217
}
218218
}
219+
220+
#[cfg(test)]
221+
mod tests {
222+
use super::Permissions;
223+
224+
// Note that `IoMemory` is tested primarily in src/iommu.rs via `IommuMemory`.
225+
226+
/// Test `Permissions & Permissions`.
227+
#[test]
228+
fn test_perm_and() {
229+
use Permissions::*;
230+
231+
for p in [No, Read, Write, ReadWrite] {
232+
assert_eq!(p & p, p);
233+
}
234+
for p1 in [No, Read, Write, ReadWrite] {
235+
for p2 in [No, Read, Write, ReadWrite] {
236+
assert_eq!(p1 & p2, p2 & p1);
237+
}
238+
}
239+
for p in [No, Read, Write, ReadWrite] {
240+
assert_eq!(No & p, No);
241+
}
242+
for p in [No, Read, Write, ReadWrite] {
243+
assert_eq!(ReadWrite & p, p);
244+
}
245+
assert_eq!(Read & Write, No);
246+
}
247+
248+
/// Test `Permissions | Permissions`.
249+
#[test]
250+
fn test_perm_or() {
251+
use Permissions::*;
252+
253+
for p in [No, Read, Write, ReadWrite] {
254+
assert_eq!(p | p, p);
255+
}
256+
for p1 in [No, Read, Write, ReadWrite] {
257+
for p2 in [No, Read, Write, ReadWrite] {
258+
assert_eq!(p1 | p2, p2 | p1);
259+
}
260+
}
261+
for p in [No, Read, Write, ReadWrite] {
262+
assert_eq!(No | p, p);
263+
}
264+
for p in [No, Read, Write, ReadWrite] {
265+
assert_eq!(ReadWrite | p, ReadWrite);
266+
}
267+
assert_eq!(Read | Write, ReadWrite);
268+
}
269+
270+
/// Test `Permissions::has_write()`.
271+
#[test]
272+
fn test_perm_has_write() {
273+
assert!(!Permissions::No.has_write());
274+
assert!(!Permissions::Read.has_write());
275+
assert!(Permissions::Write.has_write());
276+
assert!(Permissions::ReadWrite.has_write());
277+
}
278+
}

0 commit comments

Comments
 (0)