git-svn: trunk@4841
Török Edvin authored on 2009/02/20 22:22:02... | ... |
@@ -1,3 +1,8 @@ |
1 |
+Fri Feb 20 15:53:18 EET 2009 (edwin) |
|
2 |
+------------------------------------ |
|
3 |
+ * unit_tests/check_clamd.c, unit_tests/check_clamd.sh: Fix |
|
4 |
+ timeout/run-out-of-fd bug in unit-tests (bb #1412) |
|
5 |
+ |
|
1 | 6 |
Fri Feb 20 13:54:53 EET 2009 (edwin) |
2 | 7 |
------------------------------------ |
3 | 8 |
* docs/man/clamd.8.in: more documentation on IDSESSION/INSTREEAM (bb |
... | ... |
@@ -55,7 +55,7 @@ |
55 | 55 |
|
56 | 56 |
static int sockd; |
57 | 57 |
#define SOCKET "clamd-test.socket" |
58 |
-static void conn_setup(void) |
|
58 |
+static void conn_setup_mayfail(int may) |
|
59 | 59 |
{ |
60 | 60 |
int rc; |
61 | 61 |
struct sockaddr_un nixsock; |
... | ... |
@@ -64,6 +64,8 @@ static void conn_setup(void) |
64 | 64 |
strncpy(nixsock.sun_path, SOCKET, sizeof(nixsock.sun_path)); |
65 | 65 |
|
66 | 66 |
sockd = socket(AF_UNIX, SOCK_STREAM, 0); |
67 |
+ if (sockd == -1 && (may && (errno == EMFILE || errno == ENFILE))) |
|
68 |
+ return; |
|
67 | 69 |
fail_unless_fmt(sockd != -1, "Unable to create socket: %s\n", strerror(errno)); |
68 | 70 |
|
69 | 71 |
rc = connect(sockd, (struct sockaddr *)&nixsock, sizeof(nixsock)); |
... | ... |
@@ -72,6 +74,11 @@ static void conn_setup(void) |
72 | 72 |
signal(SIGPIPE, SIG_IGN); |
73 | 73 |
} |
74 | 74 |
|
75 |
+static void conn_setup(void) |
|
76 |
+{ |
|
77 |
+ conn_setup_mayfail(0); |
|
78 |
+} |
|
79 |
+ |
|
75 | 80 |
static int conn_tcp(int port) |
76 | 81 |
{ |
77 | 82 |
struct sockaddr_in server; |
... | ... |
@@ -136,8 +143,6 @@ static void commands_setup(void) |
136 | 136 |
|
137 | 137 |
static void commands_teardown(void) |
138 | 138 |
{ |
139 |
- int rc = unlink(ACCDENIED); |
|
140 |
- fail_unless_fmt(rc != -1, "Failed to unlink access denied testfile: %s\n", strerror(errno)); |
|
141 | 139 |
} |
142 | 140 |
|
143 | 141 |
#define VERSION_REPLY "ClamAV "REPO_VERSION""VERSION_SUFFIX |
... | ... |
@@ -502,22 +507,25 @@ START_TEST (test_fildes_many) |
502 | 502 |
{ |
503 | 503 |
const char idsession[] = "zIDSESSION"; |
504 | 504 |
int dummyfd, dummycleanfd, i, killed = 0; |
505 |
- |
|
506 | 505 |
conn_setup(); |
507 | 506 |
dummyfd = open(SCANFILE, O_RDONLY); |
508 | 507 |
fail_unless_fmt(dummyfd != -1, "failed to open %s: %s\n", SCANFILE, strerror(errno)); |
509 | 508 |
|
510 | 509 |
fail_unless_fmt(send(sockd, idsession, sizeof(idsession), 0) == sizeof(idsession), "send IDSESSION failed\n"); |
511 |
- for (i=0; i < 2048; i++) { |
|
510 |
+ for (i=0;i<1024;i++) { |
|
512 | 511 |
if (sendmsg_fd(sockd, "zFILDES", sizeof("zFILDES"), dummyfd, 1) == -1) { |
513 | 512 |
killed = 1; |
514 | 513 |
break; |
515 | 514 |
} |
516 | 515 |
} |
517 |
- |
|
518 |
- fail_unless(killed, "Clamd did not kill connection when overloaded!\n"); |
|
519 |
- |
|
520 | 516 |
close(dummyfd); |
517 |
+ if (send(sockd, "zEND", sizeof("zEND"), 0) == -1) { |
|
518 |
+ killed = 1; |
|
519 |
+ } |
|
520 |
+ conn_teardown(); |
|
521 |
+ |
|
522 |
+ conn_setup(); |
|
523 |
+ test_command("zPING", sizeof("zPING"), NULL, "PONG", 5); |
|
521 | 524 |
conn_teardown(); |
522 | 525 |
} |
523 | 526 |
END_TEST |
... | ... |
@@ -596,7 +604,11 @@ START_TEST (test_connections) |
596 | 596 |
|
597 | 597 |
for (i=0;i<nf;i++) { |
598 | 598 |
/* just open connections, and let them time out */ |
599 |
- conn_setup(); |
|
599 |
+ conn_setup_mayfail(1); |
|
600 |
+ if (sockd == -1) { |
|
601 |
+ nf = i; |
|
602 |
+ break; |
|
603 |
+ } |
|
600 | 604 |
sock[i] = sockd; |
601 | 605 |
if (sockd > maxfd) |
602 | 606 |
maxfd = sockd; |
... | ... |
@@ -697,6 +709,7 @@ static Suite *test_clamd_suite(void) |
697 | 697 |
tcase_add_test(tc_commands, test_stream); |
698 | 698 |
tc_stress = tcase_create("clamd stress test"); |
699 | 699 |
suite_add_tcase(s, tc_stress); |
700 |
+ tcase_set_timeout(tc_stress, 20); |
|
700 | 701 |
tcase_add_test(tc_stress, test_fildes_many); |
701 | 702 |
tcase_add_test(tc_stress, test_idsession_stress); |
702 | 703 |
tcase_add_test(tc_stress, test_fildes_unwanted); |
... | ... |
@@ -714,7 +727,7 @@ int main(void) |
714 | 714 |
int nf; |
715 | 715 |
Suite *s = test_clamd_suite(); |
716 | 716 |
SRunner *sr = srunner_create(s); |
717 |
- srunner_set_log(sr, "test-clamd.log"); |
|
717 |
+ srunner_set_log(sr, BUILDDIR"/test-clamd.log"); |
|
718 | 718 |
srunner_run_all(sr, CK_NORMAL); |
719 | 719 |
nf = srunner_ntests_failed(sr); |
720 | 720 |
srunner_free(sr); |
... | ... |
@@ -276,13 +276,14 @@ run_reload_test |
276 | 276 |
|
277 | 277 |
die 0 |
278 | 278 |
)& |
279 |
+ |
|
279 | 280 |
pid2=$! |
280 | 281 |
|
281 | 282 |
wait $pid1 |
282 | 283 |
exitcode1=$? |
283 | 284 |
wait $pid2 |
284 | 285 |
exitcode2=$? |
285 |
-rm -rf clamdtest$CLAMD_TEST_UNIQ1 clamdtest$CLAMD_TEST_UNIQ2 test-db |
|
286 |
+rm -rf clamdtest$CLAMD_TEST_UNIQ1 clamdtest$CLAMD_TEST_UNIQ2 test-db accdenied |
|
286 | 287 |
if (test $exitcode1 -ne 0 && test $exitcode1 -ne 127) || (test $exitcode2 -ne 0 && test $exitcode2 -ne 127); then |
287 | 288 |
exit 1 |
288 | 289 |
fi |