steam_update func runs SteamCMD per game (rust/conan/soulmask app-ids;
dune rejected), streaming stdout to {instance}.steam_status. Jailed
file manager on {instance}.files.cmd: list/read/write/delete/rename/
mkdir/mkfile/move/copy, all confined to instance root via two-stage
lexical-normalize + canonicalize (defeats ../ traversal AND symlink
escape — incl chained symlinks). Replaces the Go agent's UNJAILED
legacy files API (retired, not ported). 5MiB read cap.
42/42 tests green: 24 filemanager incl 7 jail-escape attempts
(dotdot, deep dotdot, absolute, symlink-inside, direct symlink,
chained symlink), 5 steamcmd app-id (cfg-gated win/linux soulmask).
Jail logic reviewed line-by-line: Path::starts_with is component-wise
(no sibling-prefix bypass), non-existent suffix components can't be
symlinks, leading .. normalizes to / and fails the prefix check.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
46 lines
1.2 KiB
Rust
46 lines
1.2 KiB
Rust
//! Unit tests for the SteamCMD module.
|
|
//!
|
|
//! Tests cover app ID resolution for all four supported games, including the
|
|
//! platform-specific Soulmask split, and verify that Dune correctly returns
|
|
//! `None` (it uses Docker images, not SteamCMD).
|
|
|
|
use corrosion_host_agent::steamcmd::app_id_for_game;
|
|
|
|
#[test]
|
|
fn rust_has_correct_app_id() {
|
|
assert_eq!(app_id_for_game("rust"), Some(258550));
|
|
}
|
|
|
|
#[test]
|
|
fn conan_has_correct_app_id() {
|
|
assert_eq!(app_id_for_game("conan"), Some(443030));
|
|
}
|
|
|
|
/// Soulmask returns the Windows server app ID on Windows builds, the Linux
|
|
/// dedicated server app ID on all other targets.
|
|
#[test]
|
|
#[cfg(windows)]
|
|
fn soulmask_windows_app_id() {
|
|
assert_eq!(app_id_for_game("soulmask"), Some(3017310));
|
|
}
|
|
|
|
#[test]
|
|
#[cfg(not(windows))]
|
|
fn soulmask_linux_app_id() {
|
|
assert_eq!(app_id_for_game("soulmask"), Some(3017300));
|
|
}
|
|
|
|
/// Dune uses Docker images — SteamCMD integration is explicitly unsupported.
|
|
#[test]
|
|
fn dune_has_no_app_id() {
|
|
assert_eq!(app_id_for_game("dune"), None);
|
|
}
|
|
|
|
/// Unknown games also produce None; callers should treat this the same as
|
|
/// Dune (no SteamCMD support).
|
|
#[test]
|
|
fn unknown_game_returns_none() {
|
|
assert_eq!(app_id_for_game("minecraft"), None);
|
|
assert_eq!(app_id_for_game(""), None);
|
|
}
|