class Bootstrapper

Constants

protected RUNTIME_PROCESS_MARKER

Properties

static protected Config|null $configuration
static protected Filesystem|null $filesystem
static protected string|null $runtimePath

The path to the disposable runtime copy of the workbench.

static protected string|null $runtimeSourcePath

The skeleton directory the runtime copy was made from.

static protected string|null $runtimeVendorPath

The working package's vendor directory, which the runtime copy links when its skeleton has none.

Methods

static void
bootstrap(string|null $configurationPath = null)

Bootstrap the testbench environment.

static array
getConfig()

Get the configuration attributes as an array.

static Config|null
getConfiguration()

Get the cached configuration instance.

static bool
ownsRuntimePath(string $path)

Determine if the given path is the disposable runtime copy created by this process.

static string|null
runtimeSourcePath()

Get the skeleton directory the runtime copy created by this process was made from.

static string|null
runtimeVendorPath()

Get the working package's vendor directory, which the runtime copy created by this process links when its skeleton has none.

static bool
isRuntimeCopy(string $path)

Determine if the given path is a disposable runtime copy.

static string|null
explicitApplicationBasePath()

Get the application base path set explicitly through APP_BASE_PATH.

static string|null
commandApplicationBasePath(Config $config, string $workingPath)

Get the persistent application base path a Testbench command runs on.

static Filesystem
getFilesystem()

Get the filesystem instance.

static void
loadConfigFromYaml(string $workingPath, string|null $filename = 'testbench.yaml', array $defaults = [])

Load and cache the configuration from the Yaml file.

static string
resolveConfigurationPath(string $workingPath)

Resolve the directory that owns the active testbench.yaml file.

static bool
hasConfigurationFile(string $workingPath, string $filename = 'testbench.yaml')

Determine if the given path contains a testbench configuration file.

static void
exportAbsoluteComposerVendorDirectory(string $workingPath)

Make a relative COMPOSER_VENDOR_DIR absolute against the package root.

static string
createRuntimeCopy(string $sourcePath, string $workingPath)

Create a disposable runtime copy of the skeleton directory.

static bool
copySkeleton(Filesystem $filesystem, string $sourcePath, string $runtimePath, string $workingVendorPath)

Copy the skeleton into the runtime copy.

static void
purgeStaleRuntimeCopies(string $tempDirectory, int $pid)

Purge stale runtime copies left by interrupted test processes.

static void
copyPackageEnvironmentFile(Filesystem $filesystem, string $runtimePath, string $workingPath)

Copy the package or workbench environment file into the runtime copy.

static string
testbenchEnvironmentFile()

Determine the active Testbench environment file name.

static string
resolveRuntimeBasePath(string $sourcePath, string $workingPath)

Resolve the runtime base path for the current process.

static string|null
parentBasePath()

Get the parent's base path that a remote child process shares.

static void
deleteRuntimeCopy()

Delete the disposable runtime copy.

static void
deleteRuntimeDirectory(string $directory)

Delete a runtime copy on a best-effort basis.

static bool
isOrphanedServeProcess(int $pid, string $runtimeDir)

Determine if the given PID is an orphaned serve process.

static bool
matchesServeProcessIdentity(int $pid, string $runtimeDir)

Determine whether a process identity matches a Testbench serve runtime.

static string|null
processStartIdentity(int $pid)

Read the OS identity of the process incarnation.

static void
killProcessTree(int $pid)

Kill a process and all its descendants.

static array
collectDescendants(int $rootPid)

Collect all descendant PIDs of the given PID in depth-first order.

static array
buildChildrenMap()

Build a map of PID → direct child PIDs by scanning /proc once.

static void
flushState()

Flush all static state.

Details

at line 50
static void bootstrap(string|null $configurationPath = null)

Bootstrap the testbench environment.

Parameters

string|null $configurationPath

the directory to load testbench.yaml from, instead of resolveConfigurationPath()

Return Value

void

at line 93
static array getConfig()

Get the configuration attributes as an array.

Return Value

array

at line 103
static Config|null getConfiguration()

Get the cached configuration instance.

Return Value

Config|null

at line 113
static bool ownsRuntimePath(string $path)

Determine if the given path is the disposable runtime copy created by this process.

Remote child processes and predefined base paths use a runtime they do not own.

Parameters

string $path

Return Value

bool

at line 130
static string|null runtimeSourcePath()

Get the skeleton directory the runtime copy created by this process was made from.

Static analysis tracks a copied file through its skeleton source, because the copy is deleted when the process exits.

Return Value

string|null

at line 139
static string|null runtimeVendorPath()

Get the working package's vendor directory, which the runtime copy created by this process links when its skeleton has none.

Return Value

string|null

at line 150
static bool isRuntimeCopy(string $path)

Determine if the given path is a disposable runtime copy.

A remote child may borrow its parent's copy; the parent reports that when it starts the child. Borrowing a copy does not make the child its owner.

Parameters

string $path

Return Value

bool

at line 174
static string|null explicitApplicationBasePath()

Get the application base path set explicitly through APP_BASE_PATH.

The lookup order matches the framework's base path inference, so the value is found whether or not PHP copies the process environment into $_ENV.

