Skip to content

Commit 2e6768d

Browse files
committed
serial: add a test for receive FIFO flushing
Add a test that checks that flushing the receive FIFO results in the correct behavior, i.e. `in_buffer` is cleared. Signed-off-by: Carlos López <[email protected]>
1 parent a1a9b1d commit 2e6768d

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

vm-superio/src/serial.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -834,6 +834,34 @@ mod tests {
834834
assert_eq!(serial.writer().as_slice(), &RAW_INPUT_BUF);
835835
}
836836

837+
#[test]
838+
fn test_serial_rx_flush() {
839+
let intr_evt = EventFd::new(libc::EFD_NONBLOCK).unwrap();
840+
let mut serial = Serial::with_events(intr_evt, ExampleSerialEvents::new(), Vec::new());
841+
842+
// No data yet
843+
let mut lsr = serial.read(LSR_OFFSET);
844+
assert_eq!(lsr & LSR_DATA_READY_BIT, 0);
845+
assert_eq!(serial.fifo_capacity(), FIFO_SIZE);
846+
847+
// Write some bytes and check data is ready
848+
serial.enqueue_raw_bytes(&RAW_INPUT_BUF).unwrap();
849+
lsr = serial.read(LSR_OFFSET);
850+
assert_eq!(lsr & LSR_DATA_READY_BIT, 1);
851+
assert!(serial.fifo_capacity() != FIFO_SIZE);
852+
853+
// Flush the FIFO
854+
serial.write(FCR_OFFSET, FCR_FLUSH_IN_BIT).unwrap();
855+
856+
// No data again
857+
lsr = serial.read(LSR_OFFSET);
858+
assert_eq!(lsr & LSR_DATA_READY_BIT, 0);
859+
assert_eq!(serial.fifo_capacity(), FIFO_SIZE);
860+
861+
// An event should have triggered
862+
assert_eq!(serial.events.buffer_ready_event.read().unwrap(), 1);
863+
}
864+
837865
#[test]
838866
fn test_serial_raw_input() {
839867
let intr_evt = EventFd::new(libc::EFD_NONBLOCK).unwrap();

0 commit comments

Comments
 (0)