Something went wrong. Try again.
fork of gpui
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102#!/usr/bin/env pwsh# Provision the default WSL distro for the Windows sandbox behavior tests and# run them. The Windows analog of running `cargo xtask sandbox-tests` on Linux.## What it does:# 1. Checks that WSL is installed.# 2. (Unless -NoProvision) installs `bubblewrap` into the default distro and# enables unprivileged user namespaces, so the sandbox can actually be# enforced. Without both, the helper can only SKIP the enforcement checks —# it can't verify a sandbox that was never set up. On Ubuntu 24.04 (the# current default WSL distro) user namespaces are restricted by AppArmor by# default, which is exactly why this step is needed.# 3. Runs `cargo xtask wsl-sandbox-tests`, which builds and runs# `wsl_sandbox_test_helper` against the real WSL/Bubblewrap sandbox.## By default it requires the sandbox to actually be enforced (so a broken setup# fails loudly instead of silently skipping). Pass -AllowSkip to keep the# helper's default skip-when-unenforceable behavior.## Notes:# * Provisioning runs as root via `wsl -u root`, so it needs no sudo password.# * Auto-provisioning only supports apt-based distros (Ubuntu/Debian). For# others, install `bubblewrap` yourself and re-run with -NoProvision.# * The user-namespace sysctl is set for the running WSL VM only; it resets# after `wsl --shutdown`.# * If the network checks are skipped, Windows Firewall may be blocking the# test's local listener; that only affects the network assertions.## Usage:# ./script/test-wsl-sandbox.ps1# ./script/test-wsl-sandbox.ps1 -NoProvision# ./script/test-wsl-sandbox.ps1 -Release# ./script/test-wsl-sandbox.ps1 -AllowSkip
[CmdletBinding()]param( [switch]$NoProvision, [switch]$Release, [switch]$AllowSkip)
$ErrorActionPreference = "Stop"
if (-not (Get-Command wsl.exe -ErrorAction SilentlyContinue)) { Write-Error "wsl.exe was not found. Install WSL (https://learn.microsoft.com/windows/wsl/install) and try again."}
# Run a command in the default WSL distro as root, throwing on failure.function Invoke-WslRoot { param([Parameter(Mandatory = $true)][string]$Script) & wsl.exe -u root -- sh -c $Script if ($LASTEXITCODE -ne 0) { throw "WSL command failed (exit $LASTEXITCODE): $Script" }}
# Run a command in the default WSL distro as the default user, returning its# exit code instead of throwing.function Test-Wsl { param([Parameter(Mandatory = $true)][string]$Script) & wsl.exe -- sh -lc $Script *> $null return $LASTEXITCODE}
if (-not $NoProvision) { Write-Host "==> Provisioning the default WSL distro for sandbox testing"
if ((Test-Wsl "command -v apt-get >/dev/null 2>&1") -eq 0) { Write-Host " Installing bubblewrap (apt-get)..." Invoke-WslRoot "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y bubblewrap" } else { Write-Warning "Auto-provisioning only supports apt-based distros. Install 'bubblewrap' in your default WSL distro manually, then re-run with -NoProvision." }
Write-Host " Enabling unprivileged user namespaces (for this WSL VM session)..." # Older kernels lack this key (the AppArmor restriction simply isn't # present), so don't treat a missing key as an error. Invoke-WslRoot "sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 2>/dev/null || true"}
if ((Test-Wsl "command -v bwrap >/dev/null 2>&1") -ne 0) { Write-Warning "bwrap is not installed in the default WSL distro; the sandbox cannot be enforced. Install 'bubblewrap' (or run without -NoProvision)."}
$repoRoot = Split-Path -Parent $PSScriptRootPush-Location $repoRoottry { $xtaskArgs = @("xtask", "wsl-sandbox-tests") if (-not $AllowSkip) { $xtaskArgs += "--require-enforced" } if ($Release) { $xtaskArgs += "--release" }
Write-Host "==> Running: cargo $($xtaskArgs -join ' ')" & cargo @xtaskArgs $exitCode = $LASTEXITCODE}finally { Pop-Location}
exit $exitCode