executor.c File Reference

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <poll.h>
#include <fcntl.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <signal.h>
#include <sched.h>
#include <libxml/xmlstring.h>
#include "remote_executor.h"
#include "executor.h"
#include "log.h"

Go to the source code of this file.

Defines

#define _XOPEN_SOURCE   500

Functions

static pid_t fork_process_redirect (int *stdout_fd, int *stderr_fd, const char *command)
static pid_t fork_process (const char *command)
static void * stream_data_realloc (stream_data *data, int size)
static void stream_data_free (stream_data *data)
static void stream_data_append (stream_data *data, char *src)
static int read_and_append (int fd, stream_data *data)
static void timer_handler (int signum)
static int set_timer (long secs)
static void reset_timer ()
static int execution_terminated (exec_data *data)
static void process_output_streams (int stdout_fd, int stderr_fd, exec_data *data)
static void communicate (int stdout_fd, int stderr_fd, exec_data *data)
static void strip_ctrl_chars (stream_data *data)
static void utf8_check (stream_data *data, const char *id, pid_t pid)
static int exec_wrapper (const char *command)
int execute (const char *command, exec_data *data)
void init_exec_data (exec_data *data)
void clean_exec_data (exec_data *data)
void init_stream_data (stream_data *data, int allocate)
void clean_stream_data (stream_data *data)
void kill_pgroup (int pgroup, int sig)
void executor_init (testrunner_lite_options *opts)
void executor_close ()
void handle_sigint (int signum)
void handle_sigterm (int signum)

Variables

int bail_out
char * global_failure
static volatile sig_atomic_t timer_value = 0
static struct sigaction default_alarm_action = { .sa_handler = NULL }
static testrunner_lite_optionsoptions
static exec_datacurrent_data


Define Documentation

#define _XOPEN_SOURCE   500

Definition at line 27 of file executor.c.


Function Documentation

void clean_exec_data ( exec_data data  ) 

Definition at line 837 of file executor.c.

void clean_stream_data ( stream_data data  ) 

Clean stream_data structure

Parameters:
data Pointer to data

Definition at line 862 of file executor.c.

static void communicate ( int  stdout_fd,
int  stderr_fd,
exec_data data 
) [static]

Set timeout timers, read output, and control execution of test step

Parameters:
stdout_fd File descriptor to read stdout stream
stderr_fd File descriptor to read stderr stream
data Input and output data controlling execution

Definition at line 589 of file executor.c.

static int exec_wrapper ( const char *  command  )  [static]

Executes a command on local or remote host

Parameters:
command Command to execute
Returns:
Does not return in success, error code from exec in case of error

Definition at line 169 of file executor.c.

int execute ( const char *  command,
exec_data data 
)

Execute a test step command

Parameters:
command Command to execute
data Input and output data controlling execution
Returns:
0 in success

Definition at line 776 of file executor.c.

static int execution_terminated ( exec_data data  )  [static]

Do unblocking wait for state change of process(es) belonging to process group

Parameters:
data Input and output data of the process
Returns:
1 if process(es) has terminated, 0 otherwise

Definition at line 450 of file executor.c.

void executor_close (  ) 

Clean up for executor

Definition at line 903 of file executor.c.

void executor_init ( testrunner_lite_options opts  ) 

Sets the remote host for executor

Parameters:
opts testrunner lite options

Definition at line 893 of file executor.c.

static pid_t fork_process ( const char *  command  )  [static]

Create new process with new session ID

Parameters:
command Command to execute
Returns:
PID of process on success, -1 in error

Definition at line 257 of file executor.c.

static pid_t fork_process_redirect ( int *  stdout_fd,
int *  stderr_fd,
const char *  command 
) [static]

Create new process with new session ID and redirect its output

Parameters:
stdout_fd Pointer to a file descriptor used to read stdout of executed command
stderr_fd Pointer to a file descriptor used to read stderr of executed command
command Command to execute
Returns:
PID of process on success, -1 in error

Definition at line 192 of file executor.c.

void handle_sigint ( int  signum  ) 

Definition at line 912 of file executor.c.

void handle_sigterm ( int  signum  ) 

Definition at line 926 of file executor.c.

void init_exec_data ( exec_data data  ) 

Initialize exec_data structure

Parameters:
data Pointer to data

Definition at line 825 of file executor.c.

void init_stream_data ( stream_data data,
int  allocate 
)

Initialize stream_data structure

Parameters:
data Pointer to data
allocate Number of bytes to allocate for string buffer

Definition at line 847 of file executor.c.

void kill_pgroup ( int  pgroup,
int  sig 
)

Send signal to process group of a test process

Parameters:
pgroup Process group ID for signal
sig Signal number

Definition at line 870 of file executor.c.

static void process_output_streams ( int  stdout_fd,
int  stderr_fd,
exec_data data 
) [static]

Read output streams from executed process

Parameters:
stdout_fd File descriptor to read stdout stream
stderr_fd File descriptor to read stderr stream
data Input and output data controlling execution

Definition at line 543 of file executor.c.

static int read_and_append ( int  fd,
stream_data data 
) [static]

Read data from file descriptor and append to stream_data. Reallocates memory if necessary

Parameters:
fd File descriptor to read
data Pointer to stream_data structure
Returns:
Value returned by read

Definition at line 333 of file executor.c.

static void reset_timer (  )  [static]

Reset timer and restore signal action of SIGALRM

Definition at line 422 of file executor.c.

static int set_timer ( long  secs  )  [static]

Initialize timer and set signal action for SIGALRM

Parameters:
secs Value in seconds after which global variable timer_value will be set
Returns:
0 in success, -1 in error

Definition at line 381 of file executor.c.

static void stream_data_append ( stream_data data,
char *  src 
) [static]

Append data to stream_data and reallocate memory if necessary

Parameters:
data Pointer to stream_data structure
src Data to append

Definition at line 316 of file executor.c.

static void stream_data_free ( stream_data data  )  [static]

Free memory allocated for stream_data

Parameters:
data Pointer to stream_data structure

Definition at line 305 of file executor.c.

static void * stream_data_realloc ( stream_data data,
int  size 
) [static]

Allocate memory for stream_data

Parameters:
data Pointer to stream_data structure
size Number of bytes to be allocated
Returns:
Non NULL on success, NULL in error

Definition at line 283 of file executor.c.

static void strip_ctrl_chars ( stream_data data  )  [static]

Replace control characters with space

Parameters:
data stream data to mangle

Definition at line 671 of file executor.c.

static void timer_handler ( int  signum  )  [static]

Signal handler for SIGALRM (timer)

Parameters:
signum Identifier of received signal

Definition at line 370 of file executor.c.

static void utf8_check ( stream_data data,
const char *  id,
pid_t  pid 
) [static]

If the data contains non utf-8 write the data to file instead of result xml

Parameters:
data stream data to mangle
id identifier (stdout/stderr)
pid pid of test step

Definition at line 710 of file executor.c.


Variable Documentation

int bail_out

Definition at line 67 of file testdefinitionprocessor.c.

Definition at line 77 of file executor.c.

struct sigaction default_alarm_action = { .sa_handler = NULL } [static]

Definition at line 75 of file executor.c.

Definition at line 66 of file testdefinitionprocessor.c.

Definition at line 76 of file executor.c.

volatile sig_atomic_t timer_value = 0 [static]

Definition at line 74 of file executor.c.


Generated on Wed Nov 10 14:13:01 2010 for testrunner-lite by  doxygen 1.5.6