]> diplodocus.org Git - nmh/commitdiff
Added 2 second timeout to curl command in post() in oauth.c, for
authorDavid Levine <levinedl@acm.org>
Fri, 16 Sep 2016 00:00:02 +0000 (20:00 -0400)
committerDavid Levine <levinedl@acm.org>
Fri, 16 Sep 2016 00:00:02 +0000 (20:00 -0400)
localhost requests only, because the default timeout on Cygwin is 5
minutes.

sbr/oauth.c [changed mode: 0644->0755]
test/oauth/test-mhlogin

old mode 100644 (file)
new mode 100755 (executable)
index ae745fc..3433fba
@@ -961,6 +961,14 @@ post(struct curl_ctx *ctx, const char *url, const char *req_body)
     curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
     curl_easy_setopt(curl, CURLOPT_WRITEDATA, ctx);
 
+    if (strncmp(url, "http://127.0.0.1:", 17) == 0) {
+        /* Hack:  on Cygwin, curl doesn't fail to connect with ECONNREFUSED.
+           Instead, it waits to timeout.  So set a really short timeout, but
+           just on localhost (for convenience of the user, and the test
+           suite). */
+        curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 2L);
+    }
+
     status = curl_easy_perform(curl);
     /* first check for error from callback */
     if (ctx->too_big) {
index 7454576..682fbc8 100755 (executable)
@@ -303,11 +303,17 @@ mhlogin: bad OAuth request; re-run with -snoop and send REDACTED output to nmh-w
 # TEST
 start_test 'mhlogin -browser'
 
-run_test "eval echo code | mhlogin -saslmech xoauth2 -authservice test\
- -user nobody@example.com -browser 'echo \$@ > ${MHTMPDIR}/$$.browser'" \
-"Follow the prompts in your browser to authorize nmh to access test.
-Enter the authorization code: mhlogin: error exchanging code for OAuth2 token
-mhlogin: error making HTTP request to OAuth2 authorization endpoint: Failed to connect to 127.0.0.1 port ${http_port}: Connection refused"
+#### Strip off the error string because it can vary, e.g.,
+####   "Failed to connect to 127.0.0.1 port 64546: Connection refused", or
+####   "Connection timed out after 1004 milliseconds"
+echo code | mhlogin -saslmech xoauth2 -authservice test -user nobody@example.com \
+                    -browser "echo \$@ > ${MHTMPDIR}/$$.browser" 2>&1 1>/dev/null | \
+    sed 's/\( endpoint:\) .*/\1/' > "${MHTMPDIR}/$$.mhlogin.err"
+cat > "${MHTMPDIR}/$$.mhlogin.err.expected" <<EOF
+mhlogin: error exchanging code for OAuth2 token
+mhlogin: error making HTTP request to OAuth2 authorization endpoint:
+EOF
+check "${MHTMPDIR}/$$.mhlogin.err" "${MHTMPDIR}/$$.mhlogin.err.expected"
 
 cat > "${MHTMPDIR}/$$.browser.expected" <<EOF
 http://127.0.0.1:${http_port}/oauth/auth?response_type=code&client_id=test-id&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=test-scope