mirror of
https://github.com/curl/curl.git
synced 2025-09-18 10:02:45 +03:00
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
This commit is contained in:
parent
4afc4aed73
commit
be5cc378c8
|
@ -95,6 +95,12 @@ is no other alternatives. Using this of course requires subsequent tests to
|
||||||
restart servers.
|
restart servers.
|
||||||
</killserver>
|
</killserver>
|
||||||
|
|
||||||
|
<precheck>
|
||||||
|
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.
|
||||||
|
</precheck>
|
||||||
|
|
||||||
<tool>
|
<tool>
|
||||||
Name of tool to use instead of "curl". This tool must be built and exist
|
Name of tool to use instead of "curl". This tool must be built and exist
|
||||||
in the libtest/ directory.
|
in the libtest/ directory.
|
||||||
|
|
|
@ -39,24 +39,20 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT)
|
#if defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT)
|
||||||
int test(char *URL)
|
|
||||||
|
static int rlimit(void)
|
||||||
{
|
{
|
||||||
struct rlimit rl;
|
struct rlimit rl;
|
||||||
int fd[NUM_OPEN];
|
|
||||||
int i;
|
|
||||||
CURLcode res;
|
|
||||||
CURL *curl;
|
|
||||||
|
|
||||||
/* get open file limits */
|
/* get open file limits */
|
||||||
if (getrlimit(RLIMIT_NOFILE, &rl) == -1) {
|
if (getrlimit(RLIMIT_NOFILE, &rl) == -1) {
|
||||||
fprintf(stderr, "warning: getrlimit: failed to get RLIMIT_NOFILE\n");
|
fprintf(stderr, "warning: getrlimit: failed to get RLIMIT_NOFILE\n");
|
||||||
goto skip_open;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check that hard limit is high enough */
|
/* check that hard limit is high enough */
|
||||||
if (rl.rlim_max < NUM_NEEDED) {
|
if (rl.rlim_max < NUM_NEEDED) {
|
||||||
fprintf(stderr, "warning: RLIMIT_NOFILE hard limit is too low\n");
|
fprintf(stderr, "warning: RLIMIT_NOFILE hard limit is too low\n");
|
||||||
goto skip_open;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* increase soft limit if needed */
|
/* increase soft limit if needed */
|
||||||
|
@ -64,9 +60,31 @@ int test(char *URL)
|
||||||
rl.rlim_cur = NUM_NEEDED;
|
rl.rlim_cur = NUM_NEEDED;
|
||||||
if (setrlimit(RLIMIT_NOFILE, &rl) == -1) {
|
if (setrlimit(RLIMIT_NOFILE, &rl) == -1) {
|
||||||
fprintf(stderr, "warning: setrlimit: failed to set RLIMIT_NOFILE\n");
|
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 */
|
/* open a dummy descriptor */
|
||||||
fd[0] = open(DEV_NULL, O_RDONLY);
|
fd[0] = open(DEV_NULL, O_RDONLY);
|
||||||
|
@ -86,8 +104,6 @@ int test(char *URL)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
skip_open:
|
|
||||||
|
|
||||||
curl = curl_easy_init();
|
curl = curl_easy_init();
|
||||||
curl_easy_setopt(curl, CURLOPT_URL, URL);
|
curl_easy_setopt(curl, CURLOPT_URL, URL);
|
||||||
curl_easy_setopt(curl, CURLOPT_HEADER, TRUE);
|
curl_easy_setopt(curl, CURLOPT_HEADER, TRUE);
|
||||||
|
@ -104,7 +120,7 @@ skip_open:
|
||||||
int test(char *URL)
|
int test(char *URL)
|
||||||
{
|
{
|
||||||
(void)URL;
|
(void)URL;
|
||||||
fprintf(stderr, "system lacks necessary system function(s)");
|
printf("system lacks necessary system function(s)");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -888,6 +888,21 @@ sub singletest {
|
||||||
$serverproblem = serverfortest($testnum);
|
$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) {
|
if($serverproblem) {
|
||||||
# there's a problem with the server, don't run
|
# there's a problem with the server, don't run
|
||||||
# this particular server, but count it as "skipped"
|
# this particular server, but count it as "skipped"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user