fixed corruption test itself
This commit is contained in:
parent
a95b5d840f
commit
b7e74d9437
4 changed files with 47 additions and 6 deletions
37
Cargo.lock
generated
37
Cargo.lock
generated
|
@ -1,5 +1,14 @@
|
|||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
[[package]]
|
||||
name = "ansi_term"
|
||||
version = "0.12.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
|
||||
dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anyhow"
|
||||
version = "1.0.38"
|
||||
|
@ -38,6 +47,7 @@ dependencies = [
|
|||
"hex",
|
||||
"log",
|
||||
"nix 0.19.1",
|
||||
"pretty_assertions",
|
||||
"proptest",
|
||||
"rand 0.8.3",
|
||||
"rayon",
|
||||
|
@ -195,6 +205,12 @@ dependencies = [
|
|||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "diff"
|
||||
version = "0.1.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499"
|
||||
|
||||
[[package]]
|
||||
name = "digest"
|
||||
version = "0.9.0"
|
||||
|
@ -420,12 +436,33 @@ version = "0.3.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
|
||||
|
||||
[[package]]
|
||||
name = "output_vt100"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "53cdc5b785b7a58c5aad8216b3dfa114df64b0b06ae6e1501cef91df2fbdf8f9"
|
||||
dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ppv-lite86"
|
||||
version = "0.2.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
|
||||
|
||||
[[package]]
|
||||
name = "pretty_assertions"
|
||||
version = "0.7.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1cab0e7c02cf376875e9335e0ba1da535775beb5450d21e1dffca068818ed98b"
|
||||
dependencies = [
|
||||
"ansi_term",
|
||||
"ctor",
|
||||
"diff",
|
||||
"output_vt100",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.24"
|
||||
|
|
|
@ -34,6 +34,7 @@ walkdir = "2.3"
|
|||
[dev-dependencies]
|
||||
proptest = "0.10"
|
||||
two-rusty-forks = "0.4.0"
|
||||
pretty_assertions = "0.7"
|
||||
|
||||
[dev-dependencies.cargo-husky]
|
||||
version = "1"
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
use log::error;
|
||||
use std::collections::HashMap;
|
||||
use vfs::VfsPath;
|
||||
|
||||
|
@ -132,7 +131,6 @@ mod must {
|
|||
use crate::index::Index;
|
||||
use anyhow::Result;
|
||||
|
||||
use rand::Rng;
|
||||
use vfs::{MemoryFS, VfsPath};
|
||||
|
||||
#[test]
|
||||
|
|
|
@ -14,6 +14,9 @@ pub fn encode(bytes: &[u8]) -> Result<Vec<u8>> {
|
|||
|
||||
pub fn decode(bytes: &[u8]) -> Result<Vec<u8>> {
|
||||
let decoder = Decoder::new(ECC_LENGTH);
|
||||
if decoder.is_corrupted(bytes) {
|
||||
return Err(anyhow!("corrupted"));
|
||||
}
|
||||
let maybe_corrected = decoder.correct(bytes, None);
|
||||
match maybe_corrected {
|
||||
Ok(corrected) => Ok(corrected.data().to_vec()),
|
||||
|
@ -21,6 +24,7 @@ pub fn decode(bytes: &[u8]) -> Result<Vec<u8>> {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod must {
|
||||
|
||||
use anyhow::Result;
|
||||
|
@ -28,6 +32,8 @@ mod must {
|
|||
|
||||
use super::{decode, encode};
|
||||
|
||||
use pretty_assertions::assert_eq;
|
||||
|
||||
#[test]
|
||||
fn survive_data_corruption() -> Result<()> {
|
||||
let mut original: [u8; 32] = [0; 32];
|
||||
|
@ -35,14 +41,13 @@ mod must {
|
|||
|
||||
let encoded = encode(&original)?;
|
||||
|
||||
let size = dbg!(encoded.len());
|
||||
let size = encoded.len();
|
||||
let corrupt_byte_index = rand::thread_rng().gen_range::<usize, _>(0..size);
|
||||
|
||||
let mut corrupted: [u8; 32] = [0; 32];
|
||||
corrupted.copy_from_slice(&encoded);
|
||||
let mut corrupted = Vec::from(encoded);
|
||||
corrupted[corrupt_byte_index] = rand::thread_rng().gen::<u8>();
|
||||
|
||||
let decoded = decode(&corrupted)?;
|
||||
let decoded = decode(&corrupted).unwrap();
|
||||
|
||||
assert_eq!(decoded, original);
|
||||
|
||||
|
|
Loading…
Reference in a new issue