Skip to content

Commit 657b6bc

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 196d6a1 commit 657b6bc

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
@@ -833,6 +833,34 @@ mod tests {
833833
assert_eq!(serial.writer().as_slice(), &RAW_INPUT_BUF);
834834
}
835835

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

0 commit comments

Comments
 (0)