Testing for big-bang; evented UDP example
This commit is contained in:
parent
3d0a635b62
commit
744c963abb
|
@ -0,0 +1,16 @@
|
|||
#lang racket/base
|
||||
|
||||
(require racket/match)
|
||||
(require rackunit)
|
||||
(require "os-big-bang.rkt")
|
||||
|
||||
(provide check-message-handler)
|
||||
|
||||
(define (check-message-handler mh initial-w message final-w expected-actions)
|
||||
(match-define (on-message pattern handler) mh)
|
||||
(check-true (pattern message) "Message-handler pattern did not match message provided")
|
||||
(define v (match (handler message initial-w)
|
||||
[(? transition? t) t]
|
||||
[new-w (transition new-w '())]))
|
||||
(check-equal? v (transition final-w expected-actions)
|
||||
"Produced world-and-actions did not match expected world-and-actions"))
|
|
@ -0,0 +1,45 @@
|
|||
#lang racket/base
|
||||
|
||||
(require racket/match)
|
||||
(require "os-big-bang.rkt")
|
||||
(require (only-in "os-userland.rkt" userland))
|
||||
(require "os-udp.rkt")
|
||||
(require "os-big-bang-testing.rkt")
|
||||
|
||||
(define (packet-handler sname)
|
||||
(message-handlers w
|
||||
[(udp-packet source (== sname) body)
|
||||
(transition w
|
||||
(send-message (udp-packet sname source body)))]))
|
||||
|
||||
(check-message-handler (packet-handler (udp-address #f 5555))
|
||||
'none
|
||||
(udp-packet (udp-address "127.0.0.1" 12345) (udp-address #f 5555) #"abcd")
|
||||
'none
|
||||
(list (send-message (udp-packet (udp-address #f 5555)
|
||||
(udp-address "127.0.0.1" 12345)
|
||||
#"abcd"))))
|
||||
|
||||
(define echoer
|
||||
(os-big-bang 'none
|
||||
(send-message `(request create-echo-socket (udp new 5555 65536)))
|
||||
(subscribe 'echo-socket-receiver
|
||||
(message-handlers w
|
||||
[`(reply create-echo-socket ,sname)
|
||||
(transition w
|
||||
(unsubscribe 'echo-socket-receiver)
|
||||
(subscribe 'packet-handler (packet-handler sname)))]))))
|
||||
|
||||
(define spy
|
||||
(os-big-bang 'none
|
||||
(subscribe 'spy (message-handlers w [x (write `(MESSAGE ,x)) (newline)]))))
|
||||
|
||||
(define (main)
|
||||
(ground-vm
|
||||
(os-big-bang 'none
|
||||
(spawn spy)
|
||||
(spawn (lambda () (userland udp-driver)))
|
||||
(spawn echoer))))
|
||||
|
||||
;;(main)
|
||||
(provide main)
|
Loading…
Reference in New Issue