diff options
author | Yureka <tvl@yuka.dev> | 2024-09-25T10·07+0200 |
---|---|---|
committer | yuka <tvl@yuka.dev> | 2024-09-25T19·07+0000 |
commit | 6deff4d8e9ef79dc799bf866aa8f1a5e422b4602 (patch) | |
tree | febb0c42379399ae09739c41f9f635530204804b /tvix/store/src/tests/fixtures.rs | |
parent | c1e69e260dc9025e7c1ff04131f336cd45ca72e9 (diff) |
refactor(tvix/store/tests): combine tests into one parametrized function r/8714
Change-Id: I9ff43b29be68b9840c58286da96fa52927691804 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12507 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
Diffstat (limited to 'tvix/store/src/tests/fixtures.rs')
-rw-r--r-- | tvix/store/src/tests/fixtures.rs | 72 |
1 files changed, 70 insertions, 2 deletions
diff --git a/tvix/store/src/tests/fixtures.rs b/tvix/store/src/tests/fixtures.rs index 1c8359a2c0c7..48cc365365a9 100644 --- a/tvix/store/src/tests/fixtures.rs +++ b/tvix/store/src/tests/fixtures.rs @@ -1,11 +1,13 @@ use lazy_static::lazy_static; -use rstest::*; +use rstest::{self, *}; +use rstest_reuse::*; +use std::io; use std::sync::Arc; pub use tvix_castore::fixtures::*; use tvix_castore::{ blobservice::{BlobService, MemoryBlobService}, directoryservice::{DirectoryService, MemoryDirectoryService}, - proto as castorepb, + proto as castorepb, Node, }; use crate::proto::{ @@ -17,6 +19,10 @@ pub const DUMMY_PATH: &str = "00000000000000000000000000000000-dummy"; pub const DUMMY_PATH_DIGEST: [u8; 20] = [0; 20]; lazy_static! { + pub static ref CASTORE_NODE_SYMLINK: Node = Node::Symlink { + target: "/nix/store/somewhereelse".try_into().unwrap(), + }; + /// The NAR representation of a symlink pointing to `/nix/store/somewhereelse` pub static ref NAR_CONTENTS_SYMLINK: Vec<u8> = vec![ 13, 0, 0, 0, 0, 0, 0, 0, b'n', b'i', b'x', b'-', b'a', b'r', b'c', b'h', b'i', b'v', b'e', b'-', b'1', 0, @@ -31,6 +37,12 @@ lazy_static! { 1, 0, 0, 0, 0, 0, 0, 0, b')', 0, 0, 0, 0, 0, 0, 0 // ")" ]; + pub static ref CASTORE_NODE_HELLOWORLD: Node = Node::File { + digest: HELLOWORLD_BLOB_DIGEST.clone(), + size: HELLOWORLD_BLOB_CONTENTS.len() as u64, + executable: false, + }; + /// The NAR representation of a regular file with the contents "Hello World!" pub static ref NAR_CONTENTS_HELLOWORLD: Vec<u8> = vec![ 13, 0, 0, 0, 0, 0, 0, 0, b'n', b'i', b'x', b'-', b'a', b'r', b'c', b'h', b'i', b'v', b'e', b'-', b'1', 0, @@ -44,6 +56,22 @@ lazy_static! { 1, 0, 0, 0, 0, 0, 0, 0, b')', 0, 0, 0, 0, 0, 0, 0 // ")" ]; + pub static ref CASTORE_NODE_TOO_BIG: Node = Node::File { + digest: HELLOWORLD_BLOB_DIGEST.clone(), + size: 42, // <- note the wrong size here! + executable: false, + }; + pub static ref CASTORE_NODE_TOO_SMALL: Node = Node::File { + digest: HELLOWORLD_BLOB_DIGEST.clone(), + size: 2, // <- note the wrong size here! + executable: false, + }; + + pub static ref CASTORE_NODE_COMPLICATED: Node = Node::Directory { + digest: DIRECTORY_COMPLICATED.digest(), + size: DIRECTORY_COMPLICATED.size(), + }; + /// The NAR representation of a more complicated directory structure. pub static ref NAR_CONTENTS_COMPLICATED: Vec<u8> = vec![ 13, 0, 0, 0, 0, 0, 0, 0, b'n', b'i', b'x', b'-', b'a', b'r', b'c', b'h', b'i', b'v', b'e', b'-', b'1', 0, @@ -137,6 +165,46 @@ pub(crate) fn blob_service() -> Arc<dyn BlobService> { } #[fixture] +pub(crate) async fn blob_service_with_contents() -> Arc<dyn BlobService> { + let blob_service = Arc::from(MemoryBlobService::default()); + for (blob_contents, blob_digest) in [ + (EMPTY_BLOB_CONTENTS, &*EMPTY_BLOB_DIGEST), + (HELLOWORLD_BLOB_CONTENTS, &*HELLOWORLD_BLOB_DIGEST), + ] { + // put all data into the stores. + // insert blob into the store + let mut writer = blob_service.open_write().await; + tokio::io::copy(&mut io::Cursor::new(blob_contents), &mut writer) + .await + .unwrap(); + assert_eq!(blob_digest.clone(), writer.close().await.unwrap()); + } + blob_service +} + +#[fixture] pub(crate) fn directory_service() -> Arc<dyn DirectoryService> { Arc::from(MemoryDirectoryService::default()) } + +#[fixture] +pub(crate) async fn directory_service_with_contents() -> Arc<dyn DirectoryService> { + let directory_service = Arc::from(MemoryDirectoryService::default()); + for directory in [&*DIRECTORY_WITH_KEEP, &*DIRECTORY_COMPLICATED] { + directory_service.put(directory.clone()).await.unwrap(); + } + directory_service +} + +#[template] +#[rstest] +#[case::symlink (&*CASTORE_NODE_SYMLINK, Ok(Ok(&*NAR_CONTENTS_SYMLINK)))] +#[case::helloworld (&*CASTORE_NODE_HELLOWORLD, Ok(Ok(&*NAR_CONTENTS_HELLOWORLD)))] +#[case::too_big (&*CASTORE_NODE_TOO_BIG, Ok(Err(io::ErrorKind::UnexpectedEof)))] +#[case::too_small (&*CASTORE_NODE_TOO_SMALL, Ok(Err(io::ErrorKind::InvalidInput)))] +#[case::complicated(&*CASTORE_NODE_COMPLICATED, Ok(Ok(&*NAR_CONTENTS_COMPLICATED)))] +fn castore_fixtures_template( + #[case] test_input: &Node, + #[case] test_output: Result<Result<&Vec<u8>, io::ErrorKind>, crate::nar::RenderError>, +) { +} |