Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
libSDL
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PocketInsanity
libSDL
Commits
fc76a5fa
Commit
fc76a5fa
authored
Jul 24, 2011
by
Markus Kauppila
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixing the previous commit.
parent
afbf90dc
Changes
9
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
1056 additions
and
1 deletion
+1056
-1
fuzzer.c
test/test-automation/fuzzer/fuzzer.c
+119
-0
fuzzer.h
test/test-automation/fuzzer/fuzzer.h
+80
-0
utl_crc32.c
test/test-automation/fuzzer/utl_crc32.c
+125
-0
utl_crc32.h
test/test-automation/fuzzer/utl_crc32.h
+113
-0
utl_md5.c
test/test-automation/fuzzer/utl_md5.c
+314
-0
utl_md5.h
test/test-automation/fuzzer/utl_md5.h
+125
-0
utl_random.c
test/test-automation/fuzzer/utl_random.c
+63
-0
utl_random.h
test/test-automation/fuzzer/utl_random.h
+112
-0
runner.c
test/test-automation/runner.c
+5
-1
No files found.
test/test-automation/fuzzer/fuzzer.c
0 → 100644
View file @
fc76a5fa
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "../SDL_test.h"
#include "fuzzer.h"
//! context for test-specific random number generator
RND_CTX
rndContext3
;
int
GenerateExecKey
(
CRC32_CTX
crcContext
,
char
*
runSeed
,
char
*
suiteName
,
char
*
testName
,
int
iterationNumber
)
{
if
(
runSeed
==
NULL
||
suiteName
==
NULL
||
testName
==
NULL
||
iterationNumber
<
0
)
{
fprintf
(
stderr
,
"Incorrect parameter given to GenerateExecKey function
\n
"
);
return
-
1
;
}
char
iterationString
[
256
];
memset
(
iterationString
,
0
,
sizeof
(
iterationString
));
snprintf
(
iterationString
,
sizeof
(
iterationString
),
"%d"
,
iterationNumber
);
// combine the parameters
const
int
runSeedLength
=
strlen
(
runSeed
);
const
int
suiteNameLength
=
strlen
(
suiteName
);
const
int
testNameLength
=
strlen
(
testName
);
const
int
iterationStringLength
=
strlen
(
iterationString
);
// size of the entire + 3 for slashes and + 1 for '\0'
const
int
entireString
=
runSeedLength
+
suiteNameLength
+
testNameLength
+
iterationString
+
3
+
1
;
int
result
=
0
;
/* Let's take a hash from the strings separately because
* it's really slow to calculate md5 or crc32 for a really long string
* like 'runSeed/testSuiteName/testName/iteration'
*/
MD5_CTX
md5Context
;
utl_md5Init
(
&
md5Context
);
utl_md5Update
(
&
md5Context
,
runSeed
,
runSeedLength
);
utl_md5Update
(
&
md5Context
,
suiteName
,
suiteNameLength
);
utl_md5Update
(
&
md5Context
,
testName
,
testNameLength
);
utl_md5Update
(
&
md5Context
,
iterationString
,
iterationStringLength
);
utl_md5Final
(
&
md5Context
);
utl_crc32Calc
(
&
crcContext
,
md5Context
.
digest
,
sizeof
(
md5Context
.
digest
),
&
result
);
return
result
;
}
void
InitFuzzer
(
const
int
execKey
)
{
utl_randomInit
(
&
rndContext3
,
globalExecKey
,
globalExecKey
/
0xfafafafa
);
}
void
DeinitFuzzer
()
{
}
int
RandomInteger
()
{
return
utl_randomInt
(
&
rndContext3
);
}
int
RandomPositiveIntegerInRange
(
int
min
,
int
max
)
{
int
number
=
utl_randomInt
(
&
rndContext3
);
number
=
abs
(
number
);
return
(
number
%
(
max
-
min
))
+
min
;
}
int
RandomBoundaryValue
(
const
int
max
)
{
// Note: somehow integrate with RandomInteger?
// try to make more sensible & add new values
int
boundaryValues
[]
=
{
0
,
1
,
15
,
16
,
17
,
31
,
32
,
33
,
63
,
64
,
65
};
int
retValue
=
-
1
;
do
{
int
index
=
RandomPositiveIntegerInRange
(
0
,
10
);
retValue
=
boundaryValues
[
index
];
}
while
(
!
(
retValue
<=
max
)
);
return
retValue
;
}
char
*
RandomAsciiString
()
{
const
int
size
=
abs
(
RandomInteger
);
char
*
string
=
SDL_malloc
(
size
*
sizeof
(
size
));
int
counter
=
0
;
for
(
;
counter
<
size
;
++
counter
)
{
char
character
=
(
char
)
RandomPositiveIntegerInRange
(
0
,
127
);
string
[
counter
]
=
character
;
}
return
string
;
}
test/test-automation/fuzzer/fuzzer.h
0 → 100644
View file @
fc76a5fa
/*
Copyright (C) 2011 Markus Kauppila <markus.kauppila@gmail.com>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
#ifndef _FUZZER_H
#define _FUZZER_H
#include "utl_crc32.h"
#include "utl_md5.h"
#include "utl_random.h"
/*!
* Inits the fuzzer for a test
*/
void
InitFuzzer
(
const
int
execKey
);
/*!
* Deinits the fuzzer (for a test)
*/
void
DeinitFuzzer
();
/*!
* Returns random integer
*
* \returns Generated integer
*/
int
RandomInteger
();
/*!
* Returns positive integer in range [min, max]
*
* \returns Generated integer
*/
int
RandomPositiveIntegerInRange
(
int
min
,
int
max
);
/*!
* Generates random ASCII string
*
* \returns newly allocated random string
*/
char
*
RandomAsciiString
();
/*!
* Generates a random boundary value. Max is the biggest
* value the function can return.
*
* \returns a boundary value
*/
int
RandomBoundaryValue
(
const
int
max
);
/*!
* Generates execution key (used for random seed) for a test
*
* \param runSeed Seed of the harness
* \param suiteName Test suite name
* \param testName Test name
* \param iteration Number of test iteration
*
* \return Generated execution key
*/
int
GenerateExecKey
(
CRC32_CTX
crcContext
,
char
*
runSeed
,
char
*
suiteName
,
char
*
testName
,
int
interationNumber
);
#endif
test/test-automation/fuzzer/utl_crc32.c
0 → 100755
View file @
fc76a5fa
#include "utl_crc32.h"
int
utl_crc32Init
(
CRC32_CTX
*
crcContext
)
{
int
i
,
j
;
CrcUint32
c
;
/* Sanity check context pointer */
if
(
crcContext
==
NULL
)
{
return
(
-
1
);
}
/*
* Build auxiliary table for parallel byte-at-a-time CRC-32
*/
#ifdef ORIGINAL_METHOD
for
(
i
=
0
;
i
<
256
;
++
i
)
{
for
(
c
=
i
<<
24
,
j
=
8
;
j
>
0
;
--
j
)
{
c
=
c
&
0x80000000
?
(
c
<<
1
)
^
CRC32_POLY
:
(
c
<<
1
);
}
crcContext
->
crc32_table
[
i
]
=
c
;
}
#else
for
(
i
=
0
;
i
<
256
;
i
++
)
{
c
=
i
;
for
(
j
=
8
;
j
>
0
;
j
--
)
{
if
(
c
&
1
)
{
c
=
(
c
>>
1
)
^
CRC32_POLY
;
}
else
{
c
>>=
1
;
}
}
crcContext
->
crc32_table
[
i
]
=
c
;
}
#endif
return
(
0
);
}
/* Complete CRC32 calculation on a memory block */
int
utl_crc32Calc
(
CRC32_CTX
*
crcContext
,
CrcUint8
*
inBuf
,
CrcUint32
inLen
,
CrcUint32
*
crc32
)
{
if
(
utl_crc32CalcStart
(
crcContext
,
crc32
))
{
return
(
-
1
);
}
if
(
utl_crc32CalcBuffer
(
crcContext
,
inBuf
,
inLen
,
crc32
))
{
return
(
-
1
);
}
if
(
utl_crc32CalcEnd
(
crcContext
,
crc32
))
{
return
(
-
1
);
}
return
(
0
);
}
/* Start crc calculation */
int
utl_crc32CalcStart
(
CRC32_CTX
*
crcContext
,
CrcUint32
*
crc32
)
{
/* Sanity check pointers */
if
(
crcContext
==
NULL
)
{
*
crc32
=
0
;
return
(
-
1
);
}
/*
* Preload shift register, per CRC-32 spec
*/
*
crc32
=
0xffffffff
;
return
(
0
);
}
/* Finish crc calculation */
int
utl_crc32CalcEnd
(
CRC32_CTX
*
crcContext
,
CrcUint32
*
crc32
)
{
/*
* Return complement, per CRC-32 spec
*/
*
crc32
=
(
~
(
*
crc32
));
return
(
0
);
}
/* Include memory block in crc */
int
utl_crc32CalcBuffer
(
CRC32_CTX
*
crcContext
,
CrcUint8
*
inBuf
,
CrcUint32
inLen
,
CrcUint32
*
crc32
)
{
CrcUint8
*
p
;
register
CrcUint32
crc
;
/* Sanity check pointers */
if
(
crcContext
==
NULL
)
{
*
crc32
=
0
;
return
(
-
1
);
}
/*
* Calculate CRC from data
*/
crc
=
*
crc32
;
for
(
p
=
inBuf
;
inLen
>
0
;
++
p
,
--
inLen
)
{
#ifdef ORIGINAL_METHOD
crc
=
(
crc
<<
8
)
^
crcContext
->
crc32_table
[(
crc
>>
24
)
^
*
p
];
#else
crc
=
((
crc
>>
8
)
&
0x00FFFFFF
)
^
crcContext
->
crc32_table
[
(
crc
^
*
p
)
&
0xFF
];
#endif
}
*
crc32
=
crc
;
return
(
0
);
}
int
utl_crc32Done
(
CRC32_CTX
*
crcContext
)
{
/* Sanity check context pointer */
if
(
crcContext
==
NULL
)
{
return
(
-
1
);
}
return
(
0
);
}
test/test-automation/fuzzer/utl_crc32.h
0 → 100755
View file @
fc76a5fa
#ifndef _utl_crc32_h
#define _utl_crc32_h
/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
extern
"C"
{
#endif
/* ----------- Includes -------------- */
#include <stdlib.h>
/* ------------ Definitions --------- */
/* Definition shared by all CRC routines */
#ifndef CrcUint32
#define CrcUint32 unsigned int
#endif
#ifndef CrcUint8
#define CrcUint8 unsigned char
#endif
#ifdef ORIGINAL_METHOD
#define CRC32_POLY 0x04c11db7
/* AUTODIN II, Ethernet, & FDDI */
#else
#define CRC32_POLY 0xEDB88320
/* Perl String::CRC32 compatible */
#endif
/* Data structure for CRC32 (checksum) computation */
typedef
struct
{
CrcUint32
crc32_table
[
256
];
/* CRC table */
}
CRC32_CTX
;
/* ---------- Function Prototypes ------------- */
#ifdef WIN32
#ifdef BUILD_DLL
#define DLLINTERFACE __declspec(dllexport)
#else
#define DLLINTERFACE __declspec(dllimport)
#endif
#else
#define DLLINTERFACE
#endif
/*
* utl_crc32Init: initialize the CRC context
*
* Parameters:
*
* crcContext pointer to context variable
*
* Return value:
*
* 0 OK
* -1 error
*
* Note: The function initializes the crc table required for crc calcs.
*/
DLLINTERFACE
int
utl_crc32Init
(
CRC32_CTX
*
crcContext
);
/*
* utl_crc32Calc: calculate a crc32 from a data block
*
* Parameters:
*
* crcContext pointer to context variable
* inBuf input buffer to checksum
* inLen length of input buffer
* crc32 pointer to Uint32 to store the final CRC into
*
* Return value:
*
* 0 OK
* -1 error
*
*/
DLLINTERFACE
int
utl_crc32Calc
(
CRC32_CTX
*
crcContext
,
CrcUint8
*
inBuf
,
CrcUint32
inLen
,
CrcUint32
*
crc32
);
/* Same routine broken down into three steps */
DLLINTERFACE
int
utl_crc32CalcStart
(
CRC32_CTX
*
crcContext
,
CrcUint32
*
crc32
);
DLLINTERFACE
int
utl_crc32CalcEnd
(
CRC32_CTX
*
crcContext
,
CrcUint32
*
crc32
);
DLLINTERFACE
int
utl_crc32CalcBuffer
(
CRC32_CTX
*
crcContext
,
CrcUint8
*
inBuf
,
CrcUint32
inLen
,
CrcUint32
*
crc32
);
/*
* utl_crc32Done: clean up CRC context
*
* Parameters:
*
* crcContext pointer to context variable
*
* Return value:
*
* 0 OK
* -1 error
*
*/
DLLINTERFACE
int
utl_crc32Done
(
CRC32_CTX
*
crcContext
);
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
};
#endif
#endif
/* _utl_crc32_h */
test/test-automation/fuzzer/utl_md5.c
0 → 100755
View file @
fc76a5fa
This diff is collapsed.
Click to expand it.
test/test-automation/fuzzer/utl_md5.h
0 → 100755
View file @
fc76a5fa
/*
***********************************************************************
** utl_md5.h -- header file for implementation of MD5 **
** RSA Data Security, Inc. MD5 Message-Digest Algorithm **
** Created: 2/17/90 RLR **
** Revised: 12/27/90 SRD,AJ,BSK,JT Reference C version **
** Revised (for MD5): RLR 4/27/91 **
** -- G modified to have y&~z instead of y&z **
** -- FF, GG, HH modified to add in last register done **
** -- Access pattern: round 2 works mod 5, round 3 works mod 3 **
** -- distinct additive constant for each step **
** -- round 4 added, working mod 7 **
***********************************************************************
*/
/*
***********************************************************************
** Message-digest routines: **
** To form the message digest for a message M **
** (1) Initialize a context buffer mdContext using MD5Init **
** (2) Call MD5Update on mdContext and M **
** (3) Call MD5Final on mdContext **
** The message digest is now in mdContext->digest[0...15] **
***********************************************************************
*/
#ifndef _utl_md5_h
#define _utl_md5_h
/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
extern
"C"
{
#endif
/* ------------ Definitions --------- */
/* typedef a 32-bit type */
typedef
unsigned
long
int
MD5UINT4
;
/* Data structure for MD5 (Message-Digest) computation */
typedef
struct
{
MD5UINT4
i
[
2
];
/* number of _bits_ handled mod 2^64 */
MD5UINT4
buf
[
4
];
/* scratch buffer */
unsigned
char
in
[
64
];
/* input buffer */
unsigned
char
digest
[
16
];
/* actual digest after MD5Final call */
}
MD5_CTX
;
/* ---------- Function Prototypes ------------- */
#ifdef WIN32
#ifdef BUILD_DLL
#define DLLINTERFACE __declspec(dllexport)
#else
#define DLLINTERFACE __declspec(dllimport)
#endif
#else
#define DLLINTERFACE
#endif
/*
* utl_md5Init: initialize the context
*
* Parameters:
*
* mdContext pointer to context variable
*
* Return value:
*
* none
*
* Note: The function initializes the message-digest context
* mdContext. Call before each new use of the context -
* all fields are set to zero.
*/
DLLINTERFACE
void
utl_md5Init
(
MD5_CTX
*
mdContext
);
/*
* utl_md5update: update digest from variable length data
*
* Parameters:
*
* mdContext pointer to context variable
* inBuf pointer to data array/string
* inLen length of data array/string
*
* Return value:
*
* none
*
* Note: The function updates the message-digest context to account
* for the presence of each of the characters inBuf[0..inLen-1]
* in the message whose digest is being computed.
*/
DLLINTERFACE
void
utl_md5Update
(
MD5_CTX
*
mdContext
,
unsigned
char
*
inBuf
,
unsigned
int
inLen
);
/*
* utl_md5Final: complete digest computation
*
* Parameters:
*
* mdContext pointer to context variable
*
* Return value:
*
* none
*
* Note: The function terminates the message-digest computation and
* ends with the desired message digest in mdContext.digest[0..15].
* Always call before using the digest[] variable.
*/
DLLINTERFACE
void
utl_md5Final
(
MD5_CTX
*
mdContext
);
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
};
#endif
#endif
/* _utl_md5_h */
test/test-automation/fuzzer/utl_random.c
0 → 100755
View file @
fc76a5fa
/*
utl_random
A "32-bit Multiply with carry" random number generator.
*/
#include "utl_random.h"
/* Initialize random number generator with two integer variables */
void
utl_randomInit
(
RND_CTX
*
rndContext
,
unsigned
int
xi
,
unsigned
int
ci
)
{
/*
* Choose a value for 'a' from this list
* 1791398085 1929682203 1683268614 1965537969 1675393560
* 1967773755 1517746329 1447497129 1655692410 1606218150
* 2051013963 1075433238 1557985959 1781943330 1893513180
* 1631296680 2131995753 2083801278 1873196400 1554115554
*/
rndContext
->
a
=
1655692410
;
rndContext
->
x
=
30903
;
rndContext
->
c
=
0
;
if
(
xi
!=
0
)
rndContext
->
x
=
xi
;
rndContext
->
c
=
ci
;
rndContext
->
ah
=
rndContext
->
a
>>
16
;
rndContext
->
al
=
rndContext
->
a
&
65535
;
}
/* Initialize random number generator from time */
void
utl_randomInitTime
(
RND_CTX
*
rndContext
)
{
int
a
,
b
;
srand
(
time
(
NULL
));
a
=
rand
();
srand
(
clock
());
b
=
rand
();
utl_randomInit
(
rndContext
,
a
,
b
);
}
/* Returns random numbers */
unsigned
int
utl_random
(
RND_CTX
*
rndContext
)
{
unsigned
int
xh
,
xl
;
xh
=
rndContext
->
x
>>
16
,
xl
=
rndContext
->
x
&
65535
;
rndContext
->
x
=
rndContext
->
x
*
rndContext
->
a
+
rndContext
->
c
;
rndContext
->
c
=
xh
*
rndContext
->
ah
+
((
xh
*
rndContext
->
al
)
>>
16
)
+
((
xl
*
rndContext
->
ah
)
>>
16
);
if
(
xl
*
rndContext
->
al
>=
(
~
rndContext
->
c
+
1
))
rndContext
->
c
++
;
return
(
rndContext
->
x
);
}
test/test-automation/fuzzer/utl_random.h
0 → 100755
View file @
fc76a5fa
/*
A "32-bit Multiply with carry: random number generator.
Has a list of recommended multipliers. Very fast and good.
multiply-with-carry generator" x(n) = a*x(n-1) + carry mod 2^32.
period" (a*2^31)-1
*/
#ifndef _utl_random_h
#define _utl_random_h
/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
extern
"C"
{
#endif
/* ------- Includes ---------- */
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
/* ------- Definitions ------- */
/*
* Macros that return random number in a specific format. See utl_random()
* below for details. Float values are in the range [0.0-1.0].
*/
#define utl_randomInt(c) ((int)utl_random(c))
#define utl_randomFloat(c) ((double)utl_random(c)/(unsigned long)0xffffffff)
typedef
struct
{
unsigned
int
a
;
unsigned
int
x
;
unsigned
int
c
;
unsigned
int
ah
;
unsigned
int
al
;
}
RND_CTX
;
/* ---- Function Prototypes -------- */
#ifdef WIN32
#ifdef BUILD_DLL
#define DLLINTERFACE __declspec(dllexport)
#else
#define DLLINTERFACE __declspec(dllimport)
#endif
#else
#define DLLINTERFACE
#endif
/*
* utl_randomInit: Initialize random number generator with two integers.
*
* Paramaters:
*
* rndContext pointer to context structure
* xi, ci integers that define the random sequence
*
* Return value:
*
* none
*
* Note: The random sequence of numbers returned by utl_random() is the
* same for the same two integers and has a period of 2^31.
*
*/
DLLINTERFACE
void
utl_randomInit
(
RND_CTX
*
rndContext
,
unsigned
int
xi
,
unsigned
int
ci
);
/*
* utl_randomInitTime: Initialize random number generator with the time
*
* Parameters:
*
* rndContext pointer to context structure
*
* Return value:
*
* none
*
*/
DLLINTERFACE
void
utl_randomInitTime
(
RND_CTX
*
rndContext
);
/*
* utl_random: Returns random numbers
*
* Parameters:
*
* rndContext pointer to context structure
*
* Return value:
*
* random number (32bit unsigned integer)
*
* Note: utl_randomInit() or utl_randomInitTime() must have been called
* before using this function.
*
*/
DLLINTERFACE
unsigned
int
utl_random
(
RND_CTX
*
rndContext
);
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
};
#endif
#endif
/* _utl_random_h */
test/test-automation/runner.c
View file @
fc76a5fa
...
@@ -865,7 +865,8 @@ PrintUsage() {
...
@@ -865,7 +865,8 @@ PrintUsage() {
printf
(
"Usage: ./runner [--in-proc] [--suite SUITE] [--test TEST]
\n
"
);
printf
(
"Usage: ./runner [--in-proc] [--suite SUITE] [--test TEST]
\n
"
);
printf
(
" [--name-contains SUBSTR] [--show-tests]
\n
"
);
printf
(
" [--name-contains SUBSTR] [--show-tests]
\n
"
);
printf
(
" [--xml] [--xsl [STYLESHEET]] [--timeout VALUE]
\n
"
);
printf
(
" [--xml] [--xsl [STYLESHEET]] [--timeout VALUE]
\n
"
);
printf
(
" [--version] [--help]
\n
"
);
printf
(
" [--exec-key KEY] [--iterations VALUE]
\n
"
);
printf
(
" [--seed VALUE] [--version] [--help]
\n
"
);
printf
(
"Options:
\n
"
);
printf
(
"Options:
\n
"
);
printf
(
" --in-proc Executes tests in-process
\n
"
);
printf
(
" --in-proc Executes tests in-process
\n
"
);
printf
(
" --show-tests Prints out all the executable tests
\n
"
);
printf
(
" --show-tests Prints out all the executable tests
\n
"
);
...
@@ -873,6 +874,9 @@ PrintUsage() {
...
@@ -873,6 +874,9 @@ PrintUsage() {
printf
(
" --xsl [STYLESHEET] Adds XSL stylesheet to the XML test reports for
\n
"
);
printf
(
" --xsl [STYLESHEET] Adds XSL stylesheet to the XML test reports for
\n
"
);
printf
(
" browser viewing. Optionally uses the specified XSL
\n
"
);
printf
(
" browser viewing. Optionally uses the specified XSL
\n
"
);
printf
(
" file or URL instead of the default one
\n
"
);
printf
(
" file or URL instead of the default one
\n
"
);
printf
(
" --seed VALUE Specify fuzzing seed for the harness
\n
"
);
printf
(
" --iterations VALUE Specify how many times a test will be executed
\n
"
);
printf
(
" --exec-key KEY Run test(s) with specific execution key
\n
"
);
printf
(
" -tm --timeout VALUE Specify common timeout value for all tests
\n
"
);
printf
(
" -tm --timeout VALUE Specify common timeout value for all tests
\n
"
);
printf
(
" Timeout is given in seconds and it'll override
\n
"
);
printf
(
" Timeout is given in seconds and it'll override
\n
"
);
printf
(
" test specific timeout value only if the given
\n
"
);
printf
(
" test specific timeout value only if the given
\n
"
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment