From 5fe1b7a70dc4ed2620b1be96c3ee1f971a971580 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Thu, 28 Oct 2021 19:43:56 +0200 Subject: [PATCH] Test sort of works --- tests/chat.nim | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/tests/chat.nim b/tests/chat.nim index 66a6d94..93180b0 100644 --- a/tests/chat.nim +++ b/tests/chat.nim @@ -3,23 +3,29 @@ import std/[asyncdispatch, asyncfile, random, strutils] import preserves, preserves/parse -import syndicate/protocols/[simpleChatProtocol, sturdy] -import syndicate/[actors, dataspaces, patterns, relay] +import syndicate/protocols/[simpleChatProtocol] +import syndicate/[actors, capabilities, dataspaces, patterns, relay] from syndicate/protocols/protocol import Handle from os import getCurrentProcessId -randomize() +when defined(linux): + proc getentropy(buf: pointer; bufLen: csize_t): cint {. + importc, header: "sys/random.h".} -const capStr = """""" +proc mint(): SturdyRef = + #var key: array[16, byte] + #doAssert getEntropy(addr key[0], csize_t key.len) == 0 + #mint(key, "syndicate") + let pr = parsePreserves("""""", Ref) + assert fromPreserve(result, pr) proc noOp(turn: var Turn) = discard waitFor runActor("chat") do (turn: var Turn): - var cap: SturdyRef[Ref] - doAssert fromPreserve(cap, parsePreserves(capStr, Ref)) + let cap = mint() connectUnix(turn, "/run/syndicate/ds", cap) do (turn: var Turn; a: Assertion) -> TurnAction: let ds = unembed a @@ -29,17 +35,29 @@ waitFor runActor("chat") do (turn: var Turn): proc updateUsername(turn: var Turn; u: string) = username = u + var p = Present(username: username) usernameHandle = replace(turn, ds, - usernameHandle, Present(username: username)) + usernameHandle, p) updateUsername(turn, "user" & $getCurrentProcessId()) - echo "username updated?" - proc duringPresent(turn: var Turn; a: Assertion): TurnAction = - echo "observed ", a - noOp + proc duringPresent(turn: var Turn; v: Assertion): TurnAction = + var a: tuple[username: string] + assert fromPreserve(a, v), $v + echo a.username, " arrived" + proc onRetract(turn: var Turn) = + echo a.username, " left" + onRetract + discard observe(turn, ds, toPattern(Present), during(duringPresent)) - echo "post-observe" + discard observe(turn, ds, toPattern(Says), newEntity( + message = proc (e: Entity; turn: var Turn; v: Assertion) = + var msg: tuple[who: string, what: string] + assert fromPreserve(msg, v), $v + echo msg.who, ": ", msg.what + )) + + message(turn, ds, Says(who: username, what: "hello")) echo "actor completed"