Return Value

string|null

at line 188
static string|null commandApplicationBasePath(Config $config, string $workingPath)

Get the persistent application base path a Testbench command runs on.

An explicit APP_BASE_PATH takes precedence over the configured skeleton. Tests never use the configured skeleton directly; they run on a disposable copy.

Parameters

Config $config
string $workingPath

Return Value

string|null

at line 197
static protected Filesystem getFilesystem()

Get the filesystem instance.

Return Value

Filesystem

at line 211
static protected void loadConfigFromYaml(string $workingPath, string|null $filename = 'testbench.yaml', array $defaults = [])

Load and cache the configuration from the Yaml file.

Parameters

string $workingPath
string|null $filename
array $defaults

Return Value

void

at line 219
static string resolveConfigurationPath(string $workingPath)

Resolve the directory that owns the active testbench.yaml file.

Parameters

string $workingPath

Return Value

string

at line 233
static protected bool hasConfigurationFile(string $workingPath, string $filename = 'testbench.yaml')

Determine if the given path contains a testbench configuration file.

Parameters

string $workingPath
string $filename

Return Value

bool

at line 251
static protected void exportAbsoluteComposerVendorDirectory(string $workingPath)

Make a relative COMPOSER_VENDOR_DIR absolute against the package root.

Applications run from a runtime copy or skeleton, including child processes that inherit this environment such as the skeleton's artisan, resolve a relative value against their own base path rather than the package root.

Parameters

string $workingPath

Return Value

void

at line 275
static protected string createRuntimeCopy(string $sourcePath, string $workingPath)

Create a disposable runtime copy of the skeleton directory.

Tests write generated files (make:provider, make:model, etc.) and mutate bootstrap/providers.php into the app's basePath. By copying the skeleton to a temp directory and using that as BASE_PATH, the committed skeleton stays clean. The copy is deleted on shutdown.

Parameters

string $sourcePath
string $workingPath

Return Value

string

at line 359
static protected bool copySkeleton(Filesystem $filesystem, string $sourcePath, string $runtimePath, string $workingVendorPath)

Copy the skeleton into the runtime copy.

Preserve a configured skeleton's vendor link, or link the package's dependencies when the skeleton has none. Each worker can then discover installed packages without changing the shared skeleton or copying its dependencies.

Parameters

Filesystem $filesystem
string $sourcePath
string $runtimePath
string $workingVendorPath

Return Value

bool

at line 405
static protected void purgeStaleRuntimeCopies(string $tempDirectory, int $pid)

Purge stale runtime copies left by interrupted test processes.

Parameters

string $tempDirectory
int $pid

Return Value

void

at line 457
static protected void copyPackageEnvironmentFile(Filesystem $filesystem, string $runtimePath, string $workingPath)

Copy the package or workbench environment file into the runtime copy.

Parameters

Filesystem $filesystem
string $runtimePath
string $workingPath

Return Value

void

at line 474
static protected string testbenchEnvironmentFile()

Determine the active Testbench environment file name.

Return Value

string

at line 487
static protected string resolveRuntimeBasePath(string $sourcePath, string $workingPath)

Resolve the runtime base path for the current process.

Parameters

string $sourcePath
string $workingPath

Return Value

string

at line 495
static protected string|null parentBasePath()

Get the parent's base path that a remote child process shares.

Return Value

string|null

at line 508
static protected void deleteRuntimeCopy()

Delete the disposable runtime copy.

Return Value

void

at line 526
static protected void deleteRuntimeDirectory(string $directory)

Delete a runtime copy on a best-effort basis.

Callers that require the path to be absent must verify that postcondition.

Parameters

string $directory

Return Value

void

at line 543
static protected bool isOrphanedServeProcess(int $pid, string $runtimeDir)

Determine if the given PID is an orphaned serve process.

A process is considered an orphaned serve process only when its parent is init and its PID file and process incarnation match the runtime.

Parameters

int $pid
string $runtimeDir

Return Value

bool

at line 578
static protected bool matchesServeProcessIdentity(int $pid, string $runtimeDir)

Determine whether a process identity matches a Testbench serve runtime.

Parameters

int $pid
string $runtimeDir

Return Value

bool

at line 624
static protected string|null processStartIdentity(int $pid)

Read the OS identity of the process incarnation.

Linux exposes the start clock tick exactly. macOS lstart has one-second resolution, the most precise portable process-start identity available there.

Parameters

int $pid

Return Value

string|null

at line 659
static protected void killProcessTree(int $pid)

Kill a process and all its descendants.

Collects the full descendant tree first (single /proc scan), then kills leaves before parents to avoid re-parenting races where killing a parent causes its children to be adopted by init before we can find them.

Parameters

int $pid

Return Value

void

at line 684
static protected array collectDescendants(int $rootPid)

Collect all descendant PIDs of the given PID in depth-first order.

Scans /proc once to build a PID→children map, then walks the subtree. Returns PIDs in parent-before-children order.

Parameters

int $rootPid

Return Value

array

at line 708
static protected array buildChildrenMap()

Build a map of PID → direct child PIDs by scanning /proc once.

Return Value

array

at line 753
static void flushState()

Flush all static state.

Return Value

void