Skip to content

Commit ddc7c97

Browse files
committed
fix: tests
1 parent 47acf87 commit ddc7c97

8 files changed

+81
-37
lines changed

src/lib.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,19 @@
4848
//! let value_log = ValueLog::open(path, Config::default())?;
4949
//!
5050
//! // Write some data
51-
//! # let index_writer = MockIndexWriter(index.clone());
52-
//! let mut writer = value_log.get_writer(index_writer)?;
51+
//! # let mut index_writer = MockIndexWriter(index.clone());
52+
//! let mut writer = value_log.get_writer()?;
5353
//!
5454
//! for key in ["a", "b", "c", "d", "e"] {
5555
//! let value = key.repeat(10_000);
5656
//! let value = value.as_bytes();
5757
//!
58-
//! writer.write(key.as_bytes(), value)?;
58+
//! let key = key.as_bytes();
59+
//!
60+
//! let handle = writer.get_next_value_handle(key);
61+
//! index_writer.insert_indirect(key, handle, value.len() as u32)?;
62+
//!
63+
//! writer.write(key, value)?;
5964
//! }
6065
//!
6166
//! // Finish writing

src/segment/multi_writer.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,17 +58,23 @@ impl MultiWriter {
5858
}
5959

6060
#[doc(hidden)]
61+
#[must_use]
6162
pub fn get_active_writer(&self) -> &Writer {
63+
// NOTE: initialized in constructor
64+
#[allow(clippy::expect_used)]
6265
self.writers.last().expect("should exist")
6366
}
6467

6568
fn get_active_writer_mut(&mut self) -> &mut Writer {
69+
// NOTE: initialized in constructor
70+
#[allow(clippy::expect_used)]
6671
self.writers.last_mut().expect("should exist")
6772
}
6873

