# Sandbox Security Tests Automated tests for the Mosis Lua sandbox security implementation. ## Prerequisites - CMake 3.22+ - vcpkg with packages: `lua`, `nlohmann-json` - MSVC or compatible C++23 compiler ## Build ```bash # From sandbox-test directory cd D:\Dev\Mosis\MosisService\sandbox-test # Configure with vcpkg cmake -B build -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake # Build cmake --build build --config Debug ``` ## Run Tests ### Run All Tests (Uber Command) ```bash # Windows .\run_tests.bat # Or directly .\build\Debug\sandbox-test.exe ``` ### Run Specific Test ```bash .\build\Debug\sandbox-test.exe --test DangerousGlobals .\build\Debug\sandbox-test.exe --test Memory .\build\Debug\sandbox-test.exe --test CPU ``` ### Custom Output File ```bash .\build\Debug\sandbox-test.exe --output my_results.json ``` ## Test List | Test Name | Description | Script | |-----------|-------------|--------| | `DangerousGlobalsRemoved` | Verifies os, io, debug, etc. are nil | `test_globals_removed.lua` | | `BytecodeRejected` | Verifies binary Lua chunks are rejected | (C++ only) | | `MemoryLimitEnforced` | Verifies memory allocation limit works | `test_memory_limit.lua` | | `CPULimitEnforced` | Verifies instruction count limit works | `test_cpu_limit.lua` | | `MetatableProtected` | Verifies _G and string metatable are frozen | `test_metatable_protected.lua` | | `SafeOperationsWork` | Verifies normal Lua operations still work | `test_safe_operations.lua` | | `StringDumpRemoved` | Verifies string.dump is nil | `test_string_dump_removed.lua` | | `MemoryTracking` | Verifies memory usage is tracked | (C++ only) | | `InstructionCounting` | Verifies instruction count is tracked | (C++ only) | | `MultipleLoads` | Verifies multiple scripts can be loaded | (C++ only) | | `ErrorRecovery` | Verifies sandbox recovers from errors | (C++ only) | ## Output Format Tests produce a JSON report at `test_results.json`: ```json { "name": "Lua Sandbox Security Tests", "timestamp": "2024-01-15T10:30:00Z", "summary": { "passed": 11, "failed": 0, "total": 11 }, "tests": [ { "name": "DangerousGlobalsRemoved", "status": "passed", "duration_ms": 5 } ] } ``` ## Exit Codes - `0` - All tests passed - `1` - One or more tests failed ## Adding New Tests 1. Create Lua script in `scripts/` directory 2. Add C++ test function in `main.cpp`: ```cpp bool Test_MyNewTest(std::string& error_msg) { LuaSandbox sandbox(TestContext()); // ... test logic return true; } ``` 3. Register in `main()`: ```cpp harness.AddTest("MyNewTest", Test_MyNewTest); ``` ## Debugging Failed Tests 1. Run specific test: `--test TestName` 2. Check Lua script in `scripts/` for expected behavior 3. Check `test_results.json` for error details 4. Add print statements to Lua scripts (output goes to console) ## CI Integration ```bash # In CI script cd sandbox-test cmake -B build -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake cmake --build build --config Release ./build/Release/sandbox-test.exe --output ci_results.json # Check exit code if [ $? -ne 0 ]; then echo "Sandbox tests failed!" cat ci_results.json exit 1 fi ```