Skip to content

Commit 85c74e1

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 63744fd commit 85c74e1

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

vm-superio/src/serial.rs

+28
Original file line numberDiff line numberDiff line change
@@ -820,6 +820,34 @@ mod tests {
820820
assert_eq!(serial.writer().as_slice(), &RAW_INPUT_BUF);
821821
}
822822

823+
#[test]
824+
fn test_serial_rx_flush() {
825+
let intr_evt = EventFd::new(libc::EFD_NONBLOCK).unwrap();
826+
let mut serial = Serial::with_events(intr_evt, ExampleSerialEvents::new(), Vec::new());
827+
828+
// No data yet
829+
let mut lsr = serial.read(LSR_OFFSET);
830+
assert_eq!(lsr & LSR_DATA_READY_BIT, 0);
831+
assert_eq!(serial.fifo_capacity(), FIFO_SIZE);
832+
833+
// Write some bytes and check data is ready
834+
serial.enqueue_raw_bytes(&RAW_INPUT_BUF).unwrap();
835+
lsr = serial.read(LSR_OFFSET);
836+
assert_eq!(lsr & LSR_DATA_READY_BIT, 1);
837+
assert!(serial.fifo_capacity() != FIFO_SIZE);
838+
839+
// Flush the FIFO
840+
serial.write(FCR_OFFSET, FCR_FLUSH_IN_BIT).unwrap();
841+
842+
// No data again
843+
lsr = serial.read(LSR_OFFSET);
844+
assert_eq!(lsr & LSR_DATA_READY_BIT, 0);
845+
assert_eq!(serial.fifo_capacity(), FIFO_SIZE);
846+
847+
// An event should have triggered
848+
assert_eq!(serial.events.buffer_ready_event.read().unwrap(), 1);
849+
}
850+
823851
#[test]
824852
fn test_serial_raw_input() {
825853
let intr_evt = EventFd::new(libc::EFD_NONBLOCK).unwrap();

0 commit comments

Comments
 (0)