2006-03-25 17:49:00 +03:00
/*
Unix SMB / CIFS implementation .
SMB torture UI functions
Copyright ( C ) Jelmer Vernooij 2006
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
2007-07-10 06:07:03 +04:00
the Free Software Foundation ; either version 3 of the License , or
2006-03-25 17:49:00 +03:00
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
2007-07-10 06:07:03 +04:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2006-03-25 17:49:00 +03:00
*/
# include "includes.h"
# include "torture/ui.h"
2006-10-17 00:05:19 +04:00
# include "torture/torture.h"
2006-08-30 15:29:34 +04:00
# include "lib/util/dlinklist.h"
2007-09-08 16:42:09 +04:00
# include "param/param.h"
2007-09-16 18:39:19 +04:00
# include "system/filesys.h"
2008-01-08 07:34:46 +03:00
# include "auth/credentials/credentials.h"
# include "lib/cmdline/popt_common.h"
struct torture_context * torture_context_init ( TALLOC_CTX * mem_ctx ,
const struct torture_ui_ops * ui_ops )
{
struct torture_context * torture = talloc_zero ( mem_ctx ,
struct torture_context ) ;
torture - > ui_ops = ui_ops ;
torture - > returncode = true ;
torture - > ev = cli_credentials_get_event_context ( cmdline_credentials ) ;
if ( ui_ops - > init )
ui_ops - > init ( torture ) ;
return torture ;
}
2006-03-25 17:49:00 +03:00
2007-09-12 11:29:29 +04:00
/**
create a temporary directory .
*/
_PUBLIC_ NTSTATUS torture_temp_dir ( struct torture_context * tctx ,
const char * prefix ,
char * * tempdir )
{
SMB_ASSERT ( tctx - > outputdir ! = NULL ) ;
2007-10-14 15:28:01 +04:00
* tempdir = talloc_asprintf ( tctx , " %s/%s.XXXXXX " , tctx - > outputdir ,
prefix ) ;
2007-09-12 11:29:29 +04:00
NT_STATUS_HAVE_NO_MEMORY ( * tempdir ) ;
if ( mkdtemp ( * tempdir ) = = NULL ) {
return map_nt_error_from_unix ( errno ) ;
}
return NT_STATUS_OK ;
}
2006-10-17 23:36:55 +04:00
void torture_comment ( struct torture_context * context , const char * comment , . . . )
2006-06-13 03:03:02 +04:00
{
2006-06-17 02:06:09 +04:00
va_list ap ;
char * tmp ;
2006-06-17 03:10:15 +04:00
if ( ! context - > ui_ops - > comment )
return ;
2006-06-17 02:06:09 +04:00
va_start ( ap , comment ) ;
tmp = talloc_vasprintf ( context , comment , ap ) ;
context - > ui_ops - > comment ( context , tmp ) ;
talloc_free ( tmp ) ;
}
2006-06-13 03:03:02 +04:00
2007-03-06 00:28:55 +03:00
void torture_warning ( struct torture_context * context , const char * comment , . . . )
{
va_list ap ;
char * tmp ;
if ( ! context - > ui_ops - > warning )
return ;
va_start ( ap , comment ) ;
tmp = talloc_vasprintf ( context , comment , ap ) ;
context - > ui_ops - > warning ( context , tmp ) ;
talloc_free ( tmp ) ;
}
2006-10-17 23:06:50 +04:00
void torture_result ( struct torture_context * context ,
2007-08-11 21:08:22 +04:00
enum torture_result result , const char * fmt , . . . )
2006-06-17 02:06:09 +04:00
{
va_list ap ;
2006-06-17 03:10:15 +04:00
2006-06-17 02:06:09 +04:00
va_start ( ap , fmt ) ;
2007-10-05 12:54:27 +04:00
if ( context - > last_reason ) {
torture_warning ( context , " %s " , context - > last_reason ) ;
talloc_free ( context - > last_reason ) ;
}
2006-10-17 23:06:50 +04:00
context - > last_result = result ;
2006-06-17 04:17:50 +04:00
context - > last_reason = talloc_vasprintf ( context , fmt , ap ) ;
2006-06-17 02:06:09 +04:00
va_end ( ap ) ;
}
2006-03-25 17:49:00 +03:00
2006-06-17 02:06:09 +04:00
struct torture_suite * torture_suite_create ( TALLOC_CTX * ctx , const char * name )
{
2006-10-17 00:05:19 +04:00
struct torture_suite * suite = talloc_zero ( ctx , struct torture_suite ) ;
2006-03-25 17:49:00 +03:00
2006-06-17 02:06:09 +04:00
suite - > name = talloc_strdup ( suite , name ) ;
suite - > testcases = NULL ;
2006-10-16 17:06:41 +04:00
suite - > children = NULL ;
2006-06-13 03:03:02 +04:00
2006-06-17 02:06:09 +04:00
return suite ;
}
void torture_tcase_set_fixture ( struct torture_tcase * tcase ,
2007-10-07 02:28:14 +04:00
bool ( * setup ) ( struct torture_context * , void * * ) ,
bool ( * teardown ) ( struct torture_context * , void * ) )
2006-06-17 02:06:09 +04:00
{
tcase - > setup = setup ;
tcase - > teardown = teardown ;
2006-03-25 17:49:00 +03:00
}
2007-12-24 22:04:56 +03:00
static bool wrap_test_with_testcase_const ( struct torture_context * torture_ctx ,
2007-09-07 17:31:15 +04:00
struct torture_tcase * tcase ,
struct torture_test * test )
2006-10-16 17:06:41 +04:00
{
2007-12-24 22:04:56 +03:00
bool ( * fn ) ( struct torture_context * ,
2007-09-07 17:31:15 +04:00
const void * tcase_data ,
const void * test_data ) ;
2006-10-16 17:06:41 +04:00
fn = test - > fn ;
return fn ( torture_ctx , tcase - > data , test - > data ) ;
}
2007-12-24 22:04:56 +03:00
struct torture_test * torture_tcase_add_test_const ( struct torture_tcase * tcase ,
const char * name ,
bool ( * run ) ( struct torture_context * , const void * tcase_data ,
const void * test_data ) ,
const void * data )
2006-03-25 17:49:00 +03:00
{
2006-06-17 02:06:09 +04:00
struct torture_test * test = talloc ( tcase , struct torture_test ) ;
2006-03-25 17:49:00 +03:00
test - > name = talloc_strdup ( test , name ) ;
2006-06-17 02:06:09 +04:00
test - > description = NULL ;
2007-12-24 22:04:56 +03:00
test - > run = wrap_test_with_testcase_const ;
2006-10-16 17:06:41 +04:00
test - > fn = run ;
2007-08-31 19:43:03 +04:00
test - > dangerous = false ;
2006-06-17 02:06:09 +04:00
test - > data = data ;
2006-03-25 17:49:00 +03:00
2006-09-14 15:47:13 +04:00
DLIST_ADD_END ( tcase - > tests , test , struct torture_test * ) ;
2006-06-13 03:03:02 +04:00
return test ;
2006-03-25 17:49:00 +03:00
}
2006-06-17 02:06:09 +04:00
2007-10-14 15:28:01 +04:00
bool torture_suite_init_tcase ( struct torture_suite * suite ,
struct torture_tcase * tcase ,
const char * name )
2007-08-28 18:42:37 +04:00
{
2006-06-17 02:06:09 +04:00
tcase - > name = talloc_strdup ( tcase , name ) ;
tcase - > description = NULL ;
tcase - > setup = NULL ;
tcase - > teardown = NULL ;
2007-10-07 02:28:14 +04:00
tcase - > fixture_persistent = true ;
2006-06-17 02:06:09 +04:00
tcase - > tests = NULL ;
2006-10-16 17:06:41 +04:00
DLIST_ADD_END ( suite - > testcases , tcase , struct torture_tcase * ) ;
2006-06-17 02:06:09 +04:00
2007-08-28 18:42:37 +04:00
return true ;
}
struct torture_tcase * torture_suite_add_tcase ( struct torture_suite * suite ,
const char * name )
{
struct torture_tcase * tcase = talloc ( suite , struct torture_tcase ) ;
if ( ! torture_suite_init_tcase ( suite , tcase , name ) )
return NULL ;
2006-06-17 02:06:09 +04:00
return tcase ;
}
2007-10-07 02:28:14 +04:00
bool torture_run_suite ( struct torture_context * context ,
2007-10-14 15:28:01 +04:00
struct torture_suite * suite )
2006-06-17 02:06:09 +04:00
{
2007-10-07 02:28:14 +04:00
bool ret = true ;
2006-06-17 02:06:09 +04:00
struct torture_tcase * tcase ;
2006-10-16 17:06:41 +04:00
struct torture_suite * tsuite ;
2006-10-18 02:06:43 +04:00
char * old_testname ;
2006-06-17 02:06:09 +04:00
2006-10-16 17:06:41 +04:00
context - > level + + ;
2006-06-17 03:10:15 +04:00
if ( context - > ui_ops - > suite_start )
context - > ui_ops - > suite_start ( context , suite ) ;
2006-10-18 02:06:43 +04:00
old_testname = context - > active_testname ;
2006-11-03 01:17:11 +03:00
if ( old_testname ! = NULL )
2006-10-18 02:06:43 +04:00
context - > active_testname = talloc_asprintf ( context , " %s-%s " ,
2007-09-02 20:17:12 +04:00
old_testname , suite - > name ) ;
2006-10-18 02:06:43 +04:00
else
context - > active_testname = talloc_strdup ( context , suite - > name ) ;
2006-06-17 02:06:09 +04:00
for ( tcase = suite - > testcases ; tcase ; tcase = tcase - > next ) {
ret & = torture_run_tcase ( context , tcase ) ;
}
2006-06-17 03:10:15 +04:00
2006-10-16 17:06:41 +04:00
for ( tsuite = suite - > children ; tsuite ; tsuite = tsuite - > next ) {
ret & = torture_run_suite ( context , tsuite ) ;
}
2006-10-18 02:06:43 +04:00
talloc_free ( context - > active_testname ) ;
context - > active_testname = old_testname ;
2006-06-17 03:10:15 +04:00
if ( context - > ui_ops - > suite_finish )
context - > ui_ops - > suite_finish ( context , suite ) ;
2006-10-16 17:06:41 +04:00
context - > level - - ;
2006-03-25 17:49:00 +03:00
2006-06-17 02:06:09 +04:00
return ret ;
2006-03-25 17:49:00 +03:00
}
2007-10-14 15:28:01 +04:00
void torture_ui_test_start ( struct torture_context * context ,
struct torture_tcase * tcase ,
struct torture_test * test )
2006-10-17 00:05:19 +04:00
{
if ( context - > ui_ops - > test_start )
context - > ui_ops - > test_start ( context , tcase , test ) ;
}
2006-10-18 02:06:43 +04:00
int str_list_match ( const char * name , char * * list )
{
int i , ret = 0 ;
if ( list = = NULL )
return 0 ;
for ( i = 0 ; list [ i ] ; i + + ) {
if ( gen_fnmatch ( list [ i ] , name ) = = 0 )
ret + + ;
}
return ret ;
}
2007-10-14 15:28:01 +04:00
void torture_ui_test_result ( struct torture_context * context ,
enum torture_result result ,
const char * comment )
2006-10-17 00:05:19 +04:00
{
if ( context - > ui_ops - > test_result )
context - > ui_ops - > test_result ( context , result , comment ) ;
2007-01-30 15:10:42 +03:00
if ( result = = TORTURE_ERROR | | result = = TORTURE_FAIL )
context - > returncode = false ;
2006-10-17 00:05:19 +04:00
}
2007-09-02 20:17:12 +04:00
static bool internal_torture_run_test ( struct torture_context * context ,
2006-06-17 02:48:50 +04:00
struct torture_tcase * tcase ,
struct torture_test * test ,
2007-09-02 20:17:12 +04:00
bool already_setup )
2006-06-17 02:48:50 +04:00
{
2007-09-02 20:17:12 +04:00
bool success ;
2006-10-18 02:06:43 +04:00
char * old_testname ;
2006-06-17 02:48:50 +04:00
2006-10-18 02:06:43 +04:00
if ( tcase = = NULL | | strcmp ( test - > name , tcase - > name ) ! = 0 ) {
old_testname = context - > active_testname ;
2007-09-02 20:17:12 +04:00
context - > active_testname = talloc_asprintf ( context , " %s-%s " , old_testname , test - > name ) ;
2006-10-18 02:06:43 +04:00
}
2007-08-31 19:43:03 +04:00
2006-06-17 02:48:50 +04:00
context - > active_tcase = tcase ;
context - > active_test = test ;
2006-06-17 04:17:50 +04:00
2006-10-17 00:05:19 +04:00
torture_ui_test_start ( context , tcase , test ) ;
2006-06-17 02:48:50 +04:00
2006-06-17 04:17:50 +04:00
context - > last_reason = NULL ;
context - > last_result = TORTURE_OK ;
2007-09-02 20:17:12 +04:00
if ( ! already_setup & & tcase - > setup & &
! tcase - > setup ( context , & ( tcase - > data ) ) ) {
if ( context - > last_reason = = NULL )
context - > last_reason = talloc_strdup ( context , " Setup failure " ) ;
context - > last_result = TORTURE_ERROR ;
success = false ;
} else if ( test - > dangerous & &
2007-08-31 19:43:03 +04:00
! torture_setting_bool ( context , " dangerous " , false ) ) {
context - > last_result = TORTURE_SKIP ;
context - > last_reason = talloc_asprintf ( context ,
" disabled %s - enable dangerous tests to use " , test - > name ) ;
2007-09-07 20:27:02 +04:00
success = true ;
2007-08-31 19:43:03 +04:00
} else {
2007-09-02 20:17:12 +04:00
success = test - > run ( context , tcase , test ) ;
2007-08-31 19:43:03 +04:00
2007-09-02 20:17:12 +04:00
if ( ! success & & context - > last_result = = TORTURE_OK ) {
2007-08-31 19:43:03 +04:00
if ( context - > last_reason = = NULL )
context - > last_reason = talloc_strdup ( context , " Unknown error/failure " ) ;
context - > last_result = TORTURE_ERROR ;
}
2006-06-21 21:47:19 +04:00
}
2006-06-17 04:17:50 +04:00
2007-09-02 20:17:12 +04:00
if ( ! already_setup & & tcase - > teardown & & ! tcase - > teardown ( context , tcase - > data ) ) {
if ( context - > last_reason = = NULL )
context - > last_reason = talloc_strdup ( context , " Setup failure " ) ;
context - > last_result = TORTURE_ERROR ;
success = false ;
}
2007-08-31 19:43:03 +04:00
torture_ui_test_result ( context , context - > last_result ,
context - > last_reason ) ;
2006-10-17 00:05:19 +04:00
2006-06-17 04:17:50 +04:00
talloc_free ( context - > last_reason ) ;
2006-10-18 02:06:43 +04:00
if ( tcase = = NULL | | strcmp ( test - > name , tcase - > name ) ! = 0 ) {
talloc_free ( context - > active_testname ) ;
context - > active_testname = old_testname ;
}
2006-06-17 02:48:50 +04:00
context - > active_test = NULL ;
context - > active_tcase = NULL ;
2007-09-02 20:17:12 +04:00
return success ;
2006-06-17 02:48:50 +04:00
}
2007-10-07 02:28:14 +04:00
bool torture_run_tcase ( struct torture_context * context ,
2007-10-14 15:28:01 +04:00
struct torture_tcase * tcase )
2006-06-17 02:06:09 +04:00
{
2007-10-07 02:28:14 +04:00
bool ret = true ;
2006-10-18 02:06:43 +04:00
char * old_testname ;
2006-06-17 02:06:09 +04:00
struct torture_test * test ;
2006-10-16 17:06:41 +04:00
context - > level + + ;
2006-06-17 02:06:09 +04:00
context - > active_tcase = tcase ;
2007-09-02 20:17:12 +04:00
if ( context - > ui_ops - > tcase_start )
2006-06-17 02:06:09 +04:00
context - > ui_ops - > tcase_start ( context , tcase ) ;
if ( tcase - > fixture_persistent & & tcase - > setup
2006-10-16 17:06:41 +04:00
& & ! tcase - > setup ( context , & tcase - > data ) ) {
2007-09-02 20:17:12 +04:00
/* FIXME: Use torture ui ops for reporting this error */
fprintf ( stderr , " Setup failed: " ) ;
if ( context - > last_reason ! = NULL )
fprintf ( stderr , " %s " , context - > last_reason ) ;
fprintf ( stderr , " \n " ) ;
ret = false ;
2006-06-17 03:10:15 +04:00
goto done ;
}
2006-06-17 02:06:09 +04:00
2006-10-18 02:06:43 +04:00
old_testname = context - > active_testname ;
2007-10-14 15:28:01 +04:00
context - > active_testname = talloc_asprintf ( context , " %s-%s " ,
old_testname , tcase - > name ) ;
2006-06-17 02:06:09 +04:00
for ( test = tcase - > tests ; test ; test = test - > next ) {
2006-06-17 02:48:50 +04:00
ret & = internal_torture_run_test ( context , tcase , test ,
2006-10-16 17:06:41 +04:00
tcase - > fixture_persistent ) ;
2006-06-17 02:06:09 +04:00
}
2006-10-18 02:06:43 +04:00
talloc_free ( context - > active_testname ) ;
context - > active_testname = old_testname ;
2006-06-17 02:06:09 +04:00
if ( tcase - > fixture_persistent & & tcase - > teardown & &
2006-10-16 17:06:41 +04:00
! tcase - > teardown ( context , tcase - > data ) )
2007-09-02 20:17:12 +04:00
ret = false ;
2006-06-17 02:06:09 +04:00
2006-06-17 03:10:15 +04:00
done :
2006-06-17 02:06:09 +04:00
context - > active_tcase = NULL ;
2006-06-17 03:10:15 +04:00
if ( context - > ui_ops - > tcase_finish )
context - > ui_ops - > tcase_finish ( context , tcase ) ;
2006-10-16 17:06:41 +04:00
context - > level - - ;
2006-06-17 02:06:09 +04:00
return ret ;
}
2007-10-07 02:28:14 +04:00
bool torture_run_test ( struct torture_context * context ,
2006-06-17 02:06:09 +04:00
struct torture_tcase * tcase ,
struct torture_test * test )
2006-03-25 17:49:00 +03:00
{
2007-09-02 20:17:12 +04:00
return internal_torture_run_test ( context , tcase , test , false ) ;
2006-03-25 17:49:00 +03:00
}
2006-10-16 17:06:41 +04:00
int torture_setting_int ( struct torture_context * test , const char * name ,
int default_value )
{
2007-12-03 02:28:22 +03:00
return lp_parm_int ( test - > lp_ctx , NULL , " torture " , name , default_value ) ;
2006-10-16 17:06:41 +04:00
}
2007-08-28 04:16:58 +04:00
double torture_setting_double ( struct torture_context * test , const char * name ,
double default_value )
{
2007-12-03 02:28:22 +03:00
return lp_parm_double ( test - > lp_ctx , NULL , " torture " , name , default_value ) ;
2007-08-28 04:16:58 +04:00
}
2006-10-16 17:06:41 +04:00
bool torture_setting_bool ( struct torture_context * test , const char * name ,
bool default_value )
{
2007-12-03 02:28:22 +03:00
return lp_parm_bool ( test - > lp_ctx , NULL , " torture " , name , default_value ) ;
2006-10-16 17:06:41 +04:00
}
2007-10-14 15:28:01 +04:00
const char * torture_setting_string ( struct torture_context * test ,
const char * name ,
const char * default_value )
2006-03-25 17:49:00 +03:00
{
2007-12-03 04:58:12 +03:00
const char * ret ;
SMB_ASSERT ( test ! = NULL ) ;
SMB_ASSERT ( test - > lp_ctx ! = NULL ) ;
ret = lp_parm_string ( test - > lp_ctx , NULL , " torture " , name ) ;
2006-05-22 22:59:29 +04:00
2006-06-17 02:06:09 +04:00
if ( ret = = NULL )
return default_value ;
return ret ;
2006-03-25 17:49:00 +03:00
}
2007-12-24 22:04:56 +03:00
static bool wrap_test_with_simple_tcase_const (
struct torture_context * torture_ctx ,
struct torture_tcase * tcase ,
struct torture_test * test )
2006-06-12 23:49:53 +04:00
{
2006-10-16 17:06:41 +04:00
bool ( * fn ) ( struct torture_context * , const void * tcase_data ) ;
fn = test - > fn ;
2006-06-17 02:06:09 +04:00
2006-10-16 17:06:41 +04:00
return fn ( torture_ctx , test - > data ) ;
2006-06-12 23:49:53 +04:00
}
2007-12-24 22:04:56 +03:00
struct torture_tcase * torture_suite_add_simple_tcase_const (
2007-10-14 15:28:01 +04:00
struct torture_suite * suite , const char * name ,
bool ( * run ) ( struct torture_context * test , const void * ) ,
const void * data )
2006-03-25 17:49:00 +03:00
{
2006-06-17 02:06:09 +04:00
struct torture_tcase * tcase ;
2007-12-24 22:04:56 +03:00
struct torture_test * test ;
2006-06-17 02:06:09 +04:00
tcase = torture_suite_add_tcase ( suite , name ) ;
2006-06-21 21:47:19 +04:00
2006-10-16 17:06:41 +04:00
test = talloc ( tcase , struct torture_test ) ;
test - > name = talloc_strdup ( test , name ) ;
test - > description = NULL ;
2007-12-24 22:04:56 +03:00
test - > run = wrap_test_with_simple_tcase_const ;
2006-10-16 17:06:41 +04:00
test - > fn = run ;
test - > data = data ;
2007-08-28 18:42:37 +04:00
test - > dangerous = false ;
2006-10-16 17:06:41 +04:00
DLIST_ADD_END ( tcase - > tests , test , struct torture_test * ) ;
return tcase ;
}
static bool wrap_simple_test ( struct torture_context * torture_ctx ,
2007-10-14 15:28:01 +04:00
struct torture_tcase * tcase ,
struct torture_test * test )
2006-10-16 17:06:41 +04:00
{
bool ( * fn ) ( struct torture_context * ) ;
fn = test - > fn ;
return fn ( torture_ctx ) ;
}
struct torture_tcase * torture_suite_add_simple_test (
struct torture_suite * suite ,
const char * name ,
bool ( * run ) ( struct torture_context * test ) )
{
struct torture_test * test ;
struct torture_tcase * tcase ;
tcase = torture_suite_add_tcase ( suite , name ) ;
test = talloc ( tcase , struct torture_test ) ;
test - > name = talloc_strdup ( test , name ) ;
test - > description = NULL ;
test - > run = wrap_simple_test ;
test - > fn = run ;
test - > dangerous = false ;
DLIST_ADD_END ( tcase - > tests , test , struct torture_test * ) ;
2006-06-17 02:06:09 +04:00
return tcase ;
}
2006-10-16 17:06:41 +04:00
bool torture_suite_add_suite ( struct torture_suite * suite ,
2007-10-14 15:28:01 +04:00
struct torture_suite * child )
2006-10-16 17:06:41 +04:00
{
if ( child = = NULL )
return false ;
DLIST_ADD_END ( suite - > children , child , struct torture_suite * ) ;
/* FIXME: Check for duplicates and return false if the
* added suite already exists as a child */
return true ;
}
2006-10-17 03:09:15 +04:00
struct torture_suite * torture_find_suite ( struct torture_suite * parent ,
2007-10-14 15:28:01 +04:00
const char * name )
2006-10-16 17:06:41 +04:00
{
2006-10-17 03:09:15 +04:00
struct torture_suite * child ;
for ( child = parent - > children ; child ; child = child - > next )
if ( ! strcmp ( child - > name , name ) )
return child ;
2006-10-16 17:06:41 +04:00
return NULL ;
}
2007-08-26 19:16:40 +04:00
2007-12-24 22:04:56 +03:00
static bool wrap_test_with_simple_test_const ( struct torture_context * torture_ctx ,
2007-10-14 15:28:01 +04:00
struct torture_tcase * tcase ,
struct torture_test * test )
2007-08-26 19:16:40 +04:00
{
bool ( * fn ) ( struct torture_context * , const void * tcase_data ) ;
fn = test - > fn ;
return fn ( torture_ctx , tcase - > data ) ;
}
2007-12-24 22:04:56 +03:00
struct torture_test * torture_tcase_add_simple_test_const (
2007-08-26 19:16:40 +04:00
struct torture_tcase * tcase ,
const char * name ,
2007-12-24 22:04:56 +03:00
bool ( * run ) ( struct torture_context * test ,
const void * tcase_data ) )
2007-08-26 19:16:40 +04:00
{
2007-12-24 22:04:56 +03:00
struct torture_test * test ;
2007-08-26 19:16:40 +04:00
test = talloc ( tcase , struct torture_test ) ;
test - > name = talloc_strdup ( test , name ) ;
test - > description = NULL ;
2007-12-24 22:04:56 +03:00
test - > run = wrap_test_with_simple_test_const ;
2007-08-26 19:16:40 +04:00
test - > fn = run ;
test - > data = NULL ;
2007-08-28 18:42:37 +04:00
test - > dangerous = false ;
2007-08-26 19:16:40 +04:00
DLIST_ADD_END ( tcase - > tests , test , struct torture_test * ) ;
return test ;
}
2007-12-24 22:06:57 +03:00
static bool wrap_test_with_simple_test ( struct torture_context * torture_ctx ,
struct torture_tcase * tcase ,
struct torture_test * test )
{
bool ( * fn ) ( struct torture_context * , void * tcase_data ) ;
fn = test - > fn ;
return fn ( torture_ctx , tcase - > data ) ;
}
struct torture_test * torture_tcase_add_simple_test ( struct torture_tcase * tcase ,
const char * name ,
bool ( * run ) ( struct torture_context * test , void * tcase_data ) )
{
struct torture_test * test ;
test = talloc ( tcase , struct torture_test ) ;
test - > name = talloc_strdup ( test , name ) ;
test - > description = NULL ;
test - > run = wrap_test_with_simple_test ;
test - > fn = run ;
test - > data = NULL ;
test - > dangerous = false ;
DLIST_ADD_END ( tcase - > tests , test , struct torture_test * ) ;
return test ;
}
2007-08-26 19:16:40 +04:00