X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=contrib%2Fsb-md5%2Fmd5-tests.lisp;h=ea9e4c82bc4be9e75ef94405dd0a817e643769ea;hb=b8f49ceae4a3b513de21f385bb784729d2ddff3f;hp=a14a8c57510043087ce018c25737ac4bd8df024d;hpb=4f4a1695fa74e2becf1fb87110132ad4943fac61;p=sbcl.git diff --git a/contrib/sb-md5/md5-tests.lisp b/contrib/sb-md5/md5-tests.lisp index a14a8c5..ea9e4c8 100644 --- a/contrib/sb-md5/md5-tests.lisp +++ b/contrib/sb-md5/md5-tests.lisp @@ -2,18 +2,45 @@ (:use #:sb-md5 #:cl #:sb-rt)) (in-package #:sb-md5-tests) +(defun byte-array-to-hex-string (bytevec) + (format nil "~(~{~2,'0X~}~)" (coerce bytevec 'list))) + +(defun one-shot-test (string) + (md5sum-string string :external-format :ascii)) + +(defun incremental-test (string) + (let ((bytevec (sb-ext:string-to-octets string :external-format :ascii)) + (state (sb-md5:make-md5-state))) + (dotimes (i (length bytevec) (sb-md5:finalize-md5-state state)) + (sb-md5:update-md5-state state bytevec :start i :end (1+ i))))) + +(defun fill-pointer-test (string) + (let* ((bytevec (sb-ext:string-to-octets string :external-format :ascii)) + (fillvec (let ((x (make-array (* 2 (length bytevec)) + :fill-pointer 0 + :element-type '(unsigned-byte 8)))) + (dotimes (i (length bytevec) x) + (vector-push (aref bytevec i) x))))) + (sb-md5:md5sum-sequence fillvec))) + +(eval-when (:compile-toplevel :load-toplevel :execute) +(defun tests-for-test-suite (basename index string expected-result) + (loop for (test-kind testfun) in '(("ONE-SHOT" one-shot-test) + ("INCREMENTAL" incremental-test) + ("FILL-POINTER" fill-pointer-test)) + collect `(deftest ,(intern (format nil "~A.~A.~A" basename test-kind index)) + (string= (byte-array-to-hex-string (funcall ',testfun ,string)) + ,expected-result) + t) into test-forms + finally (return `(progn ,@test-forms)))) +) ; EVAL-WHEN + (macrolet ((define-rfc1321-tests (test-list) - `(progn - ,@(loop for i upfrom 0 - for (string . expected-result) in test-list - collect - `(deftest ,(intern (format nil "SB-MD5.RFC1321.~A" i)) - (string= (format nil - "~(~{~2,'0X~}~)" - (coerce (md5sum-sequence ,string) 'list)) - ,expected-result) - t))))) + `(progn + ,@(loop for i upfrom 0 + for (string . expected-result) in test-list + collect (tests-for-test-suite "SB-MD5.RFC1321" i string expected-result))))) (define-rfc1321-tests (("" . "d41d8cd98f00b204e9800998ecf8427e") ("a" ."0cc175b9c0f1b6a831c399e269772661") @@ -25,15 +52,10 @@ (macrolet ((define-other-tests (test-list) - `(progn - ,@(loop for i upfrom 0 - for (string . expected-result) in test-list - collect - `(deftest ,(intern (format nil "SB-MD5.OTHER.~A" i)) - (string= - (format nil "~(~{~2,'0X~}~)" (coerce (md5sum-sequence ,string) 'list)) - ,expected-result) - t))))) + `(progn + ,@(loop for i upfrom 0 + for (string . expected-result) in test-list + collect (tests-for-test-suite "SB-MD5.OTHER" i string expected-result))))) (define-other-tests (;; From padding bug report by Edi Weitz ("1631901HERR BUCHHEISTERCITROEN NORD1043360796beckenbauer" . "d734945e5930bb28859ccd13c830358b") @@ -110,6 +132,23 @@ ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" . "ab75504250558b788f99d1ebd219abf2")))) (deftest sb-md5.md5sum-file.0 - (string= (format nil "~(~{~2,'0X~}~)" (coerce (md5sum-file "/dev/null") 'list)) - "d41d8cd98f00b204e9800998ecf8427e") - t) \ No newline at end of file + (let ((file + (loop with ret + for filename = (format nil "md5-test-~6,'0D" (random 100000)) + do (with-open-file (stream filename :direction :output + :if-exists nil + :if-does-not-exist :create) + (when stream + (setf ret stream))) + when ret return ret))) + (unwind-protect + (string= (format nil "~(~{~2,'0X~}~)" + (coerce (md5sum-file file) 'list)) + "d41d8cd98f00b204e9800998ecf8427e") + (delete-file file))) + t) + +(deftest sb-md5.md5sum-sequence.error.0 + (handler-case (md5sum-sequence "foo") + (type-error () :good)) + :good)