netcdf-c/ncdap_test/findtestserver.c.in
Dennis Heimbigner 7223c4a5aa Avoid spurious test failures when servers fail.
re: https://github.com/Unidata/netcdf-c/issues/1451

The situation with the various DAP (and other) remote test
servers is currently in a state of flux.  For example, Unidata
admin is planning to forcibly shift the remote test server to
remotetest.unidata.ucar.edu soon.  In addition, the server
test.opendap.org has shown some recent instability.

The result is that various DAP (and byterange) tests can fail
unexpectedly. This is an irritant to users and reveals nothing
about test sucess or failure.

Solve by modifying tests to report server inaccessibility and
otherwise pretend to succeed.

This puts an onus on Unidata to detect such server failures, but
will not cause users to see spurious failures. [Note. Do similar
fix for netcdf-java]. The check is:
1. export SETX=1 to cause all the shell scripts to trace
2. search the log files for the phrase "WARNING" (in upper case)
and see if it is complaining about not finding a server.

Misc. Changes
-------------
1. Added a pingurl program to see if a server was up.
2. modified some test case url targets
2019-12-31 15:42:58 -07:00

100 lines
2.1 KiB
C

/*! \file
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014,
2015, 2016, 2017, 2018
University Corporation for Atmospheric Research/Unidata.
See \ref copyright file for more info.
*/
#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)
{
char* url = NULL;
const char* servlet = NULL;
const char* proto = NULL;
char* serverlist = NULL;
enum KIND kind = NOKIND;
kind = kind;
proto = proto;
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,"thredds")==0)
kind = THREDDSKIND;
else
if(strcasecmp(proto,"dap2")==0)
kind = DAP2KIND;
else
#endif
#ifdef ENABLE_DAP4
if(strcasecmp(proto,"dap4")==0)
kind = DAP4KIND;
else
#endif
usage();
if(serverlist == NULL) {
#ifdef REMOTETESTSERVERS
serverlist = strdup(REMOTETESTSERVERS);
#endif
}
if(serverlist == NULL || strlen(serverlist) == 0) {
fprintf(stderr,"WARNING: Cannot determine a server list\n");
exit(0);
}
url = nc_findtestserver(servlet,serverlist);
if(url == NULL) {
url = "";
fprintf(stderr,"not found: %s\n",servlet);
}
printf("%s",url);
fflush(stdout);
/* clean up */
free(serverlist);
free(url);
exit(0);
}