Skip to content

Commit d3909ac

Browse files
authored
Use tempdir over custom directory setup and cleanup (#5)
1 parent 66781cc commit d3909ac

File tree

3 files changed

+72
-116
lines changed

3 files changed

+72
-116
lines changed

Cargo.lock

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

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ edition = "2018"
66

77
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
88

9-
[dependencies]
10-
rand = "0.9.2"
9+
[dev-dependencies]
10+
tempfile = "3.23.0"

src/wal.rs

Lines changed: 16 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -126,13 +126,11 @@ impl IntoIterator for WAL {
126126
#[cfg(test)]
127127
mod tests {
128128
use crate::wal::WAL;
129-
use rand::prelude::*;
130-
use std::fs::{create_dir, remove_dir_all};
131129
use std::fs::{metadata, File, OpenOptions};
132130
use std::io::prelude::*;
133131
use std::io::BufReader;
134-
use std::path::PathBuf;
135132
use std::time::{SystemTime, UNIX_EPOCH};
133+
use tempfile::tempdir;
136134

137135
fn check_entry(
138136
reader: &mut BufReader<File>,
@@ -175,16 +173,14 @@ mod tests {
175173

176174
#[test]
177175
fn test_write_one() {
178-
let mut rng = rand::rng();
179-
let dir = PathBuf::from(format!("./{}/", rng.random::<u32>()));
180-
create_dir(&dir).unwrap();
176+
let dir = tempdir().unwrap();
181177

182178
let timestamp = SystemTime::now()
183179
.duration_since(UNIX_EPOCH)
184180
.unwrap()
185181
.as_micros();
186182

187-
let mut wal = WAL::new(&dir).unwrap();
183+
let mut wal = WAL::new(dir.path()).unwrap();
188184
wal.set(b"Lime", b"Lime Smoothie", timestamp).unwrap();
189185
wal.flush().unwrap();
190186

@@ -198,15 +194,11 @@ mod tests {
198194
timestamp,
199195
false,
200196
);
201-
202-
remove_dir_all(&dir).unwrap();
203197
}
204198

205199
#[test]
206200
fn test_write_many() {
207-
let mut rng = rand::rng();
208-
let dir = PathBuf::from(format!("./{}/", rng.random::<u32>()));
209-
create_dir(&dir).unwrap();
201+
let dir = tempdir().unwrap();
210202

211203
let timestamp = SystemTime::now()
212204
.duration_since(UNIX_EPOCH)
@@ -219,7 +211,7 @@ mod tests {
219211
(b"Orange", Some(b"Orange Smoothie")),
220212
];
221213

222-
let mut wal = WAL::new(&dir).unwrap();
214+
let mut wal = WAL::new(dir.path()).unwrap();
223215

224216
for e in entries.iter() {
225217
wal.set(e.0, e.1.unwrap(), timestamp).unwrap();
@@ -232,15 +224,11 @@ mod tests {
232224
for e in entries.iter() {
233225
check_entry(&mut reader, e.0, e.1, timestamp, false);
234226
}
235-
236-
remove_dir_all(&dir).unwrap();
237227
}
238228

239229
#[test]
240230
fn test_write_delete() {
241-
let mut rng = rand::rng();
242-
let dir = PathBuf::from(format!("./{}/", rng.random::<u32>()));
243-
create_dir(&dir).unwrap();
231+
let dir = tempdir().unwrap();
244232

245233
let timestamp = SystemTime::now()
246234
.duration_since(UNIX_EPOCH)
@@ -253,7 +241,7 @@ mod tests {
253241
(b"Orange", Some(b"Orange Smoothie")),
254242
];
255243

256-
let mut wal = WAL::new(&dir).unwrap();
244+
let mut wal = WAL::new(dir.path()).unwrap();
257245

258246
for e in entries.iter() {
259247
wal.set(e.0, e.1.unwrap(), timestamp).unwrap();
@@ -273,45 +261,37 @@ mod tests {
273261
for e in entries.iter() {
274262
check_entry(&mut reader, e.0, None, timestamp, true);
275263
}
276-
277-
remove_dir_all(&dir).unwrap();
278264
}
279265

280266
#[test]
281267
fn test_read_wal_none() {
282-
let mut rng = rand::rng();
283-
let dir = PathBuf::from(format!("./{}/", rng.random::<u32>()));
284-
create_dir(&dir).unwrap();
268+
let dir = tempdir().unwrap();
285269

286-
let (new_wal, new_mem_table) = WAL::load_from_dir(&dir).unwrap();
270+
let (new_wal, new_mem_table) = WAL::load_from_dir(dir.path()).unwrap();
287271
assert_eq!(new_mem_table.len(), 0);
288272

289273
let m = metadata(new_wal.path).unwrap();
290274
assert_eq!(m.len(), 0);
291-
292-
remove_dir_all(&dir).unwrap();
293275
}
294276

295277
#[test]
296278
fn test_read_wal_one() {
297-
let mut rng = rand::rng();
298-
let dir = PathBuf::from(format!("./{}/", rng.random::<u32>()));
299-
create_dir(&dir).unwrap();
279+
let dir = tempdir().unwrap();
300280

301281
let entries: Vec<(&[u8], Option<&[u8]>)> = vec![
302282
(b"Apple", Some(b"Apple Smoothie")),
303283
(b"Lime", Some(b"Lime Smoothie")),
304284
(b"Orange", Some(b"Orange Smoothie")),
305285
];
306286

307-
let mut wal = WAL::new(&dir).unwrap();
287+
let mut wal = WAL::new(dir.path()).unwrap();
308288

309289
for (i, e) in entries.iter().enumerate() {
310290
wal.set(e.0, e.1.unwrap(), i as u128).unwrap();
311291
}
312292
wal.flush().unwrap();
313293

314-
let (new_wal, new_mem_table) = WAL::load_from_dir(&dir).unwrap();
294+
let (new_wal, new_mem_table) = WAL::load_from_dir(dir.path()).unwrap();
315295

316296
let file = OpenOptions::new().read(true).open(&new_wal.path).unwrap();
317297
let mut reader = BufReader::new(file);
@@ -324,22 +304,18 @@ mod tests {
324304
assert_eq!(mem_e.value.as_ref().unwrap().as_slice(), e.1.unwrap());
325305
assert_eq!(mem_e.timestamp, i as u128);
326306
}
327-
328-
remove_dir_all(&dir).unwrap();
329307
}
330308

331309
#[test]
332310
fn test_read_wal_multiple() {
333-
let mut rng = rand::rng();
334-
let dir = PathBuf::from(format!("./{}/", rng.random::<u32>()));
335-
create_dir(&dir).unwrap();
311+
let dir = tempdir().unwrap();
336312

337313
let entries_1: Vec<(&[u8], Option<&[u8]>)> = vec![
338314
(b"Apple", Some(b"Apple Smoothie")),
339315
(b"Lime", Some(b"Lime Smoothie")),
340316
(b"Orange", Some(b"Orange Smoothie")),
341317
];
342-
let mut wal_1 = WAL::new(&dir).unwrap();
318+
let mut wal_1 = WAL::new(dir.path()).unwrap();
343319
for (i, e) in entries_1.iter().enumerate() {
344320
wal_1.set(e.0, e.1.unwrap(), i as u128).unwrap();
345321
}
@@ -350,13 +326,13 @@ mod tests {
350326
(b"Blueberry", Some(b"Blueberry Smoothie")),
351327
(b"Orange", Some(b"Orange Milkshake")),
352328
];
353-
let mut wal_2 = WAL::new(&dir).unwrap();
329+
let mut wal_2 = WAL::new(dir.path()).unwrap();
354330
for (i, e) in entries_2.iter().enumerate() {
355331
wal_2.set(e.0, e.1.unwrap(), (i + 3) as u128).unwrap();
356332
}
357333
wal_2.flush().unwrap();
358334

359-
let (new_wal, new_mem_table) = WAL::load_from_dir(&dir).unwrap();
335+
let (new_wal, new_mem_table) = WAL::load_from_dir(dir.path()).unwrap();
360336

361337
let file = OpenOptions::new().read(true).open(&new_wal.path).unwrap();
362338
let mut reader = BufReader::new(file);
@@ -383,7 +359,5 @@ mod tests {
383359
assert_eq!(mem_e.value.as_ref().unwrap().as_slice(), e.1.unwrap());
384360
assert_eq!(mem_e.timestamp, (i + 3) as u128);
385361
}
386-
387-
remove_dir_all(&dir).unwrap();
388362
}
389363
}

0 commit comments

Comments
 (0)