Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
Added randomly generated harness seed.
Browse files Browse the repository at this point in the history
  • Loading branch information
mkauppila committed Jul 27, 2011
1 parent 8f2c09b commit a1881cb
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 3 deletions.
2 changes: 1 addition & 1 deletion test/test-automation/logger.h
Expand Up @@ -40,7 +40,7 @@ typedef struct LoggerData {
* logging interface. See the headers of implementations (plain_logger.h or
* xml_logger.h) for more information.
*/
typedef void (*RunStartedFp)(int parameterCount, char *runnerParameters[], char *runSeed, time_t eventTime, void *data);
typedef void (*RunStartedFp)(int parameterCount, char *runnerParameters[], char *runSeed, time_t eventTime, LoggerData *data);
typedef void (*RunEndedFp)(int testCount, int suiteCount, int testPassCount, int testFailCount,
int testSkippedCount, time_t endTime, double totalRuntime);

Expand Down
55 changes: 53 additions & 2 deletions test/test-automation/runner.c
Expand Up @@ -74,6 +74,8 @@ static int xsl_enabled = 0;
static int universal_timeout_enabled = 0;
//! Flag for enabling verbose logging
static int enable_verbose_logger = 0;
//! Flag for using user supplied run seed
static int userRunSeed = 0;


//!< Size of the test and suite name buffers
Expand All @@ -94,15 +96,20 @@ int universal_timeout = -1;
//! Default directory of the test suites
#define DEFAULT_TEST_DIRECTORY "tests/"

//! Fuzzer seed for the harness
char *runSeed = NULL;


//! Variable is used to pass the generated execution key to a test
char *globalExecKey = NULL;
char *runSeed = "seed";

//! Execution key that user supplied via command options
char *userExecKey = NULL;

//! How man time a test will be invocated
int testInvocationCount = 1;

// \todo move this upper!! (and add comments)
// \todo add comments
int totalTestFailureCount = 0, totalTestPassCount = 0, totalTestSkipCount = 0;
int testFailureCount = 0, testPassCount = 0, testSkipCount = 0;

Expand Down Expand Up @@ -804,6 +811,40 @@ HandleChildProcessReturnValue(int stat_lock)
}


/*!
* Generates a random run seed for the harness.
*
* \param length The length of the generated seed
*
* \returns The generated seed
*/
char *
GenerateRunSeed(const int length)
{
if(length <= 0) {
fprintf(stderr, "Error: lenght of harness seed can't be less than zero\n");
return NULL;
}

char *seed = SDL_malloc(length * sizeof(8));
if(seed == NULL) {
fprintf(stderr, "Error: malloc for run seed failed\n");
return NULL;
}

RND_CTX randomContext;

utl_randomInitTime(&randomContext);

int counter = 0;
for( ; counter < length; ++counter) {
int number = abs(utl_random(&randomContext));
seed[counter] = (char) (number % (127-34)) + 34;
}

return seed;
}

/*!
* Sets up the logger.
*
Expand Down Expand Up @@ -943,6 +984,8 @@ ParseOptions(int argc, char *argv[])
universal_timeout = atoi(timeoutString);
}
else if(SDL_strcmp(arg, "--seed") == 0) {
userRunSeed = 1;

if( (i + 1) < argc) {
runSeed = argv[++i];
} else {
Expand Down Expand Up @@ -1077,6 +1120,14 @@ main(int argc, char *argv[])
char *extension = "dylib";
#endif

if(userRunSeed == 0) {
runSeed = GenerateRunSeed(16);
if(runSeed == NULL) {
fprintf(stderr, "Error: Generating harness seed failed\n");
return 1;
}
}

LoggerData *loggerData = SetUpLogger();

const Uint32 startTicks = SDL_GetTicks();
Expand Down

0 comments on commit a1881cb

Please sign in to comment.