[functional-tests] finish porting the thin/creation tests

This commit is contained in:
Joe Thornber 2017-12-12 16:56:55 +00:00
parent d6a5ced23b
commit 93213135ad

View File

@ -101,8 +101,9 @@
(define (build-args-string . args) (define (build-args-string . args)
(fmt #f (fmt-join dsp args (dsp " ")))) (fmt #f (fmt-join dsp args (dsp " "))))
(define (pool-table md-dev data-dev data-size block-size opts) (define (pool-table md-dev data-dev block-size opts)
(let ((opts-str (expand-thin-options opts))) (let ((opts-str (expand-thin-options opts))
(data-size (sectors (get-dev-size (dm-device-path data-dev)))))
(list (list
(make-target (to-sectors data-size) "thin-pool" (make-target (to-sectors data-size) "thin-pool"
(apply build-args-string (apply build-args-string
@ -149,35 +150,6 @@
("filename" ,(dm-device-path dev)))) ("filename" ,(dm-device-path dev))))
(run-ok (fmt #f "fio " fio-input)))) (run-ok (fmt #f "fio " fio-input))))
(define (with-pool-fn fast-allocator slow-allocator size block-size fn)
(let ((metadata-table (list (fast-allocator (meg 32))))
(data-table (list (slow-allocator size))))
(with-devices ((md (generate-dev-name) "" metadata-table)
(data (generate-dev-name) "" data-table))
(zero-dev md (kilo 4))
(let ((ptable (pool-table md data size block-size (thin-pool-options))))
(with-device (pool (generate-dev-name) "" ptable)
(fn pool))))))
(define-syntax with-pool
(syntax-rules ()
((_ (pool md-allocator data-allocator size block-size) b1 b2 ...)
(with-pool-fn md-allocator
data-allocator
size
block-size
(lambda (pool) b1 b2 ...)))))
(define-syntax define-thin-scenario
(syntax-rules ()
((_ path (pool size) desc b1 b2 ...)
(define-dm-scenario path desc
(with-pool-fn (mk-fast-allocator)
(mk-slow-allocator)
size
(kilo 64)
(lambda (pool) b1 b2 ...))))))
(define generate-dev-name (define generate-dev-name
(let ((nr 0)) (let ((nr 0))
(lambda () (lambda ()
@ -185,6 +157,37 @@
(set! nr (+ nr 1)) (set! nr (+ nr 1))
name)))) name))))
(define (with-pool-fn md-table data-table block-size fn)
(with-devices ((md (generate-dev-name) "" md-table)
(data (generate-dev-name) "" data-table))
(zero-dev md (kilo 4))
(let ((ptable (pool-table md data block-size (thin-pool-options))))
(with-device (pool (generate-dev-name) "" ptable)
(fn pool)))))
(define-syntax with-pool
(syntax-rules ()
((_ (pool md-table data-table block-size) b1 b2 ...)
(with-pool-fn md-table
data-table
block-size
(lambda (pool) b1 b2 ...)))))
(define (default-md-table)
(list ((mk-fast-allocator) (meg 32))))
(define (default-data-table size)
(list ((mk-slow-allocator) size)))
(define-syntax define-thin-scenario
(syntax-rules ()
((_ path (pool size) desc b1 b2 ...)
(define-dm-scenario path desc
(with-pool-fn (list ((mk-fast-allocator) (meg 32)))
(list ((mk-slow-allocator) size))
(kilo 64)
(lambda (pool) b1 b2 ...))))))
(define (thin-table pool id size) (define (thin-table pool id size)
(list (list
(make-target (to-sectors size) "thin" (build-args-string (dm-device-path pool) id)))) (make-target (to-sectors size) "thin" (build-args-string (dm-device-path pool) id))))
@ -342,7 +345,9 @@
(define-dm-scenario (thin create huge-block-size) (define-dm-scenario (thin create huge-block-size)
"huge block sizes are possible" "huge block sizes are possible"
(let ((size (sectors 524288))) (let ((size (sectors 524288)))
(with-pool (pool (mk-fast-allocator) (mk-slow-allocator) (gig 10) size) (with-pool (pool (default-md-table)
(default-data-table size)
(kilo 64))
(with-new-thin (thin pool 0 size) (with-new-thin (thin pool 0 size)
(rand-write-and-verify thin))))) (rand-write-and-verify thin)))))
@ -350,41 +355,55 @@
(define-dm-scenario (thin create non-power-2-block-size-fails) (define-dm-scenario (thin create non-power-2-block-size-fails)
"The block size must be a power of 2" "The block size must be a power of 2"
(assert-raises (assert-raises
(with-pool (pool (mk-fast-allocator) (mk-slow-allocator) (gig 10) (kilo 57)) (with-pool (pool (default-md-table)
(default-data-table (gig 10))
(kilo 57))
#t))) #t)))
(define-dm-scenario (thin create tiny-block-size-fails) (define-dm-scenario (thin create tiny-block-size-fails)
"The block size must be at least 64k" "The block size must be at least 64k"
(assert-raises (assert-raises
(with-pool (pool (mk-fast-allocator) (mk-slow-allocator) (gig 10) (kilo 32)) (with-pool (pool (default-md-table)
(default-data-table (gig 10))
(kilo 32))
#t))) #t)))
(define-dm-scenario (thin create too-large-block-size-fails) (define-dm-scenario (thin create too-large-block-size-fails)
"The block size must be less than 2^21 sectors" "The block size must be less than 2^21 sectors"
(assert-raises (assert-raises
(with-pool (pool (mk-fast-allocator) (mk-slow-allocator) (gig 10) (sectors (expt 2 22))) (with-pool (pool (default-md-table)
(default-data-table (gig 10))
(sectors (expt 2 22)))
#t))) #t)))
(define-dm-scenario (thin create largest-block-size-succeeds) (define-dm-scenario (thin create largest-block-size-succeeds)
"The block size 2^21 sectors should work" "The block size 2^21 sectors should work"
(with-pool (pool (mk-fast-allocator) (mk-slow-allocator) (gig 10) (sectors (expt 2 21))) (with-pool (pool (default-md-table)
(default-data-table (gig 10))
(sectors (expt 2 21)))
#t)) #t))
(define-dm-scenario (thin create too-large-thin-dev-fails) (define-dm-scenario (thin create too-large-thin-dev-fails)
"The thin-id must be less 2^24" "The thin-id must be less 2^24"
(with-pool (pool (mk-fast-allocator) (mk-slow-allocator) (gig 10) (kilo 64)) (with-pool (pool (default-md-table)
(default-data-table (gig 10))
(kilo 64))
(assert-raises (assert-raises
(create-thin pool (expt 2 24))))) (create-thin pool (expt 2 24)))))
(define-dm-scenario (thin create largest-thin-dev-succeeds) (define-dm-scenario (thin create largest-thin-dev-succeeds)
"The thin-id must be less 2^24" "The thin-id must be less 2^24"
(with-pool (pool (mk-fast-allocator) (mk-slow-allocator) (gig 10) (kilo 64)) (with-pool (pool (default-md-table)
(default-data-table (gig 10))
(kilo 64))
(create-thin pool (- (expt 2 24) 1)))) (create-thin pool (- (expt 2 24) 1))))
;; (define-dm-scenario (thin create too-small-metadata-fails) (define-dm-scenario (thin create too-small-metadata-fails)
;; "16k metadata is way too small" "16k metadata is way too small"
;; (assert-raises (assert-raises
;; (with-pool (pool (mk-fast-allocator) (mk-slow-allocator) (gig 10) (kilo 64)) (with-pool (pool (list ((mk-fast-allocator) (kilo 16)))
;; ))) (default-data-table (gig 10))
(kilo 64))
#t)))
) )