2024-05-31 22:28:50 +03:00
/*
2005-01-12 10:03:29 +03:00
Unix SMB / CIFS implementation .
libcli composite function testing
Copyright ( C ) Andrew Tridgell 2005
2024-05-31 22:28:50 +03:00
2005-01-12 10:03:29 +03:00
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
2005-01-12 10:03:29 +03:00
( at your option ) any later version .
2024-05-31 22:28:50 +03:00
2005-01-12 10:03:29 +03:00
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 .
2024-05-31 22:28:50 +03:00
2005-01-12 10:03:29 +03:00
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/>.
2005-01-12 10:03:29 +03:00
*/
# include "includes.h"
2006-01-03 16:41:17 +03:00
# include "torture/torture.h"
2005-02-03 14:56:03 +03:00
# include "lib/events/events.h"
2005-01-12 10:03:29 +03:00
# include "libcli/raw/libcliraw.h"
2006-01-03 18:40:05 +03:00
# include "libcli/libcli.h"
2006-04-02 16:02:01 +04:00
# include "libcli/security/security.h"
2005-01-12 10:03:29 +03:00
# include "libcli/composite/composite.h"
2005-09-26 15:47:55 +04:00
# include "libcli/smb_composite/smb_composite.h"
2006-03-18 18:42:57 +03:00
# include "librpc/gen_ndr/ndr_misc.h"
2020-12-02 19:24:22 +03:00
# include "lib/cmdline/cmdline.h"
2006-03-17 20:59:58 +03:00
# include "torture/util.h"
2007-09-08 16:42:09 +04:00
# include "param/param.h"
2008-02-28 22:30:03 +03:00
# include "libcli/resolve/resolve.h"
2011-03-19 02:42:42 +03:00
# include "torture/raw/proto.h"
2005-01-12 10:03:29 +03:00
# define BASEDIR "\\composite"
2005-01-31 11:30:44 +03:00
static void loadfile_complete ( struct composite_context * c )
2005-01-16 15:10:14 +03:00
{
2005-09-26 15:47:55 +04:00
int * count = talloc_get_type ( c - > async . private_data , int ) ;
2005-01-16 15:10:14 +03:00
( * count ) + + ;
}
2005-01-12 14:43:18 +03:00
/*
test a simple savefile / loadfile combination
*/
2012-04-25 10:26:50 +04:00
static bool test_loadfile ( struct torture_context * tctx , struct smbcli_state * cli )
2005-01-12 10:03:29 +03:00
{
const char * fname = BASEDIR " \\ test.txt " ;
NTSTATUS status ;
2005-01-12 14:43:18 +03:00
struct smb_composite_savefile io1 ;
2012-04-25 10:26:50 +04:00
struct smb_composite_loadfile * io2 ;
2005-01-31 11:30:44 +03:00
struct composite_context * * c ;
2006-01-18 19:20:33 +03:00
uint8_t * data ;
2005-01-12 14:43:18 +03:00
size_t len = random ( ) % 100000 ;
2005-01-16 15:10:14 +03:00
const int num_ops = 50 ;
2005-01-17 02:32:37 +03:00
int i ;
2007-12-03 02:28:22 +03:00
int * count = talloc_zero ( tctx , int ) ;
2005-01-12 14:43:18 +03:00
2007-12-03 02:28:22 +03:00
data = talloc_array ( tctx , uint8_t , len ) ;
2005-01-12 14:43:18 +03:00
generate_random_buffer ( data , len ) ;
2005-01-12 10:03:29 +03:00
2005-01-12 14:43:18 +03:00
io1 . in . fname = fname ;
io1 . in . data = data ;
io1 . in . size = len ;
2005-01-12 10:03:29 +03:00
2012-04-25 10:26:50 +04:00
torture_comment ( tctx , " Testing savefile \n " ) ;
2005-01-12 14:43:18 +03:00
status = smb_composite_savefile ( cli - > tree , & io1 ) ;
2012-04-25 10:26:50 +04:00
torture_assert_ntstatus_equal ( tctx , status , NT_STATUS_OK , " savefile failed " ) ;
2005-01-12 14:43:18 +03:00
2012-04-25 10:26:50 +04:00
torture_comment ( tctx , " Testing parallel loadfile with %d ops \n " , num_ops ) ;
2005-01-12 14:43:18 +03:00
2007-12-03 02:28:22 +03:00
c = talloc_array ( tctx , struct composite_context * , num_ops ) ;
2012-04-25 10:26:50 +04:00
io2 = talloc_zero_array ( tctx , struct smb_composite_loadfile , num_ops ) ;
2005-01-12 10:03:29 +03:00
2005-01-16 15:10:14 +03:00
for ( i = 0 ; i < num_ops ; i + + ) {
2012-04-25 10:26:50 +04:00
io2 [ i ] . in . fname = fname ;
c [ i ] = smb_composite_loadfile_send ( cli - > tree , & io2 [ i ] ) ;
2005-01-16 15:10:14 +03:00
c [ i ] - > async . fn = loadfile_complete ;
2005-09-26 15:47:55 +04:00
c [ i ] - > async . private_data = count ;
2005-01-12 14:43:18 +03:00
}
2012-04-25 10:26:50 +04:00
torture_comment ( tctx , " waiting for completion \n " ) ;
2005-01-17 02:32:37 +03:00
while ( * count ! = num_ops ) {
2011-09-22 23:30:13 +04:00
tevent_loop_once ( tctx - > ev ) ;
2007-12-03 02:28:22 +03:00
if ( torture_setting_bool ( tctx , " progress " , true ) ) {
2012-04-25 10:26:50 +04:00
torture_comment ( tctx , " (%s) count=%d \r " , __location__ , * count ) ;
2007-04-30 01:37:29 +04:00
fflush ( stdout ) ;
}
2005-01-16 15:10:14 +03:00
}
2012-04-25 10:26:50 +04:00
torture_comment ( tctx , " count=%d \n " , * count ) ;
2024-05-31 22:28:50 +03:00
2005-01-16 15:10:14 +03:00
for ( i = 0 ; i < num_ops ; i + + ) {
2007-12-03 02:28:22 +03:00
status = smb_composite_loadfile_recv ( c [ i ] , tctx ) ;
2012-04-25 10:26:50 +04:00
torture_assert_ntstatus_equal ( tctx , status , NT_STATUS_OK , " loadfile failed " ) ;
2005-01-16 15:10:14 +03:00
2012-04-25 10:26:50 +04:00
torture_assert_int_equal ( tctx , io2 [ i ] . out . size , len , " wrong length in returned data " ) ;
torture_assert_mem_equal ( tctx , io2 [ i ] . out . data , data , len , " wrong data in loadfile " ) ;
2005-01-12 14:43:18 +03:00
}
talloc_free ( data ) ;
2007-10-07 02:28:14 +04:00
return true ;
2005-01-12 10:03:29 +03:00
}
2012-04-25 10:26:50 +04:00
static bool test_loadfile_t ( struct torture_context * tctx , struct smbcli_state * cli )
{
int ret ;
2012-04-26 04:13:37 +04:00
torture_assert ( tctx , torture_setup_dir ( cli , BASEDIR ) , " failed to setup " BASEDIR ) ;
2012-04-25 10:26:50 +04:00
ret = test_loadfile ( tctx , cli ) ;
smb_raw_exit ( cli - > session ) ;
smbcli_deltree ( cli - > tree , BASEDIR ) ;
return ret ;
}
2005-01-24 02:23:26 +03:00
/*
test a simple savefile / loadfile combination
*/
2012-04-25 10:26:50 +04:00
static bool test_fetchfile ( struct torture_context * tctx , struct smbcli_state * cli )
2005-01-24 02:23:26 +03:00
{
const char * fname = BASEDIR " \\ test.txt " ;
NTSTATUS status ;
struct smb_composite_savefile io1 ;
struct smb_composite_fetchfile io2 ;
2005-01-31 11:30:44 +03:00
struct composite_context * * c ;
2006-01-18 19:20:33 +03:00
uint8_t * data ;
2005-01-24 02:23:26 +03:00
int i ;
size_t len = random ( ) % 10000 ;
2005-01-27 09:18:20 +03:00
extern int torture_numops ;
2008-12-29 22:24:57 +03:00
struct tevent_context * event_ctx ;
2007-12-03 02:28:22 +03:00
int * count = talloc_zero ( tctx , int ) ;
2007-10-07 02:28:14 +04:00
bool ret = true ;
2005-01-24 02:23:26 +03:00
2007-12-03 02:28:22 +03:00
data = talloc_array ( tctx , uint8_t , len ) ;
2005-01-24 02:23:26 +03:00
generate_random_buffer ( data , len ) ;
2012-04-25 10:26:50 +04:00
ZERO_STRUCT ( io1 ) ;
2005-01-24 02:23:26 +03:00
io1 . in . fname = fname ;
io1 . in . data = data ;
io1 . in . size = len ;
2012-04-25 10:26:50 +04:00
torture_comment ( tctx , " Testing savefile \n " ) ;
2005-01-24 02:23:26 +03:00
status = smb_composite_savefile ( cli - > tree , & io1 ) ;
2012-04-25 10:26:50 +04:00
torture_assert_ntstatus_equal ( tctx , status , NT_STATUS_OK , " savefile failed " ) ;
ZERO_STRUCT ( io2 ) ;
2005-01-24 02:23:26 +03:00
2007-12-03 02:28:22 +03:00
io2 . in . dest_host = torture_setting_string ( tctx , " host " , NULL ) ;
2010-07-16 08:32:42 +04:00
io2 . in . ports = lpcfg_smb_ports ( tctx - > lp_ctx ) ;
2007-12-03 02:28:22 +03:00
io2 . in . called_name = torture_setting_string ( tctx , " host " , NULL ) ;
io2 . in . service = torture_setting_string ( tctx , " share " , NULL ) ;
2005-01-24 02:23:26 +03:00
io2 . in . service_type = " A: " ;
2012-04-25 10:26:50 +04:00
io2 . in . socket_options = lpcfg_socket_options ( tctx - > lp_ctx ) ;
2005-03-22 00:22:07 +03:00
2020-12-02 19:24:22 +03:00
io2 . in . credentials = samba_cmdline_get_creds ( ) ;
2010-07-16 08:32:42 +04:00
io2 . in . workgroup = lpcfg_workgroup ( tctx - > lp_ctx ) ;
2005-01-24 02:23:26 +03:00
io2 . in . filename = fname ;
2010-07-16 08:32:42 +04:00
lpcfg_smbcli_options ( tctx - > lp_ctx , & io2 . in . options ) ;
lpcfg_smbcli_session_options ( tctx - > lp_ctx , & io2 . in . session_options ) ;
2012-04-25 10:26:50 +04:00
io2 . in . resolve_ctx = lpcfg_resolve_context ( tctx - > lp_ctx ) ;
io2 . in . gensec_settings = lpcfg_gensec_settings ( tctx , tctx - > lp_ctx ) ;
2005-01-24 02:23:26 +03:00
2012-04-25 10:26:50 +04:00
torture_comment ( tctx , " Testing parallel fetchfile with %d ops \n " , torture_numops ) ;
2005-01-24 02:23:26 +03:00
2011-09-22 23:30:13 +04:00
event_ctx = tctx - > ev ;
2007-12-03 02:28:22 +03:00
c = talloc_array ( tctx , struct composite_context * , torture_numops ) ;
2005-01-24 02:23:26 +03:00
2005-01-27 09:18:20 +03:00
for ( i = 0 ; i < torture_numops ; i + + ) {
2005-01-24 02:23:26 +03:00
c [ i ] = smb_composite_fetchfile_send ( & io2 , event_ctx ) ;
c [ i ] - > async . fn = loadfile_complete ;
2005-09-26 15:47:55 +04:00
c [ i ] - > async . private_data = count ;
2005-01-24 02:23:26 +03:00
}
2012-04-25 10:26:50 +04:00
torture_comment ( tctx , " waiting for completion \n " ) ;
2005-01-24 02:23:26 +03:00
2005-01-27 09:18:20 +03:00
while ( * count ! = torture_numops ) {
2010-05-25 23:23:55 +04:00
tevent_loop_once ( event_ctx ) ;
2007-12-03 02:28:22 +03:00
if ( torture_setting_bool ( tctx , " progress " , true ) ) {
2012-04-25 10:26:50 +04:00
torture_comment ( tctx , " (%s) count=%d \r " , __location__ , * count ) ;
2007-04-30 01:37:29 +04:00
fflush ( stdout ) ;
}
2005-01-24 02:23:26 +03:00
}
2012-04-25 10:26:50 +04:00
torture_comment ( tctx , " count=%d \n " , * count ) ;
2005-01-24 02:23:26 +03:00
2005-01-27 09:18:20 +03:00
for ( i = 0 ; i < torture_numops ; i + + ) {
2007-12-03 02:28:22 +03:00
status = smb_composite_fetchfile_recv ( c [ i ] , tctx ) ;
2012-04-25 10:26:50 +04:00
torture_assert_ntstatus_equal ( tctx , status , NT_STATUS_OK , " loadfile failed " ) ;
2005-01-24 02:23:26 +03:00
2012-04-25 10:26:50 +04:00
torture_assert_int_equal ( tctx , io2 . out . size , len , " wrong length in returned data " ) ;
torture_assert_mem_equal ( tctx , io2 . out . data , data , len , " wrong data in loadfile " ) ;
}
return ret ;
}
static bool test_fetchfile_t ( struct torture_context * tctx , struct smbcli_state * cli )
{
int ret ;
2012-04-26 04:13:37 +04:00
torture_assert ( tctx , torture_setup_dir ( cli , BASEDIR ) , " failed to setup " BASEDIR ) ;
2012-04-25 10:26:50 +04:00
ret = test_fetchfile ( tctx , cli ) ;
smb_raw_exit ( cli - > session ) ;
smbcli_deltree ( cli - > tree , BASEDIR ) ;
2005-01-27 09:18:20 +03:00
return ret ;
2005-01-24 02:23:26 +03:00
}
2005-04-15 18:45:00 +04:00
/*
test setfileacl
*/
2012-04-25 10:26:50 +04:00
static bool test_appendacl ( struct torture_context * tctx , struct smbcli_state * cli )
2005-04-15 18:45:00 +04:00
{
struct smb_composite_appendacl * * io ;
struct smb_composite_appendacl * * io_orig ;
struct composite_context * * c ;
2008-12-29 22:24:57 +03:00
struct tevent_context * event_ctx ;
2005-04-15 18:45:00 +04:00
struct security_descriptor * test_sd ;
struct security_ace * ace ;
struct dom_sid * test_sid ;
const int num_ops = 50 ;
2007-12-03 02:28:22 +03:00
int * count = talloc_zero ( tctx , int ) ;
2005-04-15 18:45:00 +04:00
struct smb_composite_savefile io1 ;
NTSTATUS status ;
int i ;
2007-12-03 02:28:22 +03:00
io_orig = talloc_array ( tctx , struct smb_composite_appendacl * , num_ops ) ;
2005-04-15 18:45:00 +04:00
printf ( " creating %d empty files and getting their acls with appendacl \n " , num_ops ) ;
for ( i = 0 ; i < num_ops ; i + + ) {
io1 . in . fname = talloc_asprintf ( io_orig , BASEDIR " \\ test%d.txt " , i ) ;
io1 . in . data = NULL ;
io1 . in . size = 0 ;
2024-05-31 22:28:50 +03:00
2005-04-15 18:45:00 +04:00
status = smb_composite_savefile ( cli - > tree , & io1 ) ;
2012-04-26 04:13:37 +04:00
torture_assert_ntstatus_equal ( tctx , status , NT_STATUS_OK , " savefile failed " ) ;
2005-04-15 18:45:00 +04:00
io_orig [ i ] = talloc ( io_orig , struct smb_composite_appendacl ) ;
io_orig [ i ] - > in . fname = talloc_steal ( io_orig [ i ] , io1 . in . fname ) ;
io_orig [ i ] - > in . sd = security_descriptor_initialise ( io_orig [ i ] ) ;
status = smb_composite_appendacl ( cli - > tree , io_orig [ i ] , io_orig [ i ] ) ;
2012-04-26 04:13:37 +04:00
torture_assert_ntstatus_equal ( tctx , status , NT_STATUS_OK , " appendacl failed " ) ;
2005-04-15 18:45:00 +04:00
}
2024-05-31 22:28:50 +03:00
2005-04-15 18:45:00 +04:00
/* fill Security Descriptor with aces to be added */
2007-12-03 02:28:22 +03:00
test_sd = security_descriptor_initialise ( tctx ) ;
test_sid = dom_sid_parse_talloc ( tctx , " S-1-5-32-1234-5432 " ) ;
2005-04-15 18:45:00 +04:00
2007-12-03 02:28:22 +03:00
ace = talloc_zero ( tctx , struct security_ace ) ;
2005-04-15 18:45:00 +04:00
ace - > type = SEC_ACE_TYPE_ACCESS_ALLOWED ;
ace - > flags = 0 ;
ace - > access_mask = SEC_STD_ALL ;
ace - > trustee = * test_sid ;
status = security_descriptor_dacl_add ( test_sd , ace ) ;
2012-04-26 04:13:37 +04:00
torture_assert_ntstatus_equal ( tctx , status , NT_STATUS_OK , " appendacl failed " ) ;
2005-04-15 18:45:00 +04:00
/* set parameters for appendacl async call */
2012-04-25 10:26:50 +04:00
torture_comment ( tctx , " Testing parallel appendacl with %d ops \n " , num_ops ) ;
2005-04-15 18:45:00 +04:00
2007-12-03 02:28:22 +03:00
c = talloc_array ( tctx , struct composite_context * , num_ops ) ;
io = talloc_array ( tctx , struct smb_composite_appendacl * , num_ops ) ;
2005-04-15 18:45:00 +04:00
for ( i = 0 ; i < num_ops ; i + + ) {
io [ i ] = talloc ( io , struct smb_composite_appendacl ) ;
io [ i ] - > in . sd = test_sd ;
io [ i ] - > in . fname = talloc_asprintf ( io [ i ] , BASEDIR " \\ test%d.txt " , i ) ;
c [ i ] = smb_composite_appendacl_send ( cli - > tree , io [ i ] ) ;
c [ i ] - > async . fn = loadfile_complete ;
2005-09-26 15:47:55 +04:00
c [ i ] - > async . private_data = count ;
2005-04-15 18:45:00 +04:00
}
2008-04-22 01:58:23 +04:00
event_ctx = tctx - > ev ;
2012-04-25 10:26:50 +04:00
torture_comment ( tctx , " waiting for completion \n " ) ;
2005-04-15 18:45:00 +04:00
while ( * count ! = num_ops ) {
2010-05-25 23:23:55 +04:00
tevent_loop_once ( event_ctx ) ;
2007-12-03 02:28:22 +03:00
if ( torture_setting_bool ( tctx , " progress " , true ) ) {
2012-04-25 10:26:50 +04:00
torture_comment ( tctx , " (%s) count=%d \r " , __location__ , * count ) ;
2007-04-30 01:37:29 +04:00
fflush ( stdout ) ;
}
2005-04-15 18:45:00 +04:00
}
2012-04-25 10:26:50 +04:00
torture_comment ( tctx , " count=%d \n " , * count ) ;
2005-04-15 18:45:00 +04:00
for ( i = 0 ; i < num_ops ; i + + ) {
status = smb_composite_appendacl_recv ( c [ i ] , io [ i ] ) ;
if ( ! NT_STATUS_IS_OK ( status ) ) {
2012-04-25 10:26:50 +04:00
torture_comment ( tctx , " (%s) appendacl[%d] failed - %s \n " , __location__ , i , nt_errstr ( status ) ) ;
2007-10-07 02:28:14 +04:00
return false ;
2005-04-15 18:45:00 +04:00
}
2024-05-31 22:28:50 +03:00
2005-04-15 18:45:00 +04:00
security_descriptor_dacl_add ( io_orig [ i ] - > out . sd , ace ) ;
2012-04-25 10:26:50 +04:00
torture_assert ( tctx ,
security_acl_equal ( io_orig [ i ] - > out . sd - > dacl ,
io [ i ] - > out . sd - > dacl ) ,
" appendacl failed - needed acl isn't set " ) ;
2005-04-15 18:45:00 +04:00
}
2024-05-31 22:28:50 +03:00
2005-04-15 18:45:00 +04:00
talloc_free ( ace ) ;
talloc_free ( test_sid ) ;
talloc_free ( test_sd ) ;
2024-05-31 22:28:50 +03:00
2007-10-07 02:28:14 +04:00
return true ;
2005-04-15 18:45:00 +04:00
}
2012-04-25 10:26:50 +04:00
static bool test_appendacl_t ( struct torture_context * tctx , struct smbcli_state * cli )
{
int ret ;
2012-04-26 04:13:37 +04:00
torture_assert ( tctx , torture_setup_dir ( cli , BASEDIR ) , " failed to setup " BASEDIR ) ;
2012-04-25 10:26:50 +04:00
ret = test_appendacl ( tctx , cli ) ;
smb_raw_exit ( cli - > session ) ;
smbcli_deltree ( cli - > tree , BASEDIR ) ;
return ret ;
}
2005-04-15 18:45:00 +04:00
/* test a query FS info by asking for share's GUID */
2012-04-25 10:26:50 +04:00
static bool test_fsinfo ( struct torture_context * tctx , struct smbcli_state * cli )
2005-04-15 18:45:00 +04:00
{
char * guid = NULL ;
NTSTATUS status ;
struct smb_composite_fsinfo io1 ;
struct composite_context * * c ;
int i ;
extern int torture_numops ;
2008-12-29 22:24:57 +03:00
struct tevent_context * event_ctx ;
2007-12-03 02:28:22 +03:00
int * count = talloc_zero ( tctx , int ) ;
2007-10-07 02:28:14 +04:00
bool ret = true ;
2005-04-15 18:45:00 +04:00
2007-12-03 02:28:22 +03:00
io1 . in . dest_host = torture_setting_string ( tctx , " host " , NULL ) ;
2010-07-16 08:32:42 +04:00
io1 . in . dest_ports = lpcfg_smb_ports ( tctx - > lp_ctx ) ;
io1 . in . socket_options = lpcfg_socket_options ( tctx - > lp_ctx ) ;
2007-12-03 02:28:22 +03:00
io1 . in . called_name = torture_setting_string ( tctx , " host " , NULL ) ;
io1 . in . service = torture_setting_string ( tctx , " share " , NULL ) ;
2005-04-15 18:45:00 +04:00
io1 . in . service_type = " A: " ;
2020-12-02 19:24:22 +03:00
io1 . in . credentials = samba_cmdline_get_creds ( ) ;
2010-07-16 08:32:42 +04:00
io1 . in . workgroup = lpcfg_workgroup ( tctx - > lp_ctx ) ;
2005-04-15 18:45:00 +04:00
io1 . in . level = RAW_QFS_OBJECTID_INFORMATION ;
2010-07-16 08:32:42 +04:00
io1 . in . gensec_settings = lpcfg_gensec_settings ( tctx , tctx - > lp_ctx ) ;
2005-04-15 18:45:00 +04:00
2012-04-25 10:26:50 +04:00
torture_comment ( tctx , " Testing parallel queryfsinfo [Object ID] with %d ops \n " ,
torture_numops ) ;
2005-04-15 18:45:00 +04:00
2008-04-22 01:58:23 +04:00
event_ctx = tctx - > ev ;
2007-12-03 02:28:22 +03:00
c = talloc_array ( tctx , struct composite_context * , torture_numops ) ;
2005-04-15 18:45:00 +04:00
for ( i = 0 ; i < torture_numops ; i + + ) {
2012-04-25 10:26:50 +04:00
c [ i ] = smb_composite_fsinfo_send ( cli - > tree , & io1 , lpcfg_resolve_context ( tctx - > lp_ctx ) , event_ctx ) ;
torture_assert ( tctx , c [ i ] , " smb_composite_fsinfo_send failed! " ) ;
2005-04-15 18:45:00 +04:00
c [ i ] - > async . fn = loadfile_complete ;
2005-09-26 15:47:55 +04:00
c [ i ] - > async . private_data = count ;
2005-04-15 18:45:00 +04:00
}
2012-04-25 10:26:50 +04:00
torture_comment ( tctx , " waiting for completion \n " ) ;
2005-04-15 18:45:00 +04:00
while ( * count < torture_numops ) {
2010-05-25 23:23:55 +04:00
tevent_loop_once ( event_ctx ) ;
2007-12-03 02:28:22 +03:00
if ( torture_setting_bool ( tctx , " progress " , true ) ) {
2012-04-25 10:26:50 +04:00
torture_comment ( tctx , " (%s) count=%d \r " , __location__ , * count ) ;
2007-04-30 01:37:29 +04:00
fflush ( stdout ) ;
}
2005-04-15 18:45:00 +04:00
}
2012-04-25 10:26:50 +04:00
torture_comment ( tctx , " count=%d \n " , * count ) ;
2005-04-15 18:45:00 +04:00
for ( i = 0 ; i < torture_numops ; i + + ) {
2007-12-03 02:28:22 +03:00
status = smb_composite_fsinfo_recv ( c [ i ] , tctx ) ;
2012-04-25 10:26:50 +04:00
torture_assert_ntstatus_equal ( tctx , status , NT_STATUS_OK , " smb_composite_fsinfo_recv failed " ) ;
2005-04-15 18:45:00 +04:00
2012-04-25 10:26:50 +04:00
torture_assert_int_equal ( tctx , io1 . out . fsinfo - > generic . level , RAW_QFS_OBJECTID_INFORMATION , " wrong level in returned info " ) ;
2005-04-15 18:45:00 +04:00
2007-12-03 02:28:22 +03:00
guid = GUID_string ( tctx , & io1 . out . fsinfo - > objectid_information . out . guid ) ;
2012-04-25 10:26:50 +04:00
torture_comment ( tctx , " [%d] GUID: %s \n " , i , guid ) ;
2005-04-15 18:45:00 +04:00
}
return ret ;
}
2012-04-25 10:26:50 +04:00
static bool test_fsinfo_t ( struct torture_context * tctx , struct smbcli_state * cli )
2005-01-12 10:03:29 +03:00
{
2012-04-25 10:26:50 +04:00
int ret ;
2012-04-26 04:13:37 +04:00
torture_assert ( tctx , torture_setup_dir ( cli , BASEDIR ) , " failed to setup " BASEDIR ) ;
2012-04-25 10:26:50 +04:00
ret = test_fsinfo ( tctx , cli ) ;
2005-01-12 10:03:29 +03:00
smb_raw_exit ( cli - > session ) ;
smbcli_deltree ( cli - > tree , BASEDIR ) ;
return ret ;
}
2012-04-25 10:26:50 +04:00
/*
basic testing of all RAW_SEARCH_ * calls using a single file
*/
struct torture_suite * torture_raw_composite ( TALLOC_CTX * mem_ctx )
{
struct torture_suite * suite = torture_suite_create ( mem_ctx , " composite " ) ;
torture_suite_add_1smb_test ( suite , " fetchfile " , test_fetchfile_t ) ;
torture_suite_add_1smb_test ( suite , " loadfile " , test_loadfile_t ) ;
torture_suite_add_1smb_test ( suite , " appendacl " , test_appendacl_t ) ;
torture_suite_add_1smb_test ( suite , " fsinfo " , test_fsinfo_t ) ;
return suite ;
}