X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=test%2Flogger_test.rs;h=a0308218e85d576a96fc665be73a8d48c39a49ab;hb=8131a71527b5279bca9b80aac37596f6264ea2a1;hp=bbf8dd56b2254448275e030b613b5d49b932a86d;hpb=4b82362597c3908db091615b403663b8f39b67fa;p=gps-watch.git diff --git a/test/logger_test.rs b/test/logger_test.rs index bbf8dd5..a030821 100644 --- a/test/logger_test.rs +++ b/test/logger_test.rs @@ -24,10 +24,13 @@ use std::io::{Read, Write}; use std::os::unix::io::FromRawFd; use common::buffer::{Buffer, BufferUserData}; +use common::fixed15_49; use common::gps; use common::storage::{Storage, Error}; use common::logger::{MEMORY_SIZE, Logger, Error as LoggerError}; +type Fixed = fixed15_49::Fixed15_49; + struct FakeStorage { expected: Box<[u8]>, actual: Box<[u8]>, @@ -113,8 +116,10 @@ fn first_recording() { let tap = gps::TimeAndPos { system_time: 0, unix_time: 1478026311, - latitude: 0x73234e, - longitude: 0x73234f, + latitude_deg: 0x73234e, + longitude_deg: 0x73234f, + latitude_rad: Fixed::from_f32(12.57613).to_radians(), + longitude_rad: Fixed::from_f32(12.576131666666667).to_radians(), }; let recording_id = logger.start_recording(&tap); @@ -167,8 +172,10 @@ fn second_recording() { let tap = gps::TimeAndPos { system_time: 0, unix_time: 1478026312, - latitude: 0x73234e, - longitude: 0x73234f, + latitude_deg: 0x73234e, + longitude_deg: 0x73234f, + latitude_rad: Fixed::from_f32(12.57613).to_radians(), + longitude_rad: Fixed::from_f32(12.576131666666667).to_radians(), }; let recording_id = logger.start_recording(&tap); @@ -212,8 +219,10 @@ fn multi_sector_recording() { let tap = gps::TimeAndPos { system_time: 0, unix_time: 1578425250, - latitude: 0x73234e, - longitude: 0x73234f, + latitude_deg: 0x73234e, + longitude_deg: 0x73234f, + latitude_rad: Fixed::from_f32(12.57613).to_radians(), + longitude_rad: Fixed::from_f32(12.576131666666667).to_radians(), }; let recording_id = logger.start_recording(&tap); @@ -225,8 +234,12 @@ fn multi_sector_recording() { let tap = gps::TimeAndPos { system_time: 0, unix_time: prev_tap.unix_time + 1, - latitude: prev_tap.latitude + 1, - longitude: prev_tap.longitude + 1, + latitude_deg: prev_tap.latitude_deg + 1, + longitude_deg: prev_tap.longitude_deg + 1, + latitude_rad: Fixed::from_f32( + (prev_tap.latitude_deg + 1) as f32 / 600000.0).to_radians(), + longitude_rad: Fixed::from_f32( + (prev_tap.longitude_deg + 1) as f32 / 600000.0).to_radians(), }; logger.log(&prev_tap, &tap); @@ -322,8 +335,10 @@ fn get_recording_valid() { let tap0 = gps::TimeAndPos { system_time: 0, unix_time: 1478026311, - latitude: 0x73234e, - longitude: 0x73234f, + latitude_deg: 0x73234e, + longitude_deg: 0x73234f, + latitude_rad: Fixed::from_f32(12.57613).to_radians(), + longitude_rad: Fixed::from_f32(12.576131666666667).to_radians(), }; logger.start_recording(&tap0); @@ -331,8 +346,10 @@ fn get_recording_valid() { let tap1 = gps::TimeAndPos { system_time: 0, unix_time: 1478026311 + 1, - latitude: 0x73234e + 5, - longitude: 0x73234f + 5, + latitude_deg: 0x73234e + 5, + longitude_deg: 0x73234f + 5, + latitude_rad: Fixed::from_f32(12.576138333333333).to_radians(), + longitude_rad: Fixed::from_f32(12.57614).to_radians(), }; logger.log(&tap0, &tap1); @@ -340,8 +357,10 @@ fn get_recording_valid() { let tap2 = gps::TimeAndPos { system_time: 0, unix_time: 1478026311 + 2, - latitude: 0x73234e + 10, - longitude: 0x73234f + 10, + latitude_deg: 0x73234e + 10, + longitude_deg: 0x73234f + 10, + latitude_rad: Fixed::from_f32(12.576146666666666).to_radians(), + longitude_rad: Fixed::from_f32(12.576148333333334).to_radians(), }; logger.log(&tap1, &tap2); @@ -425,7 +444,59 @@ fn list_recordings1() { let num_bytes_read = file.read(&mut listing_raw).unwrap(); let expected_bytes = b"\ -2020-01-07 19:27:30 1\n"; +2020-01-07 19:27:30 4K 1\n"; + + 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 8K 1\n"; assert_eq!(String::from_utf8(expected_bytes.to_vec()).unwrap(), String::from_utf8(listing_raw[0..num_bytes_read].to_vec()).unwrap());