added testcases for state restore, bugfixes
This commit is contained in:
parent
bfe0a97077
commit
38c657338c
@ -101,6 +101,7 @@ where
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
shmem_content.buf_len = len;
|
shmem_content.buf_len = len;
|
||||||
|
shmem_content.is_disk = true;
|
||||||
} else {
|
} else {
|
||||||
// write to shmem directly
|
// write to shmem directly
|
||||||
let len = serialized.len();
|
let len = serialized.len();
|
||||||
@ -113,6 +114,7 @@ where
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
shmem_content.buf_len = len;
|
shmem_content.buf_len = len;
|
||||||
|
shmem_content.is_disk = false;
|
||||||
};
|
};
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -146,7 +148,7 @@ where
|
|||||||
where
|
where
|
||||||
S: DeserializeOwned,
|
S: DeserializeOwned,
|
||||||
{
|
{
|
||||||
if self.has_content() {
|
if !self.has_content() {
|
||||||
return Ok(Option::None);
|
return Ok(Option::None);
|
||||||
}
|
}
|
||||||
let state_shmem_content = self.content();
|
let state_shmem_content = self.content();
|
||||||
@ -177,3 +179,42 @@ where
|
|||||||
Ok(Some(deserialized))
|
Ok(Some(deserialized))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use crate::bolts::shmem::{ShMemProvider, StdShMemProvider};
|
||||||
|
|
||||||
|
use super::StateRestorer;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_state_restore() {
|
||||||
|
const TESTMAP_SIZE: usize = 1024;
|
||||||
|
|
||||||
|
let mut shmem_provider = StdShMemProvider::new().unwrap();
|
||||||
|
let shmem = shmem_provider.new_map(TESTMAP_SIZE).unwrap();
|
||||||
|
let mut state_restorer = StateRestorer::<StdShMemProvider>::new(shmem);
|
||||||
|
|
||||||
|
let state = "hello world".to_string();
|
||||||
|
|
||||||
|
state_restorer.save(&state).unwrap();
|
||||||
|
|
||||||
|
assert!(state_restorer.has_content());
|
||||||
|
let restored = state_restorer.restore::<String>().unwrap().unwrap();
|
||||||
|
println!("Restored {}", restored);
|
||||||
|
assert_eq!(restored, "hello world");
|
||||||
|
|
||||||
|
state_restorer.reset();
|
||||||
|
|
||||||
|
assert!(!state_restorer.has_content());
|
||||||
|
assert!(state_restorer.restore::<String>().unwrap().is_none());
|
||||||
|
|
||||||
|
let too_large = vec![4u8; TESTMAP_SIZE + 1];
|
||||||
|
state_restorer.save(&too_large).unwrap();
|
||||||
|
assert!(state_restorer.has_content());
|
||||||
|
|
||||||
|
let large_restored = state_restorer.restore::<Vec<u8>>().unwrap().unwrap();
|
||||||
|
assert_eq!(large_restored, too_large);
|
||||||
|
assert_eq!(large_restored.len(), too_large.len());
|
||||||
|
assert_eq!(large_restored[TESTMAP_SIZE], 4u8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user