6974
/// Returns the [`ValueHandle`] for the next written blob.
7075
///
7176
/// This can be used to index an item into an external `Index`.
77+
#[must_use]
7278
pub fn get_next_value_handle(&self, key: &[u8]) -> ValueHandle {
7379
ValueHandle {
7480
offset: self.offset(key),

tests/basic_gc.rs

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use test_log::test;
2-
use value_log::{Config, MockIndex, MockIndexWriter, ValueLog};
2+
use value_log::{Config, IndexWriter, MockIndex, MockIndexWriter, ValueLog};
33

44
#[test]
55
fn basic_gc() -> value_log::Result<()> {
@@ -13,14 +13,19 @@ fn basic_gc() -> value_log::Result<()> {
1313
{
1414
let items = ["a", "b", "c", "d", "e"];
1515

16-
let index_writer = MockIndexWriter(index.clone());
17-
let mut writer = value_log.get_writer(index_writer)?;
16+
let mut index_writer = MockIndexWriter(index.clone());
17+
let mut writer = value_log.get_writer()?;
1818

1919
for key in &items {
2020
let value = key.repeat(10_000);
2121
let value = value.as_bytes();
2222

23-
writer.write(key.as_bytes(), value)?;
23+
let key = key.as_bytes();
24+
25+
let handle = writer.get_next_value_handle(key);
26+
index_writer.insert_indirect(key, handle, value.len() as u32)?;
27+
28+
writer.write(key, value)?;
2429
}
2530

2631
value_log.register_writer(writer)?;
@@ -43,14 +48,19 @@ fn basic_gc() -> value_log::Result<()> {
4348
{
4449
let items = ["a", "b", "c", "d", "e"];
4550

46-
let index_writer = MockIndexWriter(index.clone());
47-
let mut writer = value_log.get_writer(index_writer)?;
51+
let mut index_writer = MockIndexWriter(index.clone());
52+
let mut writer = value_log.get_writer()?;
4853

4954
for key in &items {
5055
let value = key.repeat(10_000);
5156
let value = value.as_bytes();
5257

53-
writer.write(key.as_bytes(), value)?;
58+
let key = key.as_bytes();
59+
60+
let handle = writer.get_next_value_handle(key);
61+
index_writer.insert_indirect(key, handle, value.len() as u32)?;
62+
63+
writer.write(key, value)?;
5464
}
5565

5666
value_log.register_writer(writer)?;

tests/basic_kv.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::sync::Arc;
22
use test_log::test;
3-
use value_log::{Config, KeyRange, MockIndex, MockIndexWriter, ValueLog};
3+
use value_log::{Config, IndexWriter, KeyRange, MockIndex, MockIndexWriter, ValueLog};
44

55
#[test]
66
fn basic_kv() -> value_log::Result<()> {
@@ -14,14 +14,19 @@ fn basic_kv() -> value_log::Result<()> {
1414
let items = ["a", "b", "c", "d", "e"];
1515

1616
{
17-
let index_writer = MockIndexWriter(index.clone());
18-
let mut writer = value_log.get_writer(index_writer)?;
17+
let mut index_writer = MockIndexWriter(index.clone());
18+
let mut writer = value_log.get_writer()?;
1919

2020
for key in &items {
2121
let value = key.repeat(10_000);
2222
let value = value.as_bytes();
2323

24-
writer.write(key.as_bytes(), value)?;
24+
let key = key.as_bytes();
25+
26+
let handle = writer.get_next_value_handle(key);
27+
index_writer.insert_indirect(key, handle, value.len() as u32)?;
28+
29+
writer.write(key, value)?;
2530
}
2631

2732
value_log.register_writer(writer)?;

tests/gc_space_amp.rs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use test_log::test;
2-
use value_log::{Config, MockIndex, MockIndexWriter, ValueLog};
2+
use value_log::{Config, IndexWriter, MockIndex, MockIndexWriter, ValueLog};
33

44
#[test]
55
fn gc_space_amp_target_1() -> value_log::Result<()> {
@@ -13,22 +13,30 @@ fn gc_space_amp_target_1() -> value_log::Result<()> {
1313
assert_eq!(0.0, value_log.space_amp());
1414
assert_eq!(0.0, value_log.manifest.stale_ratio());
1515

16-
let key = "key";
16+
let key = b"key";
1717
let value = "value".repeat(20_000);
1818

1919
// NOTE: Write a single item 10x
2020
// -> should result in space amp = 10.0x
2121
for x in 1..=10 {
22-
let index_writer = MockIndexWriter(index.clone());
23-
let mut writer = value_log.get_writer(index_writer)?;
22+
let mut index_writer = MockIndexWriter(index.clone());
23+
let mut writer = value_log.get_writer()?;
2424

25-
writer.write(key.as_bytes(), value.as_bytes())?;
25+
let handle = writer.get_next_value_handle(key);
26+
index_writer.insert_indirect(key, handle, value.len() as u32)?;
27+
28+
writer.write(key, value.as_bytes())?;
2629

2730
{
2831
let key = format!("key{x}");
2932
let value = "value".repeat(5_000);
3033

31-
writer.write(key.as_bytes(), value.as_bytes())?;
34+
let key = key.as_bytes();
35+
36+
let handle = writer.get_next_value_handle(key);
37+
index_writer.insert_indirect(key, handle, value.len() as u32)?;
38+
39+
writer.write(key, value.as_bytes())?;
3240
}
3341

3442
value_log.register_writer(writer)?;

tests/recovery.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use test_log::test;
2-
use value_log::{Config, MockIndex, MockIndexWriter, ValueLog};
2+
use value_log::{Config, IndexWriter, MockIndex, MockIndexWriter, ValueLog};
33

44
#[test]
55
fn basic_recovery() -> value_log::Result<()> {
@@ -14,14 +14,19 @@ fn basic_recovery() -> value_log::Result<()> {
1414
let value_log = ValueLog::open(vl_path, Config::default())?;
1515

1616
{
17-
let index_writer = MockIndexWriter(index.clone());
18-
let mut writer = value_log.get_writer(index_writer)?;
17+
let mut index_writer = MockIndexWriter(index.clone());
18+
let mut writer = value_log.get_writer()?;
1919

2020
for key in &items {
2121
let value = key.repeat(10_000);
2222
let value = value.as_bytes();
2323

24-
writer.write(key.as_bytes(), value)?;
24+
let key = key.as_bytes();
25+
26+
let handle = writer.get_next_value_handle(key);
27+
index_writer.insert_indirect(key, handle, value.len() as u32)?;
28+
29+
writer.write(key, value)?;
2530
}
2631

2732
value_log.register_writer(writer)?;

tests/rollover_index_fail_finish.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,6 @@ use value_log::{Config, IndexWriter, MockIndex, MockIndexWriter, ValueHandle, Va
55
pub struct DebugIndexWriter;
66

77
impl IndexWriter for DebugIndexWriter {
8-
fn insert_direct(&mut self, _: &[u8], _: &[u8]) -> std::io::Result<()> {
9-
Ok(())
10-
}
11-
128
fn insert_indirect(&mut self, _: &[u8], _: ValueHandle, _: u32) -> std::io::Result<()> {
139
Ok(())
1410
}
@@ -30,13 +26,16 @@ fn rollover_index_fail_finish() -> value_log::Result<()> {
3026
let items = ["a", "b", "c", "d", "e"];
3127

3228
{
33-
let index_writer = MockIndexWriter(index.clone());
34-
let mut writer = value_log.get_writer(index_writer)?;
29+
let mut index_writer = MockIndexWriter(index.clone());
30+
let mut writer = value_log.get_writer()?;
3531

3632
for key in &items {
3733
let value = key.repeat(10_000);
3834
let value = value.as_bytes();
3935

36+
let handle = writer.get_next_value_handle(key.as_bytes());
37+
index_writer.insert_indirect(key.as_bytes(), handle, value.len() as u32)?;
38+
4039
writer.write(key.as_bytes(), value)?;
4140
}
4241

tests/space_amp.rs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use test_log::test;
2-
use value_log::{Config, MockIndex, MockIndexWriter, ValueLog};
2+
use value_log::{Config, IndexWriter, MockIndex, MockIndexWriter, ValueLog};
33

44
#[test]
55
fn worst_case_space_amp() -> value_log::Result<()> {
@@ -13,16 +13,19 @@ fn worst_case_space_amp() -> value_log::Result<()> {
1313
assert_eq!(0.0, value_log.space_amp());
1414
assert_eq!(0.0, value_log.manifest.stale_ratio());
1515

16-
let key = "key";
16+
let key = b"key";
1717
let value = "value".repeat(5_000);
1818

1919
// NOTE: Write a single item 10x
2020
// -> should result in space amp = 10.0x
2121
for x in 1..=10 {
22-
let index_writer = MockIndexWriter(index.clone());
23-
let mut writer = value_log.get_writer(index_writer)?;
22+
let mut index_writer = MockIndexWriter(index.clone());
23+
let mut writer = value_log.get_writer()?;
2424

25-
writer.write(key.as_bytes(), value.as_bytes())?;
25+
let handle = writer.get_next_value_handle(key);
26+
index_writer.insert_indirect(key, handle, value.len() as u32)?;
27+
28+
writer.write(key, value.as_bytes())?;
2629

2730
value_log.register_writer(writer)?;
2831

@@ -55,8 +58,11 @@ fn no_overlap_space_amp() -> value_log::Result<()> {
5558
let key = i.to_string();
5659
let value = "afsasfdfasdfsda".repeat(5_000);
5760

58-
let index_writer = MockIndexWriter(index.clone());
59-
let mut writer = value_log.get_writer(index_writer)?;
61+
let mut index_writer = MockIndexWriter(index.clone());
62+
let mut writer = value_log.get_writer()?;
63+
64+
let handle = writer.get_next_value_handle(key.as_bytes());
65+
index_writer.insert_indirect(key.as_bytes(), handle, value.len() as u32)?;
6066

6167
writer.write(key.as_bytes(), value.as_bytes())?;
6268
value_log.register_writer(writer)?;

0 commit comments

Comments
 (0)