Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
nitely committed Dec 27, 2023
1 parent eff75a6 commit d2db2bb
Showing 1 changed file with 30 additions and 27 deletions.
57 changes: 30 additions & 27 deletions src/hyperx/client.nim
Original file line number Diff line number Diff line change
Expand Up @@ -497,13 +497,35 @@ when isMainModule:
frm.setPayloadLen pl
result = frm.rawStr()

proc headers(dh: var DynHeaders, hs: seq[string]): string =
proc hencode(dh: var DynHeaders, hs: string): string =
var resp = newSeq[byte]()
for h in hs:
for h in hs.splitLines:
if h.len == 0:
continue
let parts = h.split(": ", 1)
discard hencode(parts[0], parts[1], dh, resp)
result = resp.toString

proc replyOne(
client: ClientContext,
headers: string,
text: string
) {.async.} =
await client.putTestData frame(
frmtHeaders,
1.FrmSid,
headers.len.FrmPayloadLen,
@[frmfEndHeaders]
)
await client.putTestData headers
await client.putTestData frame(
frmtData,
1.FrmSid,
text.len.FrmPayloadLen,
@[frmfEndStream]
)
await client.putTestData text

test "sock default state":
var client = newClient("example.com")
doAssert not client.sock.isConnected
Expand All @@ -520,40 +542,21 @@ when isMainModule:
waitFor test()
test "sanity req/resp":
proc test() {.async.} =
var dh = initDynHeaders(1024, 16)

proc reply(client: ClientContext) {.async.} =
let rawHeaders = headers(dh, @[
":method: foobar"
])
await client.putTestData frame(
frmtHeaders,
1.FrmSid,
rawHeaders.len.FrmPayloadLen,
@[frmfEndHeaders]
)
await client.putTestData rawHeaders
let rawPayload = "foobar body"
await client.putTestData frame(
frmtData,
1.FrmSid,
rawPayload.len.FrmPayloadLen,
@[frmfEndStream]
)
await client.putTestData rawPayload

var resps = newSeq[Response]()
proc getOne(client: ClientContext, path: string) {.async.} =
resps.add await client.get(path)

var dh = initDynHeaders(1024, 16)
var client = newClient("example.com")
const headers = ":method: foobar\r\L"
const text = "foobar body"
withConnection client:
await (
client.getOne("/") and
client.reply()
client.replyOne(hencode(dh, headers), text)
)
doAssert resps[0].headers == ":method: foobar\r\L"
doAssert resps[0].text == "foobar body"
doAssert resps[0].headers == headers
doAssert resps[0].text == text
waitFor test()

echo "ok"

0 comments on commit d2db2bb

Please sign in to comment.