---
name: "ct_master"
section: "3erl"
platform: "linux"
package: "erlang-manpages"
version: "1:25.2.3+dfsg-1+deb12u4"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/ct_master"
---

# ct\_master(3erl)

Distributed test execution control for Common Test.

## NAME

ct\_master - Distributed test execution control for Common Test.

## DESCRIPTION

Distributed test execution control for *Common Test*.

This module exports functions for running *Common Test* nodes on multiple hosts in parallel.

## EXPORTS

**abort() -\> ok**\

Stops all running tests.

**abort(Nodes) -\> ok**\

Types:

Nodes = atom() \| \[atom()\]\

Stops tests on specified nodes.

**basic\_html(Bool) -\> ok**\

Types:

Bool = true \| false\

If set to *true*, the *ct\_master logs* are written on a primitive HTML format, not using the *Common Test* CSS style sheet.

**get\_event\_mgr\_ref() -\> MasterEvMgrRef**\

Types:

MasterEvMgrRef = atom()\

Gets a reference to the *Common Test* master event manager. The reference can be used to, for example, add a user-specific event handler while tests are running.

*Example:*

```
 gen_event:add_handler(ct_master:get_event_mgr_ref(), my_ev_h, [])
```

**progress() -\> \[{Node, Status}\]**\

Types:

Node = atom()\
 Status = finished\_ok \| ongoing \| aborted \| {error, Reason}\
 Reason = term()\

Returns test progress. If *Status* is *ongoing*, tests are running on the node and are not yet finished.

**run(TestSpecs) -\> ok**\

Types:

TestSpecs = string() \| \[SeparateOrMerged\]\

Equivalent to *ct\_master:run(TestSpecs, false, \[\], \[\])*.

**run(TestSpecs, InclNodes, ExclNodes) -\> ok**\

Types:

TestSpecs = string() \| \[SeparateOrMerged\]\
 SeparateOrMerged = string() \| \[string()\]\
 InclNodes = \[atom()\]\
 ExclNodes = \[atom()\]\

Equivalent to *ct\_master:run(TestSpecs, false, InclNodes, ExclNodes)*.

**run(TestSpecs, AllowUserTerms, InclNodes, ExclNodes) -\> ok**\

Types:

TestSpecs = string() \| \[SeparateOrMerged\]\
 SeparateOrMerged = string() \| \[string()\]\
 AllowUserTerms = bool()\
 InclNodes = \[atom()\]\
 ExclNodes = \[atom()\]\

Tests are spawned on the nodes as specified in *TestSpecs*. Each specification in *TestSpec* is handled separately. However, it is also possible to specify a list of specifications to be merged into one specification before the tests are executed. Any test without a particular node specification is also executed on the nodes in *InclNodes*. Nodes in the *ExclNodes* list are excluded from the test.

**run\_on\_node(TestSpecs, Node) -\> ok**\

Types:

TestSpecs = string() \| \[SeparateOrMerged\]\
 SeparateOrMerged = string() \| \[string()\]\
 Node = atom()\

Equivalent to *ct\_master:run\_on\_node(TestSpecs, false, Node)*.

**run\_on\_node(TestSpecs, AllowUserTerms, Node) -\> ok**\

Types:

TestSpecs = string() \| \[SeparateOrMerged\]\
 SeparateOrMerged = string() \| \[string()\]\
 AllowUserTerms = bool()\
 Node = atom()\

Tests are spawned on *Node* according to *TestSpecs*.

**run\_test(Node, Opts) -\> ok**\

Types:

Node = atom()\
 Opts = \[OptTuples\]\
 OptTuples = {config, CfgFiles} \| {dir, TestDirs} \| {suite, Suites} \| {testcase, Cases} \| {spec, TestSpecs} \| {allow\_user\_terms, Bool} \| {logdir, LogDir} \| {event\_handler, EventHandlers} \| {silent\_connections, Conns} \| {cover, CoverSpecFile} \| {cover\_stop, Bool} \| {userconfig, UserCfgFiles}\
 CfgFiles = string() \| \[string()\]\
 TestDirs = string() \| \[string()\]\
 Suites = atom() \| \[atom()\]\
 Cases = atom() \| \[atom()\]\
 TestSpecs = string() \| \[string()\]\
 LogDir = string()\
 EventHandlers = EH \| \[EH\]\
 EH = atom() \| {atom(), InitArgs} \| {\[atom()\], InitArgs}\
 InitArgs = \[term()\]\
 Conns = all \| \[atom()\]\

Tests are spawned on *Node* using *ct:run\_test/1*
