refactor(tvix/store/tests): move fixtures into separate module
Change-Id: I362dbf0899e4dc42114fd2e6a8fa7f537e9ea138 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8156 Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
This commit is contained in:
parent
28a862976b
commit
e7279b6063
7 changed files with 94 additions and 95 deletions
|
@ -134,23 +134,15 @@ mod tests {
|
||||||
use super::BlobReader;
|
use super::BlobReader;
|
||||||
use crate::chunkservice::ChunkService;
|
use crate::chunkservice::ChunkService;
|
||||||
use crate::proto;
|
use crate::proto;
|
||||||
|
use crate::tests::fixtures::DUMMY_DATA_1;
|
||||||
|
use crate::tests::fixtures::DUMMY_DATA_2;
|
||||||
|
use crate::tests::fixtures::DUMMY_DIGEST;
|
||||||
use crate::tests::utils::gen_chunk_service;
|
use crate::tests::utils::gen_chunk_service;
|
||||||
use lazy_static::lazy_static;
|
|
||||||
use std::io::Cursor;
|
use std::io::Cursor;
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
use tempfile::TempDir;
|
use tempfile::TempDir;
|
||||||
|
|
||||||
lazy_static! {
|
|
||||||
static ref DUMMY_DIGEST: Vec<u8> = vec![
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00,
|
|
||||||
];
|
|
||||||
static ref DUMMY_DATA_1: Vec<u8> = vec![0x01, 0x02, 0x03];
|
|
||||||
static ref DUMMY_DATA_2: Vec<u8> = vec![0x04, 0x05];
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
/// reading from a blobmeta with zero chunks should produce zero bytes.
|
/// reading from a blobmeta with zero chunks should produce zero bytes.
|
||||||
fn empty_blobmeta() -> anyhow::Result<()> {
|
fn empty_blobmeta() -> anyhow::Result<()> {
|
||||||
|
|
|
@ -3,21 +3,11 @@ use crate::chunkservice::ChunkService;
|
||||||
use crate::proto::blob_meta::ChunkMeta;
|
use crate::proto::blob_meta::ChunkMeta;
|
||||||
use crate::proto::blob_service_server::BlobService as GRPCBlobService;
|
use crate::proto::blob_service_server::BlobService as GRPCBlobService;
|
||||||
use crate::proto::{BlobChunk, GRPCBlobServiceWrapper, ReadBlobRequest, StatBlobRequest};
|
use crate::proto::{BlobChunk, GRPCBlobServiceWrapper, ReadBlobRequest, StatBlobRequest};
|
||||||
|
use crate::tests::fixtures::{BLOB_A, BLOB_A_DIGEST, BLOB_B, BLOB_B_DIGEST};
|
||||||
use crate::tests::utils::{gen_blob_service, gen_chunk_service};
|
use crate::tests::utils::{gen_blob_service, gen_chunk_service};
|
||||||
use lazy_static::lazy_static;
|
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use tempfile::TempDir;
|
use tempfile::TempDir;
|
||||||
|
|
||||||
lazy_static! {
|
|
||||||
// 2 bytes
|
|
||||||
static ref BLOB_A: Vec<u8> = vec![0x00, 0x01];
|
|
||||||
static ref BLOB_A_DIGEST: Vec<u8> = blake3::hash(&BLOB_A).as_bytes().to_vec();
|
|
||||||
|
|
||||||
// 1MB
|
|
||||||
static ref BLOB_B: Vec<u8> = (0..255).collect::<Vec<u8>>().repeat(4 * 1024);
|
|
||||||
static ref BLOB_B_DIGEST: Vec<u8> = blake3::hash(&BLOB_B).as_bytes().to_vec();
|
|
||||||
}
|
|
||||||
|
|
||||||
fn gen_grpc_blob_service(
|
fn gen_grpc_blob_service(
|
||||||
p: &Path,
|
p: &Path,
|
||||||
) -> GRPCBlobServiceWrapper<
|
) -> GRPCBlobServiceWrapper<
|
||||||
|
|
|
@ -3,40 +3,13 @@ use crate::proto::directory_service_server::DirectoryService as GRPCDirectorySer
|
||||||
use crate::proto::get_directory_request::ByWhat;
|
use crate::proto::get_directory_request::ByWhat;
|
||||||
use crate::proto::{Directory, DirectoryNode, SymlinkNode};
|
use crate::proto::{Directory, DirectoryNode, SymlinkNode};
|
||||||
use crate::proto::{GRPCDirectoryServiceWrapper, GetDirectoryRequest};
|
use crate::proto::{GRPCDirectoryServiceWrapper, GetDirectoryRequest};
|
||||||
|
use crate::tests::fixtures::{DIRECTORY_A, DIRECTORY_B, DIRECTORY_C};
|
||||||
use crate::tests::utils::gen_directory_service;
|
use crate::tests::utils::gen_directory_service;
|
||||||
use lazy_static::lazy_static;
|
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use tempfile::TempDir;
|
use tempfile::TempDir;
|
||||||
use tokio_stream::StreamExt;
|
use tokio_stream::StreamExt;
|
||||||
use tonic::Status;
|
use tonic::Status;
|
||||||
|
|
||||||
lazy_static! {
|
|
||||||
static ref DIRECTORY_A: Directory = Directory::default();
|
|
||||||
static ref DIRECTORY_B: Directory = Directory {
|
|
||||||
directories: vec![DirectoryNode {
|
|
||||||
name: "a".to_string(),
|
|
||||||
digest: DIRECTORY_A.digest(),
|
|
||||||
size: DIRECTORY_A.size(),
|
|
||||||
}],
|
|
||||||
..Default::default()
|
|
||||||
};
|
|
||||||
static ref DIRECTORY_C: Directory = Directory {
|
|
||||||
directories: vec![
|
|
||||||
DirectoryNode {
|
|
||||||
name: "a".to_string(),
|
|
||||||
digest: DIRECTORY_A.digest(),
|
|
||||||
size: DIRECTORY_A.size(),
|
|
||||||
},
|
|
||||||
DirectoryNode {
|
|
||||||
name: "a'".to_string(),
|
|
||||||
digest: DIRECTORY_A.digest(),
|
|
||||||
size: DIRECTORY_A.size(),
|
|
||||||
}
|
|
||||||
],
|
|
||||||
..Default::default()
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
fn gen_grpc_service(
|
fn gen_grpc_service(
|
||||||
p: &Path,
|
p: &Path,
|
||||||
) -> GRPCDirectoryServiceWrapper<impl DirectoryService + Send + Sync + Clone + 'static> {
|
) -> GRPCDirectoryServiceWrapper<impl DirectoryService + Send + Sync + Clone + 'static> {
|
||||||
|
|
|
@ -5,21 +5,14 @@ use crate::proto::path_info_service_server::PathInfoService as GRPCPathInfoServi
|
||||||
use crate::proto::GRPCPathInfoServiceWrapper;
|
use crate::proto::GRPCPathInfoServiceWrapper;
|
||||||
use crate::proto::PathInfo;
|
use crate::proto::PathInfo;
|
||||||
use crate::proto::{GetPathInfoRequest, Node, SymlinkNode};
|
use crate::proto::{GetPathInfoRequest, Node, SymlinkNode};
|
||||||
|
use crate::tests::fixtures::DUMMY_OUTPUT_HASH;
|
||||||
use crate::tests::utils::{
|
use crate::tests::utils::{
|
||||||
gen_blob_service, gen_chunk_service, gen_directory_service, gen_pathinfo_service,
|
gen_blob_service, gen_chunk_service, gen_directory_service, gen_pathinfo_service,
|
||||||
};
|
};
|
||||||
use lazy_static::lazy_static;
|
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use tempfile::TempDir;
|
use tempfile::TempDir;
|
||||||
use tonic::Request;
|
use tonic::Request;
|
||||||
|
|
||||||
lazy_static! {
|
|
||||||
static ref DUMMY_OUTPUT_HASH: Vec<u8> = vec![
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/// generates a GRPCPathInfoService out of blob, chunk, directory and pathinfo services.
|
/// generates a GRPCPathInfoService out of blob, chunk, directory and pathinfo services.
|
||||||
///
|
///
|
||||||
/// We only interact with it via the PathInfo GRPC interface.
|
/// We only interact with it via the PathInfo GRPC interface.
|
||||||
|
|
86
tvix/store/src/tests/fixtures.rs
Normal file
86
tvix/store/src/tests/fixtures.rs
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
use crate::proto::{self, Directory, DirectoryNode, FileNode, SymlinkNode};
|
||||||
|
use lazy_static::lazy_static;
|
||||||
|
|
||||||
|
pub const HELLOWORLD_BLOB_CONTENTS: &[u8] = b"Hello World!";
|
||||||
|
pub const EMPTY_BLOB_CONTENTS: &[u8] = b"";
|
||||||
|
|
||||||
|
lazy_static! {
|
||||||
|
pub static ref DUMMY_DIGEST: Vec<u8> = vec![
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00,
|
||||||
|
];
|
||||||
|
pub static ref DUMMY_DATA_1: Vec<u8> = vec![0x01, 0x02, 0x03];
|
||||||
|
pub static ref DUMMY_DATA_2: Vec<u8> = vec![0x04, 0x05];
|
||||||
|
pub static ref HELLOWORLD_BLOB_DIGEST: Vec<u8> =
|
||||||
|
blake3::hash(HELLOWORLD_BLOB_CONTENTS).as_bytes().to_vec();
|
||||||
|
pub static ref EMPTY_BLOB_DIGEST: Vec<u8> =
|
||||||
|
blake3::hash(EMPTY_BLOB_CONTENTS).as_bytes().to_vec();
|
||||||
|
|
||||||
|
// 2 bytes
|
||||||
|
pub static ref BLOB_A: Vec<u8> = vec![0x00, 0x01];
|
||||||
|
pub static ref BLOB_A_DIGEST: Vec<u8> = blake3::hash(&BLOB_A).as_bytes().to_vec();
|
||||||
|
|
||||||
|
// 1MB
|
||||||
|
pub static ref BLOB_B: Vec<u8> = (0..255).collect::<Vec<u8>>().repeat(4 * 1024);
|
||||||
|
pub static ref BLOB_B_DIGEST: Vec<u8> = blake3::hash(&BLOB_B).as_bytes().to_vec();
|
||||||
|
|
||||||
|
// Directories
|
||||||
|
pub static ref DIRECTORY_WITH_KEEP: proto::Directory = proto::Directory {
|
||||||
|
directories: vec![],
|
||||||
|
files: vec![FileNode {
|
||||||
|
name: ".keep".to_string(),
|
||||||
|
digest: EMPTY_BLOB_DIGEST.to_vec(),
|
||||||
|
size: 0,
|
||||||
|
executable: false,
|
||||||
|
}],
|
||||||
|
symlinks: vec![],
|
||||||
|
};
|
||||||
|
pub static ref DIRECTORY_COMPLICATED: proto::Directory = proto::Directory {
|
||||||
|
directories: vec![DirectoryNode {
|
||||||
|
name: "keep".to_string(),
|
||||||
|
digest: DIRECTORY_WITH_KEEP.digest(),
|
||||||
|
size: DIRECTORY_WITH_KEEP.size(),
|
||||||
|
}],
|
||||||
|
files: vec![FileNode {
|
||||||
|
name: ".keep".to_string(),
|
||||||
|
digest: EMPTY_BLOB_DIGEST.to_vec(),
|
||||||
|
size: 0,
|
||||||
|
executable: false,
|
||||||
|
}],
|
||||||
|
symlinks: vec![SymlinkNode {
|
||||||
|
name: "aa".to_string(),
|
||||||
|
target: "/nix/store/somewhereelse".to_string(),
|
||||||
|
}],
|
||||||
|
};
|
||||||
|
pub static ref DIRECTORY_A: Directory = Directory::default();
|
||||||
|
pub static ref DIRECTORY_B: Directory = Directory {
|
||||||
|
directories: vec![DirectoryNode {
|
||||||
|
name: "a".to_string(),
|
||||||
|
digest: DIRECTORY_A.digest(),
|
||||||
|
size: DIRECTORY_A.size(),
|
||||||
|
}],
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
pub static ref DIRECTORY_C: Directory = Directory {
|
||||||
|
directories: vec![
|
||||||
|
DirectoryNode {
|
||||||
|
name: "a".to_string(),
|
||||||
|
digest: DIRECTORY_A.digest(),
|
||||||
|
size: DIRECTORY_A.size(),
|
||||||
|
},
|
||||||
|
DirectoryNode {
|
||||||
|
name: "a'".to_string(),
|
||||||
|
digest: DIRECTORY_A.digest(),
|
||||||
|
size: DIRECTORY_A.size(),
|
||||||
|
}
|
||||||
|
],
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
|
||||||
|
// output hash
|
||||||
|
pub static ref DUMMY_OUTPUT_HASH: Vec<u8> = vec![
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
|
];
|
||||||
|
}
|
|
@ -1,2 +1,3 @@
|
||||||
|
pub mod fixtures;
|
||||||
mod nar_renderer;
|
mod nar_renderer;
|
||||||
pub mod utils;
|
pub mod utils;
|
||||||
|
|
|
@ -6,46 +6,10 @@ use crate::proto;
|
||||||
use crate::proto::DirectoryNode;
|
use crate::proto::DirectoryNode;
|
||||||
use crate::proto::FileNode;
|
use crate::proto::FileNode;
|
||||||
use crate::proto::SymlinkNode;
|
use crate::proto::SymlinkNode;
|
||||||
|
use crate::tests::fixtures::*;
|
||||||
use crate::tests::utils::*;
|
use crate::tests::utils::*;
|
||||||
use lazy_static::lazy_static;
|
|
||||||
use tempfile::TempDir;
|
use tempfile::TempDir;
|
||||||
|
|
||||||
const HELLOWORLD_BLOB_CONTENTS: &[u8] = b"Hello World!";
|
|
||||||
const EMPTY_BLOB_CONTENTS: &[u8] = b"";
|
|
||||||
|
|
||||||
lazy_static! {
|
|
||||||
static ref HELLOWORLD_BLOB_DIGEST: Vec<u8> =
|
|
||||||
blake3::hash(HELLOWORLD_BLOB_CONTENTS).as_bytes().to_vec();
|
|
||||||
static ref EMPTY_BLOB_DIGEST: Vec<u8> = blake3::hash(EMPTY_BLOB_CONTENTS).as_bytes().to_vec();
|
|
||||||
static ref DIRECTORY_WITH_KEEP: proto::Directory = proto::Directory {
|
|
||||||
directories: vec![],
|
|
||||||
files: vec![FileNode {
|
|
||||||
name: ".keep".to_string(),
|
|
||||||
digest: EMPTY_BLOB_DIGEST.to_vec(),
|
|
||||||
size: 0,
|
|
||||||
executable: false,
|
|
||||||
}],
|
|
||||||
symlinks: vec![],
|
|
||||||
};
|
|
||||||
static ref DIRECTORY_COMPLICATED: proto::Directory = proto::Directory {
|
|
||||||
directories: vec![DirectoryNode {
|
|
||||||
name: "keep".to_string(),
|
|
||||||
digest: DIRECTORY_WITH_KEEP.digest(),
|
|
||||||
size: DIRECTORY_WITH_KEEP.size(),
|
|
||||||
}],
|
|
||||||
files: vec![FileNode {
|
|
||||||
name: ".keep".to_string(),
|
|
||||||
digest: EMPTY_BLOB_DIGEST.to_vec(),
|
|
||||||
size: 0,
|
|
||||||
executable: false,
|
|
||||||
}],
|
|
||||||
symlinks: vec![SymlinkNode {
|
|
||||||
name: "aa".to_string(),
|
|
||||||
target: "/nix/store/somewhereelse".to_string(),
|
|
||||||
}],
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn single_symlink() {
|
fn single_symlink() {
|
||||||
let tmpdir = TempDir::new().unwrap();
|
let tmpdir = TempDir::new().unwrap();
|
||||||
|
|
Loading…
Reference in a new issue