(use fuse posix test) (define u+rwx/reg (bitwise-ior file/reg perm/irusr perm/iwusr perm/ixusr)) (define u+rwx/dir (bitwise-ior file/dir perm/irusr perm/iwusr perm/ixusr)) (define (process-terminate! pid) (process-signal pid signal/term) (process-wait pid)) (define (test-directories path) (define fs (let ((lst '())) (make-filesystem getattr: (lambda (path) (and (or (string=? path "/") (member (substring path 1) lst)) (vector u+rwx/dir 2 (current-user-id) (current-group-id) 0 (current-seconds) (current-seconds) (current-seconds)))) readdir: (lambda (path) (and (string=? path "/") (append '("." "..") lst))) mkdir: (lambda (path mode) (set! lst (cons (substring path 1) lst)))))) (define pid (process-fork (lambda () (set-signal-handler! signal/term (lambda (_) (filesystem-stop! path fs))) (filesystem-start! path fs) (filesystem-wait! path fs)))) (sleep 1) (let ((num 1000)) (test-assert (equal? (directory path) '())) (list-tabulate num (lambda (n) (create-directory (string-append path "/" (number->string n))))) (test-assert (equal? (length (directory path)) num)) (process-terminate! pid) (test-assert (equal? (directory path) '())))) (test-assert (create-directory "path" #t)) (test-directories "path") (test-assert (delete-directory "path" #t))