agentos_native_sidecar_core/
identity.rs1use agentos_kernel::resource_accounting::ResourceLimits;
2use agentos_kernel::user::UserManager;
3
4use crate::{virtual_os_cpu_count, virtual_os_freemem_bytes, virtual_os_totalmem_bytes};
5
6#[derive(Debug, Clone, PartialEq, Eq)]
7pub struct SharedGuestRuntimeIdentity {
8 pub virtual_pid: Option<u64>,
9 pub virtual_ppid: Option<u64>,
10 pub virtual_uid: u64,
11 pub virtual_gid: u64,
12 pub process_platform: String,
13 pub process_arch: String,
14 pub os_cpu_count: u64,
15 pub os_totalmem: u64,
16 pub os_freemem: u64,
17 pub os_homedir: String,
18 pub os_hostname: String,
19 pub os_shell: String,
20 pub os_user: String,
21 pub os_tmpdir: String,
22 pub os_type: String,
23 pub os_release: String,
24 pub os_version: String,
25 pub os_machine: String,
26}
27
28pub fn shared_guest_runtime_identity(
29 user: &UserManager,
30 resource_limits: &ResourceLimits,
31 virtual_pid: Option<u64>,
32 virtual_ppid: Option<u64>,
33) -> SharedGuestRuntimeIdentity {
34 SharedGuestRuntimeIdentity {
35 virtual_pid,
36 virtual_ppid,
37 virtual_uid: u64::from(user.uid),
38 virtual_gid: u64::from(user.gid),
39 process_platform: String::from("linux"),
40 process_arch: String::from("x64"),
41 os_cpu_count: virtual_os_cpu_count(resource_limits) as u64,
42 os_totalmem: virtual_os_totalmem_bytes(resource_limits),
43 os_freemem: virtual_os_freemem_bytes(resource_limits),
44 os_homedir: user.homedir.clone(),
45 os_hostname: String::from("secure-exec"),
46 os_shell: user.shell.clone(),
47 os_user: user.username.clone(),
48 os_tmpdir: String::from("/tmp"),
49 os_type: String::from("Linux"),
50 os_release: String::from("6.8.0-secure-exec"),
51 os_version: String::from("#1 SMP PREEMPT_DYNAMIC secure-exec"),
52 os_machine: String::from("x86_64"),
53 }
54}
55
56#[cfg(test)]
57mod tests {
58 use super::*;
59 use agentos_kernel::resource_accounting::ResourceLimits;
60 use agentos_kernel::user::{UserConfig, UserManager};
61
62 #[test]
63 fn builds_guest_identity_from_kernel_user_and_limits() {
64 let user = UserManager::from_config(UserConfig {
65 uid: Some(501),
66 gid: Some(20),
67 username: Some(String::from("runner")),
68 homedir: Some(String::from("/Users/runner")),
69 shell: Some(String::from("/bin/zsh")),
70 ..UserConfig::default()
71 });
72 let limits = ResourceLimits {
73 virtual_cpu_count: Some(6),
74 max_wasm_memory_bytes: Some(512 * 1024 * 1024),
75 ..ResourceLimits::default()
76 };
77
78 let identity = shared_guest_runtime_identity(&user, &limits, Some(42), Some(1));
79
80 assert_eq!(identity.virtual_pid, Some(42));
81 assert_eq!(identity.virtual_ppid, Some(1));
82 assert_eq!(identity.virtual_uid, 501);
83 assert_eq!(identity.virtual_gid, 20);
84 assert_eq!(identity.process_platform, "linux");
85 assert_eq!(identity.process_arch, "x64");
86 assert_eq!(identity.os_cpu_count, 6);
87 assert_eq!(identity.os_totalmem, 512 * 1024 * 1024);
88 assert_eq!(identity.os_homedir, "/Users/runner");
89 assert_eq!(identity.os_hostname, "secure-exec");
90 assert_eq!(identity.os_shell, "/bin/zsh");
91 assert_eq!(identity.os_user, "runner");
92 assert_eq!(identity.os_tmpdir, "/tmp");
93 assert_eq!(identity.os_type, "Linux");
94 assert_eq!(identity.os_release, "6.8.0-secure-exec");
95 assert_eq!(identity.os_version, "#1 SMP PREEMPT_DYNAMIC secure-exec");
96 assert_eq!(identity.os_machine, "x86_64");
97 }
98}