# TORK-MASTER 1 2016-02-13 20.0.1

## NAME

tork-master - absorbs overhead and runs tests

## SYNOPSIS

`tork-master` [*OPTION*]...

## DESCRIPTION

This program absorbs your Ruby application's test execution overhead once and
simply fork(3)s worker processses to run your tests thereafter.  As a result,
your tests run faster because they no longer spend any time absorbing the test
execution overhead: worker processes simply inherit the overhead when forked.

This program can be controlled remotely by multiple tork-remote(1) instances.

### Input

This program reads the following commands, which are single-line JSON arrays,
from stdin and then performs the associated actions.  For lines read from
stdin that are single-line JSON arrays, it splits each of them into an array
of words, using the same word-splitting algorithm as sh(1), before processing
them.  For example, the line `a "b c"` is split into the `["a", "b c"]` array.

`["test",` *test_file*`,` *line_numbers*`]`
  Forks a worker process to run tests that correspond to the given
  *line_numbers* in the given *test_file*.  If *line_numbers* is empty, then
  the entire *test_file* will be run.

`["stop",` *signal*`]`
  Stops all tests that are currently running by sending the given *signal*
  (optional; defaults to "SIGTERM") to their respective worker processes.

`["quit"]`
  Stops all tests that are currently running and exits.

### Output

This program prints the following messages, which are single-line JSON arrays,
to stdout.

`["boot"]`
  Test execution overhead has been absorbed.  We are ready for testing!

`["test",` *test_file*`,` *line_numbers*`,` *log_file*`,` *worker_number*`]`
  Test has begun running.  Its output (both stdout and stderr) is being
  captured into *log_file* in real time, so you can watch it with `tail -f`.

`["pass",` *test_file*`,` *line_numbers*`,` *log_file*`,` *worker_number*`,` *exit_code*`,` *exit_info*`]`
  Test has passed.

`["fail",` *test_file*`,` *line_numbers*`,` *log_file*`,` *worker_number*`,` *exit_code*`,` *exit_info*`]`
  Test has failed.

## OPTIONS

`-h` [*PATTERN*], `--help` [*PATTERN*]
  Show this help manual and optionally search for *PATTERN* regular expression.

## FILES

*.tork/config.rb*
  Optional Ruby script that is loaded inside this Tork process on startup.
  It can read and change the `ENV['TORK_CONFIGS']` environment variable.

*.tork/master.rb*
  Optional Ruby script that is loaded inside the master process on startup.
  It can read and change the following variables.

  > `Tork::Master::MAX_CONCURRENT_WORKERS`
  >   Maximum number of worker processes that are allowed to be running
  >   simultaneously at any given time.  The default value is either the
  >   number of processors detected on your system or 1 if detection failed.

*.tork/onfork.rb*
  Optional Ruby script that is loaded inside the master process just before a
  worker process is forked.  It can read and change the following variables.

  > `$tork_test_file`
  >   Path of the test file that will be run by the worker process.
  >
  > `$tork_line_numbers`
  >   Array of line numbers in the test file that were requested to be run.
  >
  > `$tork_log_file`
  >   Path of the log file that will hold the output of the worker process.
  >
  > `$tork_worker_number`
  >   Sequence number of the worker process that will be forked shortly.

*.tork/worker.rb*
  Optional Ruby script that is loaded inside a worker process just after
  it is forked.  It can read and change the following variables.

  > `$tork_test_file`
  >   Path of the test file that will be run by this worker process.
  >
  > `$tork_line_numbers`
  >   Array of line numbers in the test file that were requested to be run.
  >
  > `$tork_log_file`
  >   Path of the log file that will hold the output of this worker process.
  >
  > `$tork_worker_number`
  >   Sequence number of this worker process.

## ENVIRONMENT

See tork(1).

## SEE ALSO

tork(1), tork-remote(1)