X-Git-Url: http://git.code-monkey.de/?p=gps-watch.git;a=blobdiff_plain;f=test%2Flogger_test.rs;h=efdfcf27b8e53ad54b1650e0c87766d14b614f33;hp=ee0b30b92b749fbb61ea73dd3918b1613143baa5;hb=f68ab85d65e9053868ce022e997b3834d6812f59;hpb=9c56bca3b719a7e44074225a99d9f97fd05466d3 diff --git a/test/logger_test.rs b/test/logger_test.rs index ee0b30b..efdfcf2 100644 --- a/test/logger_test.rs +++ b/test/logger_test.rs @@ -21,9 +21,10 @@ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +use common::buffer::{Buffer, BufferUserData}; use common::gps; use common::storage::{Storage, Error}; -use common::logger::*; +use common::logger::{MEMORY_SIZE, Logger, Error as LoggerError}; struct FakeStorage { expected: Box<[u8]>, @@ -213,3 +214,99 @@ fn multi_sector_recording() { assert_eq!(header0, fake_storage.actual[0..(0 + header0.len())]); assert_eq!(header1, fake_storage.actual[4096..(4096 + header1.len())]); } + +extern "C" fn flush_write_buffer(user_data: *mut BufferUserData, + buf: *const u8, + _bufsiz: usize, + count: usize) -> isize { + let _final_buffer = user_data as *mut [u8; 8192]; + let final_buffer = unsafe { &mut * _final_buffer }; + + unsafe { + core::ptr::copy_nonoverlapping(buf, final_buffer.as_mut_ptr(), count); + } + + count as isize +} + +// Verifies that Logger::get_recording() detects unknown recording IDs. +#[test] +fn get_recording_invalid() { + let mut final_buffer = [0u8; 8192]; + + let mut yenc_buffer_space = [0u8; 8192]; + let mut yenc_buffer = Buffer::alloc(); + + let user_data = (&mut final_buffer as *mut [u8; 8192]) as *mut BufferUserData; + + yenc_buffer.init(yenc_buffer_space.as_mut_ptr(), + yenc_buffer_space.len(), + flush_write_buffer, + user_data); + let mut fake_storage = FakeStorage::new(); + + let mut logger = Logger::new(&mut fake_storage); + logger.init(); + + // Zero is never a valid recording id. + let result = logger.get_recording(0, &mut yenc_buffer); + assert_eq!(LoggerError::NoSuchRecording, result.unwrap_err()); + + let result = logger.get_recording(1, &mut yenc_buffer); + assert_eq!(LoggerError::NoSuchRecording, result.unwrap_err()); +} + +// Verifies that Logger::get_recording() can retrieve finished recordings. +#[test] +fn get_recording_valid() { + let mut final_buffer = [0u8; 8192]; + + let mut yenc_buffer_space = [0u8; 8192]; + let mut yenc_buffer = Buffer::alloc(); + + let user_data = (&mut final_buffer as *mut [u8; 8192]) as *mut BufferUserData; + + yenc_buffer.init(yenc_buffer_space.as_mut_ptr(), + yenc_buffer_space.len(), + flush_write_buffer, + user_data); + + let mut fake_storage = FakeStorage::new(); + + let mut logger = Logger::new(&mut fake_storage); + logger.init(); + + let result = logger.get_recording(1, &mut yenc_buffer); + assert_eq!(LoggerError::NoSuchRecording, result.unwrap_err()); + + let tap0 = gps::TimeAndPos { + system_time: 0, + unix_time: 1478026311, + latitude: 0x73234e, + longitude: 0x73234f, + }; + + logger.start_recording(&tap0); + + let tap1 = gps::TimeAndPos { + system_time: 0, + unix_time: 1478026311 + 1, + latitude: 0x73234e + 5, + longitude: 0x73234f + 5, + }; + + logger.log(&tap0, &tap1); + + let tap2 = gps::TimeAndPos { + system_time: 0, + unix_time: 1478026311 + 2, + latitude: 0x73234e + 10, + longitude: 0x73234f + 10, + }; + + logger.log(&tap1, &tap2); + + logger.stop_recording(&tap2); + + assert!(logger.get_recording(1, &mut yenc_buffer).is_ok()); +}