2005-09-28 21:54:29 +00:00
/*
Unix SMB / CIFS implementation .
util_file testing
Copyright ( C ) Jelmer Vernooij 2005
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 02:07:03 +00:00
the Free Software Foundation ; either version 3 of the License , or
2005-09-28 21:54:29 +00: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 02:07:03 +00:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2005-09-28 21:54:29 +00:00
*/
# include "includes.h"
# include "system/filesys.h"
2006-03-25 16:01:28 +00:00
# include "torture/torture.h"
2005-09-28 21:54:29 +00:00
# define TEST_FILENAME "utilfile.test"
# define TEST_LINE1 "This is list line 1..."
# define TEST_LINE2 ".. and this is line 2"
# define TEST_LINE3 "and end of the file"
# define TEST_DATA TEST_LINE1 "\n" TEST_LINE2 "\n" TEST_LINE3
2006-10-16 13:06:41 +00:00
static bool test_file_load_save ( struct torture_context * tctx )
2005-09-28 21:54:29 +00:00
{
size_t len ;
char * data ;
2006-10-16 13:06:41 +00:00
TALLOC_CTX * mem_ctx = tctx ;
2005-09-28 21:54:29 +00:00
2006-10-16 13:06:41 +00:00
torture_assert ( tctx , file_save ( TEST_FILENAME , TEST_DATA , strlen ( TEST_DATA ) ) ,
2006-06-16 22:59:40 +00:00
" saving file " ) ;
2005-09-28 21:54:29 +00:00
2007-08-11 17:08:22 +00:00
torture_assert_file_contains_text ( tctx , TEST_FILENAME , TEST_DATA ,
" file contents " ) ;
2006-10-16 13:06:41 +00:00
data = file_load ( TEST_FILENAME , & len , mem_ctx ) ;
torture_assert ( tctx , data , " loading file " ) ;
2005-09-28 21:54:29 +00:00
2006-10-16 13:06:41 +00:00
torture_assert ( tctx , len = = strlen ( TEST_DATA ) , " Length " ) ;
2005-09-28 21:54:29 +00:00
2006-10-16 13:06:41 +00:00
torture_assert ( tctx , memcmp ( data , TEST_DATA , len ) = = 0 , " Contents " ) ;
2005-09-28 21:54:29 +00:00
unlink ( TEST_FILENAME ) ;
2006-10-16 13:06:41 +00:00
return true ;
2005-09-28 21:54:29 +00:00
}
2006-10-16 13:06:41 +00:00
static bool test_afdgets ( struct torture_context * tctx )
2005-09-28 21:54:29 +00:00
{
int fd ;
char * line ;
2006-10-16 13:06:41 +00:00
TALLOC_CTX * mem_ctx = tctx ;
2005-09-28 21:54:29 +00:00
2006-10-16 13:06:41 +00:00
torture_assert ( tctx , file_save ( TEST_FILENAME , ( const void * ) TEST_DATA ,
2006-06-16 22:59:40 +00:00
strlen ( TEST_DATA ) ) ,
" saving file " ) ;
2005-09-28 21:54:29 +00:00
fd = open ( TEST_FILENAME , O_RDONLY ) ;
2006-10-16 13:06:41 +00:00
torture_assert ( tctx , fd ! = - 1 , " opening file " ) ;
2005-09-28 21:54:29 +00:00
2006-10-16 13:06:41 +00:00
line = afdgets ( fd , mem_ctx , 8 ) ;
torture_assert ( tctx , strcmp ( line , TEST_LINE1 ) = = 0 , " line 1 mismatch " ) ;
2005-09-28 21:54:29 +00:00
2006-10-16 13:06:41 +00:00
line = afdgets ( fd , mem_ctx , 8 ) ;
torture_assert ( tctx , strcmp ( line , TEST_LINE2 ) = = 0 , " line 2 mismatch " ) ;
2005-09-28 21:54:29 +00:00
2006-10-16 13:06:41 +00:00
line = afdgets ( fd , mem_ctx , 8 ) ;
torture_assert ( tctx , strcmp ( line , TEST_LINE3 ) = = 0 , " line 3 mismatch " ) ;
2005-09-28 21:54:29 +00:00
close ( fd ) ;
unlink ( TEST_FILENAME ) ;
2006-10-16 13:06:41 +00:00
return true ;
2005-09-28 21:54:29 +00:00
}
2006-06-17 00:17:50 +00:00
struct torture_suite * torture_local_util_file ( TALLOC_CTX * mem_ctx )
2005-09-28 21:54:29 +00:00
{
2006-10-16 13:06:41 +00:00
struct torture_suite * suite = torture_suite_create ( mem_ctx , " FILE " ) ;
2005-09-28 21:54:29 +00:00
2006-10-16 13:06:41 +00:00
torture_suite_add_simple_test ( suite , " file_load_save " ,
2007-09-24 15:55:26 +00:00
test_file_load_save ) ;
2005-09-28 21:54:29 +00:00
2006-10-16 13:06:41 +00:00
torture_suite_add_simple_test ( suite , " afdgets " ,
2007-09-24 15:55:26 +00:00
test_afdgets ) ;
2005-09-28 21:54:29 +00:00
2006-06-17 00:17:50 +00:00
return suite ;
2005-09-28 21:54:29 +00:00
}