Skip to content

Commit e3e9ca2

Browse files
committed
Add unit tests to file and static chunkers
The file-based and static chunkers now have unit tests.
1 parent 6818fa0 commit e3e9ca2

File tree

4 files changed

+200
-0
lines changed

4 files changed

+200
-0
lines changed

Cargo.lock

Lines changed: 85 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,6 @@ md-5 = "0.10.6"
1212
memmap2 = "0.9.5"
1313
sha1 = "0.10.6"
1414
sha2 = "0.10.9"
15+
16+
[dev-dependencies]
17+
tempfile = "3.20.0"

src/chunker/fileChunker.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,42 @@ impl Chunker for FileChunker {
1515
(&mmap[..]).chunks(mmap.len())
1616
}
1717
}
18+
19+
#[cfg(test)]
20+
mod tests {
21+
use super::super::chunker::*;
22+
use super::*;
23+
24+
use memmap2::Mmap;
25+
use std::io::Write;
26+
use tempfile::tempfile;
27+
28+
#[test]
29+
fn testFileChunker() {
30+
let mut file = tempfile().unwrap();
31+
let data = b"Lorem ipsum dolor sit amet.";
32+
file.write_all(data).unwrap();
33+
let mmap = unsafe { Mmap::map(&file).unwrap() };
34+
35+
let chunker = FileChunker::new();
36+
let mut chunks = chunker.chunk(&mmap);
37+
38+
assert_eq!(chunks.next(), Some(data.as_slice()));
39+
assert!(chunks.next().is_none());
40+
}
41+
42+
#[test]
43+
fn testFileChunkerFactory() {
44+
let mut file = tempfile().unwrap();
45+
let data = b"hello world";
46+
file.write_all(data).unwrap();
47+
let mmap = unsafe { Mmap::map(&file).unwrap() };
48+
49+
let factory = ChunkFactory::new(ChunkerType::FILE, None);
50+
let chunker = factory.createChunker();
51+
let mut chunks = chunker.chunk(&mmap);
52+
53+
assert_eq!(chunks.next(), Some(data.as_slice()));
54+
assert!(chunks.next().is_none());
55+
}
56+
}

src/chunker/staticChunker.rs

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,76 @@ impl Chunker for StaticChunker {
1717
mmap.chunks(self.size)
1818
}
1919
}
20+
21+
#[cfg(test)]
22+
mod tests {
23+
use super::super::chunker::*;
24+
use super::*;
25+
26+
use memmap2::Mmap;
27+
use std::io::Write;
28+
use tempfile::tempfile;
29+
30+
#[test]
31+
fn testStaticChunker() {
32+
let types = vec![
33+
ChunkerType::SC1K,
34+
ChunkerType::SC2K,
35+
ChunkerType::SC4K,
36+
ChunkerType::SC8K,
37+
ChunkerType::SC16K,
38+
ChunkerType::SC32K,
39+
ChunkerType::SC64K,
40+
];
41+
42+
for c in types {
43+
let N = 64;
44+
45+
let mut file = tempfile().unwrap();
46+
file.write_all(&vec![0u8; N * 1024]).unwrap();
47+
let mmap = unsafe { Mmap::map(&file).unwrap() };
48+
49+
let chunker = StaticChunker::new(ChunkerType::getSize(&c));
50+
let mut chunks = chunker.chunk(&mmap);
51+
52+
assert_eq!(chunks.len(), N * 1024 / ChunkerType::getSize(&c));
53+
let expected = vec![0u8; ChunkerType::getSize(&c)];
54+
for chunk in chunks.by_ref() {
55+
assert_eq!(chunk, expected.as_slice());
56+
}
57+
assert!(chunks.next().is_none());
58+
}
59+
}
60+
61+
#[test]
62+
fn testStaticChunkerFactory() {
63+
let types = vec![
64+
ChunkerType::SC1K,
65+
ChunkerType::SC2K,
66+
ChunkerType::SC4K,
67+
ChunkerType::SC8K,
68+
ChunkerType::SC16K,
69+
ChunkerType::SC32K,
70+
ChunkerType::SC64K,
71+
];
72+
73+
for c in types {
74+
let N = 64;
75+
76+
let mut file = tempfile().unwrap();
77+
file.write_all(&vec![0u8; N * 1024]).unwrap();
78+
let mmap = unsafe { Mmap::map(&file).unwrap() };
79+
80+
let factory = ChunkFactory::new(c, None);
81+
let chunker = factory.createChunker();
82+
let mut chunks = chunker.chunk(&mmap);
83+
84+
assert_eq!(chunks.len(), N * 1024 / ChunkerType::getSize(&c));
85+
let expected = vec![0u8; ChunkerType::getSize(&c)];
86+
for chunk in chunks.by_ref() {
87+
assert_eq!(chunk, expected.as_slice());
88+
}
89+
assert!(chunks.next().is_none());
90+
}
91+
}
92+
}

0 commit comments

Comments
 (0)