2017-09-07 20:10:25 +05:30
|
|
|
(library
|
|
|
|
(bcache bcache-tests)
|
|
|
|
(export register-bcache-tests)
|
|
|
|
(import (bcache block-manager)
|
|
|
|
(chezscheme)
|
|
|
|
(functional-tests)
|
|
|
|
(fmt fmt)
|
|
|
|
(process)
|
|
|
|
(temp-file))
|
|
|
|
|
|
|
|
(define-syntax with-empty-metadata
|
|
|
|
(syntax-rules ()
|
|
|
|
((_ (md nr-blocks) b1 b2 ...)
|
|
|
|
(with-temp-file-sized ((md "bcache.bin" (* 4096 nr-blocks)))
|
|
|
|
b1 b2 ...))))
|
|
|
|
|
|
|
|
;; We have to export something that forces all the initialisation expressions
|
|
|
|
;; to run.
|
|
|
|
(define (register-bcache-tests) #t)
|
|
|
|
|
|
|
|
;;;-----------------------------------------------------------
|
|
|
|
;;; scenarios
|
|
|
|
;;;-----------------------------------------------------------
|
|
|
|
|
|
|
|
(define-scenario (bcache create)
|
|
|
|
"create and destroy a block cache"
|
|
|
|
(with-empty-metadata (md 16)
|
|
|
|
(with-bcache (cache md 16)
|
|
|
|
#t)))
|
|
|
|
|
|
|
|
(define-scenario (bcache read-ref)
|
|
|
|
"get a read-ref on a block"
|
|
|
|
(with-empty-metadata (md 16)
|
|
|
|
(with-bcache (cache md 16)
|
|
|
|
(with-block (b cache 0 (get-flags))
|
|
|
|
#f))))
|
2017-09-08 13:50:16 +05:30
|
|
|
|
|
|
|
(define-scenario (bcache write-ref)
|
|
|
|
"get a write-ref on a block"
|
|
|
|
(with-empty-metadata (md 16)
|
|
|
|
(with-bcache (cache md 16)
|
|
|
|
(with-block (b cache 0 (get-flags dirty))
|
|
|
|
#f))))
|
|
|
|
|
|
|
|
(define-scenario (bcache zero-ref)
|
|
|
|
"get a write-ref on a block"
|
|
|
|
(with-empty-metadata (md 16)
|
|
|
|
(with-bcache (cache md 16)
|
|
|
|
(with-block (b cache 0 (get-flags zero))
|
|
|
|
#f))))
|
|
|
|
|
|
|
|
(define-scenario (bcache multiple-refs-to-same-block)
|
|
|
|
"the same block can be held multiple times"
|
|
|
|
(with-empty-metadata (md 16)
|
|
|
|
(with-bcache (cache md 16)
|
|
|
|
(with-block (b cache 0 (get-flags))
|
|
|
|
(with-block (b cache 0 (get-flags))
|
|
|
|
(with-block (b cache 0 (get-flags))
|
|
|
|
#f))))))
|
|
|
|
|
|
|
|
(define-scenario (bcache multiple-blocks)
|
|
|
|
"multiple blocks can be held at once"
|
|
|
|
(with-empty-metadata (md 16)
|
|
|
|
(with-bcache (cache md 16)
|
|
|
|
(with-block (b cache 0 (get-flags))
|
|
|
|
(with-block (b cache 1 (get-flags))
|
|
|
|
(with-block (b cache 2 (get-flags))
|
|
|
|
#f))))))
|
2017-09-07 20:10:25 +05:30
|
|
|
)
|
|
|
|
|