syndicate-rkt/syndicate/test/distributed/observation-visibility.rkt

32 lines
1.1 KiB
Racket

#lang imperative-syndicate/test-implementation
;; A client observing some part of the server's dataspace should cause
;; creation of an assertion of observation in that server's dataspace.
(require (only-in imperative-syndicate/lang activate))
(require imperative-syndicate/distributed)
(assertion-struct presence (who))
(define test-address (server-loopback-connection "test"))
(test-case
[(activate imperative-syndicate/distributed)
(spawn #:name 'producer
(during (server-connected test-address)
(assert (to-server test-address (presence 'producer)))))
(spawn #:name 'consumer
(during (server-connected test-address)
(on (asserted (from-server test-address (presence $who)))
(printf "~a joined\n" who))))
(spawn #:name 'metaconsumer
(during (server-connected test-address)
(on (asserted (from-server test-address (observe (presence _))))
(printf "Someone cares about presence!\n"))))
]
no-crashes
(expected-output (set "producer joined"
"Someone cares about presence!")))