about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--tvix/castore/src/blobservice/chunked_reader.rs31
-rw-r--r--tvix/castore/src/directoryservice/directory_graph.rs24
-rw-r--r--tvix/castore/src/directoryservice/from_addr.rs9
-rw-r--r--tvix/castore/src/fixtures.rs142
-rw-r--r--tvix/castore/src/import/archive.rs65
5 files changed, 145 insertions, 126 deletions
diff --git a/tvix/castore/src/blobservice/chunked_reader.rs b/tvix/castore/src/blobservice/chunked_reader.rs
index 6e8355874bca..0e809b300485 100644
--- a/tvix/castore/src/blobservice/chunked_reader.rs
+++ b/tvix/castore/src/blobservice/chunked_reader.rs
@@ -253,14 +253,16 @@ where
 
 #[cfg(test)]
 mod test {
-    use std::{io::SeekFrom, sync::Arc};
+    use std::{
+        io::SeekFrom,
+        sync::{Arc, LazyLock},
+    };
 
     use crate::{
         blobservice::{chunked_reader::ChunkedReader, BlobService, MemoryBlobService},
         B3Digest,
     };
     use hex_literal::hex;
-    use lazy_static::lazy_static;
     use tokio::io::{AsyncReadExt, AsyncSeekExt};
 
     const CHUNK_1: [u8; 2] = hex!("0001");
@@ -269,21 +271,26 @@ mod test {
     const CHUNK_4: [u8; 2] = hex!("0708");
     const CHUNK_5: [u8; 7] = hex!("090a0b0c0d0e0f");
 
-    lazy_static! {
-        // `[ 0 1 ] [ 2 3 4 5 ] [ 6 ] [ 7 8 ] [ 9 10 11 12 13 14 15 ]`
-        pub static ref CHUNK_1_DIGEST: B3Digest = blake3::hash(&CHUNK_1).as_bytes().into();
-        pub static ref CHUNK_2_DIGEST: B3Digest = blake3::hash(&CHUNK_2).as_bytes().into();
-        pub static ref CHUNK_3_DIGEST: B3Digest = blake3::hash(&CHUNK_3).as_bytes().into();
-        pub static ref CHUNK_4_DIGEST: B3Digest = blake3::hash(&CHUNK_4).as_bytes().into();
-        pub static ref CHUNK_5_DIGEST: B3Digest = blake3::hash(&CHUNK_5).as_bytes().into();
-        pub static ref BLOB_1_LIST: [(B3Digest, u64); 5] = [
+    // `[ 0 1 ] [ 2 3 4 5 ] [ 6 ] [ 7 8 ] [ 9 10 11 12 13 14 15 ]`
+    pub static CHUNK_1_DIGEST: LazyLock<B3Digest> =
+        LazyLock::new(|| blake3::hash(&CHUNK_1).as_bytes().into());
+    pub static CHUNK_2_DIGEST: LazyLock<B3Digest> =
+        LazyLock::new(|| blake3::hash(&CHUNK_2).as_bytes().into());
+    pub static CHUNK_3_DIGEST: LazyLock<B3Digest> =
+        LazyLock::new(|| blake3::hash(&CHUNK_3).as_bytes().into());
+    pub static CHUNK_4_DIGEST: LazyLock<B3Digest> =
+        LazyLock::new(|| blake3::hash(&CHUNK_4).as_bytes().into());
+    pub static CHUNK_5_DIGEST: LazyLock<B3Digest> =
+        LazyLock::new(|| blake3::hash(&CHUNK_5).as_bytes().into());
+    pub static BLOB_1_LIST: LazyLock<[(B3Digest, u64); 5]> = LazyLock::new(|| {
+        [
             (CHUNK_1_DIGEST.clone(), 2),
             (CHUNK_2_DIGEST.clone(), 4),
             (CHUNK_3_DIGEST.clone(), 1),
             (CHUNK_4_DIGEST.clone(), 2),
             (CHUNK_5_DIGEST.clone(), 7),
-        ];
-    }
+        ]
+    });
 
     use super::ChunkedBlob;
 
diff --git a/tvix/castore/src/directoryservice/directory_graph.rs b/tvix/castore/src/directoryservice/directory_graph.rs
index 33a03b263b81..54f3cb3e9353 100644
--- a/tvix/castore/src/directoryservice/directory_graph.rs
+++ b/tvix/castore/src/directoryservice/directory_graph.rs
@@ -276,23 +276,21 @@ impl ValidatedDirectoryGraph {
 mod tests {
     use crate::fixtures::{DIRECTORY_A, DIRECTORY_B, DIRECTORY_C};
     use crate::{Directory, Node};
-    use lazy_static::lazy_static;
     use rstest::rstest;
+    use std::sync::LazyLock;
 
     use super::{DirectoryGraph, LeavesToRootValidator, RootToLeavesValidator};
 
-    lazy_static! {
-        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();
-    }
+    pub static BROKEN_PARENT_DIRECTORY: LazyLock<Directory> = LazyLock::new(|| {
+        Directory::try_from_iter([(
+            "foo".try_into().unwrap(),
+            Node::Directory {
+                digest: DIRECTORY_A.digest(),
+                size: DIRECTORY_A.size() + 42, // wrong!
+            },
+        )])
+        .unwrap()
+    });
 
     #[rstest]
     /// Uploading an empty directory should succeed.
diff --git a/tvix/castore/src/directoryservice/from_addr.rs b/tvix/castore/src/directoryservice/from_addr.rs
index 244d78a17bf0..2f7fc6d7de5a 100644
--- a/tvix/castore/src/directoryservice/from_addr.rs
+++ b/tvix/castore/src/directoryservice/from_addr.rs
@@ -45,15 +45,14 @@ pub async fn from_addr(
 
 #[cfg(test)]
 mod tests {
+    use std::sync::LazyLock;
+
     use super::from_addr;
-    use lazy_static::lazy_static;
     use rstest::rstest;
     use tempfile::TempDir;
 
-    lazy_static! {
-        static ref TMPDIR_REDB_1: TempDir = TempDir::new().unwrap();
-        static ref TMPDIR_REDB_2: TempDir = TempDir::new().unwrap();
-    }
+    static TMPDIR_REDB_1: LazyLock<TempDir> = LazyLock::new(|| TempDir::new().unwrap());
+    static TMPDIR_REDB_2: LazyLock<TempDir> = LazyLock::new(|| TempDir::new().unwrap());
 
     #[rstest]
     /// This uses an unsupported scheme.
diff --git a/tvix/castore/src/fixtures.rs b/tvix/castore/src/fixtures.rs
index 05bad916d55f..db0ee59daf60 100644
--- a/tvix/castore/src/fixtures.rs
+++ b/tvix/castore/src/fixtures.rs
@@ -1,104 +1,120 @@
+use bytes::Bytes;
+use std::sync::LazyLock;
+
 use crate::{B3Digest, Directory, Node};
-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: B3Digest = {
-        let u = [0u8; 32];
-        (&u).into()
-    };
-    pub static ref DUMMY_DIGEST_2: B3Digest = {
-        let mut u = [0u8; 32];
-        u[0] = 0x10;
-        (&u).into()
-    };
-    pub static ref DUMMY_DATA_1: bytes::Bytes = vec![0x01, 0x02, 0x03].into();
-    pub static ref DUMMY_DATA_2: bytes::Bytes = vec![0x04, 0x05].into();
+pub static DUMMY_DIGEST: LazyLock<B3Digest> = LazyLock::new(|| (&[0u8; 32]).into());
+pub static DUMMY_DIGEST_2: LazyLock<B3Digest> = LazyLock::new(|| {
+    let mut u = [0u8; 32];
+    u[0] = 0x10;
+    (&u).into()
+});
+pub static DUMMY_DATA_1: LazyLock<Bytes> = LazyLock::new(|| vec![0x01, 0x02, 0x03].into());
+pub static DUMMY_DATA_2: LazyLock<Bytes> = LazyLock::new(|| vec![0x04, 0x05].into());
 
-    pub static ref HELLOWORLD_BLOB_DIGEST: B3Digest =
-        blake3::hash(HELLOWORLD_BLOB_CONTENTS).as_bytes().into();
-    pub static ref EMPTY_BLOB_DIGEST: B3Digest =
-        blake3::hash(EMPTY_BLOB_CONTENTS).as_bytes().into();
+pub static HELLOWORLD_BLOB_DIGEST: LazyLock<B3Digest> =
+    LazyLock::new(|| blake3::hash(HELLOWORLD_BLOB_CONTENTS).as_bytes().into());
+pub static EMPTY_BLOB_DIGEST: LazyLock<B3Digest> =
+    LazyLock::new(|| blake3::hash(EMPTY_BLOB_CONTENTS).as_bytes().into());
 
-    // 2 bytes
-    pub static ref BLOB_A: bytes::Bytes = vec![0x00, 0x01].into();
-    pub static ref BLOB_A_DIGEST: B3Digest = blake3::hash(&BLOB_A).as_bytes().into();
+// 2 bytes
+pub static BLOB_A: LazyLock<Bytes> = LazyLock::new(|| vec![0x00, 0x01].into());
+pub static BLOB_A_DIGEST: LazyLock<B3Digest> =
+    LazyLock::new(|| blake3::hash(&BLOB_A).as_bytes().into());
 
-    // 1MB
-    pub static ref BLOB_B: bytes::Bytes = (0..255).collect::<Vec<u8>>().repeat(4 * 1024).into();
-    pub static ref BLOB_B_DIGEST: B3Digest = blake3::hash(&BLOB_B).as_bytes().into();
+// 1MB
+pub static BLOB_B: LazyLock<Bytes> =
+    LazyLock::new(|| (0..255).collect::<Vec<u8>>().repeat(4 * 1024).into());
+pub static BLOB_B_DIGEST: LazyLock<B3Digest> =
+    LazyLock::new(|| blake3::hash(&BLOB_B).as_bytes().into());
 
-    // Directories
-    pub static ref DIRECTORY_WITH_KEEP: Directory = Directory::try_from_iter([(
+// Directories
+pub static DIRECTORY_WITH_KEEP: LazyLock<Directory> = LazyLock::new(|| {
+    Directory::try_from_iter([(
         ".keep".try_into().unwrap(),
-        Node::File{
+        Node::File {
             digest: EMPTY_BLOB_DIGEST.clone(),
             size: 0,
-            executable: false
-    })]).unwrap();
-    pub static ref DIRECTORY_COMPLICATED: Directory = Directory::try_from_iter([
+            executable: false,
+        },
+    )])
+    .unwrap()
+});
+pub static DIRECTORY_COMPLICATED: LazyLock<Directory> = LazyLock::new(|| {
+    Directory::try_from_iter([
         (
             "keep".try_into().unwrap(),
-            Node::Directory{
+            Node::Directory {
                 digest: DIRECTORY_WITH_KEEP.digest(),
-                size: DIRECTORY_WITH_KEEP.size()
-            }
+                size: DIRECTORY_WITH_KEEP.size(),
+            },
         ),
         (
             ".keep".try_into().unwrap(),
-            Node::File{
+            Node::File {
                 digest: EMPTY_BLOB_DIGEST.clone(),
                 size: 0,
-                executable: false
-            }
+                executable: false,
+            },
         ),
         (
             "aa".try_into().unwrap(),
-            Node::Symlink{
-                target: "/nix/store/somewhereelse".try_into().unwrap()
-            }
-        )
-    ]).unwrap();
-    pub static ref DIRECTORY_A: Directory = Directory::new();
-    pub static ref DIRECTORY_B: Directory = Directory::try_from_iter([(
-            "a".try_into().unwrap(),
-            Node::Directory{
-                digest: DIRECTORY_A.digest(),
-                size: DIRECTORY_A.size(),
-            }
-    )]).unwrap();
-    pub static ref DIRECTORY_C: Directory = Directory::try_from_iter([
+            Node::Symlink {
+                target: "/nix/store/somewhereelse".try_into().unwrap(),
+            },
+        ),
+    ])
+    .unwrap()
+});
+pub static DIRECTORY_A: LazyLock<Directory> = LazyLock::new(Directory::new);
+pub static DIRECTORY_B: LazyLock<Directory> = LazyLock::new(|| {
+    Directory::try_from_iter([(
+        "a".try_into().unwrap(),
+        Node::Directory {
+            digest: DIRECTORY_A.digest(),
+            size: DIRECTORY_A.size(),
+        },
+    )])
+    .unwrap()
+});
+pub static DIRECTORY_C: LazyLock<Directory> = LazyLock::new(|| {
+    Directory::try_from_iter([
         (
             "a".try_into().unwrap(),
-            Node::Directory{
+            Node::Directory {
                 digest: DIRECTORY_A.digest(),
                 size: DIRECTORY_A.size(),
-            }
+            },
         ),
         (
             "a'".try_into().unwrap(),
-            Node::Directory{
+            Node::Directory {
                 digest: DIRECTORY_A.digest(),
                 size: DIRECTORY_A.size(),
-            }
-        )
-    ]).unwrap();
-    pub static ref DIRECTORY_D: Directory = Directory::try_from_iter([
+            },
+        ),
+    ])
+    .unwrap()
+});
+pub static DIRECTORY_D: LazyLock<Directory> = LazyLock::new(|| {
+    Directory::try_from_iter([
         (
             "a".try_into().unwrap(),
-            Node::Directory{
+            Node::Directory {
                 digest: DIRECTORY_A.digest(),
                 size: DIRECTORY_A.size(),
-            }
+            },
         ),
         (
             "b".try_into().unwrap(),
-            Node::Directory{
+            Node::Directory {
                 digest: DIRECTORY_B.digest(),
                 size: DIRECTORY_B.size(),
-            }
-        )
-    ]).unwrap();
-}
+            },
+        ),
+    ])
+    .unwrap()
+});
diff --git a/tvix/castore/src/import/archive.rs b/tvix/castore/src/import/archive.rs
index 167f799efa0f..4cbff687b864 100644
--- a/tvix/castore/src/import/archive.rs
+++ b/tvix/castore/src/import/archive.rs
@@ -292,44 +292,43 @@ impl IngestionEntryGraph {
 
 #[cfg(test)]
 mod test {
-    use crate::import::IngestionEntry;
-    use crate::B3Digest;
+    use std::sync::LazyLock;
 
     use super::{Error, IngestionEntryGraph};
+    use crate::import::IngestionEntry;
+    use crate::B3Digest;
 
-    use lazy_static::lazy_static;
     use rstest::rstest;
 
-    lazy_static! {
-        pub static ref EMPTY_DIGEST: B3Digest = blake3::hash(&[]).as_bytes().into();
-        pub static ref DIR_A: IngestionEntry = IngestionEntry::Dir {
-            path: "a".parse().unwrap()
-        };
-        pub static ref DIR_B: IngestionEntry = IngestionEntry::Dir {
-            path: "b".parse().unwrap()
-        };
-        pub static ref DIR_A_B: IngestionEntry = IngestionEntry::Dir {
-            path: "a/b".parse().unwrap()
-        };
-        pub static ref FILE_A: IngestionEntry = IngestionEntry::Regular {
-            path: "a".parse().unwrap(),
-            size: 0,
-            executable: false,
-            digest: EMPTY_DIGEST.clone(),
-        };
-        pub static ref FILE_A_B: IngestionEntry = IngestionEntry::Regular {
-            path: "a/b".parse().unwrap(),
-            size: 0,
-            executable: false,
-            digest: EMPTY_DIGEST.clone(),
-        };
-        pub static ref FILE_A_B_C: IngestionEntry = IngestionEntry::Regular {
-            path: "a/b/c".parse().unwrap(),
-            size: 0,
-            executable: false,
-            digest: EMPTY_DIGEST.clone(),
-        };
-    }
+    pub static EMPTY_DIGEST: LazyLock<B3Digest> =
+        LazyLock::new(|| blake3::hash(&[]).as_bytes().into());
+    pub static DIR_A: LazyLock<IngestionEntry> = LazyLock::new(|| IngestionEntry::Dir {
+        path: "a".parse().unwrap(),
+    });
+    pub static DIR_B: LazyLock<IngestionEntry> = LazyLock::new(|| IngestionEntry::Dir {
+        path: "b".parse().unwrap(),
+    });
+    pub static DIR_A_B: LazyLock<IngestionEntry> = LazyLock::new(|| IngestionEntry::Dir {
+        path: "a/b".parse().unwrap(),
+    });
+    pub static FILE_A: LazyLock<IngestionEntry> = LazyLock::new(|| IngestionEntry::Regular {
+        path: "a".parse().unwrap(),
+        size: 0,
+        executable: false,
+        digest: EMPTY_DIGEST.clone(),
+    });
+    pub static FILE_A_B: LazyLock<IngestionEntry> = LazyLock::new(|| IngestionEntry::Regular {
+        path: "a/b".parse().unwrap(),
+        size: 0,
+        executable: false,
+        digest: EMPTY_DIGEST.clone(),
+    });
+    pub static FILE_A_B_C: LazyLock<IngestionEntry> = LazyLock::new(|| IngestionEntry::Regular {
+        path: "a/b/c".parse().unwrap(),
+        size: 0,
+        executable: false,
+        digest: EMPTY_DIGEST.clone(),
+    });
 
     #[rstest]
     #[case::implicit_directories(&[&*FILE_A_B_C], &[&*FILE_A_B_C, &*DIR_A_B, &*DIR_A])]