refactor(tvix/castore): have PathComponent-specific errors

Don't use DirectoryError, but PathComponentError.

Also add checks for too long path components.

Change-Id: Ia9deb9dd0351138baadb2e9c9454c3e019d5a45e
Reviewed-on: https://cl.tvl.fyi/c/depot/+/12229
Tested-by: BuildkiteCI
Reviewed-by: Ilan Joselevich <personal@ilanjoselevich.com>
Autosubmit: flokli <flokli@flokli.de>
Reviewed-by: edef <edef@edef.eu>
This commit is contained in:
Florian Klink 2024-08-17 22:00:06 +03:00 committed by clbot
parent 0cfe2aaf6a
commit 56fa533e43
6 changed files with 246 additions and 76 deletions

View file

@ -161,12 +161,9 @@ fn validate_invalid_names() {
}],
..Default::default()
};
match crate::Directory::try_from(d).expect_err("must fail") {
DirectoryError::InvalidName(n) => {
assert_eq!(n.as_ref(), b"\0")
}
_ => panic!("unexpected error"),
};
let e = crate::Directory::try_from(d).expect_err("must fail");
assert!(matches!(e, DirectoryError::InvalidName(_)));
}
{
@ -178,12 +175,8 @@ fn validate_invalid_names() {
}],
..Default::default()
};
match crate::Directory::try_from(d).expect_err("must fail") {
DirectoryError::InvalidName(n) => {
assert_eq!(n.as_ref(), b".")
}
_ => panic!("unexpected error"),
};
let e = crate::Directory::try_from(d).expect_err("must fail");
assert!(matches!(e, DirectoryError::InvalidName(_)));
}
{
@ -196,12 +189,8 @@ fn validate_invalid_names() {
}],
..Default::default()
};
match crate::Directory::try_from(d).expect_err("must fail") {
DirectoryError::InvalidName(n) => {
assert_eq!(n.as_ref(), b"..")
}
_ => panic!("unexpected error"),
};
let e = crate::Directory::try_from(d).expect_err("must fail");
assert!(matches!(e, DirectoryError::InvalidName(_)));
}
{
@ -212,12 +201,8 @@ fn validate_invalid_names() {
}],
..Default::default()
};
match crate::Directory::try_from(d).expect_err("must fail") {
DirectoryError::InvalidName(n) => {
assert_eq!(n.as_ref(), b"\x00")
}
_ => panic!("unexpected error"),
};
let e = crate::Directory::try_from(d).expect_err("must fail");
assert!(matches!(e, DirectoryError::InvalidName(_)));
}
{
@ -228,12 +213,20 @@ fn validate_invalid_names() {
}],
..Default::default()
};
match crate::Directory::try_from(d).expect_err("must fail") {
DirectoryError::InvalidName(n) => {
assert_eq!(n.as_ref(), b"foo/bar")
}
_ => panic!("unexpected error"),
let e = crate::Directory::try_from(d).expect_err("must fail");
assert!(matches!(e, DirectoryError::InvalidName(_)));
}
{
let d = Directory {
symlinks: vec![SymlinkNode {
name: bytes::Bytes::copy_from_slice("X".repeat(500).into_bytes().as_slice()),
target: "foo".into(),
}],
..Default::default()
};
let e = crate::Directory::try_from(d).expect_err("must fail");
assert!(matches!(e, DirectoryError::InvalidName(_)));
}
}