diff options
-rw-r--r-- | eris.asd | 2 | ||||
-rw-r--r-- | src/eris-decode.lisp | 5 | ||||
-rw-r--r-- | tests/backend-tests.lisp | 64 |
3 files changed, 68 insertions, 3 deletions
@@ -15,6 +15,7 @@ (:file "eris-decode") (:file "backend") (:file "file-backend") + (:file "hash-backend") #+unix (:file "parallel-decoder")))) :in-order-to ((test-op (test-op :eris/test)))) @@ -31,4 +32,5 @@ (:file "decode-tests") (:file "rfc") (:file "autogenerated-tests") + (:file "backend-tests") #+unix (:file "parallel-tests"))))) diff --git a/src/eris-decode.lisp b/src/eris-decode.lisp index 3d93312..806bd37 100644 --- a/src/eris-decode.lisp +++ b/src/eris-decode.lisp @@ -228,14 +228,13 @@ cache. It may be NIL to turn off caching entirely." :capacity cache-capacity :table (make-hash-table :size (1+ cache-capacity) :test #'equalp)) (reference key nonce) - (declare (type octet-vector reference key)) + (declare (type octet-vector reference key nonce)) (let ((block (execute-fetch-function fetch-function reference))) (declare (type octet-vector block)) (hash-check block reference) (decrypt-block block key nonce))) (lambda (reference key nonce) - (declare (type octet-vector reference key) - (optimize (debug 3))) + (declare (type octet-vector reference key nonce)) (let ((block (execute-fetch-function fetch-function reference))) (declare (type octet-vector block)) (hash-check block reference) diff --git a/tests/backend-tests.lisp b/tests/backend-tests.lisp new file mode 100644 index 0000000..625740f --- /dev/null +++ b/tests/backend-tests.lisp @@ -0,0 +1,64 @@ +;; This file is part of eris-cl. +;; Copyright (C) 2022 Piotr SzarmaĆski + +;; eris-cl is free software: you can redistribute it and/or modify it under the +;; terms of the GNU Lesser General Public License as published by the Free +;; Software Foundation, either version 3 of the License, or (at your option) any +;; later version. + +;; eris-cl is distributed in the hope that it will be useful, but WITHOUT ANY +;; WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +;; A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License along with +;; eris-cl. If not, see <https://www.gnu.org/licenses/>. + +(in-package :eris/test) + +(def-suite* backend-tests :in eris-tests) + +(defmacro test-hash-backend (array block-size &optional (secret null-secret)) + `(let ((backend (make-instance 'hash-backend)) + (array ,array)) + (is (equalp (alexandria:read-stream-content-into-byte-vector + (fetch-read-capability + (store-data array backend :block-size ,block-size :secret ,secret) backend)) + array)))) + +(test simple-hash-backend-tests + (test-hash-backend (make-octets 1023 :element 1) 1kib) + (test-hash-backend (make-octets 1025 :element 2) 1kib) + (test-hash-backend (make-octets 16383 :element 3) 1kib) + (test-hash-backend (make-octets 16384 :element 4) 1kib) + (test-hash-backend (make-octets 1 :element 5) 32kib) + (test-hash-backend (make-octets 16834 :element 5) 32kib) + (test-hash-backend (make-octets 96000 :element 5) 32kib)) + +(defun make-temporary-dir () + (let* ((tmpdir (uiop:temporary-directory)) + (tmp-tmpdir (make-pathname :directory (serapeum:append1 + (pathname-directory tmpdir) + (ironclad:byte-array-to-hex-string (ironclad:random-data 10))) + :defaults tmpdir))) + (ensure-directories-exist tmp-tmpdir) + tmp-tmpdir)) + +(defmacro test-file-backend (array &optional (secret null-secret)) + `(let ((tmpdir (make-temporary-dir))) + (unwind-protect + (let* ((backend (make-instance 'file-backend :directory tmpdir)) + (array ,array)) + (is (equalp (alexandria:read-stream-content-into-byte-vector + (fetch-read-capability + (store-data array backend :secret ,secret) backend)) + array))) + (uiop:delete-directory-tree tmpdir :validate t)))) + +(test simple-file-backend-tests + (test-file-backend (make-octets 1023 :element 1)) + (test-file-backend (make-octets 1025 :element 2)) + (test-file-backend (make-octets 16383 :element 3)) + (test-file-backend (make-octets 16384 :element 4)) + (test-file-backend (make-octets 1 :element 5)) + (test-file-backend (make-octets 16834 :element 5)) + (test-file-backend (make-octets 96000 :element 5))) |