2010-09-16 18:22:32 +04:00
/*
2007-02-14 22:30:05 +03:00
Unix SMB / CIFS implementation .
test suite for winreg ndr operations
Copyright ( C ) Jelmer Vernooij 2007
2010-09-16 18:22:32 +04:00
2007-02-14 22:30:05 +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
2007-02-14 22:30:05 +03:00
( at your option ) any later version .
2010-09-16 18:22:32 +04:00
2007-02-14 22:30:05 +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 .
2010-09-16 18:22:32 +04:00
2007-02-14 22:30:05 +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/>.
2007-02-14 22:30:05 +03:00
*/
# include "includes.h"
# include "torture/ndr/ndr.h"
# include "torture/ndr/proto.h"
2008-10-11 23:31:42 +04:00
# include "../lib/util/dlinklist.h"
2007-12-14 00:46:27 +03:00
# include "param/param.h"
2016-07-25 06:34:39 +03:00
# include "librpc/gen_ndr/ndr_misc.h"
2007-02-14 22:30:05 +03:00
struct ndr_pull_test_data {
DATA_BLOB data ;
2010-09-16 18:21:39 +04:00
DATA_BLOB data_context ;
2007-02-14 22:30:05 +03:00
size_t struct_size ;
ndr_pull_flags_fn_t pull_fn ;
2011-09-07 09:35:55 +04:00
ndr_push_flags_fn_t push_fn ;
2007-02-14 22:30:05 +03:00
int ndr_flags ;
2013-01-15 20:04:08 +04:00
int flags ;
2007-02-14 22:30:05 +03:00
} ;
2015-06-26 17:45:21 +03:00
static enum ndr_err_code torture_ndr_push_struct_blob_flags ( DATA_BLOB * blob , TALLOC_CTX * mem_ctx , uint32_t flags , uint32_t ndr_flags , const void * p , ndr_push_flags_fn_t fn )
{
struct ndr_push * ndr ;
ndr = ndr_push_init_ctx ( mem_ctx ) ;
NDR_ERR_HAVE_NO_MEMORY ( ndr ) ;
ndr - > flags | = ndr_flags ;
NDR_CHECK ( fn ( ndr , flags , p ) ) ;
* blob = ndr_push_blob ( ndr ) ;
talloc_steal ( mem_ctx , blob - > data ) ;
talloc_free ( ndr ) ;
return NDR_ERR_SUCCESS ;
}
2011-09-07 09:35:55 +04:00
static bool wrap_ndr_pullpush_test ( struct torture_context * tctx ,
struct torture_tcase * tcase ,
struct torture_test * test )
2007-02-14 22:30:05 +03:00
{
bool ( * check_fn ) ( struct torture_context * ctx , void * data ) = test - > fn ;
2007-09-08 20:46:30 +04:00
const struct ndr_pull_test_data * data = ( const struct ndr_pull_test_data * ) test - > data ;
2010-05-09 19:20:01 +04:00
struct ndr_pull * ndr = ndr_pull_init_blob ( & ( data - > data ) , tctx ) ;
2011-09-07 09:35:55 +04:00
void * ds = talloc_zero_size ( ndr , data - > struct_size ) ;
bool ret ;
2013-02-01 20:45:02 +04:00
uint32_t highest_ofs ;
2007-02-14 22:30:05 +03:00
2013-01-15 20:04:08 +04:00
ndr - > flags | = data - > flags ;
2007-02-14 22:30:05 +03:00
ndr - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 21:24:51 +03:00
torture_assert_ndr_success ( tctx , data - > pull_fn ( ndr , data - > ndr_flags , ds ) ,
" pulling " ) ;
2007-02-14 22:30:05 +03:00
2013-02-01 20:45:02 +04:00
if ( ndr - > offset > ndr - > relative_highest_offset ) {
highest_ofs = ndr - > offset ;
} else {
highest_ofs = ndr - > relative_highest_offset ;
}
torture_assert ( tctx , highest_ofs = = ndr - > data_size ,
2010-09-16 18:22:32 +04:00
talloc_asprintf ( tctx ,
2013-02-01 20:45:02 +04:00
" %d unread bytes " , ndr - > data_size - highest_ofs ) ) ;
2007-02-18 15:00:53 +03:00
2011-09-07 09:35:55 +04:00
if ( check_fn ! = NULL ) {
ret = check_fn ( tctx , ds ) ;
} else {
ret = true ;
}
if ( data - > push_fn ! = NULL ) {
DATA_BLOB outblob ;
2015-06-26 17:45:21 +03:00
torture_assert_ndr_success ( tctx , torture_ndr_push_struct_blob_flags ( & outblob , ndr , data - > ndr_flags , ndr - > flags , ds , data - > push_fn ) , " pushing " ) ;
2011-09-07 09:35:55 +04:00
torture_assert_data_blob_equal ( tctx , outblob , data - > data , " ndr push compare " ) ;
}
talloc_free ( ndr ) ;
return ret ;
2007-02-14 22:30:05 +03:00
}
2011-09-07 09:35:55 +04:00
_PUBLIC_ struct torture_test * _torture_suite_add_ndr_pullpush_test (
struct torture_suite * suite ,
const char * name ,
ndr_pull_flags_fn_t pull_fn ,
ndr_push_flags_fn_t push_fn ,
DATA_BLOB db ,
size_t struct_size ,
int ndr_flags ,
2013-01-15 20:04:08 +04:00
int flags ,
2011-09-07 09:35:55 +04:00
bool ( * check_fn ) ( struct torture_context * ctx , void * data ) )
2007-02-14 22:30:05 +03:00
{
2010-09-16 18:22:32 +04:00
struct torture_test * test ;
2007-02-14 22:30:05 +03:00
struct torture_tcase * tcase ;
struct ndr_pull_test_data * data ;
2010-09-16 18:22:32 +04:00
2007-02-14 22:30:05 +03:00
tcase = torture_suite_add_tcase ( suite , name ) ;
test = talloc ( tcase , struct torture_test ) ;
test - > name = talloc_strdup ( test , name ) ;
test - > description = NULL ;
2011-09-07 09:35:55 +04:00
test - > run = wrap_ndr_pullpush_test ;
2007-02-14 22:30:05 +03:00
data = talloc ( test , struct ndr_pull_test_data ) ;
data - > data = db ;
data - > ndr_flags = ndr_flags ;
2013-01-15 20:04:08 +04:00
data - > flags = flags ;
2007-02-14 22:30:05 +03:00
data - > struct_size = struct_size ;
data - > pull_fn = pull_fn ;
2011-09-07 09:35:55 +04:00
data - > push_fn = push_fn ;
2010-09-16 18:21:39 +04:00
test - > data = data ;
test - > fn = check_fn ;
test - > dangerous = false ;
2016-02-05 13:32:18 +03:00
DLIST_ADD_END ( tcase - > tests , test ) ;
2010-09-16 18:21:39 +04:00
return test ;
}
2011-09-07 09:35:55 +04:00
2010-09-16 18:21:39 +04:00
static bool wrap_ndr_inout_pull_test ( struct torture_context * tctx ,
struct torture_tcase * tcase ,
struct torture_test * test )
{
bool ( * check_fn ) ( struct torture_context * ctx , void * data ) = test - > fn ;
const struct ndr_pull_test_data * data = ( const struct ndr_pull_test_data * ) test - > data ;
void * ds = talloc_zero_size ( tctx , data - > struct_size ) ;
struct ndr_pull * ndr ;
2013-02-01 20:45:02 +04:00
uint32_t highest_ofs ;
2010-09-16 18:21:39 +04:00
/* handle NDR_IN context */
ndr = ndr_pull_init_blob ( & ( data - > data_context ) , tctx ) ;
torture_assert ( tctx , ndr , " ndr init failed " ) ;
ndr - > flags | = LIBNDR_FLAG_REF_ALLOC ;
torture_assert_ndr_success ( tctx ,
data - > pull_fn ( ndr , NDR_IN , ds ) ,
" ndr pull of context failed " ) ;
2013-02-01 20:45:02 +04:00
if ( ndr - > offset > ndr - > relative_highest_offset ) {
highest_ofs = ndr - > offset ;
} else {
highest_ofs = ndr - > relative_highest_offset ;
}
torture_assert ( tctx , highest_ofs = = ndr - > data_size ,
talloc_asprintf ( tctx , " %d unread bytes " , ndr - > data_size - highest_ofs ) ) ;
2010-09-16 18:21:39 +04:00
talloc_free ( ndr ) ;
/* handle NDR_OUT */
ndr = ndr_pull_init_blob ( & ( data - > data ) , tctx ) ;
torture_assert ( tctx , ndr , " ndr init failed " ) ;
ndr - > flags | = LIBNDR_FLAG_REF_ALLOC ;
torture_assert_ndr_success ( tctx ,
data - > pull_fn ( ndr , NDR_OUT , ds ) ,
" ndr pull failed " ) ;
2013-02-01 20:45:02 +04:00
if ( ndr - > offset > ndr - > relative_highest_offset ) {
highest_ofs = ndr - > offset ;
} else {
highest_ofs = ndr - > relative_highest_offset ;
}
torture_assert ( tctx , highest_ofs = = ndr - > data_size ,
talloc_asprintf ( tctx , " %d unread bytes " , ndr - > data_size - highest_ofs ) ) ;
2010-09-16 18:21:39 +04:00
talloc_free ( ndr ) ;
if ( check_fn ) {
return check_fn ( tctx , ds ) ;
} else {
return true ;
}
}
_PUBLIC_ struct torture_test * _torture_suite_add_ndr_pull_inout_test (
struct torture_suite * suite ,
const char * name , ndr_pull_flags_fn_t pull_fn ,
DATA_BLOB db_in ,
DATA_BLOB db_out ,
size_t struct_size ,
bool ( * check_fn ) ( struct torture_context * ctx , void * data ) )
{
struct torture_test * test ;
struct torture_tcase * tcase ;
struct ndr_pull_test_data * data ;
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_ndr_inout_pull_test ;
data = talloc ( test , struct ndr_pull_test_data ) ;
data - > data = db_out ;
data - > data_context = db_in ;
data - > ndr_flags = 0 ;
data - > struct_size = struct_size ;
data - > pull_fn = pull_fn ;
2007-02-14 22:30:05 +03:00
test - > data = data ;
test - > fn = check_fn ;
test - > dangerous = false ;
2016-02-05 13:32:18 +03:00
DLIST_ADD_END ( tcase - > tests , test ) ;
2007-02-14 22:30:05 +03:00
return test ;
}
2007-02-16 18:13:51 +03:00
static bool test_check_string_terminator ( struct torture_context * tctx )
{
struct ndr_pull * ndr ;
DATA_BLOB blob ;
TALLOC_CTX * mem_ctx = tctx ;
/* Simple test */
2008-10-18 20:09:04 +04:00
blob = strhex_to_data_blob ( tctx , " 0000 " ) ;
2010-09-16 18:22:32 +04:00
2010-05-09 19:20:01 +04:00
ndr = ndr_pull_init_blob ( & blob , mem_ctx ) ;
2007-02-16 18:13:51 +03:00
2007-11-09 21:24:51 +03:00
torture_assert_ndr_success ( tctx , ndr_check_string_terminator ( ndr , 1 , 2 ) ,
" simple check_string_terminator test failed " ) ;
2007-02-16 18:13:51 +03:00
torture_assert ( tctx , ndr - > offset = = 0 ,
" check_string_terminator did not reset offset " ) ;
2007-11-09 21:24:51 +03:00
if ( NDR_ERR_CODE_IS_SUCCESS ( ndr_check_string_terminator ( ndr , 1 , 3 ) ) ) {
2007-02-16 18:13:51 +03:00
torture_fail ( tctx , " check_string_terminator checked beyond string boundaries " ) ;
}
2010-09-16 18:22:32 +04:00
torture_assert ( tctx , ndr - > offset = = 0 ,
2007-02-16 18:13:51 +03:00
" check_string_terminator did not reset offset " ) ;
talloc_free ( ndr ) ;
2008-10-18 20:09:04 +04:00
blob = strhex_to_data_blob ( tctx , " 11220000 " ) ;
2010-05-09 19:20:01 +04:00
ndr = ndr_pull_init_blob ( & blob , mem_ctx ) ;
2007-02-16 18:13:51 +03:00
2007-11-09 21:24:51 +03:00
torture_assert_ndr_success ( tctx ,
2007-02-16 18:13:51 +03:00
ndr_check_string_terminator ( ndr , 4 , 1 ) ,
" check_string_terminator failed to recognize terminator " ) ;
2007-11-09 21:24:51 +03:00
torture_assert_ndr_success ( tctx ,
2007-02-16 18:13:51 +03:00
ndr_check_string_terminator ( ndr , 3 , 1 ) ,
" check_string_terminator failed to recognize terminator " ) ;
2007-11-09 21:24:51 +03:00
if ( NDR_ERR_CODE_IS_SUCCESS ( ndr_check_string_terminator ( ndr , 2 , 1 ) ) ) {
torture_fail ( tctx , " check_string_terminator erroneously reported terminator " ) ;
2007-02-16 18:13:51 +03:00
}
torture_assert ( tctx , ndr - > offset = = 0 ,
" check_string_terminator did not reset offset " ) ;
return true ;
}
static bool test_guid_from_string_valid ( struct torture_context * tctx )
{
/* FIXME */
return true ;
}
static bool test_guid_from_string_null ( struct torture_context * tctx )
{
struct GUID guid ;
2010-09-16 18:22:32 +04:00
torture_assert_ntstatus_equal ( tctx , NT_STATUS_INVALID_PARAMETER ,
2010-09-16 18:25:51 +04:00
GUID_from_string ( NULL , & guid ) ,
" NULL failed " ) ;
2007-02-16 18:13:51 +03:00
return true ;
}
static bool test_guid_from_string_invalid ( struct torture_context * tctx )
{
struct GUID g1 ;
2016-12-07 04:35:58 +03:00
bool failed = false ;
int i ;
const char * bad_guids [ ] = {
" bla " ,
" " ,
/*
" 00000001-0002-0003-0405-060708090a0b " , correct
*/
" 00000001-0002-0003-0405-060708090a0b1 " , /* too long */
" 00000001-0002-0003-0405-060708090a0 " , /* too short */
" 00000001-0002-0003-0405--060708090a0 " , /* negative */
" 00000001-0002-0003--0405-060708090a0 " , /* negative */
" -0000001-0002-0003-0405-060708090a0b " , /* negative */
" -0000001-0002-0003-04-5-060708090a0b " , /* negative */
" d0000001-0002-0003-0405-060708090a-b " , /* negative */
" 00000001- -2-0003-0405-060708090a0b " , /* negative, space */
" 00000001-0002-0003-0405- 060708090a0 " , /* whitespace */
" 0000001-0002-0003--0405-060708090a0 " , /* whitespace */
" 00000001-0002-0003--0405-060708090a " , /* whitespace */
" 0000001-00002-0003-04050-60708090a0b " , /* misshapen */
" 00000010-0002-0003-04050-60708090a0b " , /* misshapen */
" 00000001-0002-0003-0405-0z0708090a0b " , /* bad char */
" 00000001-00x2-0x03-0405-060708090a0b " , /* bad char (00x) */
" 0x000001-0002-0003-0405-060708090a0b " , /* 0x char */
" 00000001-0x02-0x03-0405-060708090a0b " , /* 0x char */
} ;
for ( i = 0 ; i < ARRAY_SIZE ( bad_guids ) ; i + + ) {
NTSTATUS status = GUID_from_string ( bad_guids [ i ] , & g1 ) ;
if ( ! NT_STATUS_EQUAL ( status , NT_STATUS_INVALID_PARAMETER ) ) {
torture_comment ( tctx , " bad guid %s parsed as OK \n " ,
bad_guids [ i ] ) ;
failed = true ;
}
}
if ( failed ) {
torture_fail ( tctx , " wrongly allowing invalid guids " ) ;
}
2007-02-16 18:13:51 +03:00
return true ;
2010-09-16 18:22:32 +04:00
}
2007-02-16 18:13:51 +03:00
static bool test_guid_from_string ( struct torture_context * tctx )
{
struct GUID g1 , exp ;
2016-12-07 04:35:58 +03:00
/* we are asserting all these guids are valid and equal */
const char * guids [ 4 ] = {
" 00000001-0002-0003-0405-060708090a0b " ,
" {00000001-0002-0003-0405-060708090a0b} " ,
" {00000001-0002-0003-0405-060708090a0B} " , /* mixed */
" 00000001-0002-0003-0405-060708090A0B " , /* upper */
} ;
int i ;
2007-02-16 18:13:51 +03:00
torture_assert_ntstatus_ok ( tctx ,
2016-12-07 04:35:58 +03:00
GUID_from_string ( guids [ 0 ] , & g1 ) ,
2010-09-16 18:25:51 +04:00
" invalid return code " ) ;
2007-02-16 18:13:51 +03:00
exp . time_low = 1 ;
exp . time_mid = 2 ;
exp . time_hi_and_version = 3 ;
exp . clock_seq [ 0 ] = 4 ;
exp . clock_seq [ 1 ] = 5 ;
exp . node [ 0 ] = 6 ;
exp . node [ 1 ] = 7 ;
exp . node [ 2 ] = 8 ;
exp . node [ 3 ] = 9 ;
exp . node [ 4 ] = 10 ;
exp . node [ 5 ] = 11 ;
2016-12-07 04:35:58 +03:00
for ( i = 1 ; i < ARRAY_SIZE ( guids ) ; i + + ) {
torture_assert_ntstatus_ok ( tctx ,
GUID_from_string ( guids [ i ] , & g1 ) ,
" invalid return code " ) ;
torture_assert ( tctx , GUID_equal ( & g1 , & exp ) ,
" UUID parsed incorrectly " ) ;
}
2007-02-16 18:13:51 +03:00
return true ;
}
static bool test_guid_string_valid ( struct torture_context * tctx )
{
struct GUID g ;
g . time_low = 1 ;
g . time_mid = 2 ;
g . time_hi_and_version = 3 ;
g . clock_seq [ 0 ] = 4 ;
g . clock_seq [ 1 ] = 5 ;
g . node [ 0 ] = 6 ;
g . node [ 1 ] = 7 ;
g . node [ 2 ] = 8 ;
g . node [ 3 ] = 9 ;
g . node [ 4 ] = 10 ;
g . node [ 5 ] = 11 ;
2010-09-16 18:25:51 +04:00
torture_assert_str_equal ( tctx , " 00000001-0002-0003-0405-060708090a0b " ,
GUID_string ( tctx , & g ) ,
" parsing guid failed " ) ;
2007-02-16 18:13:51 +03:00
return true ;
}
static bool test_guid_string2_valid ( struct torture_context * tctx )
{
struct GUID g ;
g . time_low = 1 ;
g . time_mid = 2 ;
g . time_hi_and_version = 3 ;
g . clock_seq [ 0 ] = 4 ;
g . clock_seq [ 1 ] = 5 ;
g . node [ 0 ] = 6 ;
g . node [ 1 ] = 7 ;
g . node [ 2 ] = 8 ;
g . node [ 3 ] = 9 ;
g . node [ 4 ] = 10 ;
g . node [ 5 ] = 11 ;
2010-09-16 18:25:51 +04:00
torture_assert_str_equal ( tctx , " {00000001-0002-0003-0405-060708090a0b} " ,
GUID_string2 ( tctx , & g ) ,
" parsing guid failed " ) ;
2007-02-16 18:13:51 +03:00
return true ;
}
2016-07-25 06:34:39 +03:00
static bool test_guid_into_blob ( struct torture_context * tctx )
{
enum ndr_err_code ndr_err ;
static const char exp_guid [ 16 ] =
{ 0x1 , 0x0 , 0x0 , 0x0 ,
0x2 , 0x0 , 0x3 , 0x0 ,
0x4 , 0x5 , 0x6 , 0x7 ,
0x8 , 0x9 , 0xa , 0xb } ;
DATA_BLOB exp = data_blob_const ( exp_guid , 16 ) ;
char ndr_guid [ 16 ] =
{ 0x0 , 0x0 , 0x0 , 0x0 ,
0x0 , 0x0 , 0x0 , 0x0 ,
0x0 , 0x0 , 0x0 , 0x0 ,
0x0 , 0x0 , 0x0 , 0x0 } ;
DATA_BLOB b = data_blob_const ( ndr_guid , 16 ) ;
struct GUID guid ;
guid . time_low = 1 ;
guid . time_mid = 2 ;
guid . time_hi_and_version = 3 ;
guid . clock_seq [ 0 ] = 4 ;
guid . clock_seq [ 1 ] = 5 ;
guid . node [ 0 ] = 6 ;
guid . node [ 1 ] = 7 ;
guid . node [ 2 ] = 8 ;
guid . node [ 3 ] = 9 ;
guid . node [ 4 ] = 10 ;
guid . node [ 5 ] = 11 ;
ndr_err = ndr_push_struct_into_fixed_blob ( & b , & guid ,
( ndr_push_flags_fn_t ) ndr_push_GUID ) ;
torture_assert_ndr_err_equal ( tctx , ndr_err , NDR_ERR_SUCCESS ,
" wrong NDR error " ) ;
torture_assert_data_blob_equal ( tctx , b , exp ,
" GUID packed wrongly " ) ;
return true ;
}
/* Really a test of ndr_push_struct_into_fixed_blob error handling */
static bool test_guid_into_long_blob ( struct torture_context * tctx )
{
enum ndr_err_code ndr_err ;
char ndr_guid [ 17 ] =
{ 0x0 , 0x0 , 0x0 , 0x0 ,
0x0 , 0x0 , 0x0 , 0x0 ,
0x0 , 0x0 , 0x0 , 0x0 ,
0x0 , 0x0 , 0x0 , 0x0 , 0x0 } ;
DATA_BLOB b = data_blob_const ( ndr_guid , 17 ) ;
struct GUID guid ;
guid . time_low = 1 ;
guid . time_mid = 2 ;
guid . time_hi_and_version = 3 ;
guid . clock_seq [ 0 ] = 4 ;
guid . clock_seq [ 1 ] = 5 ;
guid . node [ 0 ] = 6 ;
guid . node [ 1 ] = 7 ;
guid . node [ 2 ] = 8 ;
guid . node [ 3 ] = 9 ;
guid . node [ 4 ] = 10 ;
guid . node [ 5 ] = 11 ;
torture_assert ( tctx , b . data ! = NULL , " data_blob_talloc failed " ) ;
ndr_err = ndr_push_struct_into_fixed_blob (
& b , & guid , ( ndr_push_flags_fn_t ) ndr_push_GUID ) ;
torture_assert_ndr_err_equal ( tctx , ndr_err , NDR_ERR_BUFSIZE ,
" wrong NDR error " ) ;
return true ;
}
static bool test_guid_into_short_blob ( struct torture_context * tctx )
{
enum ndr_err_code ndr_err ;
char ndr_guid [ 15 ] =
{ 0x0 , 0x0 , 0x0 , 0x0 ,
0x0 , 0x0 , 0x0 , 0x0 ,
0x0 , 0x0 , 0x0 , 0x0 ,
0x0 , 0x0 , 0x0 } ;
DATA_BLOB b = data_blob_const ( ndr_guid , 15 ) ;
struct GUID guid ;
guid . time_low = 1 ;
guid . time_mid = 2 ;
guid . time_hi_and_version = 3 ;
guid . clock_seq [ 0 ] = 4 ;
guid . clock_seq [ 1 ] = 5 ;
guid . node [ 0 ] = 6 ;
guid . node [ 1 ] = 7 ;
guid . node [ 2 ] = 8 ;
guid . node [ 3 ] = 9 ;
guid . node [ 4 ] = 10 ;
guid . node [ 5 ] = 11 ;
ndr_err = ndr_push_struct_into_fixed_blob (
& b , & guid , ( ndr_push_flags_fn_t ) ndr_push_GUID ) ;
torture_assert_ndr_err_equal ( tctx , ndr_err , NDR_ERR_BUFSIZE ,
" wrong NDR error " ) ;
return true ;
}
2007-02-16 18:13:51 +03:00
static bool test_compare_uuid ( struct torture_context * tctx )
{
struct GUID g1 , g2 ;
ZERO_STRUCT ( g1 ) ; ZERO_STRUCT ( g2 ) ;
2010-09-16 18:22:32 +04:00
torture_assert_int_equal ( tctx , 0 , GUID_compare ( & g1 , & g2 ) ,
2010-09-16 18:25:51 +04:00
" GUIDs not equal " ) ;
2007-02-16 18:13:51 +03:00
g1 . time_low = 1 ;
2010-09-16 18:22:32 +04:00
torture_assert_int_equal ( tctx , 1 , GUID_compare ( & g1 , & g2 ) ,
2010-09-16 18:25:51 +04:00
" GUID diff invalid " ) ;
2007-02-16 18:13:51 +03:00
g1 . time_low = 10 ;
2009-12-21 15:19:08 +03:00
torture_assert_int_equal ( tctx , 1 , GUID_compare ( & g1 , & g2 ) ,
2010-09-16 18:25:51 +04:00
" GUID diff invalid " ) ;
2007-02-16 18:13:51 +03:00
g1 . time_low = 0 ;
g1 . clock_seq [ 1 ] = 20 ;
2009-12-21 15:19:08 +03:00
torture_assert_int_equal ( tctx , 1 , GUID_compare ( & g1 , & g2 ) ,
2010-09-16 18:25:51 +04:00
" GUID diff invalid " ) ;
2009-12-21 15:19:08 +03:00
g1 . time_low = ~ 0 ;
torture_assert_int_equal ( tctx , 1 , GUID_compare ( & g1 , & g2 ) ,
2010-09-16 18:25:51 +04:00
" GUID diff invalid " ) ;
2009-12-21 15:19:08 +03:00
g1 . time_low = 0 ;
g2 . time_low = ~ 0 ;
torture_assert_int_equal ( tctx , - 1 , GUID_compare ( & g1 , & g2 ) ,
2010-09-16 18:25:51 +04:00
" GUID diff invalid " ) ;
2007-02-16 18:13:51 +03:00
return true ;
}
2007-03-03 18:01:05 +03:00
struct torture_suite * torture_local_ndr ( TALLOC_CTX * mem_ctx )
2007-02-14 22:30:05 +03:00
{
2010-12-11 05:26:31 +03:00
struct torture_suite * suite = torture_suite_create ( mem_ctx , " ndr " ) ;
2007-02-14 22:30:05 +03:00
torture_suite_add_suite ( suite , ndr_winreg_suite ( suite ) ) ;
2007-02-16 00:06:33 +03:00
torture_suite_add_suite ( suite , ndr_atsvc_suite ( suite ) ) ;
2007-02-16 01:07:18 +03:00
torture_suite_add_suite ( suite , ndr_lsa_suite ( suite ) ) ;
2007-02-16 04:08:59 +03:00
torture_suite_add_suite ( suite , ndr_epmap_suite ( suite ) ) ;
2007-02-16 15:47:08 +03:00
torture_suite_add_suite ( suite , ndr_dfs_suite ( suite ) ) ;
2009-12-13 18:41:53 +03:00
torture_suite_add_suite ( suite , ndr_dfsblob_suite ( suite ) ) ;
2007-02-17 04:58:06 +03:00
torture_suite_add_suite ( suite , ndr_netlogon_suite ( suite ) ) ;
2007-02-18 03:41:42 +03:00
torture_suite_add_suite ( suite , ndr_drsuapi_suite ( suite ) ) ;
torture_suite_add_suite ( suite , ndr_spoolss_suite ( suite ) ) ;
2013-05-16 20:20:20 +04:00
torture_suite_add_suite ( suite , ndr_winspool_suite ( suite ) ) ;
2012-07-06 21:02:00 +04:00
torture_suite_add_suite ( suite , ndr_ntprinting_suite ( suite ) ) ;
2007-03-02 19:20:48 +03:00
torture_suite_add_suite ( suite , ndr_samr_suite ( suite ) ) ;
2010-03-24 20:08:21 +03:00
torture_suite_add_suite ( suite , ndr_drsblobs_suite ( suite ) ) ;
2010-09-08 13:18:40 +04:00
torture_suite_add_suite ( suite , ndr_nbt_suite ( suite ) ) ;
2010-09-14 19:27:55 +04:00
torture_suite_add_suite ( suite , ndr_ntlmssp_suite ( suite ) ) ;
2010-09-21 07:39:24 +04:00
torture_suite_add_suite ( suite , ndr_backupkey_suite ( suite ) ) ;
2015-01-16 15:43:01 +03:00
torture_suite_add_suite ( suite , ndr_witness_suite ( suite ) ) ;
2015-07-14 16:55:57 +03:00
torture_suite_add_suite ( suite , ndr_clusapi_suite ( suite ) ) ;
2015-12-18 15:16:28 +03:00
torture_suite_add_suite ( suite , ndr_negoex_suite ( suite ) ) ;
2011-05-31 11:49:19 +04:00
torture_suite_add_suite ( suite , ndr_string_suite ( suite ) ) ;
2012-12-13 15:28:19 +04:00
torture_suite_add_suite ( suite , ndr_krb5pac_suite ( suite ) ) ;
2016-09-23 18:18:12 +03:00
torture_suite_add_suite ( suite , ndr_cabinet_suite ( suite ) ) ;
2017-01-13 15:16:22 +03:00
torture_suite_add_suite ( suite , ndr_charset_suite ( suite ) ) ;
2007-02-14 22:30:05 +03:00
2010-09-16 18:22:32 +04:00
torture_suite_add_simple_test ( suite , " string terminator " ,
2010-09-16 18:25:51 +04:00
test_check_string_terminator ) ;
2007-02-16 18:13:51 +03:00
2010-09-16 18:22:32 +04:00
torture_suite_add_simple_test ( suite , " guid_from_string_null " ,
2010-09-16 18:25:51 +04:00
test_guid_from_string_null ) ;
2007-02-16 18:13:51 +03:00
2010-09-16 18:22:32 +04:00
torture_suite_add_simple_test ( suite , " guid_from_string " ,
2010-09-16 18:25:51 +04:00
test_guid_from_string ) ;
2007-02-16 18:13:51 +03:00
2010-09-16 18:22:32 +04:00
torture_suite_add_simple_test ( suite , " guid_from_string_invalid " ,
2010-09-16 18:25:51 +04:00
test_guid_from_string_invalid ) ;
2007-02-16 18:13:51 +03:00
2010-09-16 18:22:32 +04:00
torture_suite_add_simple_test ( suite , " guid_string_valid " ,
2010-09-16 18:25:51 +04:00
test_guid_string_valid ) ;
2007-02-16 18:13:51 +03:00
2010-09-16 18:22:32 +04:00
torture_suite_add_simple_test ( suite , " guid_string2_valid " ,
2010-09-16 18:25:51 +04:00
test_guid_string2_valid ) ;
2007-02-16 18:13:51 +03:00
2010-09-16 18:22:32 +04:00
torture_suite_add_simple_test ( suite , " guid_from_string_valid " ,
2010-09-16 18:25:51 +04:00
test_guid_from_string_valid ) ;
2007-02-16 18:13:51 +03:00
2010-09-16 18:22:32 +04:00
torture_suite_add_simple_test ( suite , " compare_uuid " ,
2010-09-16 18:25:51 +04:00
test_compare_uuid ) ;
2007-02-14 22:30:05 +03:00
2016-07-25 06:34:39 +03:00
torture_suite_add_simple_test ( suite , " guid_into_blob " ,
test_guid_into_blob ) ;
torture_suite_add_simple_test ( suite , " guid_into_short_blob " ,
test_guid_into_short_blob ) ;
torture_suite_add_simple_test ( suite , " guid_into_long_blob " ,
test_guid_into_long_blob ) ;
2007-02-16 18:13:51 +03:00
return suite ;
2007-02-14 22:30:05 +03:00
}