X-Git-Url: http://git.code-monkey.de/?p=gps-watch.git;a=blobdiff_plain;f=test%2Flogger_test.rs;h=b11005568bdb95dacfc6327d870ac67a79aeaaa4;hp=bbf8dd56b2254448275e030b613b5d49b932a86d;hb=241e581359f381c5aaa18cefa3dbcb7d46241267;hpb=0b173b3db802df409ba83143f9fa246252ecb63d diff --git a/test/logger_test.rs b/test/logger_test.rs index bbf8dd5..b110055 100644 --- a/test/logger_test.rs +++ b/test/logger_test.rs @@ -430,3 +430,55 @@ fn list_recordings1() { assert_eq!(String::from_utf8(expected_bytes.to_vec()).unwrap(), String::from_utf8(listing_raw[0..num_bytes_read].to_vec()).unwrap()); } + +// Verifies that Logger::list_recordings() handles sectors holding +// additional recording data. +#[test] +fn list_recording1_multi_sector() { + let pipe = Pipe::new(); + + let mut file = unsafe { std::fs::File::from_raw_fd(pipe.write_fd()) }; + + let mut ls_buffer_space = [0u8; 4096]; + let mut ls_buffer = Buffer::alloc(); + + let user_data = (&mut file as *mut std::fs::File) as *mut BufferUserData; + + ls_buffer.init(ls_buffer_space.as_mut_ptr(), + ls_buffer_space.len(), + flush_write_buffer, + user_data); + + let mut fake_storage = FakeStorage::new(); + + // The first sector starts recording 1. + let header0 = [ + // Header: + 0x01, 0x00, 0x01, 0x00, + 0x75, 0x18, 0x17, 0x5e, + ]; + + // The second sector has additional data for recording 1. + let header1 = [ + 0x03, 0x00, 0x01, 0x00, + ]; + + fake_storage.actual[0..header0.len()].copy_from_slice(&header0); + fake_storage.actual[4096..4096 + header1.len()].copy_from_slice(&header1); + + let mut logger = Logger::new(&mut fake_storage); + logger.init(); + + logger.list_recordings(&mut ls_buffer); + + let mut file = unsafe { std::fs::File::from_raw_fd(pipe.read_fd()) }; + + let mut listing_raw = [0u8; 4096]; + let num_bytes_read = file.read(&mut listing_raw).unwrap(); + + let expected_bytes = b"\ +2020-01-09 12:11:33 1\n"; + + assert_eq!(String::from_utf8(expected_bytes.to_vec()).unwrap(), + String::from_utf8(listing_raw[0..num_bytes_read].to_vec()).unwrap()); +}