Skip to content

Commit 533e12c

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 1fbf319 commit 533e12c

File tree

5 files changed

+940
-3
lines changed

5 files changed

+940
-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": 90.82,
2+
"coverage_score": 91.52,
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/guest_memory.rs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -897,6 +897,9 @@ impl<M: GuestMemory + ?Sized> IoMemory for M {
897897
#[cfg(test)]
898898
mod tests {
899899
#![allow(clippy::undocumented_unsafe_blocks)]
900+
901+
// Note that `IoMemory` is tested primarily in src/iommu.rs via `IommuMemory`.
902+
900903
use super::*;
901904
#[cfg(feature = "backend-mmap")]
902905
use crate::bytes::ByteValued;
@@ -1137,4 +1140,57 @@ mod tests {
11371140
let r = mem.find_region(addr).unwrap();
11381141
assert_eq!(r.is_hugetlbfs(), None);
11391142
}
1143+
1144+
/// Test `Permissions & Permissions`.
1145+
#[test]
1146+
fn test_perm_and() {
1147+
use Permissions::*;
1148+
1149+
for p in [No, Read, Write, ReadWrite] {
1150+
assert_eq!(p & p, p);
1151+
}
1152+
for p1 in [No, Read, Write, ReadWrite] {
1153+
for p2 in [No, Read, Write, ReadWrite] {
1154+
assert_eq!(p1 & p2, p2 & p1);
1155+
}
1156+
}
1157+
for p in [No, Read, Write, ReadWrite] {
1158+
assert_eq!(No & p, No);
1159+
}
1160+
for p in [No, Read, Write, ReadWrite] {
1161+
assert_eq!(ReadWrite & p, p);
1162+
}
1163+
assert_eq!(Read & Write, No);
1164+
}
1165+
1166+
/// Test `Permissions | Permissions`.
1167+
#[test]
1168+
fn test_perm_or() {
1169+
use Permissions::*;
1170+
1171+
for p in [No, Read, Write, ReadWrite] {
1172+
assert_eq!(p | p, p);
1173+
}
1174+
for p1 in [No, Read, Write, ReadWrite] {
1175+
for p2 in [No, Read, Write, ReadWrite] {
1176+
assert_eq!(p1 | p2, p2 | p1);
1177+
}
1178+
}
1179+
for p in [No, Read, Write, ReadWrite] {
1180+
assert_eq!(No | p, p);
1181+
}
1182+
for p in [No, Read, Write, ReadWrite] {
1183+
assert_eq!(ReadWrite | p, ReadWrite);
1184+
}
1185+
assert_eq!(Read | Write, ReadWrite);
1186+
}
1187+
1188+
/// Test `Permissions::has_write()`.
1189+
#[test]
1190+
fn test_perm_has_write() {
1191+
assert!(!Permissions::No.has_write());
1192+
assert!(!Permissions::Read.has_write());
1193+
assert!(Permissions::Write.has_write());
1194+
assert!(Permissions::ReadWrite.has_write());
1195+
}
11401196
}

0 commit comments

Comments
 (0)