;;;; timed-resource-test.scm ;;;; Kon Lovett, Mar '20 ;;;; Kon Lovett, Jun '17 ;;;; Kon Lovett, Oct '09 ;;; (import test) (import (only (chicken format) format)) (include "test-gloss.incl") #; ;preferred (define sleeping-glossf (o glossf countdown seconds)) (define (sleeping-glossf secs #!optional (fmt "Sleeping ~A secs")) (import (only (srfi 18) thread-sleep!)) (glossnf fmt secs) (display #\return) (thread-sleep! secs) ) ;; (test-begin "Timed Resource") (import timed-resource) ;;; (import (chicken blob)) (import (srfi 4)) ;; (define-syntax inc! (syntax-rules () ((inc! ?loc) (let ((val ?loc)) (set! ?loc (add1 val)) ) ) ) ) (define (read-blob u8cnt #!optional (port (current-input-port))) (u8vector->blob (read-u8vector u8cnt port)) ) (define-constant ACTIVE-SECONDS 1.0) (define-constant BUFFER-BYTES 16) (define +opened+ 0) (define +closed+ 0) (define (timed-random-blob opener) (let ( (+tr+ (make-timed-resource (lambda () (let ((port (opener))) (test-assert "Resource Opened" port) (inc! +opened+) port ) ) (lambda (port) (close-output-port port) (inc! +closed+) ) ACTIVE-SECONDS)) ) (lambda (#!optional (cnt 16)) ;NOTE only because used once; brittle! (test-assert "Resource Cannot Be Open" (not (timed-resource-open? +tr+))) (use-timed-resource (+tr+ v) (read-blob cnt v)) ) ) ) ;;; ;; Config (cond-expand (windows ;;FIXME a windows file to read (define (open-test-port) #f ) ) (unix (define (open-test-port) (open-input-file "/dev/random" #:binary) ) ) ) ;; Test (test-group "Simple Timed Resource" ;Activate the TR, once (let ( (x ((timed-random-blob open-test-port) BUFFER-BYTES)) ) (test-assert "Resource Read Type" (blob? x)) (test "Resource Read Size" BUFFER-BYTES (blob-size x)) ) ;Wait a little longer than the timeout (sleeping-glossf (+ ACTIVE-SECONDS 0.5)) ;Better be closed now! (test "Resource Closed" +closed+ +opened+) ) ;;; (test-end "Timed Resource") (test-exit)