[functional-tests] Add some cache tests

This commit is contained in:
Joe Thornber
2017-08-25 15:03:50 +01:00
parent 2eea8c4e84
commit be34337b06
6 changed files with 166 additions and 267 deletions

View File

@@ -37,6 +37,12 @@
(with-temp-file-sized ((md (meg 4)))
b1 b2 ...))))
(define-syntax with-empty-metadata
(syntax-rules ()
((_ (md) b1 b2 ...)
(with-temp-file-sized ((md (meg 4)))
b1 b2 ...))))
;; We have to export something that forces all the initialisation expressions
;; to run.
(define (register-cache-tests) #t)
@@ -89,14 +95,12 @@
(string-append bad-path ": Not a block device or regular file")
stderr))))
#|
(define-scenario (cache-check unreadable-metadata)
"Metadata file exists, but is unreadable."
(with-valid-metadata
(run-ok "chmod" "-r" (current-metadata))
(receive (_ stderr) (run-fail "cache_check" (current-metadata))
(with-valid-metadata (md)
(run-ok "chmod" "-r" md)
(receive (_ stderr) (run-fail "cache_check" md)
(assert-starts-with "syscall 'open' failed: Permission denied" stderr))))
|#
(define-scenario (cache-check fails-with-corrupt-metadata)
"Fail with corrupt superblock"
@@ -129,7 +133,129 @@
(define-scenario (cache-check bad-metadata-version)
"Invalid metadata version fails"
(with-cache-xml (xml)
(with-temp-file-sized ((md (meg 4)))
(with-empty-metadata (md)
(cache-restore "-i" xml "-o" md "--debug-override-metadata-version" "12345")
(run-fail "cache_check" md))))
;;;-----------------------------------------------------------
;;; cache_restore scenarios
;;;-----------------------------------------------------------
(define-scenario (cache-restore v)
"print version (-V flag)"
(receive (stdout _) (cache-restore "-V")
(assert-equal tools-version stdout)))
(define-scenario (cache-restore version)
"print version (--version flags)"
(receive (stdout _) (cache-restore "--version")
(assert-equal tools-version stdout)))
(define-scenario (cache-restore h)
"cache_restore -h"
(receive (stdout _) (cache-restore "-h")
(assert-equal cache-restore-help stdout)))
(define-scenario (cache-restore help)
"cache_restore --help"
(receive (stdout _) (cache-restore "--help")
(assert-equal cache-restore-help stdout)))
(define-scenario (cache-restore no-input-file)
"forget to specify an input file"
(with-empty-metadata (md)
(receive (_ stderr) (run-fail "cache_restore" "-o" md)
(assert-starts-with "No input file provided." stderr))))
(define-scenario (cache-restore missing-input-file)
"the input file can't be found"
(with-empty-metadata (md)
(receive (_ stderr) (run-fail "cache_restore -i no-such-file -o" md)
(assert-starts-with "Couldn't stat file" stderr))))
(define-scenario (cache-restore missing-output-file)
"the output file can't be found"
(with-cache-xml (xml)
(receive (_ stderr) (run-fail "cache_restore -i " xml)
(assert-starts-with "No output file provided." stderr))))
(define-scenario (cache-restore tiny-output-file)
"Fails if the output file is too small."
(with-temp-file-sized ((md (* 1024 4)))
(with-cache-xml (xml)
(receive (_ stderr) (run-fail "cache_restore" "-i" xml "-o" md)
(assert-starts-with cache-restore-outfile-too-small-text stderr)))))
(define-scenario (cache-restore successfully-restores)
"Restore succeeds."
(with-empty-metadata (md)
(with-cache-xml (xml)
(cache-restore "-i" xml "-o" md))))
(define-scenario (cache-restore q)
"cache_restore accepts -q"
(with-empty-metadata (md)
(with-cache-xml (xml)
(receive (stdout stderr) (cache-restore "-i" xml "-o" md "-q")
(assert-eof stdout)
(assert-eof stderr)))))
(define-scenario (cache-restore quiet)
"cache_restore accepts --quiet"
(with-empty-metadata (md)
(with-cache-xml (xml)
(receive (stdout stderr) (cache-restore "-i" xml "-o" md "--quiet")
(assert-eof stdout)
(assert-eof stderr)))))
;; Failing due to a genuine bug in cache_restore
(define-scenario (cache-restore override-metadata-version)
"we can set any metadata version"
(with-empty-metadata (md)
(with-cache-xml (xml)
(cache-restore "-i" xml "-o" md "--debug-override-metadata-version 10298"))))
(define-scenario (cache-restore omit-clean-shutdown)
"accepts --omit-clean-shutdown"
(with-empty-metadata (md)
(with-cache-xml (xml)
(cache-restore "-i" xml "-o" md "--omit-clean-shutdown"))))
;;;-----------------------------------------------------------
;;; cache_dump scenarios
;;;-----------------------------------------------------------
(define-scenario (cache-dump v)
"print version (-V flag)"
(receive (stdout _) (cache-dump "-V")
(assert-equal tools-version stdout)))
(define-scenario (cache-dump version)
"print version (--version flags)"
(receive (stdout _) (cache-dump "--version")
(assert-equal tools-version stdout)))
(define-scenario (cache-dump h)
"cache_dump -h"
(receive (stdout _) (cache-dump "-h")
(assert-equal cache-dump-help stdout)))
(define-scenario (cache-dump help)
"cache_dump --help"
(receive (stdout _) (cache-dump "--help")
(assert-equal cache-dump-help stdout)))
(define-scenario (cache-dump missing-input-file)
"Fails with missing input file."
(receive (stdout stderr) (run-fail "cache_dump")
(assert-starts-with "No input file provided." stderr)))
(define-scenario (cache-dump restore-is-noop)
"cache_dump followed by cache_restore is a noop."
(with-valid-metadata (md)
(receive (d1-stdout _) (cache-dump md)
(with-temp-file-containing ((xml d1-stdout))
(cache-restore "-i" xml "-o" md)
(receive (d2-stdout _) (cache-dump md)
(assert-equal d1-stdout d2-stdout))))))
)

View File

@@ -7,6 +7,9 @@
thin-rmap-help
cache-check-help
cache-restore-help
cache-restore-outfile-too-small-text
cache-dump-help
)
(import (rnrs))
@@ -62,4 +65,31 @@ Options:
{--skip-hints}
{--skip-discards}")
(define cache-restore-help
"Usage: cache_restore [options]
Options:
{-h|--help}
{-i|--input} <input xml file>
{-o|--output} <output device or file>
{-q|--quiet}
{--metadata-version} <1 or 2>
{-V|--version}
{--debug-override-metadata-version} <integer>
{--omit-clean-shutdown}")
(define cache-restore-outfile-too-small-text
"Output file too small.
The output file should either be a block device,
or an existing file. The file needs to be large
enough to hold the metadata.")
(define cache-dump-help
"Usage: cache_dump [options] {device|file}
Options:
{-h|--help}
{-o <xml file>}
{-V|--version}
{--repair}")
)

View File

@@ -143,10 +143,10 @@
(assert-starts-with "Couldn't stat file" stderr))))
(define-scenario (thin-restore missing-output-file)
"the input file can't be found"
(with-temp-file-sized ((md (meg 4)))
(receive (_ stderr) (run-fail "thin_restore -i no-such-file -o" md)
(assert-starts-with "Couldn't stat file" stderr))))
"the output file can't be found"
(with-thin-xml (xml)
(receive (_ stderr) (run-fail "thin_restore -i " xml)
(assert-starts-with "No output file provided." stderr))))
(define-scenario (thin-restore tiny-output-file)
"Fails if the output file is too small."