-;;; Actor utilities
-;;; ===============
-
-;;; Message tests
-;;; =============
-
-(let ((monkey-message
- (make-message 'id 'to 'from 'action
- '((monkey . banana)))))
- ;; A key we have
- (test-equal (message-ref monkey-message 'monkey)
- 'banana)
-
- ;; A key we don't have
- (let ((caught-error #f))
- (catch 'message-missing-key
- (lambda ()
- (message-ref monkey-message 'coo-coo))
- (lambda (. args)
- (set! caught-error #t)))
- (test-assert caught-error))
-
- ;; A key we don't have, with a default set
- (test-equal (message-ref monkey-message 'coo-coo 'danger-danger)
- 'danger-danger))
-
-
-;; Make sure our test message serializes and deserializes okay
-
-(let ((reread-message
- (read-message-from-string
- (with-output-to-string
- (lambda () (write-message test-message))))))
- (test-assert (message? reread-message))
- ;; Make sure that all the properties are the same from
- ;; the original message to the re-read message
- (for-each
- (lambda (getter)
- (test-equal (getter test-message) (getter reread-message)))
- (list message-id message-to message-from message-action message-body
- message-in-reply-to message-wants-reply
- (@@ (8sync systems actors) message-replied)
- (@@ (8sync systems actors) message-deferred-reply))))
+(let ((test-box (make-atomic-box 'not-yet))
+ (done (make-condition)))
+ (run-hive
+ (lambda (hive)
+ (define requester (create-actor <Requester>
+ #:done done
+ #:test-box test-box))
+ (<- requester 'run)
+ (perform-operation
+ (choice-operation (wait-operation done)
+ ;; if somehow this times out after 5 seconds,
+ ;; something is deeply wrong
+ (sleep-operation 5)))
+ (test-equal (atomic-box-ref test-box)
+ 'we-did-it))))