---
layout: documentation
title: Test Encyclopedia
---
<h1>Test encyclopedia</h1>

<p class="lead">An Exhaustive Specification of the Test Execution Environment</p>

<h2>Background</h2>

<p>The Bazel BUILD language includes rules which can be used to define
automated test programs in many languages.</p>

<p>Tests are run using <code><a href="user-manual.html#test">bazel test</a></code>.

Users may also execute test binaries directly. This is allowed but not endorsed, as such
an invocation will not adhere to the mandates described below.</p>

<p>Tests should be <i>hermetic</i>: that is, they ought to access only those
resources on which they have a declared dependency. If tests are not properly
hermetic then they do not give historically reproducible results. This could be a
significant problem for culprit finding (determining which change broke a test),
release engineering auditability, and resource isolation of tests (automated
testing frameworks ought not DDOS a server because some tests happen to
talk to it).<p>

<h2>Objective</h2>

<p>The goal of this page is to formally establish the runtime environment
for and expected behavior of Bazel tests. It will also impose requirements on
the test runner and the build system.

The test environment specification helps test authors avoid relying on
unspecified behavior, and thus gives the testing infrastructure more freedom
to make implementation changes. The specification tightens up some
holes that currently allow many tests to pass despite not being
properly hermetic, deterministic, and reentrant.</p>

<p>This page is intended to be both normative and authoritative. If
this specification and the implemented behavior of test runner disagree, the
specification takes precedence.</p>

<h2>Proposed Specification</h2>

<p>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" are to be
interpreted as described in IETF RFC 2119.</p>

<h2>Purpose of tests</h2>

<p>The purpose of Bazel tests is to confirm some property of the source files
checked into the repository. (On this page, "source files" includes test data,
golden outputs, and anything else kept under version control.) One
user writes a test to assert an invariant which they expect to be maintained.
Other users execute the test later to check whether the invariant has been
broken. If the test depends on any variables other than source files
(non-hermetic), its value is diminished, because the later users cannot be sure
their changes are at fault when the test stops passing.</p>

<p>Therefore the outcome of a test must depend only on:</p>
<ul>
  <li>source files on which the test has a declared dependency</li>
  <li>products of the build system on which the test has a declared dependency</li>
  <li>resources whose behavior is guaranteed by the test runner to remain constant</li>
</ul>

<p>Currently, such behavior is not enforced. However, test runners reserve the
right to add such enforcement in the future.</p>

<h2>Role of the build system</h2>

<p>Test rules are analogous to binary rules in that each must yield an
executable program. For some languages, this is a stub program which combines
a language-specific harness with the test code. Test rules must produce other
outputs as well. In addition to the primary test executable, the test runner
will need a manifest of <b>runfiles</b>, input files which should be made
available to the test at runtime, and it may need information about the type,
size, and tags of a test.</p>

<p>The build system may use the runfiles to deliver code as well as data. (This
might be used as an optimization to make each test binary smaller by sharing
files across tests, e.g. through the use of dynamic linking.)  The build system
should ensure that the generated executable loads these files via the runfiles
image provided by the test runner, rather than hardcoded references to absolute
locations in the source or output tree.</p>

<h2>Role of the test runner</h2>

<p>From the point of view of the test runner, each test is a program which can
be invoked with <code>execve()</code>. There may be other ways to execute
tests; for example, an IDE might allow the execution of Java tests in-process.
However, the result of running the test as a standalone process must be
considered authoritative. If a test process runs to completion and terminates
normally with an exit code of zero, the test has passed. Any other result is
considered a test failure. In particular, writing any of the strings
<code>PASS</code> or <code>FAIL</code> to stdout has no significance to the test
runner.</p>

<p>If a test takes too long to execute, exceeds some resource limit, or the test
runner otherwise detects prohibited behavior, it may choose to kill the test
and treat the run as a failure. The runner must not report the test as passing
after sending a signal to the test process or any children thereof.</p>

