Skip to content

Commit 6f7a9dc

Browse files
committed
mock: add a generic version of create_queue
This will allow to reuse the same tests for QueueState and QueueStateSync. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
1 parent 74bb164 commit 6f7a9dc

File tree

3 files changed

+25
-16
lines changed

3 files changed

+25
-16
lines changed

crates/devices/virtio-blk/src/request.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ mod tests {
256256

257257
use virtio_queue::defs::{VIRTQ_DESC_F_NEXT, VIRTQ_DESC_F_WRITE};
258258
use virtio_queue::mock::MockSplitQueue;
259+
use virtio_queue::{Queue, QueueState};
259260

260261
impl PartialEq for Error {
261262
fn eq(&self, other: &Self) -> bool {
@@ -330,7 +331,8 @@ mod tests {
330331
mem.write_obj(1u16, vq.avail_addr().unchecked_add(2))
331332
.unwrap();
332333

333-
vq.create_queue(mem)
334+
let mut q: Queue<_, QueueState> = vq.as_queue(mem);
335+
q
334336
.iter()
335337
.unwrap()
336338
.next()

crates/virtio-queue/src/lib.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1313,7 +1313,7 @@ mod tests {
13131313
let m = &GuestMemoryMmap::<()>::from_ranges(&[(GuestAddress(0), 0x10000)]).unwrap();
13141314
let vq = MockSplitQueue::new(m, 16);
13151315

1316-
let mut q = vq.create_queue(m);
1316+
let mut q: Queue<_, QueueState> = vq.as_queue(m);
13171317

13181318
// q is currently valid
13191319
assert!(q.is_valid());
@@ -1425,7 +1425,7 @@ mod tests {
14251425
let m = &GuestMemoryMmap::<()>::from_ranges(&[(GuestAddress(0), 0x10000)]).unwrap();
14261426
let vq = MockSplitQueue::new(m, 16);
14271427

1428-
let mut q = vq.create_queue(m);
1428+
let mut q: Queue<_, QueueState> = vq.as_queue(m);
14291429

14301430
// q is currently valid
14311431
assert!(q.is_valid());
@@ -1487,7 +1487,7 @@ mod tests {
14871487
let m = &GuestMemoryMmap::<()>::from_ranges(&[(GuestAddress(0), 0x10000)]).unwrap();
14881488
let vq = MockSplitQueue::new(m, 16);
14891489

1490-
let mut q = vq.create_queue(m);
1490+
let mut q: Queue<_, QueueState> = vq.as_queue(m);
14911491

14921492
assert_eq!(vq.used().idx().load(), 0);
14931493

@@ -1510,7 +1510,7 @@ mod tests {
15101510
let m = &GuestMemoryMmap::<()>::from_ranges(&[(GuestAddress(0), 0x10000)]).unwrap();
15111511
let vq = MockSplitQueue::new(m, 16);
15121512

1513-
let mut q = vq.create_queue(m);
1513+
let mut q: Queue<_, QueueState> = vq.as_queue(m);
15141514
q.state.size = 8;
15151515
q.state.ready = true;
15161516
q.state.reset();
@@ -1524,7 +1524,7 @@ mod tests {
15241524
let qsize = 16;
15251525
let vq = MockSplitQueue::new(m, qsize);
15261526

1527-
let mut q = vq.create_queue(m);
1527+
let mut q: Queue<_, QueueState> = vq.as_queue(m);
15281528
let avail_addr = vq.avail_addr();
15291529

15301530
// It should always return true when EVENT_IDX isn't enabled.
@@ -1569,7 +1569,7 @@ mod tests {
15691569
let m = &GuestMemoryMmap::<()>::from_ranges(&[(GuestAddress(0), 0x10000)]).unwrap();
15701570
let vq = MockSplitQueue::new(m, 16);
15711571

1572-
let mut q = vq.create_queue(m);
1572+
let mut q: Queue<_, QueueState> = vq.as_queue(m);
15731573
let used_addr = vq.used_addr();
15741574

15751575
assert_eq!(q.state.event_idx_enabled, false);

crates/virtio-queue/src/mock.rs

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use vm_memory::{
1212
};
1313

1414
use crate::defs::{VIRTQ_DESC_F_INDIRECT, VIRTQ_DESC_F_NEXT};
15-
use crate::{Descriptor, Queue, QueueState};
15+
use crate::{Descriptor, Queue, QueueState, QueueStateT};
1616

1717
/// Wrapper struct used for accesing a particular address of a GuestMemory area.
1818
pub struct Ref<'a, M, T> {
@@ -364,16 +364,23 @@ impl<'a, M: GuestMemory> MockSplitQueue<'a, M> {
364364
self.update_avail_idx(head_idx);
365365
}
366366

367+
/// Return a QueueStateT implementation for this queue.
368+
pub fn as_queue<A: GuestAddressSpace, T: QueueStateT>(&self, a: A) -> Queue<A, T> {
369+
let mut q = Queue::<A, T>::new(a, self.len);
370+
{
371+
let mut inner = q.state.lock();
372+
inner.size = self.len;
373+
inner.ready = true;
374+
inner.desc_table = self.desc_table_addr;
375+
inner.avail_ring = self.avail_addr;
376+
inner.used_ring = self.used_addr;
377+
}
378+
q
379+
}
380+
367381
/// Creates a new `Queue`, using the underlying memory regions represented
368382
/// by the `MockSplitQueue`.
369383
pub fn create_queue<A: GuestAddressSpace>(&self, a: A) -> Queue<A, QueueState> {
370-
let mut q = Queue::<A, QueueState>::new(a, self.len);
371-
372-
q.state.size = self.len;
373-
q.state.ready = true;
374-
q.state.desc_table = self.desc_table_addr;
375-
q.state.avail_ring = self.avail_addr;
376-
q.state.used_ring = self.used_addr;
377-
q
384+
self.as_queue(a)
378385
}
379386
}

0 commit comments

Comments
 (0)