a3s_box_runtime/rootfs/
layout.rs1pub const GUEST_WORKDIR: &str = "/workspace";
7
8#[derive(Debug, Clone)]
10pub struct GuestLayout {
11 pub workspace_dir: &'static str,
13
14 pub tmp_dir: &'static str,
16
17 pub run_dir: &'static str,
19}
20
21impl Default for GuestLayout {
22 fn default() -> Self {
23 Self {
24 workspace_dir: "/workspace",
25 tmp_dir: "/tmp",
26 run_dir: "/run",
27 }
28 }
29}
30
31impl GuestLayout {
32 pub fn standard() -> Self {
34 Self::default()
35 }
36
37 pub fn required_dirs(&self) -> Vec<&str> {
39 vec![
40 self.workspace_dir,
41 self.tmp_dir,
42 self.run_dir,
43 "/dev",
44 "/proc",
45 "/sys",
46 "/etc",
47 "/var",
48 "/var/tmp",
49 "/var/log",
50 ]
51 }
52}
53
54#[cfg(test)]
55mod tests {
56 use super::*;
57
58 #[test]
59 fn test_guest_layout_defaults() {
60 let layout = GuestLayout::default();
61 assert_eq!(layout.workspace_dir, "/workspace");
62 assert_eq!(layout.tmp_dir, "/tmp");
63 assert_eq!(layout.run_dir, "/run");
64 }
65
66 #[test]
67 fn test_guest_layout_standard_equals_default() {
68 let standard = GuestLayout::standard();
69 let default = GuestLayout::default();
70 assert_eq!(standard.workspace_dir, default.workspace_dir);
71 assert_eq!(standard.tmp_dir, default.tmp_dir);
72 }
73
74 #[test]
75 fn test_required_dirs_contains_all_layout_dirs() {
76 let layout = GuestLayout::standard();
77 let dirs = layout.required_dirs();
78
79 assert!(dirs.contains(&layout.workspace_dir));
80 assert!(dirs.contains(&layout.tmp_dir));
81 assert!(dirs.contains(&layout.run_dir));
82 }
83
84 #[test]
85 fn test_required_dirs_contains_system_dirs() {
86 let layout = GuestLayout::standard();
87 let dirs = layout.required_dirs();
88
89 assert!(dirs.contains(&"/dev"));
90 assert!(dirs.contains(&"/proc"));
91 assert!(dirs.contains(&"/sys"));
92 assert!(dirs.contains(&"/etc"));
93 assert!(dirs.contains(&"/var"));
94 assert!(dirs.contains(&"/var/tmp"));
95 assert!(dirs.contains(&"/var/log"));
96 }
97
98 #[test]
99 fn test_guest_workdir_constant() {
100 assert_eq!(GUEST_WORKDIR, "/workspace");
101 let layout = GuestLayout::default();
102 assert_eq!(GUEST_WORKDIR, layout.workspace_dir);
103 }
104
105 #[test]
106 fn test_guest_layout_clone() {
107 let layout = GuestLayout::default();
108 let cloned = layout.clone();
109 assert_eq!(layout.workspace_dir, cloned.workspace_dir);
110 assert_eq!(layout.tmp_dir, cloned.tmp_dir);
111 }
112}