<p id="timeout">The whole test target (not individual methods or tests) is given a
limited amount of time to run to completion. The time limit for a test is based
on its <a href="be/common-definitions.html#test.timeout"><code>timeout</code></a>
attribute according to the following table:</p>

<table class="table table-bordered table-striped table-condensed">
  <thead>
    <tr>
      <th><a href="be/common-definitions.html#test.timeout"><code>timeout</code></a></th>
      <th>Time Limit (sec.)</th>
    </tr>
  </thead>
  <tbody>
    <tr><td><code>short</code></td><td>60</td></tr>
    <tr><td><code>moderate</code></td><td>300</td></tr>
    <tr><td><code>long</code></td><td>900</td></tr>
    <tr><td><code>eternal</code></td><td>3600</td></tr>
  </tbody>
</table>

<p id="size">Tests which do not explicitly specify a timeout have one implied based on the
test's <a href="be/common-definitions.html#test.size"><code>size</code></a> as follows:</p>

<table class="table table-bordered table-striped table-condensed">
  <thead>
    <tr>
      <th><a href="be/common-definitions.html#test.size"><code>size</code></a></th>
      <th>Implied timeout label</th>
    </tr>
  </thead>
  <tbody>
    <tr><td><code>small</code></td><td>short</td></tr>
    <tr><td><code>medium</code></td><td>moderate</td></tr>
    <tr><td><code>large</code></td><td>long</td></tr>
    <tr><td><code>enormous</code></td><td>eternal</td></tr>
  </tbody>
</table>
<p>For example a "large" test with no explicit timeout setting will be allotted
900 seconds to run. A "medium" test with a timeout of "short" will be allotted
60 seconds.</p>

<p>Unlike <code>timeout</code>, the <code>size</code> additionally determines the
the assumed peak usage of other resources (like RAM) when running the test locally,
as described in <a href="be/common-definitions.html#common-attributes-tests">Common
definitions</a>.</p>

<p>All combinations of <code>size</code> and <code>timeout</code> labels are
legal, so an "enormous" test may be declared to have a timeout of "short".
Presumably it would do some really horrible things very quickly.</p>
<p>Tests may return arbitrarily fast regardless of timeout. A test is not
penalized for an overgenerous timeout, although a warning may be issued: you
should generally set your timeout as tight as you can without incurring any
flakiness.</p>

<p>The test timeout can be overridden with the <code>--test_timeout</code>
bazel flag, e.g. for manually running under conditions which are known to be
slow. The <code>--test_timeout</code> values are in seconds. For example,
<code>--test_timeout=120</code> will set the test timeout to two minutes.</p>

<p>There is also a recommended lower bound for test timeouts as follows: </p>

<table class="table table-bordered table-striped table-condensed">
  <thead>
    <tr><th>timeout</th><th>Time minimum (sec.)</th></tr>
  </thead>
  <tbody>
    <tr><td><code>short</code></td><td>0</td></tr>
    <tr><td><code>moderate</code></td><td>30</td></tr>
    <tr><td><code>long</code></td><td>300</td></tr>
    <tr><td><code>eternal</code></td><td>900</td></tr>
  </tbody>
</table>

<p>For example, if a "moderate" test completes in 5.5s, consider setting
<code>timeout = "short"</code> or <code>size = "small"</code>. Using the bazel
<code>--test_verbose_timeout_warnings</code> command line option will show the
tests whose specified size is too big.</p>

<p>Test sizes and timeouts are specified in the BUILD file according to the specification
<a href="be/common-definitions.html#common-attributes-tests">here</a>.
If unspecified, a test's size will default to "medium".</p>

<p>If the main process of a test exits, but some of its children are still
running, the test runner should consider the run complete and count it as a
success or failure based on the exit code observed from the main process. The
test runner may kill any stray processes. Tests should not leak processes in
this fashion.</p>

<h2 id="test-sharding">Test sharding</h2>

