Skip to content

Commit 11f3ff3

Browse files
XanClicroypat
authored andcommitted
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 <hreitz@redhat.com>
1 parent 3fd7249 commit 11f3ff3

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
@@ -901,6 +901,9 @@ impl<M: GuestMemory + ?Sized> IoMemory for M {
901901
#[cfg(test)]
902902
mod tests {
903903
#![allow(clippy::undocumented_unsafe_blocks)]
904+
905+
// Note that `IoMemory` is tested primarily in src/iommu.rs via `IommuMemory`.
906+
904907
use super::*;
905908
#[cfg(feature = "backend-mmap")]
906909
use crate::bytes::ByteValued;
@@ -1141,4 +1144,57 @@ mod tests {
11411144
let r = mem.find_region(addr).unwrap();
11421145
assert_eq!(r.is_hugetlbfs(), None);
11431146
}
1147+
1148+
/// Test `Permissions & Permissions`.
1149+
#[test]
1150+
fn test_perm_and() {
1151+
use Permissions::*;
1152+
1153+
for p in [No, Read, Write, ReadWrite] {
1154+
assert_eq!(p & p, p);
1155+
}
1156+
for p1 in [No, Read, Write, ReadWrite] {
1157+
for p2 in [No, Read, Write, ReadWrite] {
1158+
assert_eq!(p1 & p2, p2 & p1);
1159+
}
1160+
}
1161+
for p in [No, Read, Write, ReadWrite] {
1162+
assert_eq!(No & p, No);
1163+
}
1164+
for p in [No, Read, Write, ReadWrite] {
1165+
assert_eq!(ReadWrite & p, p);
1166+
}
1167+
assert_eq!(Read & Write, No);
1168+
}
1169+
1170+
/// Test `Permissions | Permissions`.
1171+
#[test]
1172+
fn test_perm_or() {
1173+
use Permissions::*;
1174+
1175+
for p in [No, Read, Write, ReadWrite] {
1176+
assert_eq!(p | p, p);
1177+
}
1178+
for p1 in [No, Read, Write, ReadWrite] {
1179+
for p2 in [No, Read, Write, ReadWrite] {
1180+
assert_eq!(p1 | p2, p2 | p1);
1181+
}
1182+
}
1183+
for p in [No, Read, Write, ReadWrite] {
1184+
assert_eq!(No | p, p);
1185+
}
1186+
for p in [No, Read, Write, ReadWrite] {
1187+
assert_eq!(ReadWrite | p, ReadWrite);
1188+
}
1189+
assert_eq!(Read | Write, ReadWrite);
1190+
}
1191+
1192+
/// Test `Permissions::has_write()`.
1193+
#[test]
1194+
fn test_perm_has_write() {
1195+
assert!(!Permissions::No.has_write());
1196+
assert!(!Permissions::Read.has_write());
1197+
assert!(Permissions::Write.has_write());
1198+
assert!(Permissions::ReadWrite.has_write());
1199+
}
11441200
}

0 commit comments

Comments
 (0)