summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2011-03-13 00:18:04 +0100
committerDaniel Stenberg <daniel@haxx.se>2011-03-13 00:18:04 +0100
commit0718b7e31ecb429ce3de7a98e725750b518f489a (patch)
tree672456b2a1b9218c482768e9c07fa079d29b3334 /tests
parent60172a0446bbe3f8bf1c7b066a03b7febfc96ceb (diff)
downloadcurl-0718b7e31ecb429ce3de7a98e725750b518f489a.tar.gz
test583: verify early SSH multi remove handle
This test case is meant to verify that the logic in commit 60172a0446bbe3f8b actually works. This test failed for me before that change and it works after it.
Diffstat (limited to 'tests')
-rw-r--r--tests/data/Makefile.am2
-rw-r--r--tests/data/test58343
-rw-r--r--tests/libtest/Makefile.inc17
-rw-r--r--tests/libtest/lib583.c73
4 files changed, 126 insertions, 9 deletions
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
index 3a76a288d..c3c68cae3 100644
--- a/tests/data/Makefile.am
+++ b/tests/data/Makefile.am
@@ -70,7 +70,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \
test313 test1115 test578 test579 test1116 test1200 test1201 test1202 \
test1203 test1117 test1118 test1119 test1120 test1300 test1301 test1302 \
test1303 test320 test321 test322 test323 test324 test1121 test581 test580 \
- test1304 test1305 test1306 test1307 test582
+ test1304 test1305 test1306 test1307 test582 test583
filecheck:
@mkdir test-place; \
diff --git a/tests/data/test583 b/tests/data/test583
new file mode 100644
index 000000000..2129ee729
--- /dev/null
+++ b/tests/data/test583
@@ -0,0 +1,43 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+multi
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+sftp
+</server>
+<tool>
+lib583
+</tool>
+ <name>
+SFTP with multi interface, remove handle early
+ </name>
+
+# The command here uses 'localhost' just to make sure that curl_multi_perform
+# won't reach too far in the first invoke. When using c-ares at least, the
+# name resolve will cause it to return rather quickly and thus we could trigger
+# the problem we're looking to verify.
+ <command>
+sftp://localhost:%SSHPORT%PWD/log/upload583.txt %USER:
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+</strip>
+<protocol>
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/libtest/Makefile.inc b/tests/libtest/Makefile.inc
index c68f5af52..a210cbfe3 100644
--- a/tests/libtest/Makefile.inc
+++ b/tests/libtest/Makefile.inc
@@ -5,14 +5,14 @@ TESTUTIL = testutil.c testutil.h
SUPPORTFILES = first.c test.h
# These are all libcurl test programs
-noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 lib506 \
- lib507 lib508 lib510 lib511 lib512 lib513 lib514 lib515 lib516 \
- lib517 lib518 lib519 lib520 lib521 lib523 lib524 lib525 lib526 lib527 \
- lib574 lib575 lib576 lib578 lib579 \
- lib529 lib530 lib532 lib533 lib536 lib537 lib540 lib541 lib542 lib543 \
- lib544 lib545 lib547 lib548 lib549 lib552 lib553 lib554 lib555 lib556 \
- lib539 lib557 lib560 lib562 lib564 lib565 lib566 lib567 \
- lib568 lib569 lib570 lib571 lib572 lib573 lib582 chkhostname
+noinst_PROGRAMS = chkhostname \
+ lib500 lib501 lib502 lib503 lib504 lib505 lib506 lib507 lib508 lib510 \
+ lib511 lib512 lib513 lib514 lib515 lib516 lib517 lib518 lib519 lib520 \
+ lib521 lib523 lib524 lib525 lib526 lib527 lib574 lib575 lib576 lib578 \
+ lib579 lib529 lib530 lib532 lib533 lib536 lib537 lib540 lib541 lib542 \
+ lib543 lib544 lib545 lib547 lib548 lib549 lib552 lib553 lib554 lib555 \
+ lib556 lib539 lib557 lib560 lib562 lib564 lib565 lib566 lib567 lib568 \
+ lib569 lib570 lib571 lib572 lib573 lib582 lib583
chkhostname_SOURCES = chkhostname.c $(top_srcdir)/lib/curl_gethostname.c
chkhostname_LDADD = @CURL_NETWORK_LIBS@
@@ -159,3 +159,4 @@ lib579_SOURCES = lib579.c $(SUPPORTFILES)
lib582_SOURCES = lib582.c $(SUPPORTFILES) $(TESTUTIL)
+lib583_SOURCES = lib583.c $(SUPPORTFILES)
diff --git a/tests/libtest/lib583.c b/tests/libtest/lib583.c
new file mode 100644
index 000000000..d01d98f1f
--- /dev/null
+++ b/tests/libtest/lib583.c
@@ -0,0 +1,73 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+/*
+ * This test case is based on the sample code provided by Saqib Ali
+ * http://curl.haxx.se/mail/lib-2011-03/0066.html
+ */
+
+#include "test.h"
+
+#include <unistd.h>
+#include <sys/stat.h>
+
+int test(char *URL)
+{
+ CURLMcode retVal;
+ int stillRunning, retValcm;
+ CURLM* multiHandle;
+ CURL* curl;
+ int res;
+
+ curl_global_init(CURL_GLOBAL_ALL);
+
+ multiHandle = curl_multi_init();
+ curl = curl_easy_init();
+
+ test_setopt(curl, CURLOPT_USERPWD, libtest_arg2);
+ test_setopt(curl, CURLOPT_SSH_PUBLIC_KEYFILE, "curl_client_key.pub");
+ test_setopt(curl, CURLOPT_SSH_PRIVATE_KEYFILE, "curl_client_key");
+
+ curl_easy_setopt(curl, CURLOPT_UPLOAD, 1);
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
+
+ curl_easy_setopt(curl, CURLOPT_URL, URL);
+ curl_easy_setopt(curl, CURLOPT_INFILESIZE, (long)5);
+
+ curl_multi_add_handle(multiHandle, curl);
+ retVal = curl_multi_perform(multiHandle, &stillRunning);
+ if (retVal != CURLM_OK)
+ fprintf(stderr, "curl_multi_perform() failed!n");
+
+ fprintf(stderr, "curl_multi_remove_handle()!\n");
+ retVal = curl_multi_remove_handle(multiHandle, curl);
+ if (retVal == CURLM_OK)
+ fprintf(stderr, "curl_multi_remove_handle() was successful!\n");
+ else
+ fprintf(stderr, "curl_multi_remove_handle() failed\n");
+
+test_cleanup:
+
+ curl_easy_cleanup(curl);
+ curl_multi_cleanup(multiHandle);
+
+ return res;
+}