netcdf-c/ncdap_test/findtestserver.c.in
Dennis Heimbigner d62a9e623c Fix the NC_INMEMORY code to work in all cases with HDF5 1.10.
re: github issue https://github.com/Unidata/netcdf-c/issues/1111

One of the less common use cases for the in-memory feature is
apparently failing with HDF5-1.10.x.  The fix is complicated and
requires significant changes to libhdf5/nc4memcb.c. The current
setup is detailed in the file docs/inmeminternal.dox.

Additionally, it was discovered that the program
nc_test/tst_inmemory.c, which is invoked by
nc_test/run_inmemory.sh, actually was failing because of the
above problem. But the failure is not detected since the script
does not return non-zero value.

Other Changes:
1. Fix nc_test_tst_inmemory to return errors correctly.
2. Make ncdap_tests/findtestserver.c and dap4_tests/findtestserver4.c
   be generated from ncdap_test/findtestserver.c.in.
3. Make LOG() print output to stderr instead of stdout to
   avoid contaminating e.g. ncdump output.
4. Modify the handling of NC_INMEMORY and NC_DISKLESS flags
   to properly handle that NC_DISKLESS => NC_INMEMORY. This
   affects a number of code pieces, especially memio.c.
2018-09-04 11:27:47 -06:00

80 lines
1.7 KiB
C

#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "nctestserver.h"
/* Support stringification of -D macros */
#define XSTRINGIFY(s) #s
#define STRINGIFY(s) XSTRINGIFY(s)
/**
usage: findtestserver dap2|dap4 suffix [serverlist]
Given a partial suffix path, try to find a
server for which a request to server + suffix
returns some kind of result using the
specified protocol. This indicates that the
server is up and running. Return the complete
url for the server plus the path.
If serverlist is present, then is should be a comma
separated list of servers (host+port) to try.
It defaults to REMOTETESTSERVERS.
*/
static void
usage()
{
fprintf(stderr,"usage: findtestserver dap2|dap4 suffix [serverlist]\n");
exit(1);
}
int
main(int argc, char** argv)
{
const char* url = NULL;
const char* servlet = NULL;
const char* proto = NULL;
const char* serverlist = NULL;
int isdap4 = 0; /* 1 => dap4 */
argc--; argv++;
if(argc < 2)
usage();
proto = strdup(argv[0]);
servlet = strdup(argv[1]);
if(argc >= 3)
serverlist = strdup(argv[2]);
#ifdef ENABLE_DAP
if(strcasecmp(proto,"dap2")==0)
isdap4 = 0;
else
#endif
#ifdef ENABLE_DAP4
if(strcasecmp(proto,"dap4")==0)
isdap4 = 1;
else
#endif
usage();
if(serverlist == NULL) {
#ifdef REMOTETESTSERVERS
serverlist = strdup(REMOTETESTSERVERS);
#endif
}
if(serverlist == NULL || strlen(serverlist) == 0)
fprintf(stderr,"Cannot determine a server list");
url = nc_findtestserver(servlet,isdap4,serverlist);
if(url == NULL) {
url = "";
fprintf(stderr,"not found: %s\n",servlet);
}
printf("%s",url);
fflush(stdout);
exit(0);
}