<?xml version="1.0" encoding="latin1" ?>
<!DOCTYPE erlref SYSTEM "erlref.dtd">
<erlref>
<header>
<title>ct_slave</title>
<prepared></prepared>
<responsible></responsible>
<docno>1</docno>
<approved></approved>
<checked></checked>
<date></date>
<rev>A</rev>
<file>ct_slave.xml</file></header>
<module>ct_slave</module>
<modulesummary>Common Test Framework functions for starting and stopping nodes for   
Large Scale Testing.</modulesummary>
<description>
<p>Common Test Framework functions for starting and stopping nodes for   
Large Scale Testing.</p>
  
   <p>This module exports functions which are used by the Common Test Master
   to start and stop "slave" nodes. It is the default callback module for the
   <c>{init, node_start}</c> term of the Test Specification.</p></description>
<funcs>
<func>
<name>start(Node) -&gt; Result</name>
<fsummary>Starts an Erlang node with name Node on the local host.</fsummary>
<type>
<v>Node = atom()</v><v>Result = {ok, NodeName} | {error, already_started, NodeName} | {error, started_not_connected, NodeName} | {error, boot_timeout, NodeName} | {error, init_timeout, NodeName} | {error, startup_timeout, NodeName} | {error, not_alive, NodeName}</v><v>NodeName = atom()</v></type>
<desc><marker id="start-1"/>

<p>Starts an Erlang node with name <c>Node</c> on the local host.</p>
<p><em>See also:</em> <seealso marker="#start-3">start/3</seealso>.</p>
</desc></func>
<func>
<name>start(Host, Node) -&gt; Result</name>
<fsummary>Starts an Erlang node with name Node on host
   Host with the default options.</fsummary>
<type>
<v>Node = atom()</v><v>Host = atom()</v><v>Result = {ok, NodeName} | {error, already_started, NodeName} | {error, started_not_connected, NodeName} | {error, boot_timeout, NodeName} | {error, init_timeout, NodeName} | {error, startup_timeout, NodeName} | {error, not_alive, NodeName}</v><v>NodeName = atom()</v></type>
<desc><marker id="start-2"/>

<p>Starts an Erlang node with name <c>Node</c> on host
   <c>Host</c> with the default options.</p>
<p><em>See also:</em> <seealso marker="#start-3">start/3</seealso>.</p>
</desc></func>
<func>
<name>start(Host, Node, Options::Opts) -&gt; Result</name>
<fsummary>Starts an Erlang node with name Node on host
   Host as specified by the combination of options in
   Opts.</fsummary>
<type>
<v>Node = atom()</v><v>Host = atom()</v><v>Opts = [OptTuples]</v><v>OptTuples = {username, Username} | {password, Password} | {boot_timeout, BootTimeout} | {init_timeout, InitTimeout} | {startup_timeout, StartupTimeout} | {startup_functions, StartupFunctions} | {monitor_master, Monitor} | {kill_if_fail, KillIfFail} | {erl_flags, ErlangFlags}</v><v>Username = string()</v><v>Password = string()</v><v>BootTimeout = integer()</v><v>InitTimeout = integer()</v><v>StartupTimeout = integer()</v><v>StartupFunctions = [StartupFunctionSpec]</v><v>StartupFunctionSpec = {Module, Function, Arguments}</v><v>Module = atom()</v><v>Function = atom()</v><v>Arguments = [term]</v><v>Monitor = bool()</v><v>KillIfFail = bool()</v><v>ErlangFlags = string()</v><v>Result = {ok, NodeName} | {error, already_started, NodeName} | {error, started_not_connected, NodeName} | {error, boot_timeout, NodeName} | {error, init_timeout, NodeName} | {error, startup_timeout, NodeName} | {error, not_alive, NodeName}</v><v>NodeName = atom()</v></type>
<desc><marker id="start-3"/>

<p>Starts an Erlang node with name <c>Node</c> on host
   <c>Host</c> as specified by the combination of options in
   <c>Opts</c>.</p>
  
   <p>Options <c>Username</c> and <c>Password</c> will be used
   to log in onto the remote host <c>Host</c>.
   Username, if omitted, defaults to the current user name,
   and password is empty by default.</p>
  
   <p>A list of functions specified in the <c>Startup</c> option will be
   executed after startup of the node. Note that all used modules should be
   present in the code path on the <c>Host</c>.</p>
  
   <p>The timeouts are applied as follows:
   <list>
    <item>
     <c>BootTimeout</c> - time to start the Erlang node, in seconds.
     Defaults to 3 seconds. If node does not become pingable within this time,
     the result <c>{error, boot_timeout, NodeName}</c> is returned;
    </item>
    <item>
     <c>InitTimeout</c> - time to wait for the node until it calls the
      internal callback function informing master about successfull startup.
      Defaults to one second.
      In case of timed out message the result
      <c>{error, init_timeout, NodeName}</c> is returned;
    </item>
    <item>
     <c>StartupTimeout</c> - time to wait intil the node finishes to run
      the <c>StartupFunctions</c>. Defaults to one second.
      If this timeout occurs, the result
      <c>{error, startup_timeout, NodeName}</c> is returned.
    </item>
   </list></p>
  
   <p>Option <c>monitor_master</c> specifies, if the slave node should be
   stopped in case of master node stop. Defaults to false.</p>
  
   <p>Option <c>kill_if_fail</c> specifies, if the slave node should be
   killed in case of a timeout during initialization or startup.
   Defaults to true. Note that node also may be still alive it the boot
   timeout occurred, but it will not be killed in this case.</p>
  
   <p>Option <c>erlang_flags</c> specifies, which flags will be added
   to the parameters of the <c>erl</c> executable.</p>
  
   <p>Special return values are:
   <list>
    <item><c>{error, already_started, NodeName}</c> - if the node with
     the given name is already started on a given host;</item>
    <item><c>{error, started_not_connected, NodeName}</c> - if node is
    started, but not connected to the master node.</item>
    <item><c>{error, not_alive, NodeName}</c> - if node on which the
     <c>ct_slave:start/3</c> is called, is not alive. Note that
     <c>NodeName</c> is the name of current node in this case.</item>
   </list></p>
  
</desc></func>
<func>
<name>stop(Node) -&gt; Result</name>
<fsummary>Stops the running Erlang node with name Node on
   the localhost.</fsummary>
<type>
<v>Node = atom()</v><v>Result = {ok, NodeName} | {error, not_started, NodeName} | {error, not_connected, NodeName} | {error, stop_timeout, NodeName}</v><v>NodeName = atom()</v></type>
<desc><marker id="stop-1"/>

<p>Stops the running Erlang node with name <c>Node</c> on
   the localhost.</p>
</desc></func>
<func>
<name>stop(Host, Node) -&gt; Result</name>
<fsummary>Stops the running Erlang node with name Node on
   host Host.</fsummary>
<type>
<v>Host = atom()</v><v>Node = atom()</v><v>Result = {ok, NodeName} | {error, not_started, NodeName} | {error, not_connected, NodeName} | {error, stop_timeout, NodeName}</v><v>NodeName = atom()</v></type>
<desc><marker id="stop-2"/>

<p>Stops the running Erlang node with name <c>Node</c> on
   host <c>Host</c>.</p>
</desc></func></funcs>

<authors>
<aname> </aname>
<email> </email></authors></erlref>