ct_master(3)
π
<pink>ct_master</pink> β Erlang Module Definition, section 3 π
okay so bestie, welcome to ct_master(3) from the Erlang Module Definition manuals. this is the whole page, no cap, every last flag and type kept safe and sound. grab a π bubbly water and let's go.
β¨ NAME β¨
ct_master β Distributed test execution control for Common Test. π
πΈ DESCRIPTION πΈ
This module exports functions for running Common Test nodes on multiple hosts in parallel.
(translation: it's the girl who coordinates the whole group chat across several hosts at once, all in parallel, no drama. π )
π¦ DATA TYPES π¦
π test_spec()
test_spec() :: file:name_all().
Filename of test spec to be executed. literally just the name of the test spec file you wanna run. π
π₯ FUNCTIONS π₯
π abort()
abort() -> ok.
Stops all running tests. all of them. every single one. she said we're done here. π
π abort(Nodes)
abort(Nodes) -> ok when Nodes :: Node | [Node], Node :: node().
Stops tests on specified nodes. just the ones you name β one node, or a whole list of them. choose your fighters bestie. π
π basic_html(Bool)
basic_html(Bool) -> ok when Bool :: boolean().
If set to true, the ct_master logs are written on a primitive HTML format, not using the Common Test CSS style sheet.
(it's giving no makeup, no filter β just raw HTML, none of that CSS glow-up. π§)
π get_event_mgr_ref()
get_event_mgr_ref() -> 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, [])
you can slide into the event manager's DMs mid-test and add your own handler. iconic. π«Ά
π progress()
progress() -> [{Node, Status}]
when Node :: node(), Status :: atom().
Returns test progress. If Status is ongoing, tests are running on the node and are not yet finished.
(so if you see ongoing, she's still cooking β do not disturb. π₯)
π run(TestSpecs)
run(TestSpecs) -> [{Specs, ok} | {error, Reason}]
when
TestSpecs :: TestSpec | [TestSpec] | [[TestSpec]],
TestSpec :: test_spec(),
Specs :: [file:filename_all()],
Reason :: term().
Run tests on spawned nodes as specified in TestSpecs (see run/4).
- Equivalent to
run(TestSpecs, false, [], [])if called withTestSpecsbeing list of strings; - Equivalent to
run([TS], false, [], [])if called withTSbeing string.
the chill shortcut version. hand her the specs, she handles the rest. β¨
π run(TestSpecs, AllowUserTerms, InclNodes, ExclNodes)
run(TestSpecs, AllowUserTerms, InclNodes, ExclNodes) ->
[{Specs, ok} | {error, Reason}]
when
TestSpecs :: TestSpec | [TestSpec] | [[TestSpec]],
TestSpec :: test_spec(),
AllowUserTerms :: boolean(),
InclNodes :: [node()],
ExclNodes :: [node()],
Specs :: [file:filename_all()],
Reason :: term().
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.
so: each spec does its own thing unless you hand over a list of specs to be merged into one before anything runs β and any test that doesn't say which node it wants still goes out to everything in InclNodes. whatever's in ExclNodes gets left on read. π
π run_on_node(TestSpecs, AllowUserTerms, Node)
run_on_node(TestSpecs, AllowUserTerms, Node) ->
[{Specs, ok} | {error, Reason}]
when
TestSpecs ::
TestSpec | [TestSpec] | [[TestSpec]],
TestSpec :: test_spec(),
AllowUserTerms :: boolean(),
Node :: node(),
Specs :: [file:filename_all()],
Reason :: term().
Tests are spawned on Node according to TestSpecs.
(one node. one mission. main character energy. π)
π run_test(Node, Opts)
run_test(Node, Opts) -> ok
when
Node :: node(),
Opts :: [OptTuples],
OptTuples ::
{dir, TestDirs} |
{suite, Suites} |
{group, Groups} |
{testcase, Cases} |
{spec, TestSpecs} |
{join_specs, boolean()} |
{label, Label} |
{config, CfgFiles} |
{userconfig, UserConfig} |
{allow_user_terms, boolean()} |
{logdir, LogDir} |
{silent_connections, Conns} |
{stylesheet, CSSFile} |
{cover, CoverSpecFile} |
{cover_stop, boolean()} |
{step, StepOpts} |
{event_handler, EventHandlers} |
{include, InclDirs} |
{auto_compile, boolean()} |
{abort_if_missing_suites, boolean()} |
{create_priv_dir, CreatePrivDir} |
{multiply_timetraps, M} |
{scale_timetraps, boolean()} |
{repeat, N} |
{duration, DurTime} |
{until, StopTime} |
{force_stop, ForceStop} |
{decrypt, DecryptKeyOrFile} |
{refresh_logs, LogDir} |
{logopts, LogOpts} |
{verbosity, VLevels} |
{basic_html, boolean()} |
{esc_chars, boolean()} |
{keep_logs, KeepSpec} |
{ct_hooks, CTHs} |
{ct_hooks_order, CTHsOrder} |
{enable_builtin_hooks, boolean()} |
{release_shell, boolean()},
TestDirs :: [string()] | string(),
Suites ::
[string()] | [atom()] | string() | atom(),
Cases :: [atom()] | atom(),
Groups :: GroupNameOrPath | [GroupNameOrPath],
GroupNameOrPath :: [atom()] | atom() | all,
TestSpecs :: [string()] | string(),
Label :: string() | atom(),
CfgFiles :: [string()] | string(),
UserConfig ::
[{CallbackMod, CfgStrings}] |
{CallbackMod, CfgStrings},
CallbackMod :: atom(),
CfgStrings :: [string()] | string(),
LogDir :: string(),
Conns :: all | [atom()],
CSSFile :: string(),
CoverSpecFile :: string(),
StepOpts :: [StepOpt],
StepOpt :: config | keep_inactive,
EventHandlers :: EH | [EH],
EH ::
atom() |
{atom(), InitArgs} |
{[atom()], InitArgs},
InitArgs :: [term()],
InclDirs :: [string()] | string(),
CreatePrivDir ::
auto_per_run | auto_per_tc | manual_per_tc,
M :: integer(),
N :: integer(),
DurTime :: HHMMSS,
HHMMSS :: string(),
StopTime :: YYMoMoDDHHMMSS | HHMMSS,
YYMoMoDDHHMMSS :: string(),
ForceStop :: skip_rest | boolean(),
DecryptKeyOrFile ::
{key, DecryptKey} | {file, DecryptFile},
DecryptKey :: string(),
DecryptFile :: string(),
LogOpts :: [LogOpt],
LogOpt :: no_nl | no_src,
VLevels :: VLevel | [{Category, VLevel}],
VLevel :: integer(),
Category :: atom(),
KeepSpec :: all | pos_integer(),
CTHs :: [CTHModule | {CTHModule, CTHInitArgs}],
CTHsOrder :: atom(),
CTHModule :: atom(),
CTHInitArgs :: term().
Tests are spawned on Node using ct:run_test/1
the whole entire options buffet, right there in one OptTuples list. everything above is verbatim, so don't let anyone tell you a flag got lost in the group chat. π
she's passing it all straight through to ct:run_test/1. π¦
bestie reminder: everything literal here is exact. don't retype atoms from memory, copy them, fr fr. π
mwah π this little masterpiece was served to you by Ericsson AB, common_test version 1.31.1 ct_master(3). that's the source, that's the version, that's the whole vibe. slay, go spawn some nodes πβ¨π¦π
π¦ where this page comes from
- ubuntu stonking: erlang-doc 1:29.0.6+dfsg-1 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms