2007-04-18 05:17:30 +04:00
/*
Unix SMB / CIFS implementation .
local testing of share code
Copyright ( C ) Jelmer Vernooij 2007
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
2007-04-18 05:17:30 +04: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/>.
2007-04-18 05:17:30 +04:00
*/
# include "includes.h"
# include "param/share.h"
2007-12-03 00:32:11 +03:00
# include "param/param.h"
2007-04-18 05:17:30 +04:00
# include "torture/torture.h"
static bool test_list_empty ( struct torture_context * tctx ,
2007-04-28 12:00:51 +04:00
const void * tcase_data ,
const void * test_data )
2007-04-18 05:17:30 +04:00
{
2007-09-08 20:46:30 +04:00
struct share_context * ctx = ( struct share_context * ) discard_const ( tcase_data ) ;
2007-04-18 05:17:30 +04:00
int count ;
const char * * names ;
torture_assert_ntstatus_ok ( tctx , share_list_all ( tctx , ctx , & count , & names ) ,
" share_list_all failed " ) ;
return true ;
}
2007-04-18 17:28:04 +04:00
static bool test_create ( struct torture_context * tctx ,
2007-04-28 12:00:51 +04:00
const void * tcase_data ,
const void * test_data )
2007-04-18 17:28:04 +04:00
{
2007-09-08 20:46:30 +04:00
struct share_context * ctx = ( struct share_context * ) discard_const ( tcase_data ) ;
2007-04-18 17:28:04 +04:00
int count ;
const char * * names ;
int i ;
bool found = false ;
struct share_info inf [ ] = {
{ SHARE_INFO_STRING , SHARE_TYPE , discard_const_p ( void * , " IPC$ " ) } ,
{ SHARE_INFO_STRING , SHARE_PATH , discard_const_p ( void * , " /tmp/bla " ) }
} ;
NTSTATUS status ;
status = share_create ( ctx , " bloe " , inf , 2 ) ;
if ( NT_STATUS_EQUAL ( status , NT_STATUS_NOT_IMPLEMENTED ) )
torture_skip ( tctx , " Not supported by backend " ) ;
torture_assert_ntstatus_ok ( tctx , status , " create_share failed " ) ;
torture_assert_ntstatus_ok ( tctx , share_list_all ( tctx , ctx , & count , & names ) ,
" share_list_all failed " ) ;
torture_assert ( tctx , count > = 1 , " creating share failed " ) ;
for ( i = 0 ; i < count ; i + + ) {
found | = strcmp ( names [ i ] , " bloe " ) = = 0 ;
}
torture_assert ( tctx , found , " created share found " ) ;
return true ;
}
static bool test_create_invalid ( struct torture_context * tctx ,
2007-04-28 12:00:51 +04:00
const void * tcase_data ,
const void * test_data )
2007-04-18 17:28:04 +04:00
{
2007-09-08 20:46:30 +04:00
struct share_context * ctx = ( struct share_context * ) discard_const ( tcase_data ) ;
2007-04-18 17:28:04 +04:00
NTSTATUS status ;
status = share_create ( ctx , " bla " , NULL , 0 ) ;
if ( NT_STATUS_EQUAL ( status , NT_STATUS_NOT_IMPLEMENTED ) )
torture_skip ( tctx , " Not supported by backend " ) ;
torture_assert_ntstatus_equal ( tctx , NT_STATUS_INVALID_PARAMETER ,
2007-04-28 12:00:51 +04:00
status ,
" create_share failed " ) ;
2007-04-18 17:28:04 +04:00
torture_assert_ntstatus_equal ( tctx , NT_STATUS_INVALID_PARAMETER ,
2007-04-28 12:00:51 +04:00
share_create ( ctx , NULL , NULL , 0 ) ,
" create_share failed " ) ;
2007-04-18 17:28:04 +04:00
return true ;
}
static bool test_share_remove_invalid ( struct torture_context * tctx ,
2007-04-28 12:00:51 +04:00
const void * tcase_data ,
const void * test_data )
2007-04-18 17:28:04 +04:00
{
2007-09-08 20:46:30 +04:00
struct share_context * ctx = ( struct share_context * ) discard_const ( tcase_data ) ;
2007-04-18 17:28:04 +04:00
NTSTATUS status ;
status = share_remove ( ctx , " nonexistant " ) ;
if ( NT_STATUS_EQUAL ( status , NT_STATUS_NOT_IMPLEMENTED ) )
torture_skip ( tctx , " Not supported by backend " ) ;
2007-04-28 12:00:51 +04:00
torture_assert_ntstatus_equal ( tctx , status , NT_STATUS_UNSUCCESSFUL , " remove fails " ) ;
2007-04-18 17:28:04 +04:00
return true ;
}
static bool test_share_remove ( struct torture_context * tctx ,
2007-04-28 12:00:51 +04:00
const void * tcase_data ,
const void * test_data )
2007-04-18 17:28:04 +04:00
{
2007-09-08 20:46:30 +04:00
struct share_context * ctx = ( struct share_context * ) discard_const ( tcase_data ) ;
2007-04-18 17:28:04 +04:00
struct share_info inf [ ] = {
{ SHARE_INFO_STRING , SHARE_TYPE , discard_const_p ( void * , " IPC$ " ) } ,
{ SHARE_INFO_STRING , SHARE_PATH , discard_const_p ( void * , " /tmp/bla " ) }
} ;
NTSTATUS status ;
status = share_create ( ctx , " blie " , inf , 2 ) ;
if ( NT_STATUS_EQUAL ( status , NT_STATUS_NOT_IMPLEMENTED ) )
torture_skip ( tctx , " Not supported by backend " ) ;
2007-04-28 12:00:51 +04:00
torture_assert_ntstatus_ok ( tctx , status , " create_share failed " ) ;
2007-04-18 17:28:04 +04:00
2007-04-28 12:00:51 +04:00
torture_assert_ntstatus_ok ( tctx , share_remove ( ctx , " blie " ) , " remove failed " ) ;
2007-04-18 17:28:04 +04:00
return true ;
}
static bool test_double_create ( struct torture_context * tctx ,
2007-04-28 12:00:51 +04:00
const void * tcase_data ,
const void * test_data )
2007-04-18 17:28:04 +04:00
{
2007-09-08 20:46:30 +04:00
struct share_context * ctx = ( struct share_context * ) discard_const ( tcase_data ) ;
2007-04-18 17:28:04 +04:00
struct share_info inf [ ] = {
{ SHARE_INFO_STRING , SHARE_TYPE , discard_const_p ( void * , " IPC$ " ) } ,
{ SHARE_INFO_STRING , SHARE_PATH , discard_const_p ( void * , " /tmp/bla " ) }
} ;
NTSTATUS status ;
status = share_create ( ctx , " bla " , inf , 2 ) ;
if ( NT_STATUS_EQUAL ( status , NT_STATUS_NOT_IMPLEMENTED ) )
torture_skip ( tctx , " Not supported by backend " ) ;
2007-04-28 12:00:51 +04:00
torture_assert_ntstatus_ok ( tctx , status , " create_share failed " ) ;
2007-04-18 17:28:04 +04:00
2007-04-28 12:37:36 +04:00
torture_assert_ntstatus_equal ( tctx , NT_STATUS_OBJECT_NAME_COLLISION ,
2007-04-28 12:00:51 +04:00
share_create ( ctx , " bla " , inf , 2 ) ,
" create_share failed " ) ;
2007-04-18 17:28:04 +04:00
return true ;
}
2007-04-18 05:17:30 +04:00
static void tcase_add_share_tests ( struct torture_tcase * tcase )
{
torture_tcase_add_test ( tcase , " list_empty " , test_list_empty , NULL ) ;
2007-04-18 17:28:04 +04:00
torture_tcase_add_test ( tcase , " share_create " , test_create , NULL ) ;
torture_tcase_add_test ( tcase , " share_remove " , test_share_remove , NULL ) ;
torture_tcase_add_test ( tcase , " share_remove_invalid " , test_share_remove_invalid , NULL ) ;
2007-04-28 12:00:51 +04:00
torture_tcase_add_test ( tcase , " share_create_invalid " , test_create_invalid , NULL ) ;
2007-04-18 17:28:04 +04:00
torture_tcase_add_test ( tcase , " share_double_create " , test_double_create , NULL ) ;
2007-04-18 05:17:30 +04:00
}
2007-10-07 02:28:14 +04:00
static bool setup_ldb ( struct torture_context * tctx , void * * data )
2007-04-18 05:17:30 +04:00
{
2007-12-14 00:46:55 +03:00
return NT_STATUS_IS_OK ( share_get_context_by_name ( tctx , " ldb " , tctx - > lp_ctx , ( struct share_context * * ) data ) ) ;
2007-04-18 05:17:30 +04:00
}
2007-10-07 02:28:14 +04:00
static bool setup_classic ( struct torture_context * tctx , void * * data )
2007-04-18 05:17:30 +04:00
{
2007-12-14 00:46:55 +03:00
return NT_STATUS_IS_OK ( share_get_context_by_name ( tctx , " classic " , tctx - > lp_ctx , ( struct share_context * * ) data ) ) ;
2007-04-18 05:17:30 +04:00
}
2007-10-07 02:28:14 +04:00
static bool teardown ( struct torture_context * tctx , void * data )
2007-04-18 05:17:30 +04:00
{
talloc_free ( data ) ;
return true ;
}
struct torture_suite * torture_local_share ( TALLOC_CTX * mem_ctx )
{
2007-04-28 12:00:51 +04:00
struct torture_suite * suite = torture_suite_create ( mem_ctx , " SHARE " ) ;
2007-04-18 05:17:30 +04:00
struct torture_tcase * tcase ;
2007-12-10 06:33:16 +03:00
share_init ( ) ;
2007-04-18 05:17:30 +04:00
tcase = torture_suite_add_tcase ( suite , " ldb " ) ;
torture_tcase_set_fixture ( tcase , setup_ldb , teardown ) ;
tcase_add_share_tests ( tcase ) ;
tcase = torture_suite_add_tcase ( suite , " classic " ) ;
torture_tcase_set_fixture ( tcase , setup_classic , teardown ) ;
tcase_add_share_tests ( tcase ) ;
return suite ;
}