snix_castore/
fixtures.rs

1use bytes::Bytes;
2use std::sync::LazyLock;
3
4use crate::{B3Digest, Directory, Node};
5
6pub const HELLOWORLD_BLOB_CONTENTS: &[u8] = b"Hello World!";
7pub const EMPTY_BLOB_CONTENTS: &[u8] = b"";
8
9pub static DUMMY_DIGEST: LazyLock<B3Digest> = LazyLock::new(|| (&[0u8; 32]).into());
10pub static DUMMY_DIGEST_2: LazyLock<B3Digest> = LazyLock::new(|| {
11    let mut u = [0u8; 32];
12    u[0] = 0x10;
13    (&u).into()
14});
15pub static DUMMY_DATA_1: LazyLock<Bytes> = LazyLock::new(|| vec![0x01, 0x02, 0x03].into());
16pub static DUMMY_DATA_2: LazyLock<Bytes> = LazyLock::new(|| vec![0x04, 0x05].into());
17
18pub static HELLOWORLD_BLOB_DIGEST: LazyLock<B3Digest> =
19    LazyLock::new(|| blake3::hash(HELLOWORLD_BLOB_CONTENTS).as_bytes().into());
20pub static EMPTY_BLOB_DIGEST: LazyLock<B3Digest> =
21    LazyLock::new(|| blake3::hash(EMPTY_BLOB_CONTENTS).as_bytes().into());
22
23// 2 bytes
24pub static BLOB_A: LazyLock<Bytes> = LazyLock::new(|| vec![0x00, 0x01].into());
25pub static BLOB_A_DIGEST: LazyLock<B3Digest> =
26    LazyLock::new(|| blake3::hash(&BLOB_A).as_bytes().into());
27
28// 1MB
29pub static BLOB_B: LazyLock<Bytes> =
30    LazyLock::new(|| (0..255).collect::<Vec<u8>>().repeat(4 * 1024).into());
31pub static BLOB_B_DIGEST: LazyLock<B3Digest> =
32    LazyLock::new(|| blake3::hash(&BLOB_B).as_bytes().into());
33
34// Directories
35pub static DIRECTORY_WITH_KEEP: LazyLock<Directory> = LazyLock::new(|| {
36    Directory::try_from_iter([(
37        ".keep".try_into().unwrap(),
38        Node::File {
39            digest: EMPTY_BLOB_DIGEST.clone(),
40            size: 0,
41            executable: false,
42        },
43    )])
44    .unwrap()
45});
46pub static DIRECTORY_COMPLICATED: LazyLock<Directory> = LazyLock::new(|| {
47    Directory::try_from_iter([
48        (
49            "keep".try_into().unwrap(),
50            Node::Directory {
51                digest: DIRECTORY_WITH_KEEP.digest(),
52                size: DIRECTORY_WITH_KEEP.size(),
53            },
54        ),
55        (
56            ".keep".try_into().unwrap(),
57            Node::File {
58                digest: EMPTY_BLOB_DIGEST.clone(),
59                size: 0,
60                executable: false,
61            },
62        ),
63        (
64            "aa".try_into().unwrap(),
65            Node::Symlink {
66                target: "/nix/store/somewhereelse".try_into().unwrap(),
67            },
68        ),
69    ])
70    .unwrap()
71});
72pub static DIRECTORY_A: LazyLock<Directory> = LazyLock::new(Directory::new);
73pub static DIRECTORY_B: LazyLock<Directory> = LazyLock::new(|| {
74    Directory::try_from_iter([(
75        "a".try_into().unwrap(),
76        Node::Directory {
77            digest: DIRECTORY_A.digest(),
78            size: DIRECTORY_A.size(),
79        },
80    )])
81    .unwrap()
82});
83pub static DIRECTORY_C: LazyLock<Directory> = LazyLock::new(|| {
84    Directory::try_from_iter([
85        (
86            "a".try_into().unwrap(),
87            Node::Directory {
88                digest: DIRECTORY_A.digest(),
89                size: DIRECTORY_A.size(),
90            },
91        ),
92        (
93            "a'".try_into().unwrap(),
94            Node::Directory {
95                digest: DIRECTORY_A.digest(),
96                size: DIRECTORY_A.size(),
97            },
98        ),
99    ])
100    .unwrap()
101});
102pub static DIRECTORY_D: LazyLock<Directory> = LazyLock::new(|| {
103    Directory::try_from_iter([
104        (
105            "a".try_into().unwrap(),
106            Node::Directory {
107                digest: DIRECTORY_A.digest(),
108                size: DIRECTORY_A.size(),
109            },
110        ),
111        (
112            "b".try_into().unwrap(),
113            Node::Directory {
114                digest: DIRECTORY_B.digest(),
115                size: DIRECTORY_B.size(),
116            },
117        ),
118    ])
119    .unwrap()
120});