diff options
author | Florian Klink <flokli@flokli.de> | 2023-03-01T17·55+0100 |
---|---|---|
committer | flokli <flokli@flokli.de> | 2023-03-10T10·58+0000 |
commit | a4f6c4181aa7f975b1c3aad8d3fb30021388e014 (patch) | |
tree | ee2f0a3911503ccb66f29d5b47dbdd763c02b026 /tvix/store/src/tests | |
parent | 535e1b15ab457c9015baebf14bd7b50a38edadb4 (diff) |
feat(tvix/store): add new_temporary for all Sled services r/5934
This provides a service using /dev/shm, that's deleted once the reference is dropped. Refactor all tests to use these, which allows getting rid of most TempDir usage in the tests. The only place where we still use TempDir is in the importer tests, which work on a filesystem path. Change-Id: I08a950aa774bf9b46d9f5c92edf5efba36053242 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8193 Reviewed-by: raitobezarius <tvl@lahfa.xyz> Tested-by: BuildkiteCI
Diffstat (limited to 'tvix/store/src/tests')
-rw-r--r-- | tvix/store/src/tests/import.rs | 56 | ||||
-rw-r--r-- | tvix/store/src/tests/nar_renderer.rs | 51 | ||||
-rw-r--r-- | tvix/store/src/tests/utils.rs | 18 |
3 files changed, 52 insertions, 73 deletions
diff --git a/tvix/store/src/tests/import.rs b/tvix/store/src/tests/import.rs index e8373b614e91..63ca1efa13f3 100644 --- a/tvix/store/src/tests/import.rs +++ b/tvix/store/src/tests/import.rs @@ -12,15 +12,18 @@ use tempfile::TempDir; fn symlink() { let tmpdir = TempDir::new().unwrap(); - let data_dir = tmpdir.path().join("data"); - std::fs::create_dir_all(&data_dir).unwrap(); - std::os::unix::fs::symlink("/nix/store/somewhereelse", data_dir.join("doesntmatter")).unwrap(); + std::fs::create_dir_all(&tmpdir).unwrap(); + std::os::unix::fs::symlink( + "/nix/store/somewhereelse", + tmpdir.path().join("doesntmatter"), + ) + .unwrap(); let root_node = import_path( - &mut gen_blob_service(tmpdir.path()), - &mut gen_chunk_service(tmpdir.path()), - &mut gen_directory_service(tmpdir.path()), - data_dir.join("doesntmatter"), + &mut gen_blob_service(), + &mut gen_chunk_service(), + &mut gen_directory_service(), + tmpdir.path().join("doesntmatter"), ) .expect("must succeed"); @@ -37,17 +40,15 @@ fn symlink() { fn single_file() { let tmpdir = TempDir::new().unwrap(); - let data_dir = tmpdir.path().join("data"); - std::fs::create_dir_all(&data_dir).unwrap(); - std::fs::write(data_dir.join("root"), HELLOWORLD_BLOB_CONTENTS).unwrap(); + std::fs::write(tmpdir.path().join("root"), HELLOWORLD_BLOB_CONTENTS).unwrap(); - let mut blob_service = gen_blob_service(tmpdir.path()); + let mut blob_service = gen_blob_service(); let root_node = import_path( &mut blob_service, - &mut gen_chunk_service(tmpdir.path()), - &mut gen_directory_service(tmpdir.path()), - data_dir.join("root"), + &mut gen_chunk_service(), + &mut gen_directory_service(), + tmpdir.path().join("root"), ) .expect("must succeed"); @@ -76,34 +77,35 @@ fn single_file() { fn complicated() { let tmpdir = TempDir::new().unwrap(); - let data_dir = tmpdir.path().join("data"); - - // Populate path to import - std::fs::create_dir_all(&data_dir).unwrap(); // File ``.keep` - std::fs::write(data_dir.join(".keep"), vec![]).unwrap(); + std::fs::write(tmpdir.path().join(".keep"), vec![]).unwrap(); // Symlink `aa` - std::os::unix::fs::symlink("/nix/store/somewhereelse", data_dir.join("aa")).unwrap(); + std::os::unix::fs::symlink("/nix/store/somewhereelse", tmpdir.path().join("aa")).unwrap(); // Directory `keep` - std::fs::create_dir(data_dir.join("keep")).unwrap(); + std::fs::create_dir(tmpdir.path().join("keep")).unwrap(); // File ``keep/.keep` - std::fs::write(data_dir.join("keep").join(".keep"), vec![]).unwrap(); + std::fs::write(tmpdir.path().join("keep").join(".keep"), vec![]).unwrap(); - let mut blob_service = gen_blob_service(tmpdir.path()); - let mut directory_service = gen_directory_service(tmpdir.path()); + let mut blob_service = gen_blob_service(); + let mut directory_service = gen_directory_service(); let root_node = import_path( &mut blob_service, - &mut gen_chunk_service(tmpdir.path()), + &mut gen_chunk_service(), &mut directory_service, - data_dir, + tmpdir.path(), ) .expect("must succeed"); // ensure root_node matched expectations assert_eq!( crate::proto::node::Node::Directory(proto::DirectoryNode { - name: "data".to_string(), + name: tmpdir + .path() + .file_name() + .unwrap() + .to_string_lossy() + .to_string(), digest: DIRECTORY_COMPLICATED.digest(), size: DIRECTORY_COMPLICATED.size(), }), diff --git a/tvix/store/src/tests/nar_renderer.rs b/tvix/store/src/tests/nar_renderer.rs index 8c0f738b5143..2b5b4f705c64 100644 --- a/tvix/store/src/tests/nar_renderer.rs +++ b/tvix/store/src/tests/nar_renderer.rs @@ -8,15 +8,13 @@ use crate::proto::FileNode; use crate::proto::SymlinkNode; use crate::tests::fixtures::*; use crate::tests::utils::*; -use tempfile::TempDir; #[test] fn single_symlink() { - let tmpdir = TempDir::new().unwrap(); let renderer = NARRenderer::new( - gen_blob_service(tmpdir.path()), - gen_chunk_service(tmpdir.path()), - gen_directory_service(tmpdir.path()), + gen_blob_service(), + gen_chunk_service(), + gen_directory_service(), ); // don't put anything in the stores, as we don't actually do any requests. @@ -39,15 +37,10 @@ fn single_symlink() { /// match what's in the store. #[test] fn single_file_missing_blob() { - let tmpdir = TempDir::new().unwrap(); - - let blob_service = gen_blob_service(tmpdir.path()); - let chunk_service = gen_chunk_service(tmpdir.path()); - let renderer = NARRenderer::new( - blob_service, - chunk_service, - gen_directory_service(tmpdir.path()), + gen_blob_service(), + gen_chunk_service(), + gen_directory_service(), ); let mut buf: Vec<u8> = vec![]; @@ -74,10 +67,8 @@ fn single_file_missing_blob() { /// than specified in the proto node. #[test] fn single_file_wrong_blob_size() { - let tmpdir = TempDir::new().unwrap(); - - let blob_service = gen_blob_service(tmpdir.path()); - let chunk_service = gen_chunk_service(tmpdir.path()); + let blob_service = gen_blob_service(); + let chunk_service = gen_chunk_service(); // insert blob and chunk into the stores chunk_service @@ -97,11 +88,7 @@ fn single_file_wrong_blob_size() { ) .unwrap(); - let renderer = NARRenderer::new( - blob_service, - chunk_service, - gen_directory_service(tmpdir.path()), - ); + let renderer = NARRenderer::new(blob_service, chunk_service, gen_directory_service()); let mut buf: Vec<u8> = vec![]; let e = renderer @@ -138,10 +125,8 @@ fn single_file_wrong_blob_size() { #[test] fn single_file() { - let tmpdir = TempDir::new().unwrap(); - - let blob_service = gen_blob_service(tmpdir.path()); - let chunk_service = gen_chunk_service(tmpdir.path()); + let blob_service = gen_blob_service(); + let chunk_service = gen_chunk_service(); chunk_service .put(HELLOWORLD_BLOB_CONTENTS.to_vec()) @@ -160,11 +145,7 @@ fn single_file() { ) .unwrap(); - let renderer = NARRenderer::new( - blob_service, - chunk_service, - gen_directory_service(tmpdir.path()), - ); + let renderer = NARRenderer::new(blob_service, chunk_service, gen_directory_service()); let mut buf: Vec<u8> = vec![]; renderer @@ -184,11 +165,9 @@ fn single_file() { #[test] fn test_complicated() { - let tmpdir = TempDir::new().unwrap(); - - let blob_service = gen_blob_service(tmpdir.path()); - let chunk_service = gen_chunk_service(tmpdir.path()); - let directory_service = gen_directory_service(tmpdir.path()); + let blob_service = gen_blob_service(); + let chunk_service = gen_chunk_service(); + let directory_service = gen_directory_service(); // put all data into the stores. let digest = chunk_service.put(EMPTY_BLOB_CONTENTS.to_vec()).unwrap(); diff --git a/tvix/store/src/tests/utils.rs b/tvix/store/src/tests/utils.rs index 4ddd4102fb97..9da9d2643b81 100644 --- a/tvix/store/src/tests/utils.rs +++ b/tvix/store/src/tests/utils.rs @@ -1,5 +1,3 @@ -use std::path::Path; - use crate::{ blobservice::{BlobService, SledBlobService}, chunkservice::{ChunkService, SledChunkService}, @@ -7,18 +5,18 @@ use crate::{ pathinfoservice::{PathInfoService, SledPathInfoService}, }; -pub fn gen_blob_service(p: &Path) -> impl BlobService + Send + Sync + Clone + 'static { - SledBlobService::new(p.join("blobs")).unwrap() +pub fn gen_blob_service() -> impl BlobService + Send + Sync + Clone + 'static { + SledBlobService::new_temporary().unwrap() } -pub fn gen_chunk_service(p: &Path) -> impl ChunkService + Clone { - SledChunkService::new(p.join("chunks")).unwrap() +pub fn gen_chunk_service() -> impl ChunkService + Clone { + SledChunkService::new_temporary().unwrap() } -pub fn gen_directory_service(p: &Path) -> impl DirectoryService + Send + Sync + Clone + 'static { - SledDirectoryService::new(p.join("directories")).unwrap() +pub fn gen_directory_service() -> impl DirectoryService + Send + Sync + Clone + 'static { + SledDirectoryService::new_temporary().unwrap() } -pub fn gen_pathinfo_service(p: &Path) -> impl PathInfoService { - SledPathInfoService::new(p.join("pathinfo")).unwrap() +pub fn gen_pathinfo_service() -> impl PathInfoService { + SledPathInfoService::new_temporary().unwrap() } |