feat(tvix/castore): add Directory::try_from_iter()
This provides a batched variant to construct a Directory, which reuses the previously calculated size. Checking and inserting code is factored out into a check_insert_node function, taking the current size as a parameter and returning the new size. Change-Id: Ia6c2970a0c12181b7c40e63cf7ce8c93298ea37c Reviewed-on: https://cl.tvl.fyi/c/depot/+/12225 Autosubmit: flokli <flokli@flokli.de> Reviewed-by: edef <edef@edef.eu> Tested-by: BuildkiteCI
This commit is contained in:
parent
76839683a7
commit
96832c0411
4 changed files with 201 additions and 160 deletions
|
|
@ -290,16 +290,16 @@ mod tests {
|
|||
use super::{DirectoryGraph, LeavesToRootValidator, RootToLeavesValidator};
|
||||
|
||||
lazy_static! {
|
||||
pub static ref BROKEN_PARENT_DIRECTORY: Directory = {
|
||||
let mut dir = Directory::new();
|
||||
dir.add(
|
||||
"foo".try_into().unwrap(),
|
||||
Node::Directory{
|
||||
digest: DIRECTORY_A.digest(),
|
||||
size: DIRECTORY_A.size() + 42, // wrong!
|
||||
}).unwrap();
|
||||
dir
|
||||
};
|
||||
pub static ref BROKEN_PARENT_DIRECTORY: Directory =
|
||||
Directory::try_from_iter([
|
||||
(
|
||||
"foo".try_into().unwrap(),
|
||||
Node::Directory{
|
||||
digest: DIRECTORY_A.digest(),
|
||||
size: DIRECTORY_A.size() + 42, // wrong!
|
||||
}
|
||||
)
|
||||
]).unwrap();
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
|
|
|
|||
|
|
@ -216,19 +216,14 @@ async fn upload_reject_dangling_pointer(directory_service: impl DirectoryService
|
|||
#[apply(directory_services)]
|
||||
#[tokio::test]
|
||||
async fn upload_reject_wrong_size(directory_service: impl DirectoryService) {
|
||||
let wrong_parent_directory = {
|
||||
let mut dir = Directory::new();
|
||||
dir.add(
|
||||
"foo".try_into().unwrap(),
|
||||
Node::Directory {
|
||||
digest: DIRECTORY_A.digest(),
|
||||
size: DIRECTORY_A.size() + 42, // wrong!
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
dir
|
||||
};
|
||||
let wrong_parent_directory = Directory::try_from_iter([(
|
||||
"foo".try_into().unwrap(),
|
||||
Node::Directory {
|
||||
digest: DIRECTORY_A.digest(),
|
||||
size: DIRECTORY_A.size() + 42, // wrong!
|
||||
},
|
||||
)])
|
||||
.unwrap();
|
||||
|
||||
// Now upload both. Ensure it either fails during the second put, or during
|
||||
// the close.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue