mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-01-18 15:15:56 +08:00
[svn-r24358] Changed the big test so that it runs using the h5_fileaccess() fapl.
The previous behavior was to execute a sec2, stdio, and family test everytime it ran, which was very inefficient under check-vfd. Tested on: 32- and 64-bit LE linux (jam and koala) 64-bit BE linux (ostrich) 64-bit OS-X 10.6 (fred)
This commit is contained in:
parent
8538cf61f9
commit
b7a4e1a44e
344
test/big.c
344
test/big.c
@ -76,8 +76,6 @@
|
|||||||
* NOFILE stands for "no file" to be tested.
|
* NOFILE stands for "no file" to be tested.
|
||||||
*/
|
*/
|
||||||
typedef enum fsizes_t { SFILE, LFILE, XLFILE, HUGEFILE, NOFILE} fsizes_t;
|
typedef enum fsizes_t { SFILE, LFILE, XLFILE, HUGEFILE, NOFILE} fsizes_t;
|
||||||
/* Lists of vfd to test */
|
|
||||||
typedef enum vfd_t { SEC2_VFD, STDIO_VFD, FAMILY_VFD } vfd_t;
|
|
||||||
fsizes_t file_size= NOFILE;
|
fsizes_t file_size= NOFILE;
|
||||||
|
|
||||||
const char *FILENAME[] = {
|
const char *FILENAME[] = {
|
||||||
@ -91,9 +89,11 @@ int sparse_support=0; /* sparse file supported, default false */
|
|||||||
int have_space=0; /* enough space for huge file test, default false */
|
int have_space=0; /* enough space for huge file test, default false */
|
||||||
hsize_t family_size_def=FAMILY_SIZE; /* default family file size */
|
hsize_t family_size_def=FAMILY_SIZE; /* default family file size */
|
||||||
|
|
||||||
/* Protocols */
|
/* Prototypes */
|
||||||
static void usage(void);
|
static void usage(void);
|
||||||
int testvfd(vfd_t vfd);
|
static int test_sec2(hid_t fapl);
|
||||||
|
static int test_stdio(hid_t fapl);
|
||||||
|
static int test_family(hid_t fapl);
|
||||||
|
|
||||||
/* Array used to record all addresses at which data has been written */
|
/* Array used to record all addresses at which data has been written */
|
||||||
/* so far. Used to prevent overlapping writes. */
|
/* so far. Used to prevent overlapping writes. */
|
||||||
@ -207,66 +207,55 @@ is_sparse(void)
|
|||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
static fsizes_t
|
static fsizes_t
|
||||||
supports_big(vfd_t vfd)
|
supports_big(void)
|
||||||
{
|
{
|
||||||
int fd = -1;
|
int fd = -1;
|
||||||
fsizes_t fsize = NOFILE;
|
fsizes_t fsize = NOFILE;
|
||||||
|
|
||||||
switch (vfd){
|
if((fd=HDopen("y.h5", O_RDWR|O_TRUNC|O_CREAT, 0666)) < 0)
|
||||||
case FAMILY_VFD:
|
|
||||||
case SEC2_VFD:
|
|
||||||
case STDIO_VFD:
|
|
||||||
if ((fd=HDopen("y.h5", O_RDWR|O_TRUNC|O_CREAT, 0666)) < 0)
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
/* Write a few byte at the beginning */
|
|
||||||
if (5!=HDwrite(fd, "hello", (size_t)5))
|
|
||||||
goto quit;
|
|
||||||
fsize = SFILE;
|
|
||||||
|
|
||||||
/* Write a few bytes at 2GB */
|
|
||||||
if (HDlseek(fd, 2*GB, SEEK_SET)!=2*GB)
|
|
||||||
goto quit;
|
|
||||||
if (5!=HDwrite(fd, "hello", (size_t)5))
|
|
||||||
goto quit;
|
|
||||||
fsize = LFILE;
|
|
||||||
|
|
||||||
/* Write a few bytes at 4GB */
|
|
||||||
if (HDlseek(fd, 4*GB, SEEK_SET) != 4*GB)
|
|
||||||
goto quit;
|
|
||||||
if (5!=HDwrite(fd, "hello", (size_t)5))
|
|
||||||
goto quit;
|
|
||||||
fsize = XLFILE;
|
|
||||||
|
|
||||||
/* If this supports sparse_file, write a few bytes at 32GB */
|
|
||||||
if (!sparse_support)
|
|
||||||
goto quit;
|
|
||||||
if (HDlseek(fd, 32*GB, SEEK_SET) != 32*GB)
|
|
||||||
goto quit;
|
|
||||||
if (5!=HDwrite(fd, "hello", (size_t)5))
|
|
||||||
goto quit;
|
|
||||||
fsize = HUGEFILE;
|
|
||||||
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* unknown or unsupported VFD */
|
|
||||||
goto error;
|
goto error;
|
||||||
break;
|
|
||||||
}
|
/* Write a few byte at the beginning */
|
||||||
|
if(5!=HDwrite(fd, "hello", (size_t)5))
|
||||||
|
goto quit;
|
||||||
|
fsize = SFILE;
|
||||||
|
|
||||||
|
/* Write a few bytes at 2GB */
|
||||||
|
if(HDlseek(fd, 2*GB, SEEK_SET)!=2*GB)
|
||||||
|
goto quit;
|
||||||
|
if(5!=HDwrite(fd, "hello", (size_t)5))
|
||||||
|
goto quit;
|
||||||
|
fsize = LFILE;
|
||||||
|
|
||||||
|
/* Write a few bytes at 4GB */
|
||||||
|
if(HDlseek(fd, 4*GB, SEEK_SET) != 4*GB)
|
||||||
|
goto quit;
|
||||||
|
if(5!=HDwrite(fd, "hello", (size_t)5))
|
||||||
|
goto quit;
|
||||||
|
fsize = XLFILE;
|
||||||
|
|
||||||
|
/* If this supports sparse_file, write a few bytes at 32GB */
|
||||||
|
if(!sparse_support)
|
||||||
|
goto quit;
|
||||||
|
if(HDlseek(fd, 32*GB, SEEK_SET) != 32*GB)
|
||||||
|
goto quit;
|
||||||
|
if(5!=HDwrite(fd, "hello", (size_t)5))
|
||||||
|
goto quit;
|
||||||
|
fsize = HUGEFILE;
|
||||||
|
|
||||||
quit:
|
quit:
|
||||||
if (HDclose(fd) < 0)
|
if(HDclose(fd) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
if (HDremove("y.h5") < 0)
|
if(HDremove("y.h5") < 0)
|
||||||
goto error;
|
goto error;
|
||||||
return(fsize);
|
return fsize;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
if (fd >= 0){
|
if(fd >= 0){
|
||||||
HDclose(fd);
|
HDclose(fd);
|
||||||
HDremove("y.h5");
|
HDremove("y.h5");
|
||||||
}
|
}
|
||||||
return (fsize);
|
return fsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -301,11 +290,11 @@ enough_room(hid_t fapl)
|
|||||||
|
|
||||||
/* Get file name template */
|
/* Get file name template */
|
||||||
HDassert(H5FD_FAMILY==H5Pget_driver(fapl));
|
HDassert(H5FD_FAMILY==H5Pget_driver(fapl));
|
||||||
h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
|
h5_fixname(FILENAME[0], fapl, filename, sizeof(filename));
|
||||||
|
|
||||||
/* Create files */
|
/* Create files */
|
||||||
for (i=0; i<NELMTS(fd); i++) {
|
for (i=0; i<NELMTS(fd); i++) {
|
||||||
HDsnprintf(name, sizeof name, filename, i);
|
HDsnprintf(name, sizeof(name), filename, i);
|
||||||
if ((fd[i]=HDopen(name, O_RDWR|O_CREAT|O_TRUNC, 0666)) < 0) {
|
if ((fd[i]=HDopen(name, O_RDWR|O_CREAT|O_TRUNC, 0666)) < 0) {
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
@ -320,7 +309,7 @@ enough_room(hid_t fapl)
|
|||||||
|
|
||||||
done:
|
done:
|
||||||
for (i=0; i<NELMTS(fd) && fd[i]>=0; i++) {
|
for (i=0; i<NELMTS(fd) && fd[i]>=0; i++) {
|
||||||
HDsnprintf(name, sizeof name, filename, i);
|
HDsnprintf(name, sizeof(name), filename, i);
|
||||||
if(HDclose(fd[i]) < 0)
|
if(HDclose(fd[i]) < 0)
|
||||||
ret_value=0;
|
ret_value=0;
|
||||||
HDremove(name);
|
HDremove(name);
|
||||||
@ -603,123 +592,138 @@ usage(void)
|
|||||||
, (hsize_t)FAMILY_SIZE);
|
, (hsize_t)FAMILY_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
test_sec2(hid_t fapl)
|
||||||
/* Flush stdout at the end of this test routine to ensure later output to */
|
|
||||||
/* stderr will not come out before it.*/
|
|
||||||
int testvfd(vfd_t vfd)
|
|
||||||
{
|
{
|
||||||
hid_t fapl=-1;
|
|
||||||
char filename[1024];
|
char filename[1024];
|
||||||
fsizes_t testsize;
|
fsizes_t testsize;
|
||||||
|
|
||||||
|
testsize = supports_big();
|
||||||
|
if(testsize == NOFILE) {
|
||||||
|
HDfprintf(stdout, "Test for sec2 is skipped because file system does not support big files.\n");
|
||||||
|
goto quit;
|
||||||
|
}
|
||||||
|
/* Test big file with the SEC2 driver */
|
||||||
|
HDputs("Testing big file with the SEC2 Driver ");
|
||||||
|
|
||||||
switch(vfd){
|
h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
|
||||||
case FAMILY_VFD:
|
|
||||||
/* Test huge file with the family driver */
|
|
||||||
HDputs("Testing big file with the Family Driver ");
|
|
||||||
if ((fapl=H5Pcreate(H5P_FILE_ACCESS)) < 0)
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
if (H5Pset_fapl_family(fapl, family_size_def, H5P_DEFAULT) < 0)
|
if(writer(filename, fapl, testsize, WRT_N))
|
||||||
goto error;
|
goto error;
|
||||||
|
if(reader(filename, fapl))
|
||||||
|
goto error;
|
||||||
|
|
||||||
if (cflag){
|
HDputs("Test passed with the SEC2 Driver.");
|
||||||
/*
|
|
||||||
* We shouldn't run this test if the file system doesn't support holes
|
|
||||||
* because we would generate multi-gigabyte files.
|
|
||||||
*/
|
|
||||||
HDputs("Checking if file system is adequate for this test...");
|
|
||||||
if (sizeof(long long)<8 || 0==GB8LL) {
|
|
||||||
HDputs("Test skipped because sizeof(long long) is too small. This");
|
|
||||||
HDputs("hardware apparently doesn't support 64-bit integer types.");
|
|
||||||
usage();
|
|
||||||
goto quit;
|
|
||||||
}
|
|
||||||
if (!sparse_support) {
|
|
||||||
HDputs("Test skipped because file system does not support holes.");
|
|
||||||
usage();
|
|
||||||
goto quit;
|
|
||||||
}
|
|
||||||
if (!enough_room(fapl)) {
|
|
||||||
HDputs("Test skipped because of quota (file size or num open files).");
|
|
||||||
usage();
|
|
||||||
goto quit;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Do the test with the Family Driver */
|
|
||||||
h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
|
|
||||||
|
|
||||||
if (writer(filename, fapl, HUGEFILE, WRT_N)) goto error;
|
|
||||||
if (reader(filename, fapl)) goto error;
|
|
||||||
|
|
||||||
HDputs("Test passed with the Family Driver.");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SEC2_VFD:
|
|
||||||
testsize = supports_big(SEC2_VFD);
|
|
||||||
if (testsize == NOFILE) {
|
|
||||||
HDfprintf(stdout, "Test for sec2 is skipped because file system does not support big files.\n");
|
|
||||||
goto quit;
|
|
||||||
}
|
|
||||||
/* Test big file with the SEC2 driver */
|
|
||||||
HDputs("Testing big file with the SEC2 Driver ");
|
|
||||||
|
|
||||||
if ((fapl=H5Pcreate(H5P_FILE_ACCESS)) < 0)
|
|
||||||
goto error;
|
|
||||||
if(H5Pset_fapl_sec2(fapl) < 0)
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
|
|
||||||
|
|
||||||
if (writer(filename, fapl, testsize, WRT_N)) goto error;
|
|
||||||
if (reader(filename, fapl)) goto error;
|
|
||||||
|
|
||||||
HDputs("Test passed with the SEC2 Driver.");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case STDIO_VFD:
|
|
||||||
testsize = supports_big(STDIO_VFD);
|
|
||||||
if (testsize == NOFILE) {
|
|
||||||
HDfprintf(stdout, "Test for stdio is skipped because file system does not support big files.\n");
|
|
||||||
goto quit;
|
|
||||||
}
|
|
||||||
HDputs("\nTesting big file with the STDIO Driver ");
|
|
||||||
|
|
||||||
if ((fapl=H5Pcreate(H5P_FILE_ACCESS)) < 0)
|
|
||||||
goto error;
|
|
||||||
if(H5Pset_fapl_stdio(fapl) < 0)
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
h5_fixname(FILENAME[2], fapl, filename, sizeof filename);
|
|
||||||
|
|
||||||
if (writer(filename, fapl, testsize, WRT_N)) goto error;
|
|
||||||
if (reader(filename, fapl)) goto error;
|
|
||||||
HDputs("Test passed with the STDIO Driver.");
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
HDputs("Unsupprted VFD");
|
|
||||||
usage();
|
|
||||||
goto error;;
|
|
||||||
} /* end of switch (vfd) */
|
|
||||||
|
|
||||||
quit:
|
quit:
|
||||||
/* End with normal return code */
|
/* End with normal return code */
|
||||||
/* Clean up the test file */
|
/* Clean up the test file */
|
||||||
if (h5_cleanup(FILENAME, fapl)) HDremove(DNAME);
|
if(h5_cleanup(FILENAME, fapl))
|
||||||
|
HDremove(DNAME);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
error:
|
||||||
|
HDputs("*** TEST FAILED ***");
|
||||||
|
return 1;
|
||||||
|
} /* end test_sec2() */
|
||||||
|
|
||||||
|
static int
|
||||||
|
test_stdio(hid_t fapl)
|
||||||
|
{
|
||||||
|
char filename[1024];
|
||||||
|
fsizes_t testsize;
|
||||||
|
|
||||||
|
testsize = supports_big();
|
||||||
|
if(testsize == NOFILE) {
|
||||||
|
HDfprintf(stdout, "Test for stdio is skipped because file system does not support big files.\n");
|
||||||
|
goto quit;
|
||||||
|
}
|
||||||
|
HDputs("\nTesting big file with the STDIO Driver ");
|
||||||
|
|
||||||
|
h5_fixname(FILENAME[2], fapl, filename, sizeof filename);
|
||||||
|
|
||||||
|
if(writer(filename, fapl, testsize, WRT_N))
|
||||||
|
goto error;
|
||||||
|
if(reader(filename, fapl))
|
||||||
|
goto error;
|
||||||
|
HDputs("Test passed with the STDIO Driver.");
|
||||||
|
|
||||||
|
/* Flush stdout at the end of this test routine to ensure later
|
||||||
|
* output to stderr will not come out before it.
|
||||||
|
*/
|
||||||
|
|
||||||
|
quit:
|
||||||
|
/* End with normal return code */
|
||||||
|
/* Clean up the test file */
|
||||||
|
if(h5_cleanup(FILENAME, fapl))
|
||||||
|
HDremove(DNAME);
|
||||||
HDfflush(stdout);
|
HDfflush(stdout);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
||||||
error:
|
error:
|
||||||
if (fapl>=0) H5Pclose(fapl);
|
|
||||||
HDputs("*** TEST FAILED ***");
|
HDputs("*** TEST FAILED ***");
|
||||||
HDfflush(stdout);
|
HDfflush(stdout);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
} /* end test_stdio() */
|
||||||
|
|
||||||
|
static int
|
||||||
|
test_family(hid_t fapl)
|
||||||
|
{
|
||||||
|
char filename[1024];
|
||||||
|
|
||||||
|
/* Test huge file with the family driver */
|
||||||
|
HDputs("Testing big file with the Family Driver ");
|
||||||
|
if((fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
if(H5Pset_fapl_family(fapl, family_size_def, H5P_DEFAULT) < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
if(cflag){
|
||||||
|
/*
|
||||||
|
* We shouldn't run this test if the file system doesn't support holes
|
||||||
|
* because we would generate multi-gigabyte files.
|
||||||
|
*/
|
||||||
|
HDputs("Checking if file system is adequate for this test...");
|
||||||
|
if(sizeof(long long) < 8 || 0 == GB8LL) {
|
||||||
|
HDputs("Test skipped because sizeof(long long) is too small. This");
|
||||||
|
HDputs("hardware apparently doesn't support 64-bit integer types.");
|
||||||
|
usage();
|
||||||
|
goto quit;
|
||||||
|
}
|
||||||
|
if(!sparse_support) {
|
||||||
|
HDputs("Test skipped because file system does not support holes.");
|
||||||
|
usage();
|
||||||
|
goto quit;
|
||||||
|
}
|
||||||
|
if(!enough_room(fapl)) {
|
||||||
|
HDputs("Test skipped because of quota (file size or num open files).");
|
||||||
|
usage();
|
||||||
|
goto quit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Do the test with the Family Driver */
|
||||||
|
h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
|
||||||
|
|
||||||
|
if(writer(filename, fapl, HUGEFILE, WRT_N))
|
||||||
|
goto error;
|
||||||
|
if(reader(filename, fapl))
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
HDputs("Test passed with the Family Driver.");
|
||||||
|
|
||||||
|
quit:
|
||||||
|
/* End with normal return code */
|
||||||
|
/* Clean up the test file */
|
||||||
|
if(h5_cleanup(FILENAME, fapl))
|
||||||
|
HDremove(DNAME);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
error:
|
||||||
|
HDputs("*** TEST FAILED ***");
|
||||||
|
return 1;
|
||||||
|
} /* end test_family() */
|
||||||
|
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
@ -749,6 +753,8 @@ int
|
|||||||
main (int ac, char **av)
|
main (int ac, char **av)
|
||||||
{
|
{
|
||||||
unsigned long seed = 0; /* Random # seed */
|
unsigned long seed = 0; /* Random # seed */
|
||||||
|
hid_t fapl = -1;
|
||||||
|
hid_t driver = -1;
|
||||||
|
|
||||||
/* parameters setup */
|
/* parameters setup */
|
||||||
|
|
||||||
@ -779,10 +785,15 @@ main (int ac, char **av)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check sparse file support unless cflag is not set. */
|
/* check VFD to see if this is one we test */
|
||||||
if (cflag)
|
if((fapl = h5_fileaccess()) < 0)
|
||||||
sparse_support = is_sparse();
|
goto error;
|
||||||
|
if((driver = H5Pget_driver(fapl)) < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
/* check sparse file support unless cflag is not set. */
|
||||||
|
if(cflag)
|
||||||
|
sparse_support = is_sparse();
|
||||||
|
|
||||||
/* Choose random # seed */
|
/* Choose random # seed */
|
||||||
seed = (unsigned long)HDtime(NULL);
|
seed = (unsigned long)HDtime(NULL);
|
||||||
@ -792,19 +803,30 @@ main (int ac, char **av)
|
|||||||
#endif /* QAK */
|
#endif /* QAK */
|
||||||
HDsrandom(seed);
|
HDsrandom(seed);
|
||||||
|
|
||||||
/*=================================================*/
|
/* run VFD-specific test */
|
||||||
if (testvfd(FAMILY_VFD) != 0)
|
if(H5FD_SEC2 == driver) {
|
||||||
goto error;
|
if(test_sec2(fapl) != 0)
|
||||||
if (testvfd(SEC2_VFD) != 0)
|
goto error;
|
||||||
goto error;
|
}
|
||||||
if (testvfd(STDIO_VFD) != 0)
|
else if(H5FD_STDIO == driver) {
|
||||||
goto error;
|
if(test_stdio(fapl) != 0)
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
else if(H5FD_FAMILY == driver) {
|
||||||
|
if(test_family(fapl) != 0)
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
HDputs("This VFD is not supported");
|
||||||
|
|
||||||
/* End with normal exit code */
|
/* End with normal exit code */
|
||||||
|
/* fapls are cleaned up in the vfd test code */
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
HDputs("*** TEST FAILED ***");
|
HDputs("*** TEST FAILED ***");
|
||||||
|
if(fapl > 0)
|
||||||
|
H5Pclose(fapl);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user