Browse code

Fix timeout/run-out-of-fd bug in unit-tests (bb #1412)

git-svn: trunk@4841

Török Edvin authored on 2009/02/20 22:22:02
Showing 3 changed files
... ...
@@ -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