Overview
Comment: | wip |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | v2.0001 |
Files: | files | file ages | folders |
SHA1: |
94e8e9f0b5c84aac7eec0b1fee02716a |
User & Date: | matt on 2022-01-05 20:59:34 |
Other Links: | branch diff | manifest | tags |
Context
2022-01-06
| ||
08:10 | Tweaked debug.scm check-in: 6e2f351dc9 user: matt tags: v2.0001 | |
2022-01-05
| ||
20:59 | wip check-in: 94e8e9f0b5 user: matt tags: v2.0001 | |
11:48 | Put megatest main call into thread so that mailboxes work check-in: a4d8d9166c user: matt tags: v2.0001 | |
Changes
Modified Makefile from [c6a8cae70d] to [a7d80e1a40].
︙ | ︙ | |||
105 106 107 108 109 110 111 | mofiles/runsmod.o : mofiles/rmtmod.o mofiles/archivemod.o mofiles/servermod.o : mofiles/commonmod.o mofiles/stml2.o : mofiles/cookie.o mofiles/dbi.o mofiles/tasksmod.o : mofiles/pgdb.o mofiles/dbmod.o mofiles/testsmod.o : mofiles/commonmod.o mofiles/testsmod.o : mofiles/itemsmod.o mofiles/rmtmod.o mofiles/tasksmod.o | | | | 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | mofiles/runsmod.o : mofiles/rmtmod.o mofiles/archivemod.o mofiles/servermod.o : mofiles/commonmod.o mofiles/stml2.o : mofiles/cookie.o mofiles/dbi.o mofiles/tasksmod.o : mofiles/pgdb.o mofiles/dbmod.o mofiles/testsmod.o : mofiles/commonmod.o mofiles/testsmod.o : mofiles/itemsmod.o mofiles/rmtmod.o mofiles/tasksmod.o # split modules. Note: we can switch between ulex and ulex simple. mofiles/ulex.o : ulex/ulex.scm ulex-simple/ulex.scm dashboard.o megatest.o : db_records.scm megatest-fossil-hash.scm ADTLSCR=mt_laststep mt_runstep mt_ezstep HELPERS=$(addprefix $(PREFIX)/bin/,$(ADTLSCR)) DEPLOYHELPERS=$(addprefix deploytarg/,$(ADTLSCR)) |
︙ | ︙ |
Added ulex-trials/Makefile version [e108f86d9a].
> > > > > > > > | 1 2 3 4 5 6 7 8 | ulex-test : ulex-test.scm csc ulex-test.scm test : ulex-test ./ulex-test do-test clean : rm -f .runners/* NBFAKE* |
Added ulex-trials/ulex-test.scm version [a81f0cc6e1].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | (module nng-test * (import scheme (chicken io) (chicken base) (chicken time) (chicken file) (chicken file posix) (chicken string) (chicken process-context) (chicken process-context posix) miscmacros nng srfi-18 srfi-69 test matchable typed-records system-information directory-utils ) (define help "Usage: nng-test COMMAND where COMMAND is one of: do-test : run the basic req/rep test run tcp://host:port : start test server - start several in same dir ") (define address-tcp-1 "tcp://localhost:5555") (define address-tcp-2 "tcp://localhost:6666") (define address-inproc-1 "inproc://local1") (define address-inproc-2 "inproc://local2") ;;; ;;; Req-Rep ;;; (define (make-listening-reply-socket address) (let ((socket (make-rep-socket))) (socket-set! socket 'nng/recvtimeo 2000) (nng-listen socket address) socket)) (define (make-dialed-request-socket address) (let ((socket (make-req-socket))) (socket-set! socket 'nng/recvtimeo 2000) (nng-dial socket address) socket)) (define (req-rep-test address) (let ((rep (make-listening-reply-socket address)) (req (make-dialed-request-socket address))) (nng-send req "message 1") (nng-recv rep) (nng-send rep "message") (begin0 (nng-recv req) (nng-close! rep)))) (define (do-test) (test-group "nng" (test "tcp req-rep" "message" (req-rep-test address-tcp-1)) (test "inproc req-rep" "message" (req-rep-test address-inproc-1))) (test-exit)) ;; this should be run in a thread (define (run-listener-responder socket myaddr) (let loop ((status 'running)) (let* ((msg (nng-recv socket)) (response (process-message msg))) (if (not (eq? response 'done)) (begin (nng-send socket response) (loop status)))))) (define *channels* (make-hash-table)) (define (call channels msg addr) (let* ((csocket (hash-table-ref/default channels addr #f)) (socket (or csocket (make-dialed-request-socket addr)))) (nng-send socket msg) (print "Sent: "msg", received: "(nng-recv socket)) (if (not (hash-table-exists? channels addr)) (hash-table-set! channels addr socket)))) ;; start => hello 0 ;; hello 0 => hello 1 ;; hello 1 => hello 2 ;; ... ;; hello 11 => 'done ;; (define (process-message mesg) (let ((parts (string-split mesg))) (match parts ((msg c) (let ((count (string->number c))) (if (> count 10) 'done (conc msg " " (if count count 0))))) ((msg) (conc msg " 0")) (else "hello 0")))) (define (main) (match (command-line-arguments) (("do-test")(do-test)) ((run myaddr) ;; start listener ;; put myaddr into file by host-pid in .runners ;; for 1 minute ;; get all in .runners ;; call each with a message ;; (let* ((endtimes (+ (current-seconds) 20)) ;; run for 20 seconds (socket (make-listening-reply-socket myaddr)) (rfile (conc ".runners/"(get-host-name)"-"(current-process-id))) (th1 (make-thread (lambda () (run-listener-responder socket myaddr) ) "responder"))) (if (not (and (file-exists? ".runners") (directory? ".runners"))) (create-directory ".runners" #t)) (with-output-to-file rfile (lambda () (print myaddr))) (thread-start! th1) (let loop ((entries '())) (if (> (current-seconds) endtimes) (begin (delete-file* rfile) (sleep 1) (exit)) (if (null? entries) (loop (glob ".runners/*")) (let* ((entry (car entries)) (destaddr (with-input-from-file entry read-line))) (call *channels* (conc "hello-from-"destaddr) destaddr) ;; (thread-sleep! 0.025) (loop (cdr entries)))))))) ((cmd)(print "ERROR: command "cmd", not recognised.\n\n"help)) (else (print help)))) ) ;; end module (import nng-test) (main) |
Modified ulex.scm from [419292ee51] to [f004a2cedd].
︙ | ︙ | |||
17 18 19 20 21 22 23 | ;; along with Megatest. If not, see <http://www.gnu.org/licenses/>. ;;====================================================================== (declare (unit ulex)) (include "ulex/ulex.scm") | > | 17 18 19 20 21 22 23 24 | ;; along with Megatest. If not, see <http://www.gnu.org/licenses/>. ;;====================================================================== (declare (unit ulex)) (include "ulex/ulex.scm") ;; (include "ulex-simple/ulex.scm") |
Modified ulex/ulex.scm from [c5a87871a1] to [01c6cea094].
︙ | ︙ | |||
173 174 175 176 177 178 179 180 181 182 183 184 185 186 | (define (wait-and-close uconn) (thread-join! (udat-cmd-thread uconn)) (tcp-close (udat-socket uconn))) ;;====================================================================== ;; peers and connections ;;====================================================================== ;; send structured data to recipient ;; ;; NOTE: qrykey is what was called the "cookie" previously ;; ;; retval tells send to expect and wait for return data (one line) and return it or time out ;; this is for ping where we don't want to necessarily have set up our own server yet. | > > | 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 | (define (wait-and-close uconn) (thread-join! (udat-cmd-thread uconn)) (tcp-close (udat-socket uconn))) ;;====================================================================== ;; peers and connections ;;====================================================================== (define *send-mutex* (make-mutex)) ;; send structured data to recipient ;; ;; NOTE: qrykey is what was called the "cookie" previously ;; ;; retval tells send to expect and wait for return data (one line) and return it or time out ;; this is for ping where we don't want to necessarily have set up our own server yet. |
︙ | ︙ | |||
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 | (dat (list my-host-port qrykey cmd params)) ) (if isme (ulex-handler udata dat) ;; no transmission needed (handle-exceptions ;; TODO - MAKE THIS EXCEPTION CMD SPECIFIC? exn #f (let-values (((inp oup)(tcp-connect host-port))) (let ((res (if (and inp oup) (begin (serialize dat oup) (deserialize inp)) ;; yes, we always want an ack (begin (print "ERROR: send called but no receiver has been setup. Please call setup first!") #f)))) (close-input-port inp) (close-output-port oup) | > > > | | 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 | (dat (list my-host-port qrykey cmd params)) ) (if isme (ulex-handler udata dat) ;; no transmission needed (handle-exceptions ;; TODO - MAKE THIS EXCEPTION CMD SPECIFIC? exn #f (begin ; (mutex-lock! *send-mutex*) (let-values (((inp oup)(tcp-connect host-port))) (let ((res (if (and inp oup) (begin (serialize dat oup) (deserialize inp)) ;; yes, we always want an ack (begin (print "ERROR: send called but no receiver has been setup. Please call setup first!") #f)))) (close-input-port inp) (close-output-port oup) ; (mutex-unlock! *send-mutex*) res))))))) ;; res will always be 'ack ;; send a request to the given host-port and register a mailbox in udata ;; wait for the mailbox data and return it ;; (define (send-receive uconn host-port cmd data) (cond ((member cmd '(ping goodbye)) ;; these are immediate |
︙ | ︙ | |||
236 237 238 239 240 241 242 | (hash-table-delete! (udat-mboxes uconn) qrykey) (if (eq? res 'MBOX_TIMEOUT) (begin (print "WARNING: mbox timed out for query "cmd", with data "data) #f) ;; convert to raising exception? res)) (begin | | | | 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 | (hash-table-delete! (udat-mboxes uconn) qrykey) (if (eq? res 'MBOX_TIMEOUT) (begin (print "WARNING: mbox timed out for query "cmd", with data "data) #f) ;; convert to raising exception? res)) (begin ;; (print "ERROR: Communication failed? Got "sres) #f)))))) ;;====================================================================== ;; responder side ;;====================================================================== ;; take a request, rdat, and if not immediate put it in the work queue ;; |
︙ | ︙ |