From be5cc378c8f49c135ab7cc0d7378dc8b035a20be Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Tue, 23 Nov 2004 09:50:16 +0000 Subject: introducing the client/precheck concept to allow test 518 to *only* run when it actually can run and test the FD_SETSIZE stuff it is meant to test --- tests/FILEFORMAT | 6 ++++++ tests/libtest/lib518.c | 40 ++++++++++++++++++++++++++++------------ tests/runtests.pl | 15 +++++++++++++++ 3 files changed, 49 insertions(+), 12 deletions(-) diff --git a/tests/FILEFORMAT b/tests/FILEFORMAT index 2f9238ad5..a3b8a5511 100644 --- a/tests/FILEFORMAT +++ b/tests/FILEFORMAT @@ -95,6 +95,12 @@ is no other alternatives. Using this of course requires subsequent tests to restart servers. + +A command line that if set gets run by the test script before the test. If an +output is displayed by the command line, the test will be skipped and the +(single-line) output will be displayed as reason for not running the test. + + Name of tool to use instead of "curl". This tool must be built and exist in the libtest/ directory. diff --git a/tests/libtest/lib518.c b/tests/libtest/lib518.c index 86ee23ad7..4be7b7f85 100644 --- a/tests/libtest/lib518.c +++ b/tests/libtest/lib518.c @@ -39,24 +39,20 @@ #endif #if defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT) -int test(char *URL) + +static int rlimit(void) { struct rlimit rl; - int fd[NUM_OPEN]; - int i; - CURLcode res; - CURL *curl; - /* get open file limits */ if (getrlimit(RLIMIT_NOFILE, &rl) == -1) { fprintf(stderr, "warning: getrlimit: failed to get RLIMIT_NOFILE\n"); - goto skip_open; + return -1; } /* check that hard limit is high enough */ if (rl.rlim_max < NUM_NEEDED) { fprintf(stderr, "warning: RLIMIT_NOFILE hard limit is too low\n"); - goto skip_open; + return -1; } /* increase soft limit if needed */ @@ -64,10 +60,32 @@ int test(char *URL) rl.rlim_cur = NUM_NEEDED; if (setrlimit(RLIMIT_NOFILE, &rl) == -1) { fprintf(stderr, "warning: setrlimit: failed to set RLIMIT_NOFILE\n"); - goto skip_open; + return -1; + } + } + return 0; +} + +int test(char *URL) +{ + int fd[NUM_OPEN]; + int i; + CURLcode res; + CURL *curl; + + if(!strcmp(URL, "check")) { + /* used by the test script to ask if we can run this test or not */ + if(rlimit()) { + printf("rlimit problems\n"); + return 1; } + return 0; /* sure, run this! */ } + if(rlimit()) + /* failure */ + return 100; + /* open a dummy descriptor */ fd[0] = open(DEV_NULL, O_RDONLY); if (fd[0] == -1) { @@ -86,8 +104,6 @@ int test(char *URL) } } -skip_open: - curl = curl_easy_init(); curl_easy_setopt(curl, CURLOPT_URL, URL); curl_easy_setopt(curl, CURLOPT_HEADER, TRUE); @@ -104,7 +120,7 @@ skip_open: int test(char *URL) { (void)URL; - fprintf(stderr, "system lacks necessary system function(s)"); + printf("system lacks necessary system function(s)"); return 1; } #endif diff --git a/tests/runtests.pl b/tests/runtests.pl index 3b46d2a26..0acef67b4 100755 --- a/tests/runtests.pl +++ b/tests/runtests.pl @@ -888,6 +888,21 @@ sub singletest { $serverproblem = serverfortest($testnum); } + if(!$serverproblem) { + my @precheck = getpart("client", "precheck"); + my $cmd = $precheck[0]; + chomp $cmd; + if($cmd) { + my @o = `$cmd 2>/dev/null`; + if($o[0]) { + $serverproblem = 15; + $why = $o[0]; + chomp $why; + } + } + } + + if($serverproblem) { # there's a problem with the server, don't run # this particular server, but count it as "skipped" -- cgit v1.2.3