diff options
author | Albert Cheng <acheng@hdfgroup.org> | 2007-12-06 08:19:21 (GMT) |
---|---|---|
committer | Albert Cheng <acheng@hdfgroup.org> | 2007-12-06 08:19:21 (GMT) |
commit | ea3205f78118b5953a042e6082bfdbbf6f07df82 (patch) | |
tree | afdd74bbaa1fcb2b921daa7168ad7c53430e1bb9 /test | |
parent | b37e34c3021f337a67438a167a0fe3054e4c7f7f (diff) | |
download | hdf5-ea3205f78118b5953a042e6082bfdbbf6f07df82.zip hdf5-ea3205f78118b5953a042e6082bfdbbf6f07df82.tar.gz hdf5-ea3205f78118b5953a042e6082bfdbbf6f07df82.tar.bz2 |
[svn-r14322] Description:
Removed the stream-vfd from the basic library code.
Platforms tested:
Kagiso (serial and parallel).
Diffstat (limited to 'test')
-rw-r--r-- | test/Makefile.in | 7 | ||||
-rw-r--r-- | test/stream_test.c | 494 |
2 files changed, 2 insertions, 499 deletions
diff --git a/test/Makefile.in b/test/Makefile.in index 297d06b..d2e4814 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -28,7 +28,7 @@ CPPFLAGS=-I. -I$(srcdir) -I../src -I$(top_srcdir)/src @CPPFLAGS@ TEST_PROGS=testhdf5 lheap ohdr stab gheap cache hyperslab istore bittests \ dtypes dsets cmpd_dset extend external links unlink big mtime fillval \ mount flush1 flush2 enum gass_write gass_read gass_append set_extent \ - srb_write srb_append srb_read ttsafe stream_test getname file_handle \ + srb_write srb_append srb_read ttsafe getname file_handle \ ntypes dangle reserved TIMINGS=testmeta @@ -79,7 +79,7 @@ TEST_SRC=big.c bittests.c cache.c cmpd_dset.c dsets.c dtypes.c extend.c \ tselect.c tskiplist.c ttime.c ttst.c tvltypes.c tvlstr.c \ unlink.c enum.c ttsafe.c ttsafe_dcreate.c ttsafe_error.c \ ttsafe_cancel.c ttsafe_acreate.c gass_write.c gass_read.c \ - gass_append.c srb_read.c srb_write.c srb_append.c stream_test.c \ + gass_append.c srb_read.c srb_write.c srb_append.c \ set_extent.c getname.c file_handle.c ntypes.c dangle.c reserved.c TEST_OBJ=$(TEST_SRC:.c=.lo) @@ -207,9 +207,6 @@ srb_write: srb_write.lo srb_append: srb_append.lo @$(LT_LINK_EXE) $(CFLAGS) -o $@ srb_append.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS) -stream_test: stream_test.lo - @$(LT_LINK_EXE) $(CFLAGS) -o $@ stream_test.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS) - testmeta: testmeta.lo @$(LT_LINK_EXE) $(CFLAGS) -o $@ testmeta.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS) diff --git a/test/stream_test.c b/test/stream_test.c deleted file mode 100644 index 3051d3b..0000000 --- a/test/stream_test.c +++ /dev/null @@ -1,494 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright by The HDF Group. * - * Copyright by the Board of Trustees of the University of Illinois. * - * All rights reserved. * - * * - * This file is part of HDF5. The full HDF5 copyright notice, including * - * terms governing use, modification, and redistribution, is contained in * - * the files COPYING and Copyright.html. COPYING can be found at the root * - * of the source code distribution tree; Copyright.html can be found at the * - * root level of an installed copy of the electronic HDF5 document set and * - * is linked from the top-level documents page. It can also be found at * - * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * - * access to either file, you may request a copy from help@hdfgroup.org. * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* - * Copyright © 2000 The author. - * The author prefers this code not be used for military purposes. - * - * - * Author: Thomas Radke <tradke@aei-potsdam.mpg.de> - * Tuesday, September 12, 2000 - * - * Modifications: - * Thomas Radke, Thursday, October 26, 2000 - * Made it compiling under Windows. - * - */ - -/* - * This program tests the functionality of the Stream Virtual File Driver. - * 1. It spawns two new processes, a sender and a receiver. - * 2. The sender opens an HDF5 file for writing using the Stream driver. - * It will use a reserved port which should fail to be bound. - * Then it will try a couple of successive ports until bind succeeds. - * This final "hostname:port" information is written into a temporary - * file as a single line of text. - * The sender then writes a sample dataset to the HDF5 file. - * On closing the file the Stream VFD would send the file - * contents to any connected client. - * 3. The receiver serves as a client attempting to open an - * HDF5 file for reading. On opening the file the Stream VFD - * would establish a socket connection to the sender process, - * identified by its hostname and a port number (which is obtained - * from the temporary text file the sender should have created), - * and read the file contents via this socket. - * Aftwerwards the dataset is read from the file into memory - * and verified. - * 4. The main program waits for termination of its two child - * processes and returns their exit code. - */ - -#include <stdio.h> -#include "hdf5.h" - -#ifndef H5_HAVE_STREAM - -int main (void) -{ - printf ("Test skipped because Stream Virtual File Driver not available\n"); - return (0); -} - -#elif ! defined (H5_HAVE_FORK) || ! defined (H5_HAVE_WAITPID) - -int main (void) -{ - printf ("Test skipped because this architecture doesn't provide " - "fork(2) and waitpid(2)\n"); - return (0); -} - -#else - -#include <stdlib.h> -#include <unistd.h> -#include <sys/types.h> -#include <sys/wait.h> - - -#define SLEEPTIME 10 /* sleeping time in seconds */ -#define RANK 2 /* sample dataset rank */ -#define DIMS 50 /* sample dataset dimensions */ -#define DATASETNAME "IntArray" /* sample dataset name */ -#define HOSTNAME "localhost" /* hostname of this machine */ -#define PORT "5678" /* default port to use */ -#define MAXHUNT 500 /* max number of ports to hunt */ -#define HDF5_FILENAME HOSTNAME ":" PORT /* name of the streamed file */ -#define TEMPFILENAME "stream_test.tmp" /* temporary filename */ - - -static int sender (void) -{ - int i; - hsize_t dims[RANK]; - int *data; - herr_t status; - hid_t fapl, file; - hid_t dataspace, dataset; - H5FD_stream_fapl_t stream_fapl; - FILE *tempfile; - - - /* - * Create access property list and set it to use the Stream driver. - */ - fapl = H5Pcreate (H5P_FILE_ACCESS); - if (fapl < 0) - { - fprintf (stderr, "sender: couldn't create file access property list\n"); - return (-1); - } - - /* - * Setup file access property list and select Stream VFD. - * - * - block increment for realloc() should be chosen by the driver - * - no external socket is provided (should be created internally) - * - do I/O on this processor on this socket - * - only one client is allowed to connect at a time - * - no READ broadcast function is provided (since we only send data) - * - if bind to default port (given in the filename argument) fails - * do port hunting on the following MAXHUNT ports - */ - stream_fapl.increment = 0; - stream_fapl.socket = H5FD_STREAM_INVALID_SOCKET; - stream_fapl.do_socket_io = 1; - stream_fapl.backlog = 1; - stream_fapl.broadcast_fn = NULL; - stream_fapl.broadcast_arg = NULL; - stream_fapl.maxhunt = MAXHUNT; - - status = H5Pset_fapl_stream (fapl, &stream_fapl); - if (status < 0) - { - fprintf (stderr, "sender: couldn't set file access property list " - "for Stream VFD\n"); - H5Pclose (fapl); - return (-2); - } - - /* - * Create the data space for fixed size dataset. - */ - for (i = 0; i < RANK; i++) - { - dims[i] = DIMS; - } - dataspace = H5Screate_simple (RANK, dims, NULL); - if (dataspace < 0) - { - fprintf (stderr, "sender: couldn't create dataspace\n"); - H5Pclose (fapl); - return (-3); - } - - /* - * Data buffer initialization. - */ - i = (int) H5Sget_simple_extent_npoints (dataspace); - data = (int *) malloc (i * sizeof (int)); - if (data == NULL) - { - fprintf (stderr, "sender: cannot allocate buffer for dataset with " - "%d integers\n", i); - H5Sclose (dataspace); - H5Pclose (fapl); - return (-4); - } - while (--i >= 0) - { - data[i] = i; - } - - /* - * Create a new file using H5F_ACC_TRUNC access, - * default file creation properties, and STREAM file - * access properties. - */ - printf (" sender: opening file on host '%s' port %s for writing...\n", - HOSTNAME, PORT); - file = H5Fcreate (HDF5_FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, fapl); - if (file < 0) - { - fprintf (stderr, "sender: couldn't create file on '%s' using port %s and " - "following %d\n", HOSTNAME, PORT, MAXHUNT); - free (data); - H5Sclose (dataspace); - H5Pclose (fapl); - return (-5); - } - - /* - * Get the file access property list to find out what port is actually used. - */ - status = H5Pget_fapl_stream (fapl, &stream_fapl); - if (status < 0) - { - fprintf (stderr, "sender: couldn't get file access property list " - "for Stream VFD\n"); - free (data); - H5Sclose (dataspace); - H5Pclose (fapl); - return (-6); - } - printf (" sender: using port %d...\n", (int) stream_fapl.port); - - /* - * Write the "hostname:port" information to a temporary file - * which can be read by the receiver process. - */ - tempfile = fopen (TEMPFILENAME, "w"); - if (tempfile == NULL) - { - fprintf (stderr, "sender: couldn't open temporary file to write " - "\"hostname:port\" information\n"); - free (data); - H5Sclose (dataspace); - H5Pclose (fapl); - return (-7); - } - fprintf (tempfile, "%s:%d", HOSTNAME, (int) stream_fapl.port); - fclose (tempfile); - - /* - * Create a new dataset within the file using defined dataspace and - * default dataset creation properties. - */ - dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, dataspace, - H5P_DEFAULT); - if (dataset < 0) - { - fprintf (stderr, "sender: couldn't create dataset '%s'\n", DATASETNAME); - free (data); - H5Fclose (file); - H5Sclose (dataspace); - H5Pclose (fapl); - return (-8); - } - - /* - * Write the data to the dataset using default transfer properties. - */ - printf (" sender: writing dataset '%s' of type INTEGER to file '%s:%d'...\n", - DATASETNAME, HOSTNAME, (int) stream_fapl.port); - status = H5Dwrite (dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, - data); - if (status < 0) - { - free (data); - H5Fclose (file); - H5Dclose (dataset); - H5Sclose (dataspace); - H5Pclose (fapl); - fprintf (stderr, "sender: couldn't write dataset\n"); - return (-9); - } - - /* - * Now give the receiver some time to connect before closing the file - * and releasing resources. - */ - printf (" sender: sleeping for %d seconds...\n", SLEEPTIME); - sleep (SLEEPTIME); - printf (" sender: closing file '%s:%d'\n", HOSTNAME, (int) stream_fapl.port); - H5Sclose (dataspace); - H5Dclose (dataset); - H5Fclose (file); - H5Pclose (fapl); - free (data); - - return (0); -} - - -static int receiver (void) -{ - int i; /* looper */ - hid_t fapl; /* file access property list */ - hid_t file; /* file handle */ - hid_t dataset; /* dataset handle */ - hid_t datatype; /* datatype handle */ - hid_t dataspace; /* dataspace handle */ - hsize_t nelems; /* total number of elements in the dataset */ - hsize_t *dims; /* dataset dimensions */ - int rank; /* dataset rank */ - int *data; /* read buffer */ - int nerrors; /* total number of errors during verify */ - int status; /* return code of HDF5 routines */ - char filename[50]; /* filename of the streamed HDF5 file */ - FILE *tempfile; /* descriptor for temporary file */ - - - /* - * Create access property list and set it to use the Stream driver. - */ - fapl = H5Pcreate (H5P_FILE_ACCESS); - if (fapl < 0) - { - fprintf (stderr, "receiver: couldn't create file access property list\n"); - return (-1); - } - - status = H5Pset_fapl_stream (fapl, NULL); - if (status < 0) - { - fprintf (stderr, "receiver: couldn't set file access property list " - "for Stream VFD\n"); - H5Pclose (fapl); - return (-2); - } - - /* - * Now give the sender some time to open the file and accepting connections. - */ - printf (" receiver: sleeping for %d seconds...\n", SLEEPTIME / 2); - sleep (SLEEPTIME / 2); - - /* - * Read the "hostname:port" information from the temporary file - * the sender should have created. - */ - tempfile = fopen (TEMPFILENAME, "r"); - if (tempfile == NULL) - { - fprintf (stderr, "receiver: couldn't open temporary file to read " - "\"hostname:port\" information\n"); - H5Pclose (fapl); - return (-3); - } - fgets (filename, sizeof (filename) - 1, tempfile); - fclose (tempfile); - unlink (TEMPFILENAME); - - /* - * Open the streamed HDF5 file for reading. - */ - printf (" receiver: opening file '%s' for reading...\n", filename); - file = H5Fopen (filename, H5F_ACC_RDONLY, fapl); - H5Pclose (fapl); - if (file < 0) - { - fprintf (stderr, "receiver: couldn't open file from '%s'\n", filename); - return (-4); - } - - /* - * Open the file and the dataset. - */ - printf (" receiver: reading dataset '%s'...\n", DATASETNAME); - dataset = H5Dopen (file, DATASETNAME); - if (dataset < 0) - { - fprintf (stderr, "receiver: couldn't open dataset '%s'\n", DATASETNAME); - return (-5); - } - - /* - * Get dataset class, order, and size information - */ - datatype = H5Dget_type (dataset); - if (H5Tget_class (datatype) == H5T_INTEGER) - { - printf (" receiver: dataset is of type INTEGER\n"); - } - printf (" receiver: datatype size is %d bytes\n", - (int) H5Tget_size (datatype)); - printf (" receiver: byte ordering is %s endian\n", - H5Tget_order (datatype) == H5T_ORDER_LE ? "little" : "big"); - H5Tclose(datatype); - - /* - * Get dataset dimensions - */ - dataspace = H5Dget_space (dataset); - rank = H5Sget_simple_extent_ndims (dataspace); - dims = (hsize_t *) malloc (rank * sizeof (hsize_t)); - H5Sget_simple_extent_dims (dataspace, dims, NULL); - H5Sclose (dataspace); - - printf (" receiver: rank %d, dimensions %u", rank, (unsigned int) dims[0]); - nelems = dims[0]; - for (i = 1; i < rank; i++) - { - printf (" x %u", (unsigned int) dims[i]); - nelems *= dims[i]; - } - printf ("\n receiver: total number of elements: %d\n", (int) nelems); - free (dims); - - /* - * Read dataset from file into memory. - */ - data = (int *) malloc ((size_t) nelems * sizeof (int)); - status = H5Dread (dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, - data); - H5Dclose (dataset); - - /* - * Close the file. - */ - printf (" receiver: closing file '%s'...\n", filename); - H5Fclose (file); - - /* - * Verify the dataset contents - */ - printf (" receiver: verifying contents of dataset '%s'...\n", DATASETNAME); - for (i = nerrors = 0; i < (int) nelems; i++) - { - if (data[i] != i) - { - fprintf (stderr, "receiver: data error at offset %d: " - "expected %d got %d\n", i, i, data[i]); - nerrors++; - } - } - printf (" receiver: dataset verified, %d errors found\n", nerrors); - - free (data); - - return (-nerrors); -} - - -int main (void) -{ - int main_status, sender_status, receiver_status; - pid_t sender_pid, receiver_pid; - - - sender_pid = receiver_pid = 0; - - /* main's return code for success */ - main_status = 0; - - /* spawn off the sender and the receiver process */ - printf ("main: starting sender process...\n"); - sender_pid = fork (); - if (sender_pid == 0) - { - return (sender ()); - } - else if (sender_pid < 0) - { - perror ("Failed to spawn sender"); - main_status = -1; - } - else - { - printf ("main: starting receiver process...\n"); - receiver_pid = fork (); - if (receiver_pid == 0) - { - return (receiver ()); - } - else if (sender_pid < 0) - { - perror ("Failed to spawn receiver"); - main_status = -1; - } - } - - /* wait for the termination of sender and receiver and check their status */ - printf ("main: waiting for termination of sender and receiver process...\n"); - if (sender_pid > 0 && - waitpid (sender_pid, &sender_status, 0) != sender_pid) - { - perror ("Failed to wait for termination of sender"); - main_status = -1; - } - else - { - main_status |= sender_status; - } - if (receiver_pid > 0 && - waitpid (receiver_pid, &receiver_status, 0) != receiver_pid) - { - perror ("Failed to wait for termination of receiver"); - main_status = -1; - } - else - { - main_status |= receiver_status; - } - - printf (main_status == 0 ? - "Stream Virtual File Driver test passed.\n" : - "*** Stream Virtual File Driver TEST FAILED ***\n"); - - return (main_status); -} - -#endif /* H5_HAVE_STREAM */ |