Testing for big-bang; evented UDP example

This commit is contained in:
Tony Garnock-Jones 2012-01-16 16:54:57 -05:00
parent 3d0a635b62
commit 744c963abb
3 changed files with 61 additions and 0 deletions

16
os-big-bang-testing.rkt Normal file
View File

@ -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"))

45
os-udp-test-big-bang.rkt Normal file
View File

@ -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)