<p>Tests can be parallelized via test sharding. See
<a href="user-manual.html#sharding-strategy"><code>--test_sharding_strategy</code></a>
and
<a href="be/common-definitions.html#common-attributes-tests"><code>shard_count</code></a>
to enable test sharding. When sharding is enabled, the test runner is launched
once per shard. The environment variable
<a href="#initial-conditions"><code>TEST_TOTAL_SHARDS</code></a> is the number
of shards, and
<a href="#initial-conditions"><code>TEST_SHARD_INDEX</code></a> is the shard
index, beginning at 0. Runners use this information to select which tests to
run - for example, using a round-robin strategy. Not all test runners support sharding.
If a runner supports sharding, it must create or update the last modified date
of the file specified by
<a href="#initial-conditions"><code>TEST_SHARD_STATUS_FILE</code></a>.
Otherwise, Bazel assumes it does not support sharding and will not launch
additional runners.</p>

<h2 id="initial-conditions">Initial conditions</h2>

<p>When executing a test, the test runner must establish certain initial
conditions.</p>

<p>The test runner must invoke each test with the path to the test
executable in <code>argv[0]</code>. This path must be relative and
beneath the test's current directory (which is in the runfiles tree,
see below).
The test runner should not pass any other arguments to a
test unless the user explicitly requests it.</p>

<p>The initial environment block shall be composed as follows:</p>

