X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=test%2Flogger_test.rs;h=784c04955cc567938e852abfbd7d3b8e8b0bb43c;hb=d41f27c211ac96151e175c4241b6a8d866001bea;hp=7b0cdbd1391455d5361d9cc0672f2c4d6a84ad32;hpb=c4d55664636e0df02fa19c079c4d9367e2d25917;p=gps-watch.git diff --git a/test/logger_test.rs b/test/logger_test.rs index 7b0cdbd..784c049 100644 --- a/test/logger_test.rs +++ b/test/logger_test.rs @@ -68,6 +68,19 @@ impl Storage for FakeStorage { Ok(()) } + fn erase(&mut self, address: usize) -> Result<(), Error> { + if (address & 4095) != 0 { + return Err(Error::UnalignedAddress); + } + + for i in 0..4096 { + self.actual[address + i] = 0xff; + } + + Ok(()) + + } + fn clear(&mut self) { self.actual = vec![0xff; MEMORY_SIZE].into_boxed_slice(); } @@ -116,8 +129,8 @@ 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(), }; @@ -172,8 +185,8 @@ 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(), }; @@ -219,8 +232,8 @@ 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(), }; @@ -234,12 +247,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 + 1) as f32 / 600000.0).to_radians(), + (prev_tap.latitude_deg + 1) as f32 / 600000.0).to_radians(), longitude_rad: Fixed::from_f32( - (prev_tap.longitude + 1) as f32 / 600000.0).to_radians(), + (prev_tap.longitude_deg + 1) as f32 / 600000.0).to_radians(), }; logger.log(&prev_tap, &tap); @@ -335,8 +348,8 @@ 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(), }; @@ -346,8 +359,8 @@ 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(), }; @@ -357,8 +370,8 @@ 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(), }; @@ -501,3 +514,61 @@ fn list_recording1_multi_sector() { 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::remove_recording() reports an error if there is no +// recording with the given ID. +#[test] +fn remove_recording0() { + let mut fake_storage = FakeStorage::new(); + + let mut logger = Logger::new(&mut fake_storage); + logger.init(); + + let result = logger.remove_recording(42); + assert_eq!(LoggerError::NoSuchRecording, result.unwrap_err()); +} + +// Verifies that Logger::remove_recording() clears consecutive sectors +// belonging to the recording identified by the given ID. +#[test] +fn remove_recording1() { + let mut fake_storage = FakeStorage::new(); + + // Mark first sector as in use. + let header0 = [ + 0x01, 0x00, 0x01, 0x00, + 0xa2, 0xdb, 0x14, 0x5e, + ]; + + // Mark second sector as in use by the same recording. + let header1 = [ + 0x03, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, + ]; + + // Mark third sector as in use by another recording. + let header2 = [ + 0x01, 0x00, 0x02, 0x00, + 0xa2, 0xdb, 0x14, 0x5f, + ]; + + fake_storage.actual[0..header0.len()].copy_from_slice(&header0); + fake_storage.actual[4096..4096 + header1.len()].copy_from_slice(&header1); + fake_storage.actual[8192..8192 + header2.len()].copy_from_slice(&header2); + + let mut logger = Logger::new(&mut fake_storage); + logger.init(); + + assert!(logger.remove_recording(1).is_ok()); + + let cleared = [ + 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, + ]; + + fake_storage.expected[0..cleared.len()].copy_from_slice(&cleared); + fake_storage.expected[4096..4096 + header1.len()].copy_from_slice(&cleared); + fake_storage.expected[8192..8192 + header2.len()].copy_from_slice(&header2); + + assert_eq!(fake_storage.expected, fake_storage.actual); +}