Skip to content

Commit abdddd8

Browse files
queue: extend getters/setters unit tests
Add tests for the setters and getters in queue.rs and queue_sync.rs. Add an implementation for testing for PartialEq of Queue errors. Signed-off-by: Andreea Florescu <[email protected]>
1 parent ceef74b commit abdddd8

File tree

4 files changed

+46
-3
lines changed

4 files changed

+46
-3
lines changed

coverage_config_x86_64.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"coverage_score": 87.2,
2+
"coverage_score": 88.5,
33
"exclude_path": "crates/virtio-bindings,crates/virtio-queue/src/mock.rs",
44
"crate_features": "virtio-blk/backend-stdio"
55
}

crates/virtio-queue-ser/src/state.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,6 @@ mod tests {
140140

141141
let queue_state = QueueState::from(&queue_ser);
142142
let err = Queue::try_from(queue_state).unwrap_err();
143-
assert_eq!(err.to_string(), Error::InvalidSize.to_string());
143+
assert_eq!(err, Error::InvalidSize);
144144
}
145145
}

crates/virtio-queue/src/queue.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -773,6 +773,15 @@ where
773773
}
774774
}
775775

776+
#[cfg(any(test, feature = "test-utils"))]
777+
// It is convenient for tests to implement `PartialEq`, but it is not a
778+
// proper implementation as `GuestMemory` errors cannot implement `PartialEq`.
779+
impl PartialEq for Error {
780+
fn eq(&self, other: &Self) -> bool {
781+
format!("{}", &self) == format!("{}", other)
782+
}
783+
}
784+
776785
#[cfg(test)]
777786
mod tests {
778787
use super::*;
@@ -1408,4 +1417,35 @@ mod tests {
14081417

14091418
assert!(q.pop_descriptor_chain(m).is_none());
14101419
}
1420+
1421+
#[test]
1422+
fn test_setters_error_cases() {
1423+
assert_eq!(Queue::new(15).unwrap_err(), Error::InvalidMaxSize);
1424+
let mut q = Queue::new(16).unwrap();
1425+
1426+
let expected_val = q.desc_table.0;
1427+
assert_eq!(
1428+
q.try_set_desc_table_address(GuestAddress(0xf)).unwrap_err(),
1429+
Error::InvalidDescTableAlign
1430+
);
1431+
assert_eq!(q.desc_table(), expected_val);
1432+
1433+
let expected_val = q.avail_ring.0;
1434+
assert_eq!(
1435+
q.try_set_avail_ring_address(GuestAddress(0x1)).unwrap_err(),
1436+
Error::InvalidAvailRingAlign
1437+
);
1438+
assert_eq!(q.avail_ring(), expected_val);
1439+
1440+
let expected_val = q.used_ring.0;
1441+
assert_eq!(
1442+
q.try_set_used_ring_address(GuestAddress(0x3)).unwrap_err(),
1443+
Error::InvalidUsedRingAlign
1444+
);
1445+
assert_eq!(q.used_ring(), expected_val);
1446+
1447+
let expected_val = q.size;
1448+
assert_eq!(q.try_set_size(15).unwrap_err(), Error::InvalidSize);
1449+
assert_eq!(q.size(), expected_val)
1450+
}
14111451
}

crates/virtio-queue/src/queue_sync.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,14 +316,17 @@ mod tests {
316316
let mut q = QueueSync::new(0x100).unwrap();
317317

318318
q.set_desc_table_address(Some(0x1000), None);
319+
assert_eq!(q.desc_table(), 0x1000);
319320
q.set_avail_ring_address(Some(0x2000), None);
321+
assert_eq!(q.avail_ring(), 0x2000);
320322
q.set_used_ring_address(Some(0x3000), None);
323+
assert_eq!(q.used_ring(), 0x3000);
321324
q.set_ready(true);
322325
assert!(q.is_valid(mem));
323326

324327
let used_addr = GuestAddress(q.lock_state().used_ring());
325328

326-
assert!(!q.lock_state().event_idx_enabled());
329+
assert!(!q.event_idx_enabled());
327330
q.enable_notification(mem).unwrap();
328331
let v = m.read_obj::<u16>(used_addr).map(u16::from_le).unwrap();
329332
assert_eq!(v, 0);

0 commit comments

Comments
 (0)