<table class="table table-bordered table-striped table-condensed">
  <thead>
    <tr><th>Variable</th><th>Value</th><th>Status</th></tr>
  </thead>
  <tbody>

    <tr><td><code>HOME</code></td><td>value of <code>$TEST_TMPDIR</code></td><td>recommended</td></tr>
    <tr><td><code>LANG</code></td><td><i>unset</i></td><td>required</td></tr>
    <tr><td><code>LANGUAGE</code></td><td><i>unset</i></td><td>required</td></tr>
    <tr><td><code>LC_ALL</code></td><td><i>unset</i></td><td>required</td></tr>
    <tr><td><code>LC_COLLATE</code></td><td><i>unset</i></td><td>required</td></tr>
    <tr><td><code>LC_CTYPE</code></td><td><i>unset</i></td><td>required</td></tr>
    <tr><td><code>LC_MESSAGES</code></td><td><i>unset</i></td><td>required</td></tr>
    <tr><td><code>LC_MONETARY</code></td><td><i>unset</i></td><td>required</td></tr>
    <tr><td><code>LC_NUMERIC</code></td><td><i>unset</i></td><td>required</td></tr>
    <tr><td><code>LC_TIME</code></td><td><i>unset</i></td><td>required</td></tr>
    <tr><td><code>LD_LIBRARY_PATH</code></td><td>colon-separated list of directories containing shared libraries</td><td>optional</td></tr>
    <tr><td><code>JAVA_RUNFILES</code></td><td>value of <code>$TEST_SRCDIR</code></td><td>deprecated</td></tr>

    <tr><td><code>LOGNAME</code></td><td>value of <code>$USER</code></td><td>required</td></tr>

    <tr><td><code>PATH</code></td><td><code>/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:.</code></td><td>recommended</td></tr>
    <tr><td><code>PWD</code></td><td><code>$TEST_SRCDIR/<i>workspace-name</i></code></td><td>recommended</td></tr>
    <tr><td><code>SHLVL</code></td><td><code>2</code></td><td>recommended</td></tr>
    <tr><td><code>TEST_INFRASTRUCTURE_FAILURE_FILE</code></td><td>absolute path to a private file in a writable directory (This file should only be used to report failures originating from the testing infrastructure, not as a general mechanism for reporting flaky failures of tests. In this context, testing infrastructure is defined as systems or libraries that are not test-specific, but can cause test failures by malfunctioning. The first line is the name of the testing infrastructure component that caused the failure, the second one a human-readable description of the failure. Additional lines are ignored.)</td><td>optional</td></tr>
    <tr><td><code>TEST_LOGSPLITTER_OUTPUT_FILE</code></td><td>absolute path to a private file in a writable directory (used to write Logsplitter protobuffer log)</td><td>optional</td></tr>
    <tr><td><code>TEST_PREMATURE_EXIT_FILE</code></td><td>absolute path to a private file in a writable directory (used for catching calls to exit())</td><td>optional</td></tr>
    <tr>
      <td><code>TEST_RANDOM_SEED</code></td>
      <td>If the <code class='flag'>--runs_per_test</code> option is used, TEST_RANDOM_SEED
      is set to the <var>run number</var> (starting with 1) for each individual test run.</td>
      <td>optional</td>
    </tr>
    <tr>
      <td><code>TEST_RUN_NUMBER</code></td>
      <td>If the <code class='flag'>--runs_per_test</code> option is used, TEST_RUN_NUMBER
      is set to the <var>run number</var> (starting with 1) for each individual test run.</td>
      <td>optional</td>
    </tr>
    <tr><td><code>TEST_TARGET</code></td><td>The name of the target being tested</td><td>optional</td></tr>
    <tr><td><code>TEST_SIZE</code></td><td>The test <a href="#size"><code>size</code></a></td><td>optional</td></tr>
    <tr><td><code>TEST_TIMEOUT</code></td><td>The test <a href="#timeout"><code>timeout</code></a> in seconds</td><td>optional</td></tr>
    <tr><td><code>TEST_SHARD_INDEX</code></td><td>shard index, if <a href="#test-sharding">sharding</a> is used</td><td>optional</td></tr>
    <tr><td><code>TEST_SHARD_STATUS_FILE</code></td><td>path to file to touch to indicate support for <a href="#test-sharding">sharding</a></td><td>optional</td></tr>
    <tr><td><code>TEST_SRCDIR</code></td><td>absolute path to the base of the runfiles tree</td><td>required</td></tr>
    <tr><td><code>TEST_TOTAL_SHARDS</code></td><td>total <a href="be/common-definitions.html#test.shard_count">shard count</a>, if <a href="#test-sharding">sharding</a> is used</td><td>optional</td></tr>
    <tr><td><code>TEST_TMPDIR</code></td><td>absolute path to a private writable directory</td><td>required</td></tr>

    <tr><td><code>TEST_WORKSPACE</code></td><td>the local repository's workspace name</td><td>optional</td></tr>
    <tr><td><code>TEST_UNDECLARED_OUTPUTS_DIR</code></td><td>absolute path to a private writable directory (used to write undeclared test outputs)</td><td>optional</td></tr>

    <tr><td><code>TEST_UNDECLARED_OUTPUTS_ANNOTATIONS_DIR</code></td><td>absolute path to a private writable directory (used to write undeclared test output annotation .part and .pb files).
    </td><td>optional</td></tr>

    <tr><td><code>TEST_WARNINGS_OUTPUT_FILE</code></td><td>absolute path to a private file in a writable directory (used to write test target warnings)</td><td>optional</td></tr>
    <tr><td><code>TESTBRIDGE_TEST_ONLY</code></td><td>value of <a href="user-manual.html#flag--test_filter"><code>--test_filter</code></a>, if specified</td><td>optional</td></tr>

    <tr><td><code>TZ</code></td><td><code>UTC</code></td><td>required</td></tr>
    <tr><td><code>USER</code></td><td>value of <code>getpwuid(getuid())-&gt;pw_name</code></td><td>required</td></tr>

    <tr>
      <td><code>XML_OUTPUT_FILE</code></td>
      <td>Location of the test result XML output file.
        The XML schema is based on the
        <a href="https://windyroad.com.au/dl/Open%20Source/JUnit.xsd">JUnit test result
        schema</a>.
      </td>
      <td>optional</td>
    </tr>
  </tbody>
</table>
<br>
<p>The environment may contain additional entries. Tests should not depend on the
presence, absence, or value of any environment variable not listed above.</p>

