in cas_object/src/cas_object_format.rs [2168:2208]
fn test_deserialize_from_v0_xorb() {
// build a v1 xorb
let (c, _cas_data, raw_data, raw_chunk_boundaries) =
build_cas_object(4, ChunkSize::Random(512, 2048), CompressionScheme::LZ4);
let mut buf: Cursor<Vec<u8>> = Cursor::new(Vec::new());
assert!(serialize_xorb_to_stream_reference(
&mut buf,
&c.info.cashash,
&raw_data,
&raw_chunk_boundaries,
Some(CompressionScheme::LZ4),
)
.is_ok());
// Switch V1 footer to V0
let mut cas_info_v0 = CasObjectInfoV0::default();
cas_info_v0.cashash = c.info.cashash;
cas_info_v0.num_chunks = c.info.num_chunks;
cas_info_v0.chunk_boundary_offsets = c.info.chunk_boundary_offsets.clone();
cas_info_v0.chunk_hashes = c.info.chunk_hashes.clone();
let mut buf = buf.into_inner();
let serialized_chunks_length = c.get_contents_length().unwrap();
buf.resize(serialized_chunks_length as usize, 0);
let mut buf = Cursor::new(buf);
buf.seek(SeekFrom::End(0)).unwrap();
#[allow(deprecated)]
let info_length = cas_info_v0.serialize(&mut buf).unwrap() as u32;
write_u32(&mut buf, info_length).unwrap();
let xorb_bytes = buf.into_inner();
let mut reader = Cursor::new(xorb_bytes);
let ret = CasObject::deserialize(&mut reader).unwrap();
assert_eq!(ret.info.cashash, cas_info_v0.cashash);
assert_eq!(ret.info.num_chunks, cas_info_v0.num_chunks);
assert_eq!(ret.info.chunk_boundary_offsets, cas_info_v0.chunk_boundary_offsets);
assert_eq!(ret.info.chunk_hashes, cas_info_v0.chunk_hashes);
assert_eq!(ret.info._buffer, cas_info_v0._buffer);
}