Skip to main content

agentos_native_sidecar_core/
identity.rs

1use 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}