From 744c963abbca3c2f79071d524ab9ff320fa74abb Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Mon, 16 Jan 2012 16:54:57 -0500 Subject: [PATCH] Testing for big-bang; evented UDP example --- os-big-bang-testing.rkt | 16 ++++++++ os-udp-test-big-bang.rkt | 45 +++++++++++++++++++++ os-udp-test.rkt => os-udp-test-userland.rkt | 0 3 files changed, 61 insertions(+) create mode 100644 os-big-bang-testing.rkt create mode 100644 os-udp-test-big-bang.rkt rename os-udp-test.rkt => os-udp-test-userland.rkt (100%) diff --git a/os-big-bang-testing.rkt b/os-big-bang-testing.rkt new file mode 100644 index 0000000..d6cd732 --- /dev/null +++ b/os-big-bang-testing.rkt @@ -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")) diff --git a/os-udp-test-big-bang.rkt b/os-udp-test-big-bang.rkt new file mode 100644 index 0000000..17b7745 --- /dev/null +++ b/os-udp-test-big-bang.rkt @@ -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) diff --git a/os-udp-test.rkt b/os-udp-test-userland.rkt similarity index 100% rename from os-udp-test.rkt rename to os-udp-test-userland.rkt