windows-sandbox-rs/src/wrapper_tests.rs
106 lines
use std::collections::HashMap;use std::path::Path;use std::path::PathBuf;use codex_protocol::config_types::WindowsSandboxLevel;use codex_protocol::models::PermissionProfile;use codex_protocol::permissions::NetworkSandboxPolicy;use codex_utils_absolute_path::AbsolutePathBuf;use pretty_assertions::assert_eq;use super::CODEX_HOME_FLAG;use super::CODEX_WINDOWS_SANDBOX_ARG1;use super::COMMAND_CWD_FLAG;use super::DENY_READ_PATHS_JSON_FLAG;use super::DENY_WRITE_PATHS_JSON_FLAG;use super::ENV_JSON_FLAG;use super::PERMISSION_PROFILE_FLAG;use super::PRIVATE_DESKTOP_FLAG;use super::PROXY_ENFORCED_FLAG;use super::READ_ROOTS_INCLUDE_PLATFORM_DEFAULTS_FLAG;use super::READ_ROOTS_JSON_FLAG;use super::SANDBOX_LEVEL_FLAG;use super::WORKSPACE_ROOT_FLAG;use super::WRITE_ROOTS_JSON_FLAG;use super::create_windows_sandbox_command_args_for_permission_profile;use super::parse_windows_sandbox_wrapper_args;#[test]fn windows_wrapper_args_round_trip() { let command_cwd = AbsolutePathBuf::from_absolute_path(Path::new(r"C:\workspace")) .expect("absolute command cwd"); let workspace_roots = vec![ command_cwd.clone(), AbsolutePathBuf::from_absolute_path(Path::new(r"D:\other-workspace")) .expect("absolute workspace root"), ]; let env = HashMap::from([("Path".to_string(), r"C:\Windows\System32".to_string())]); let permission_profile = PermissionProfile::External { network: NetworkSandboxPolicy::Restricted, }; let read_roots_override = vec![PathBuf::from(r"C:\read")]; let write_roots_override = vec![PathBuf::from(r"C:\write")]; let deny_read_paths_override = vec![ AbsolutePathBuf::from_absolute_path(Path::new(r"C:\blocked-read")) .expect("absolute deny-read"), ]; let deny_write_paths_override = vec![ AbsolutePathBuf::from_absolute_path(Path::new(r"C:\blocked-write")) .expect("absolute deny-write"), ]; let args = create_windows_sandbox_command_args_for_permission_profile( vec![ "codex.exe".to_string(), "--codex-run-as-fs-helper".to_string(), ], &command_cwd, workspace_roots.as_slice(), &env, &permission_profile, WindowsSandboxLevel::Elevated, /*windows_sandbox_private_desktop*/ true, /*proxy_enforced*/ true, Some(read_roots_override.as_slice()), /*read_roots_include_platform_defaults*/ true, Some(write_roots_override.as_slice()), deny_read_paths_override.as_slice(), deny_write_paths_override.as_slice(), Path::new(r"C:\Users\me\.codex"), ); assert_eq!(args[0], CODEX_WINDOWS_SANDBOX_ARG1); assert!(args.contains(&CODEX_HOME_FLAG.to_string())); assert!(args.contains(&COMMAND_CWD_FLAG.to_string())); assert!(args.contains(&WORKSPACE_ROOT_FLAG.to_string())); assert!(args.contains(&PERMISSION_PROFILE_FLAG.to_string())); assert!(args.contains(&ENV_JSON_FLAG.to_string())); assert!(args.contains(&SANDBOX_LEVEL_FLAG.to_string())); assert!(args.contains(&PRIVATE_DESKTOP_FLAG.to_string())); assert!(args.contains(&PROXY_ENFORCED_FLAG.to_string())); assert!(args.contains(&READ_ROOTS_JSON_FLAG.to_string())); assert!(args.contains(&READ_ROOTS_INCLUDE_PLATFORM_DEFAULTS_FLAG.to_string())); assert!(args.contains(&WRITE_ROOTS_JSON_FLAG.to_string())); assert!(args.contains(&DENY_READ_PATHS_JSON_FLAG.to_string())); assert!(args.contains(&DENY_WRITE_PATHS_JSON_FLAG.to_string())); let parsed = parse_windows_sandbox_wrapper_args(args[1..].to_vec()).expect("parse wrapper args"); assert_eq!( parsed.command, vec!["codex.exe", "--codex-run-as-fs-helper"] ); assert_eq!(parsed.command_cwd, command_cwd); assert_eq!(parsed.workspace_roots, workspace_roots); assert_eq!(parsed.env_map, env); assert_eq!(parsed.permission_profile, permission_profile); assert_eq!(parsed.windows_sandbox_level, WindowsSandboxLevel::Elevated); assert_eq!(parsed.windows_sandbox_private_desktop, true); assert_eq!(parsed.proxy_enforced, true); assert_eq!(parsed.read_roots_override, Some(read_roots_override)); assert_eq!(parsed.read_roots_include_platform_defaults, true); assert_eq!(parsed.write_roots_override, Some(write_roots_override)); assert_eq!(parsed.deny_read_paths_override, deny_read_paths_override); assert_eq!(parsed.deny_write_paths_override, deny_write_paths_override);}