<p>The initial working directory shall be <code>$TEST_SRCDIR/$TEST_WORKSPACE</code>.</p>
<p> The current process id, process group id, session id, and parent process
id are unspecified. The process may or may not be a process group leader or a
session leader. The process may or may not have a controlling terminal. The
process may have zero or more running or unreaped child processes. The process
should not have multiple threads when the test code gains control.</p>

<p>File descriptor 0 (stdin) shall be open for reading, but what it is attached
to is unspecified. Tests must not read from it. File descriptors 1 (stdout)
and 2 (stderr) shall be open for writing, but what they are attached to is
unspecified. It could be a terminal, a pipe, a regular file, or anything else
to which characters can be written. They may share an entry in the open file
table (meaning that they cannot seek independently). Tests should not inherit
any other open file descriptors.</p>

<p>The initial umask shall be 022 or 027.</p>

<p>No alarm or interval timer shall be pending.</p>

<p>The initial mask of blocked signals shall be empty. All signals shall be set
to their default action.</p>

<p>The initial resource limits, both soft and hard, should be set as follows:</p>

<table class="table table-bordered table-striped table-condensed">
  <thead>
    <tr><th>Resource</th><th>Limit</th></tr>
  </thead>
  <tbody>
    <tr><td>RLIMIT_AS</td><td>unlimited</td></tr>
    <tr><td>RLIMIT_CORE</td><td>unspecified</td></tr>
    <tr><td>RLIMIT_CPU</td><td>unlimited</td></tr>
    <tr><td>RLIMIT_DATA</td><td>unlimited</td></tr>
    <tr><td>RLIMIT_FSIZE</td><td>unlimited</td></tr>
    <tr><td>RLIMIT_LOCKS</td><td>unlimited</td></tr>
    <tr><td>RLIMIT_MEMLOCK</td><td>unlimited</td></tr>
    <tr><td>RLIMIT_MSGQUEUE</td><td>unspecified</td></tr>
    <tr><td>RLIMIT_NICE</td><td>unspecified</td></tr>
    <tr><td>RLIMIT_NOFILE</td><td>at least 1024</td></tr>
    <tr><td>RLIMIT_NPROC</td><td>unspecified</td></tr>
    <tr><td>RLIMIT_RSS</td><td>unlimited</td></tr>
    <tr><td>RLIMIT_RTPRIO</td><td>unspecified</td></tr>
    <tr><td>RLIMIT_SIGPENDING</td><td>unspecified</td></tr>
    <tr><td>RLIMIT_STACK</td><td>unlimited, or 2044KB &lt;= rlim &lt;= 8192KB</td></tr>
  </tbody>
</table>

<p>The initial process times (as returned by <code>times()</code>) and resource
utilization (as returned by <code>getrusage()</code>) are unspecified.</p>

<p>The initial scheduling policy and priority are unspecified.</p>

<h2>Role of the host system</h2>

<p>In addition to the aspects of user context under direct control of the
test runner, the operating system on which tests execute must satisfy certain
properties for a test run to be valid.</p>

<h4>Filesystem</h4>

<p>
The root directory observed by a test may or may not be the real root directory.<br>
<code>/proc</code> shall be mounted.<br>
All build tools shall be present at the absolute paths under <code>/usr</code> used by a local installation.<br>
Paths starting with <code>/home</code> may not be available. Tests should not access any such paths.<br>
<code>/tmp</code>
shall be writable, but tests should avoid using these paths.<br>

Tests must not assume that any constant path is available for their exclusive use.<br>
Tests must not assume that atimes are enabled for any mounted filesystem.<br>
</p>

<h4>Users and groups</h4>

<p>The users root, nobody, and unittest must exist. The groups root, nobody,
and eng must exist.</p>

<p>Tests must be executed as a non-root user. The real and effective user ids
must be equal; likewise for group ids. Beyond this, the current user id, group
id, user name, and group name are unspecified. The set of supplementary group
ids is unspecified.</p>

