summaryrefslogtreecommitdiff
path: root/test/lisp
diff options
context:
space:
mode:
authorJarno Malmari <jarno@malmari.fi>2017-04-01 09:19:46 +0300
committerEli Zaretskii <eliz@gnu.org>2017-04-01 09:19:46 +0300
commit5b264d88792fec2a31a48c0de5ffe396c3c14604 (patch)
treeec7ddb582bdcca9e795cc803046c35207b6e254e /test/lisp
parent226cafd24df9c233f6359c93273d4da22db7f62d (diff)
downloademacs-5b264d88792fec2a31a48c0de5ffe396c3c14604.tar.gz
Initial implementation of HTTP Digest qop for url
This also refactors digest authentication functions in url-auth.el. * lisp/url/url-auth.el (url-digest-auth, url-digest-auth-create-key): (url-digest-auth-build-response, url-digest-auth-directory-id-assoc): (url-digest-auth-name-value-string, url-digest-auth-source-creds): (url-digest-cached-key, url-digest-cache-key, url-digest-find-creds): (url-digest-find-new-key, url-digest-prompt-creds): Add new functions to simplify code and aid in unit testing. (url-digest-auth-build-response): Hook up new functionality, or fall back to previous. (url-digest-auth-make-request-digest-qop): (url-digest-auth-make-cnonce, url-digest-auth-nonce-count): (url-digest-auth-name-value-string): Add new helper functions. * test/lisp/url/url-auth-tests.el (url-auth-test-colonjoin): (url-auth-test-digest-ha1, url-auth-test-digest-ha2): (url-auth-test-digest-request-digest): Add a few tests as now more features are testable via intermediate functions. (url-auth-test-challenges, url-auth-test-digest-request-digest): Test the new implementation. Parts of these were accidentally already merged in the past.
Diffstat (limited to 'test/lisp')
-rw-r--r--test/lisp/url/url-auth-tests.el51
1 files changed, 46 insertions, 5 deletions
diff --git a/test/lisp/url/url-auth-tests.el b/test/lisp/url/url-auth-tests.el
index 11e5a479720..30636db083c 100644
--- a/test/lisp/url/url-auth-tests.el
+++ b/test/lisp/url/url-auth-tests.el
@@ -77,6 +77,49 @@ server's WWW-Authenticate header field.")
:expected-ha2 "b44272ea65ee4af7fb26c5dba58f6863"
:expected-response "0d84884d967e04440efc77e9e2b5b561")))
+(ert-deftest url-auth-test-colonjoin ()
+ "Check joining strings with `:'."
+ (should (string= (url-digest-auth-colonjoin) ""))
+ (should (string= (url-digest-auth-colonjoin nil) ""))
+ (should (string= (url-digest-auth-colonjoin nil nil nil) "::"))
+ (should (string= (url-digest-auth-colonjoin "") ""))
+ (should (string= (url-digest-auth-colonjoin "" "") ":"))
+ (should (string= (url-digest-auth-colonjoin "one") "one"))
+ (should (string= (url-digest-auth-colonjoin "one" "two" "three") "one:two:three")))
+
+(ert-deftest url-auth-test-digest-ha1 ()
+ "Check HA1 computation."
+ (dolist (row url-auth-test-challenges)
+ (should (string= (url-digest-auth-make-ha1 (plist-get row :username)
+ (plist-get row :realm)
+ (plist-get row :password))
+ (plist-get row :expected-ha1)
+ ))))
+
+(ert-deftest url-auth-test-digest-ha2 ()
+ "Check HA2 computation."
+ (dolist (row url-auth-test-challenges)
+ (should (string= (url-digest-auth-make-ha2 (plist-get row :method)
+ (plist-get row :uri))
+ (plist-get row :expected-ha2)))))
+
+(ert-deftest url-auth-test-digest-request-digest ()
+ "Check digest response value."
+ (dolist (row url-auth-test-challenges)
+ (should (string= (plist-get row :expected-response)
+ (if (plist-member row :qop)
+ (url-digest-auth-make-request-digest-qop
+ (plist-get row :qop)
+ (plist-get row :expected-ha1)
+ (plist-get row :expected-ha2)
+ (plist-get row :nonce)
+ (plist-get row :nc)
+ (plist-get row :cnonce))
+ (url-digest-auth-make-request-digest
+ (plist-get row :expected-ha1)
+ (plist-get row :expected-ha2)
+ (plist-get row :nonce)))))))
+
(ert-deftest url-auth-test-digest-create-key ()
"Check user credentials in their hashed form."
(dolist (challenge url-auth-test-challenges)
@@ -223,14 +266,12 @@ test and cannot be passed by arguments to `url-digest-auth'."
(progn
;; We don't know these, just check that they exists.
(should (string-match-p ".*response=\".*?\".*" auth))
- ;; url-digest-auth doesn't return these AFAICS.
-;;; (should (string-match-p ".*nc=\".*?\".*" auth))
-;;; (should (string-match-p ".*cnonce=\".*?\".*" auth))
- )
+ (should (string-match-p ".*nc=\".*?\".*" auth))
+ (should (string-match-p ".*cnonce=\".*?\".*" auth)))
(should (string-match ".*response=\"\\(.*?\\)\".*" auth))
(should (string= (match-string 1 auth)
(plist-get challenge :expected-response))))
- )))
+ )))
(ert-deftest url-auth-test-digest-auth-opaque ()
"Check that `opaque' value is added to result when presented by