<p>The current user id and group id must have corresponding names which can be
retrieved with <code>getpwuid()</code> and <code>getgrgid()</code>. The same
may not be true for supplementary group ids.</p>

<p>The current user must have a home directory. It may not be writable. Tests
must not attempt to write to it.</p>

<h4>Networking</h4>

<p>The hostname is unspecified. It may or may not contain a dot. Resolving
the hostname must give an IP address of the current host. Resolving the
hostname cut after the first dot must also work. The hostname localhost must
resolve.</p>

<h4>Other resources</h4>

<p>Tests are granted at least one CPU core. Others may be available but this
is not guaranteed. Other performance aspects of this core are not specified.
You can increase the reservation to a higher number of CPU cores by adding the
tag "cpu:n" (where n is a positive number) to a test rule. If a machine has
less total CPU cores than requested, Bazel will still run the test. If a test
uses <a href="#test-sharding">sharding</a>, each individual shard will reserve
the number of CPU cores specified here.</p>

<p>Tests may create subprocesses, but not process groups or sessions.</p>

<p>There is a limit on the number of input files a test may consume. This limit
is subject to change, but is currently in the range of tens of thousands of inputs.

</p>

<h4>Time and date</h4>

<p>The current time and date are unspecified. The system timezone is unspecified.

</p>

<p>X Windows may or may not be available. Tests that need an X server should
start Xvfb.</p>

<h2>Test interaction with the filesystem</h2>
<p>All file paths specified in test environment variables point to
somewhere on the local filesystem, unless otherwise specified.</p>

<p>
Tests should create files only within the directories specified by
<code>$TEST_TMPDIR</code> and <code>$TEST_UNDECLARED_OUTPUTS_DIR</code>
(if set).<br>
These directories will be initially empty.<br>
Tests must not attempt to remove, chmod, or otherwise alter these directories.<br>
These directories may be a symbolic links.<br>
The filesystem type of <code>$TEST_TMPDIR/.</code> remains unspecified.<br>
Tests may also write .part files to the <code>$TEST_UNDECLARED_OUTPUTS_ANNOTATIONS_DIR</code>
to annotate undeclared output files.</p>

<p>In rare cases, a test may be forced to create files in <code>/tmp</code>. For
example, <a href="https://serverfault.com/questions/641347">path length limits
for Unix domain sockets</a> typically require creating the socket under
<code>/tmp</code>. Bazel will be unable to track such files; the test itself must
take care to be hermetic, to use unique paths to avoid colliding with other,
simultaneously running tests and non-test processes, and to clean up the files it
creates in <code>/tmp</code>.</p>

<p>Some popular testing frameworks, such as
<a href="https://junit.org/junit4/javadoc/latest/org/junit/rules/TemporaryFolder.html">
JUnit4 <code>TemporaryFolder</code></a> or
<a href="https://golang.org/pkg/testing/#T.TempDir">Go <code>TempDir</code></a>,
have their own ways to create a temporary directory under <code>/tmp</code>.
These testing frameworks include functionality that cleans up files in <code>/tmp</code>,
so you may use them even though they create files outside of <code>TEST_TMPDIR</code>.</p>

<p>Tests must access inputs through the <b>runfiles</b> mechanism, or other
parts of the execution environment which are specifically intended to make
input files available.

Tests must not access other outputs of the
build system at paths inferred from the location of their own executable.</p>

<p>It is unspecified whether the runfiles tree contains regular files, symbolic
links, or a mixture. The runfiles tree may contain symlinks to directories.
Tests should avoid using paths containing <code>..</code> components within the
runfiles tree.</p>

<p>No directory, file, or symlink within the runfiles tree (including paths
which traverse symlinks) should be writable. (It follows that the initial
working directory should not be writable.) Tests must not assume that any part
of the runfiles is writable, or owned by the current user (i.e. chmod and chgrp
may fail).</p>

<p>The runfiles tree (including paths which traverse symlinks) must not change
during test execution. Parent directories and filesystem mounts must not change
in any way which affects the result of resolving a path within the runfiles
tree.</p>

<p>In order to catch early exit, a test may create a file at the path specified by
<code>TEST_PREMATURE_EXIT_FILE</code> upon start and remove it upon exit. If
Bazel sees the file when the test finishes, it will assume that the test exited
prematurely and mark it as having failed.</p>

<h2 id="tag-conventions">Tag conventions</h2>

<p>
  Some tags in the test rules have a special
  meaning. See also the <a href="be/common-definitions.html#common.tags">Bazel
  Build Encyclopedia on the <code>tags</code> attribute</a>.
</p>

<table class="table table-bordered table-striped table-condensed">
  <thead>
    <tr><th>Tag</th><th>Meaning</th></tr>
  </thead>
  <tbody>
    <tr>
      <th><code>exclusive</code></th>

      <td>run no other test at the same time</td>
    </tr>
    <tr>
      <th><code>external</code></th>
      <td>test has an external dependency; disable test caching</td>
    </tr>
    <tr>
      <th><code>large</code></th>
      <td><code>test_suite</code> convention; suite of large tests</td>
    </tr>

    <tr>
      <th><code>manual</code> *</th>

      <td>don't include test target in wildcard target patterns like <code>:...</code>, <code>:*</code>, or <code>:all</code>)</td>
    </tr>
    <tr>
      <th><code>medium</code></th>

      <td><code>test_suite</code> convention; suite of medium tests</td>
    </tr>

    <tr>
      <th><code>small</code></th>
      <td><code>test_suite</code> convention; suite of small tests</td>
    </tr>

    <tr>
      <th><code>smoke</code></th>
      <td>
        <code>test_suite</code> convention; means it should be run before committing code changes
        into the version control system
      </td>
    </tr>

  </tbody>
</table>

* Note: bazel <code>query</code> does not respect the manual tag.
<h2>Runfiles</h2>

<p>In the following, assume there is a *_binary() rule labeled <code>//foo/bar:unittest</code>,
with a run-time dependency on the rule labeled <code>//deps/server:server</code>.</p>

<h4>Location</h4>
<p>The runfiles directory for a target <code>//foo/bar:unittest</code> is the directory
<code>$(WORKSPACE)/$(BINDIR)/foo/bar/unittest.runfiles</code>. This path is referred to as the
<code>runfiles_dir</code>.</p>

<h4>Dependencies</h4>
<p>The runfiles directory is declared as a compile-time dependency of the *_binary() rule.
The runfiles directory itself depends on the set of BUILD files that affect the *_binary() rule
or any of its compile-time or run-time dependencies. Modifying source files does not affect the
structure of the runfiles directory, and thus does not trigger any rebuilding.</p>

<h4>Contents</h4>
<p>The runfiles directory contains the following:</p>
<ul>
  <li><b>Symlinks to run-time dependencies</b>: each OutputFile and CommandRule that is a run-time
dependency of the *_binary() rule is represented by one symlink in the runfiles directory.
The name of the symlink is <code>$(WORKSPACE)/package_name/rule_name</code>. For example, the
symlink for server would be named <code>$(WORKSPACE)/deps/server/server</code>, and the full path
would be <code>$(WORKSPACE)/foo/bar/unittest.runfiles/$(WORKSPACE)/deps/server/server</code>.
The destination of the symlink is the OutputFileName() of the OutputFile or CommandRule,
expressed as an absolute path. Thus, the destination of the symlink might be
<code>$(WORKSPACE)/linux-dbg/deps/server/42/server</code>.</li>
  <li><b>Symlinks to sub-runfiles</b>: for every *_binary() Z that is a run-time dependency of
*_binary() C, there is a second link in the runfiles directory of C to the runfiles of Z.
The name of the symlink is <code>$(WORKSPACE)/package_name/rule_name.runfiles</code>.
The target of the symlink is the runfiles directory. I.e. all subprograms share a common
runfiles directory.</li>
</ul>

